liangyan0105 3 yıl önce
ebeveyn
işleme
4d9c4bbb0f

+ 14 - 0
src/assets/less/overwrite.css

@@ -143,3 +143,17 @@ img {
 .content .main .todoPage /deep/ .ant-tabs-ink-bar {
   height: 0;
 }
+.content .main .todoBody .priorityComm {
+  padding: 4px 10px;
+  color: #092834;
+  letter-spacing: 1px;
+}
+.content .main .todoBody .statusComm {
+  padding: 4px 6px;
+  color: #092834;
+}
+.content .main .todoBody .resultComm {
+  padding: 4px 10px;
+  color: white;
+  letter-spacing: 1px;
+}

+ 22 - 0
src/assets/less/overwrite.less

@@ -173,5 +173,27 @@ img {
         height: 0;
       }
     }
+
+    //tabs 内容
+    .todoBody {
+      //优先级
+      .priorityComm {
+        padding: 4px 10px;
+        color: #092834;
+        letter-spacing: 1px;
+      }
+      // 状态
+      .statusComm {
+        padding: 4px 6px;
+        color: #092834;
+      }
+
+      // 结果
+      .resultComm {
+        padding: 4px 10px;
+        color: white;
+        letter-spacing: 1px;
+      }
+    }
   }
 }

+ 11 - 2
src/views/activiti/applyList.vue

@@ -71,7 +71,6 @@
               >
             </a-col>
           </span>
-
         </a-row>
       </a-form>
     </div>
@@ -144,6 +143,8 @@
       </a-table-column>
       <a-table-column title="操作" dataIndex="" align="center" :width="200">
         <template slot-scope="t, r, i">
+
+          <!-- 结果 0  -->
           <template v-if="r.status == 0">
             <a href="javascript:void(0);" style="color: #00A0E9" @click="apply(r)">提交申请</a>
             <a-divider type="vertical" />
@@ -153,6 +154,8 @@
               <a href="javascript:void(0);" style="color: red">删除</a>
             </a-popconfirm>
           </template>
+
+          <!-- 结果 1 -->
           <template v-else-if="r.status == 1">
             <a href="javascript:void(0);" @click="cancel(r)" style="color:#8000ff;">撤回</a>
             <a-divider type="vertical" />
@@ -160,6 +163,8 @@
             <a-divider type="vertical" />
             <a href="javascript:void(0);" @click="detail(r)" style="color:#999;">表单数据</a>
           </template>
+
+          <!-- 结果 2 3  -->
           <template v-else-if="(r.status == 2 && r.result == 3) || r.status == 3">
             <a-popconfirm title="确定提交申请吗?" @confirm="() => apply(r)">
               <a href="javascript:void(0);" style="color:#00A0E9;">重新申请</a>
@@ -173,6 +178,8 @@
               <a href="javascript:void(0);" style="color: red">删除</a>
             </a-popconfirm>
           </template>
+
+          <!-- 剩余结果 -->
           <template v-else>
             <a href="javascript:void(0);" @click="detail(r)" style="color:#999;">表单数据</a>
             <a-divider type="vertical" />
@@ -237,6 +244,7 @@
     </a-modal>
 
     <!-- <onl-cgform-auto-modal ref="modal" code="b0bea65bfce141deb0ae3fcb18982d76" /> -->
+
     <!--提交申请表单-->
     <a-modal title="提交申请" v-model="modalVisible" :mask-closable="false" :width="500" :footer="null">
       <div v-if="modalVisible">
@@ -270,6 +278,8 @@
           <!-- <a-checkbox v-model="form.sendSms" disabled>短信通知</a-checkbox>
           <a-checkbox v-model="form.sendEmail" disabled>邮件通知</a-checkbox> -->
         </a-form-item>
+
+        <!-- 提交 -->
         <div slot="footer">
           <a-button type="text" @click="modalVisible = false">取消</a-button>
           <div style="display:inline-block;width: 20px;"></div>
@@ -297,7 +307,6 @@
         <a-button type="primary" :disabled="submitLoading" @click="handelSubmitCancel">提交</a-button>
       </div>
     </a-modal>
-
   </a-card>
 </template>
 

+ 8 - 1
src/views/activiti/todoManage.vue

@@ -109,18 +109,21 @@
         </a-table>
       </a-row>
     </a-card>
-    <!---->
+
+    <!--审批历史-->
     <a-modal title="审批历史" v-model="modalLsVisible" :mask-closable="false" :width="'80%'" :footer="null">
       <div v-if="modalLsVisible">
         <component :is="historicDetail" :procInstId="procInstId"></component>
       </div>
     </a-modal>
+
     <!--流程表单-->
     <a-modal :title="lcModa.title" v-model="lcModa.visible" :footer="null" :maskClosable="false" width="100%">
       <component :disabled="lcModa.disabled" v-if="lcModa.visible" :is="lcModa.formComponent"
                  :processData="lcModa.processData" :isNew = "lcModa.isNew"
                  @close="lcModa.visible=false,lcModa.disabled = false" @getDataList="getDataList"></component>
     </a-modal>
+
     <!-- 审批操作 -->
     <a-modal :title="modalTaskTitle" v-model="modalTaskVisible" :mask-closable="false" :width="500">
 
@@ -165,9 +168,11 @@
               </a-select>
             </a-form-item>
           </div>
+
           <a-form-item label="选择委托人" prop="userId" :error="error" v-show="form.type==2">
             <JSelectUserByDep v-model="form.userId" :multi="false"></JSelectUserByDep>
           </a-form-item>
+          
           <a-form-item label="消息通知">
             <a-checkbox v-model="form.sendMessage">站内消息通知</a-checkbox>
             <a-checkbox v-model="form.sendSms" disabled>短信通知</a-checkbox>
@@ -387,6 +392,8 @@ export default {
         });
       }
     },
+
+    // 详情
     detail(r) {
       if (!r.routeName) {
         this.$message.warning(

+ 7 - 1
src/views/user/Login.vue

@@ -150,6 +150,7 @@ export default {
     todo() {
       this.$router.push({ path: '/user/todo' })
       console.log(this.$router)
+      this.getDataList()
     },
 
     // 拿到 消息数量
@@ -177,6 +178,7 @@ export default {
           }
         })
     },
+
     // 获取 OA 按钮
     getActiveKeyAll() {
       this.postFormAction('/activiti_process/listData', { status: 1, roles: true }).then(res => {
@@ -186,12 +188,13 @@ export default {
           if (result.length > 0) {
             this.activeKeyAll = result
             // this.activeKeyAll.push.apply(this.activeKeyAll,result);
-            console.log(this.activeKeyAll)
+            // console.log(this.activeKeyAll)
             console.log('OA 4个按钮', result)
           }
         }
       })
     },
+
     //OA图标点击事件
     aClick(v) {
       //点击的该项按钮
@@ -220,7 +223,10 @@ export default {
         this.lcModal.visible = true
       }
       console.log('发起', v)
+
+      this.getDataList()
     },
+
     //提交后
     afterSub(formData) {
       this.lcModal.visible = false

Dosya farkı çok büyük olduğundan ihmal edildi
+ 188 - 963
src/views/user/Todo.vue


+ 1071 - 0
src/views/user/oldTodo.vue

@@ -0,0 +1,1071 @@
+<template>
+  <div class="content">
+    <div class="main">
+      <a-layout-header class="Header">
+        <a-icon type="left" @click="$router.go(-1)" style="fontSize:24px;color:white;marginLeft:2%;" />
+        <span>我的事项</span>
+      </a-layout-header>
+
+      <!-- tabs 部分 -->
+      <a-layout-content class="todoBody">
+        <a-tabs default-active-key="wait" @change="callback" class="todoPage">
+          <!-- 我的申请 -->
+          <a-tab-pane key="apply" tab="申请" class="apply">
+            <div v-for="item in applyList" :key="item.id">
+              <a-card class="cardTask">
+                <p class="pTitle">
+                  <span>
+                    <img src="@assets/look.gif" />
+                  </span>
+                  <i>
+                    {{ item.processName }}
+                  </i>
+                </p>
+
+                <p>当前审批环节:{{ item.currTaskName }}</p>
+                <p>创建时间:{{ item.createTime }}</p>
+
+                <!-- 申请状态 -->
+                <p>
+                  状态:
+                  <span v-if="item.status == 0" class="statusComm" style="background:rgb(9, 40, 52,.1);">
+                    草稿
+                  </span>
+
+                  <span v-if="item.status == 1" class="statusComm" style="background:rgb(252, 96, 10,.2);">
+                    处理中
+                  </span>
+
+                  <span v-if="item.status == 2" class="statusComm" style="background:rgb(9, 40, 52,.2);">
+                    已结束
+                  </span>
+
+                  <span v-if="item.status == 3" class="statusComm" style="background:rgb(9, 40, 52,.1);">
+                    已撤回
+                  </span>
+                </p>
+
+                <!-- 申请结果 -->
+                <p style="float:left;">
+                  结果:
+
+                  <span class="resultComm" v-if="item.result == 0" style="background:rgba(52, 123, 152,.7);">
+                    未提交
+                  </span>
+
+                  <span class="resultComm" v-else-if="item.result == 1" style="background:rgb(252, 96, 10,.8);">
+                    处理中
+                  </span>
+
+                  <span class="resultComm" v-else-if="item.result == 2" style="background:rgb(9, 40, 52,.8);">
+                    通过
+                  </span>
+
+                  <span class="resultComm" v-else-if="item.result == 3" style="background:rgba(9, 40, 52,.7);">
+                    驳回
+                  </span>
+                </p>
+
+                <p style="float:right;">发起人:{{ item.createBy }}</p>
+
+                <a-divider style="background:rgba(128, 128, 128,.1);"></a-divider>
+
+                <!-- 操作 -->
+                <div class="operation">
+                  <p>
+                    <span class="operationImg">
+                      <img src="@assets/down.png" />
+                    </span>
+                    操作
+                  </p>
+
+                  <!--  -->
+                  <div class="btns">
+                    <!-- 处理中   渲染的按钮 -->
+                    <span v-if="item.status == 1" class="ingBtns">
+                      <a-button
+                        class="itemBtn"
+                        ghost
+                        @click="cancel(item)"
+                        style="box-shadow: 8px 8px 8px rgba(128, 128, 128,.9);
+                      color:red;"
+                      >
+                        撤回
+                      </a-button>
+                      <a-button
+                        class="itemBtn"
+                        ghost
+                        @click="detail(item)"
+                        style="box-shadow: 8px 8px 8px rgba(128, 128, 128,.7);
+                      color:orange;"
+                      >
+                        进度
+                      </a-button>
+
+                      <a-button
+                        class="itemBtn"
+                        ghost
+                        @click="detail(item)"
+                        style="box-shadow: 8px 8px 8px rgba(128, 128, 128,.7);
+                      color:#4e73b9;"
+                      >
+                        详情
+                      </a-button>
+                    </span>
+
+                    <!-- 驳回 状态  渲染的按钮 -->
+                    <span v-if="item.status == 2 || item.status == 3" class="overBtns">
+                      <a-button
+                        class="itemBtn"
+                        ghost
+                        @click="detail(item)"
+                        style="box-shadow: 8px 8px 8px rgba(128, 128, 128);
+                      color:rgb(80, 95, 102);"
+                      >
+                        重新申请
+                      </a-button>
+                      <a-button
+                        class="itemBtn"
+                        ghost
+                        @click="detail(item)"
+                        style="box-shadow: 8px 8px 8px rgba(128, 128, 128);
+                      color:#4e73b9;"
+                      >
+                        编辑
+                      </a-button>
+
+                      <a-button
+                        class="itemBtn"
+                        ghost
+                        @click="detail(item)"
+                        style="box-shadow: 8px 8px 8px rgba(128, 128, 128);
+                      color:gray;"
+                      >
+                        历史
+                      </a-button>
+
+                      <a-button
+                        class="itemBtn"
+                        ghost
+                        @click="detail(item)"
+                        style="box-shadow: 8px 8px 8px rgba(128, 128, 128);
+                      color:red;"
+                      >
+                        删除
+                      </a-button>
+                    </span>
+                  </div>
+                </div>
+              </a-card>
+            </div>
+          </a-tab-pane>
+
+          <!-- 我的待办 -->
+          <a-tab-pane key="wait" tab="待办" force-render class="wait">
+            <div v-for="item in todoList" :key="item.id">
+              <a-card class="cardTask">
+                <p class="pTitle">
+                  <span>
+                    <img src="@assets/look.gif" />
+                  </span>
+                  {{ item.processName }}
+                </p>
+
+                <p>任务名称:{{ item.name }}</p>
+                <p>创建时间:{{ item.createTime }}</p>
+
+                <!-- 优先级 -->
+                <p>
+                  优先级:
+                  <span
+                    class="priorityComm"
+                    v-if="item.priority == 0"
+                    style="background:rgba(252, 96, 10,.4);
+                    padding:2px 6px;
+                    borderRadius:2px;
+                    color:#092834;"
+                  >
+                    普通
+                  </span>
+                  <span
+                    class="priorityComm"
+                    v-else-if="item.priority == 1"
+                    style="background:#FC600A;
+                    padding:4px 10px;
+                    borderRadius:6px;
+                    color:white;"
+                  >
+                    重要
+                  </span>
+
+                  <span
+                    class="priorityComm"
+                    v-else-if="item.priority == 2"
+                    style="background:red;
+                    padding:4px 10px;
+                    borderRadius:6px;
+                    color:white;"
+                  >
+                    紧急
+                  </span>
+                  <span class="priorityComm" v-else style="background:#999;">
+                    无
+                  </span>
+                </p>
+
+                <!-- 状态 -->
+                <p style="float:left;marginBottom:30px;">
+                  状态:
+                  <span v-if="item.isSuspended == false" style="background:rgba(252, 96, 10,.8);" class="resultComm">
+                    已激活
+                  </span>
+                  <span v-if="item.isSuspended == true" style="background:rgba(20, 137, 184,.8);" class="resultComm">
+                    已挂起
+                  </span>
+                  {{ item.status }}
+                </p>
+
+                <!-- 发起人 -->
+                <p style="float:right;marginBottom:30px;">发起人:{{ item.applyer }}</p>
+
+                <a-divider style="background:rgba(128, 128, 128,.1);"></a-divider>
+
+                <!-- 操作 -->
+                <div class="operation">
+                  <p>
+                    <span class="operationImg">
+                      <img src="@assets/down.png" />
+                    </span>
+
+                    操作
+                  </p>
+
+                  <div class="btns">
+                    <a-button
+                      class="itemBtn"
+                      ghost
+                      @click="detail(item)"
+                      style="box-shadow: 8px 8px 8px rgba(128, 128, 128);
+                      color:#4e73b9;"
+                    >
+                      详情
+                    </a-button>
+
+                    <!-- 挂起 状态 按钮不可用 -->
+                    <span
+                      v-if="item.isSuspended == true"
+                      style="cursor: no-drop;color: #999999;"
+                      title="流程已被挂起,无法操作!"
+                    >
+                      <a-button class="itemBtn" disabled>通过</a-button>
+                      <a-button class="itemBtn" disabled>驳回</a-button>
+                      <a-button class="itemBtn" disabled>历史</a-button>
+                    </span>
+
+                    <!-- 激活 状态 -->
+                    <span v-else>
+                      <a-button
+                        class="itemBtn midBtn"
+                        ghost
+                        @click="passTask(item)"
+                        style="box-shadow: 8px 8px 8px rgba(128, 128, 128);
+                        color:#4e73b9;"
+                      >
+                        通过
+                      </a-button>
+
+                      <a-button
+                        class="itemBtn midBtn"
+                        ghost
+                        @click="backTask(item)"
+                        style="color:gray;box-shadow: 5px 5px 5px rgba(128, 128, 128,.7);color:#ea472c;"
+                      >
+                        驳回
+                      </a-button>
+
+                      <a-button
+                        class="itemBtn midBtn"
+                        ghost
+                        @click="delegateTask(item)"
+                        style="color:gray;box-shadow: 6px 6px 6px rgba(128, 128, 128,.7);color:orange;"
+                      >
+                        委托
+                      </a-button>
+                    </span>
+
+                    <a-button
+                      class="itemBtn"
+                      ghost
+                      @click="history(item)"
+                      style="color:gray;
+                             box-shadow: 4px 4px 4px rgba(128, 128, 128,.7);
+                             position:absolute;
+                             right:0;
+                             marginRight:0;"
+                    >
+                      历史
+                    </a-button>
+                  </div>
+                </div>
+              </a-card>
+
+              <!-- 审批历史 -->
+              <a-modal title="审批历史" v-model="modalLsVisible" :mask-closable="false" :width="'80%'" :footer="null">
+                <div v-if="modalLsVisible">
+                  <component :is="historicDetail" :procInstId="procInstId"></component>
+                </div>
+              </a-modal>
+
+              <!--流程表单-->
+              <a-modal
+                :title="lcModal.title"
+                v-model="lcModal.visible"
+                :footer="null"
+                :maskClosable="false"
+                width="100%"
+              >
+                <component
+                  :disabled="lcModal.disabled"
+                  v-if="lcModal.visible"
+                  :is="lcModal.formComponent"
+                  :processData="lcModal.processData"
+                  :isNew="lcModal.isNew"
+                  @close=";(lcModal.visible = false), (lcModal.disabled = false)"
+                  @getDataList="getDataList"
+                ></component>
+              </a-modal>
+
+              <!-- 审批操作 -->
+              <a-modal :title="modalTaskTitle" v-model="modalTaskVisible" :mask-closable="false" :width="500">
+                <div v-if="modalTaskVisible">
+                  <!-- 下面删除 :rules="formValidate" -->
+                  <a-form ref="form" :model="form" :label-width="85">
+                    <a-form-item label="审批意见" prop="reason">
+                      <a-input type="textarea" v-model="form.comment" :rows="4" />
+                    </a-form-item>
+                    <a-form-item label="下一审批人" prop="assignees" v-show="showAssign" :error="error">
+                      <a-select
+                        v-model="form.assignees"
+                        placeholder="请选择"
+                        allowClear
+                        mode="multiple"
+                        :loading="userLoading"
+                      >
+                        <a-select-option v-for="(item, i) in assigneeList" :key="i" :value="item.username">{{
+                          item.realname
+                        }}</a-select-option>
+                      </a-select>
+                    </a-form-item>
+                    <a-form-item label="下一审批人" v-show="isGateway">
+                      <span>分支网关处暂不支持自定义选择下一审批人,将发送给下一节点所有人</span>
+                    </a-form-item>
+                    <div v-show="form.type == 1">
+                      <a-form-item label="驳回至">
+                        <a-select v-model="form.backTaskKey" :loading="backLoading" @change="changeBackTask">
+                          <a-select-option v-for="(item, i) in backList" :key="i" :value="item.key">{{
+                            item.name
+                          }}</a-select-option>
+                        </a-select>
+                      </a-form-item>
+                      <a-form-item
+                        label="指定原节点审批人"
+                        prop="assignees"
+                        v-show="form.backTaskKey != -1"
+                        :error="error"
+                      >
+                        <a-select
+                          v-model="form.assignees"
+                          placeholder="请选择"
+                          allowClear
+                          mode="multiple"
+                          :loading="userLoading"
+                        >
+                          <a-select-option v-for="(item, i) in assigneeList" :key="i" :value="item.id">{{
+                            item.username
+                          }}</a-select-option>
+                        </a-select>
+                      </a-form-item>
+                    </div>
+                    <a-form-item label="选择委托人" prop="userId" :error="error" v-show="form.type == 2">
+                      <JSelectUserByDep v-model="form.userId" :multi="false"></JSelectUserByDep>
+                    </a-form-item>
+                    <a-form-item label="消息通知">
+                      <a-checkbox v-model="form.sendMessage">站内消息通知</a-checkbox>
+                      <a-checkbox v-model="form.sendSms" disabled>短信通知</a-checkbox>
+                      <a-checkbox v-model="form.sendEmail" disabled>邮件通知</a-checkbox>
+                    </a-form-item>
+                  </a-form>
+                </div>
+                <div slot="footer">
+                  <a-button type="text" @click="modalTaskVisible = false">取消</a-button>
+                  <a-button type="primary" :loading="submitLoading" @click="handelSubmit">提交</a-button>
+                </div>
+              </a-modal>
+            </div>
+          </a-tab-pane>
+
+          <!-- 我的已办 -->
+          <a-tab-pane key="done" tab="已办" class="done">
+            <div v-for="item in doneList" :key="item.id">
+              <a-card class="cardTask">
+                <p class="pTitle">
+                  <span>
+                    <img src="@assets/look.gif" />
+                  </span>
+                  <i>
+                    {{ item.processName }}
+                  </i>
+                </p>
+                <p>任务名称:{{ item.name }}</p>
+                <p>创建时间:{{ item.createTime }}</p>
+
+                <!-- 审批操作 -->
+                <p style="float:left;">
+                  审批操作:
+                  <span
+                    v-if="item.deleteReason == '审批通过'"
+                    style="background:rgba(20, 137, 184,.3);
+                    padding:4px 10px;
+                    borderRadius:2px;
+                    letterSpacing:1px;
+                    color: #092834;"
+                  >
+                    {{ item.deleteReason }}</span
+                  >
+                  <span
+                    v-if="item.deleteReason == '审批驳回'"
+                    style="background:rgba(9, 40, 52,.7);
+                    padding:4px 10px;
+                    borderRadius:2px;
+                    letterSpacing:1px;
+                    color: white;"
+                  >
+                    {{ item.deleteReason }}
+                  </span>
+                </p>
+                <p style="float:right;">发起人:{{ item.applyer }}</p>
+
+                <a-divider style="background:rgba(128, 128, 128,.1);"></a-divider>
+
+                <!-- 操作 -->
+                <div class="operation">
+                  <p>
+                    <span class="operationImg">
+                      <img src="@assets/down.png" />
+                    </span>
+
+                    操作
+                  </p>
+
+                  <div class="btns">
+                    <a-button
+                      class="itemBtn"
+                      ghost
+                      @click="detail(item)"
+                      style="box-shadow: 8px 8px 8px rgba(128, 128, 128);
+                      color:#4e73b9;"
+                    >
+                      详情
+                    </a-button>
+
+                    <a-button
+                      class="itemBtn"
+                      ghost
+                      @click="Donehistory(item)"
+                      style="color:gray;
+                             box-shadow: 8px 8px 8px rgba(128, 128, 128,.7)"
+                    >
+                      历史
+                    </a-button>
+
+                    <a-popconfirm title="确定删除吗?" placement="left">
+                      <a-button
+                        class="itemBtn"
+                        ghost
+                        @click="remove(item)"
+                        style="color:gray;
+                               box-shadow: 7px 7px 7px rgba(128, 128, 128,.7);
+                               color:red;"
+                      >
+                        删除
+                      </a-button>
+                    </a-popconfirm>
+                  </div>
+                </div>
+              </a-card>
+            </div>
+          </a-tab-pane>
+        </a-tabs>
+      </a-layout-content>
+    </div>
+
+    <a-layout-footer class="footer">
+      上海萃颠信息科技有限公司出品
+    </a-layout-footer>
+  </div>
+</template>
+
+<script>
+import { deleteAction, getAction, downFile } from '@/api/manage'
+import JSelectUserByDep from '@/components/jeecgbiz/JSelectUserByDep'
+import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+import { activitiMixin } from '@/views/activiti/mixins/activitiMixin'
+import DictItemListVue from '../system/DictItemList.vue'
+
+export default {
+  name: 'Todo',
+  mixins: [activitiMixin, JeecgListMixin],
+  components: { JSelectUserByDep },
+  data() {
+    return {
+      openSearch: true,
+      openTip: true,
+      loading: true, // 表单加载状态
+      modalLsVisible: false,
+      userLoading: false, //已办
+      backLoading: false,
+      selectCount: 0, // 多选计数
+      selectList: [], // 多选数据
+      assigneeList: [],
+      backList: [
+        {
+          key: '-1',
+          name: '发起人'
+        }
+      ],
+      error: '',
+      showAssign: false,
+      searchForm: {
+        // 搜索框对应data对象
+        name: ''
+      },
+
+      modalTaskTitle: '',
+      modalTitle: '', // 添加或编辑标题
+
+      form: {
+        id: '',
+        userId: '',
+        procInstId: '',
+        comment: '',
+        type: 0,
+        assignees: [],
+        backTaskKey: '-1',
+        sendMessage: true,
+        sendSms: false,
+        sendEmail: false
+      },
+      // formValidate: {
+      //   // 表单验证规则
+      // },
+
+      submitLoading: false, // 添加或编辑提交状态
+      data: [], // 表单数据
+      total: 0, // 表单数据总数
+      dictPriority: [],
+      isGateway: false,
+      lcModal: {
+        title: '',
+        disabled: false,
+        visible: false,
+        formComponent: null,
+        isNew: false
+      },
+
+      url: {
+        todoList: '/actTask/todoList', // 待办
+        doneList: '/actTask/doneList', // 已办
+        deleteHistoricTask: '/actTask/deleteHistoric/', //已办接口
+        list: '/actBusiness/listData', // 申请
+
+        deleteHistoricTask: '/actTask/deleteHistoric/', //已办接口
+        pass: '/actTask/pass',
+        back: '/actTask/back',
+        backToTask: '/actTask/backToTask',
+        delegate: '/actTask/delegate',
+        getNextNode: '/activiti_process/getNextNode',
+        getNode: '/activiti_process/getNode/',
+        getBackList: '/actTask/getBackList/',
+        passAll: '/actTask/passAll/',
+        backAll: '/actTask/backAll/',
+        // 我的申请
+        cancelApply: '/actBusiness/cancel'
+      },
+
+      todoList: [], // 待办列表
+      applyList: [], // 申请列表
+      doneList: [], // 已办列表
+
+      modalTaskVisible: false,
+      procInstId: '',
+
+      modalCancelVisible: false
+    }
+  },
+
+  created() {
+    this.getDataList()
+  },
+  mounted() {
+    this.init()
+  },
+  methods: {
+    init() {
+      this.getDataList()
+    },
+    loadData() {},
+
+    // 拿到 所有列表(待办、已办)
+    getDataList() {
+      // 待办
+      getAction(this.url.todoList, {}).then(res => {
+        if (res.success) {
+          this.todoList = res.result || []
+          this.total = this.data.leading
+          console.log('待办列表', this.todoList)
+        }
+      }),
+        // 已办
+        this.postFormAction(this.url.doneList, this.searchForm).then(res => {
+          this.loading = false
+          if (res.success) {
+            this.doneList = res.result || []
+            console.log('最新已办列表', this.doneList)
+          } else {
+            this.$message.error(res.message)
+          }
+        })
+    },
+
+    // 初始化表
+    forminitial() {
+      this.form = {
+        id: '',
+        userId: '',
+        procInstId: '',
+        comment: '',
+        type: 0,
+        assignees: [],
+        backTaskKey: '-1',
+        sendMessage: true,
+        sendSms: false,
+        sendEmail: false
+      }
+    },
+
+    // 切换tabs值
+    callback(key) {
+      console.log(key)
+      if (key === 'apply') {
+        getAction(this.url.list).then(res => {
+          if (res.success) {
+            this.applyList = res.result || []
+            console.log('我的申请', this.applyList)
+          }
+        })
+      }
+      if (key === 'done') {
+        getAction(this.url.doneList).then(res => {
+          if (res.success) {
+            this.doneList = res.result || []
+            console.log('我的已办', this.doneList)
+          }
+        })
+      }
+    },
+
+    handleSearch() {
+      this.getDataList()
+    },
+    handleReset() {
+      this.searchForm = {}
+      // 重新加载数据
+      this.getDataList()
+    },
+    showSelect(e) {
+      this.selectList = e
+      this.selectCount = e.length
+    },
+    clearSelectAll() {
+      this.$refs.table.selectAll(false)
+    },
+
+    // 提交
+    handelSubmit() {
+      console.log('提交')
+      this.submitLoading = true
+      var formData = Object.assign({}, this.form)
+      formData.assignees = formData.assignees.join(',')
+      if (formData.type == 0) {
+        // 通过
+        if (this.showAssign && formData.assignees.length < 1) {
+          this.$message.error('请至少选择一个审批人')
+          this.submitLoading = false
+          return
+        } else {
+          this.error = ''
+        }
+        this.postFormAction(this.url.pass, formData).then(res => {
+          this.submitLoading = false
+          if (res.success) {
+            this.$message.success('操作成功')
+            this.modalTaskVisible = false
+            this.getDataList()
+          }
+        })
+      } else if (formData.type == 1) {
+        // 驳回
+        if (formData.backTaskKey == '-1') {
+          // 驳回至发起人
+          this.postFormAction(this.url.back, formData).then(res => {
+            this.submitLoading = false
+            if (res.success) {
+              this.$message.success('操作成功')
+              this.modalTaskVisible = false
+              this.getDataList()
+            }
+          })
+        } else {
+          // 自定义驳回
+          if (formData.backTaskKey != '-1' && formData.assignees.length < 1) {
+            this.$message.error('请至少选择一个审批人')
+            this.submitLoading = false
+            return
+          } else {
+            this.error = ''
+          }
+          this.postFormAction(this.url.backToTask, formData).then(res => {
+            this.submitLoading = false
+            if (res.success) {
+              this.$message.success('操作成功')
+              this.modalTaskVisible = false
+              this.getDataList()
+            }
+          })
+        }
+      } else if (formData.type == 2) {
+        // 委托
+        if (!formData.userId) {
+          this.$message.error('请选择一委托人')
+          this.submitLoading = false
+          return
+        } else {
+          this.error = ''
+        }
+        this.postFormAction(this.url.delegate, formData).then(res => {
+          this.submitLoading = false
+          if (res.success) {
+            this.$message.success('操作成功')
+            this.modalTaskVisible = false
+            this.getDataList()
+          }
+        })
+      }
+    },
+
+    // 详情
+    detail(item) {
+      console.log('详情吗?', item)
+      if (!item.routeName) {
+        this.$message.warning('该流程信息未配置表单,请联系开发人员!')
+        return
+      }
+      item.operationType = '1' // 操作类型待办
+      if (item.routeName.indexOf('外部表单') != -1) {
+        //其他项目的表单流程
+        alert('调用其他项目页面')
+      } else if (item.routeName.indexOf('自定义') != -1) {
+        //自定义的表单流程
+        this.lcModal.disabled = true
+        this.lcModal.title = '查看流程业务信息:' + item.processName
+        let com = { component: () => import(`@/views/activiti/form/demoForm2`) }
+        this.lcModal.formComponent = com.component
+        this.lcModal.isNew = false
+        this.lcModal.processData = item
+        this.lcModal.visible = true
+      } else {
+        //固定的表单流程
+        this.lcModal.disabled = true
+        this.lcModal.title = '查看流程业务信息:' + item.processName
+        this.lcModal.formComponent = this.getFormComponent(item.routeName).component
+        this.lcModal.processData = item
+        this.lcModal.isNew = false
+        this.lcModal.visible = true
+      }
+    },
+
+    // 通过
+    passTask(v) {
+      console.log('我在哪是啥', v)
+      this.forminitial()
+      this.modalTaskTitle = '审批通过'
+      this.form.id = v.id
+      this.form.procInstId = v.procInstId
+      this.form.priority = v.priority
+      this.form.type = 0
+      this.modalTaskVisible = true
+      this.userLoading = true
+      this.getAction(this.url.getNextNode, { procDefId: v.procDefId, currActId: v.key, procInstId: v.procInstId }).then(
+        res => {
+          this.userLoading = false
+          if (res.success) {
+            if (res.result.type == 3 || res.result.type == 4) {
+              this.isGateway = true
+              this.showAssign = false
+              this.error = ''
+              return
+            }
+            this.isGateway = false
+            if (res.result.users && res.result.users.length > 0) {
+              this.error = ''
+              this.assigneeList = res.result.users
+              // 默认勾选
+              let ids = []
+              res.result.users.forEach(e => {
+                ids.push(e.username)
+              })
+              this.form.assignees = ids
+              this.showAssign = true
+            } else {
+              this.form.assignees = []
+              this.showAssign = false
+            }
+          }
+        }
+      )
+    },
+
+    // 审批驳回
+    changeBackTask(v) {
+      console.log('驳回吗?', v)
+      if (v == '-1') {
+        return
+      }
+      this.userLoading = true
+      this.getAction(this.url.getNode + v + '&' + this.form.procInstId).then(res => {
+        this.userLoading = false
+        if (res.success) {
+          if (res.result.users && res.result.users.length > 0) {
+            this.assigneeList = res.result.users
+            // 默认勾选
+            let ids = []
+            res.result.users.forEach(e => {
+              ids.push(e.username)
+            })
+            this.form.assignees = ids
+          }
+        }
+      })
+    },
+
+    // 操作 驳回
+    backTask(v) {
+      console.log('驳回吗?', v)
+      this.forminitial()
+      this.modalTaskTitle = '审批驳回'
+      this.form.id = v.id
+      this.form.procInstId = v.procInstId
+      this.form.procDefId = v.procDefId
+      this.form.priority = v.priority
+      this.form.type = 1
+      this.showAssign = false
+      this.modalTaskVisible = true
+      // 获取可驳回节点
+      this.backList = [
+        {
+          key: '-1',
+          name: '发起人'
+        }
+      ]
+      this.form.backTaskKey = '-1'
+      this.backLoading = true
+      this.getAction(this.url.getBackList + v.procInstId).then(res => {
+        this.backLoading = false
+        if (res.success) {
+          res.result.forEach(e => {
+            this.backList.push(e)
+          })
+        }
+      })
+    },
+
+    // 委托他人代办
+    delegateTask(v) {
+      console.log('委托吗?', v)
+      this.forminitial()
+      this.modalTaskTitle = '委托他人代办'
+      this.form.id = v.id
+      this.form.procInstId = v.procInstId
+      this.form.type = 2
+      this.showAssign = false
+      this.modalTaskVisible = true
+    },
+
+    //待办 历史
+    history(v) {
+      console.log('历史吗?', v)
+      if (!v.procInstId) {
+        this.$message.error('流程实例ID不存在')
+        return
+      }
+      console.log(v.procInstId)
+      this.procInstId = v.procInstId
+      this.modalLsVisible = true
+    },
+    // ------------------------------------
+    // 审批 历史(已办)
+    Donehistory(item) {
+      console.log('已办审批历史吗?', item)
+      if (!item.procInstId) {
+        console.log('item.procInstId')
+        this.procInstId = item.procInstId
+        this.modalLsVisible = true
+        this.$message.error('流程实例ID不存在')
+        return
+      }
+      this.procInstId = item.procInstId
+      this.modalLsVisible = true
+    },
+
+    // 已办 methods  
+    remove(item) {
+      console.log('点击这项是:', item)
+      this.postFormAction(this.url.deleteHistoricTask, item.id).then(res => {
+        console.log(res)
+        if (res.success) {
+          console.log('要删除的这项id是:', item.id)
+          this.$message.success('操作成功')
+          this.getDataList()
+        } else {
+          this.$message.error(res.message)
+        }
+      })
+    },
+
+    //通过所有
+    passAll() {
+      if (this.selectCount <= 0) {
+        this.$message.warning('您还未选择要通过的数据')
+        return
+      }
+      // 批量通过
+      this.modalVisible = true
+      this.$confirm({
+        title: '确认通过',
+        content: '您确认要通过所选的 ' + this.selectCount + ' 条数据? 注意:将默认分配给节点设定的所有可审批用户',
+        loading: true,
+        onOk: () => {
+          let ids = ''
+          this.selectList.forEach(function(e) {
+            ids += e.id + ','
+          })
+          ids = ids.substring(0, ids.length - 1)
+          this.postFormAction(this.url.passAll, { ids: ids }).then(res => {
+            if (res.success) {
+              this.$message.success('操作成功')
+              this.modalVisible = false
+              this.clearSelectAll()
+              this.getDataList()
+            }
+          })
+        }
+      })
+    },
+
+    // 驳回所有
+    backAll() {
+      console.log('111')
+      if (this.selectCount <= 0) {
+        this.$message.warning('您还未选择要驳回的数据')
+        return
+      }
+      // 批量驳回
+      this.modalVisible = true
+      this.$confirm({
+        title: '确认驳回',
+        content: '您确认要驳回所选的 ' + this.selectCount + ' 条数据? 注意:所有流程将驳回至发起人',
+        loading: true,
+        onOk: () => {
+          let procInstIds = ''
+          this.selectList.forEach(function(e) {
+            procInstIds += e.procInstId + ','
+          })
+          procInstIds = procInstIds.substring(0, procInstIds.length - 1)
+          this.postFormAction(this.url.backAll, { procInstIds: procInstIds }).then(res => {
+            if (res.success) {
+              this.$message.success('操作成功')
+              this.modalVisible = false
+              this.clearSelectAll()
+              this.getDataList()
+            }
+          })
+        }
+      })
+    },
+    // 申请  方法
+    // 撤回
+    cancel(item) {
+      console.log('走到这没', item.id)
+      console.log('222', item.procInstId)
+      this.cancelForm.id = item.id
+      this.cancelForm.procInstId = DictItemListVue.procInstId
+      this.modalCancelVisible = true
+    }
+  }
+}
+</script>
+
+<style src="@assets/less/overwrite.less" lang="less" scoped></style>
+<style lang="less">
+@import '~@assets/less/common.less';
+</style>
+<style lang="less" scoped>
+.content {
+  .main {
+    padding: 14px;
+
+    //tabs 内容
+    .todoBody {
+      //优先级
+      .priorityComm {
+        padding: 4px 10px;
+        color: #092834;
+        letter-spacing: 1px;
+      }
+      // 状态
+      .statusComm {
+        padding: 4px 6px;
+        color: #092834;
+      }
+
+      // 结果
+      .resultComm {
+        padding: 4px 10px;
+        color: white;
+        letter-spacing: 1px;
+      }
+      // 操作 ===============================
+      .wait .btns {
+        position: relative;
+
+        .midBtn {
+          margin-left: 3.3%;
+        }
+      }
+
+      //已办 操作按钮
+      .done .btns {
+        display: flex;
+        justify-content: space-between;
+      }
+
+      //申请 不同情况按钮排布
+      .apply .btns .ingBtns,
+      .apply .btns .overBtns {
+        display: flex;
+        justify-content: space-between;
+      }
+    }
+  }
+}
+</style>

+ 754 - 0
src/views/user/tabs/ApplyTab.vue

@@ -0,0 +1,754 @@
+<template>
+  <div class="applyTab">
+    <a-card class="cardTask" v-for="item in applyList" :key="item.id">
+      <p class="pTitle">
+        <span>
+          <img src="@assets/look.gif" />
+        </span>
+        <i>
+          {{ item.processName }}
+        </i>
+      </p>
+
+      <p>当前审批环节:{{ item.currTaskName }}</p>
+      <p>创建时间:{{ item.createTime }}</p>
+
+      <!-- 申请状态 -->
+      <p>
+        状态:
+        <span v-if="item.status == 0" class="statusComm" style="background:rgb(9, 40, 52,.1);">
+          草稿
+        </span>
+
+        <span v-if="item.status == 1" class="statusComm" style="background:rgb(252, 96, 10,.2);">
+          处理中
+        </span>
+
+        <span v-if="item.status == 2" class="statusComm" style="background:rgb(9, 40, 52,.2);">
+          已结束
+        </span>
+
+        <span v-if="item.status == 3" class="statusComm" style="background:rgb(9, 40, 52,.1);">
+          已撤回
+        </span>
+      </p>
+
+      <!-- 申请结果 -->
+      <p style="float:left;">
+        结果:
+
+        <span class="resultComm" v-if="item.result == 0" style="background:rgba(52, 123, 152,.7);">
+          未提交
+        </span>
+
+        <span class="resultComm" v-else-if="item.result == 1" style="background:rgb(252, 96, 10,.8);">
+          处理中
+        </span>
+
+        <span class="resultComm" v-else-if="item.result == 2" style="background:rgb(9, 40, 52,.8);">
+          通过
+        </span>
+
+        <span class="resultComm" v-else-if="item.result == 3" style="background:rgba(9, 40, 52,.7);">
+          驳回
+        </span>
+      </p>
+
+      <p style="float:right;">发起人:{{ item.createBy }}</p>
+
+      <a-divider style="background:rgba(128, 128, 128,.1);"></a-divider>
+
+      <!-- 操作 -->
+      <div class="operation">
+        <p>
+          <span class="operationImg">
+            <img src="@assets/down.png" />
+          </span>
+          操作
+        </p>
+
+        <!--  -->
+        <div class="btns">
+          <!-- 结果 0 -->
+          <span v-if="item.status == 0">
+            <a-button
+              class="itemBtn"
+              ghost
+              @click="apply(item)"
+              style="box-shadow: 8px 8px 8px rgba(128, 128, 128,.9);
+                      color:red;"
+            >
+              提交申请
+            </a-button>
+            <a-button
+              class="itemBtn"
+              ghost
+              @click="applyEdit(item)"
+              style="box-shadow: 8px 8px 8px rgba(128, 128, 128,.7);
+                      color:orange;"
+            >
+              编辑
+            </a-button>
+
+            <a-button
+              class="itemBtn"
+              ghost
+              @click="applyRemove(item)"
+              style="box-shadow: 8px 8px 8px rgba(128, 128, 128,.7);
+                      color:#4e73b9;"
+            >
+              删除
+            </a-button>
+          </span>
+
+          <!-- 处理中   渲染的按钮 -->
+          <span v-if="item.status == 1" class="ingBtns">
+            <a-button
+              class="itemBtn"
+              ghost
+              @click="cancel(item)"
+              style="box-shadow: 8px 8px 8px rgba(128, 128, 128,.9);
+                      color:red;"
+            >
+              撤回
+            </a-button>
+            <a-button
+              class="itemBtn"
+              ghost
+              @click="detail(item)"
+              style="box-shadow: 8px 8px 8px rgba(128, 128, 128,.7);
+                      color:orange;"
+            >
+              进度
+            </a-button>
+
+            <a-button
+              class="itemBtn"
+              ghost
+              @click="detail(item)"
+              style="box-shadow: 8px 8px 8px rgba(128, 128, 128,.7);
+                      color:#4e73b9;"
+            >
+              详情
+            </a-button>
+          </span>
+
+          <!-- 驳回 状态  渲染的按钮 -->
+          <span v-if="item.status == 2 || item.status == 3" class="overBtns">
+            <a-button
+              class="itemBtn"
+              ghost
+              @click="detail(item)"
+              style="box-shadow: 8px 8px 8px rgba(128, 128, 128);
+                      color:rgb(80, 95, 102);"
+            >
+              重新申请
+            </a-button>
+            <a-button
+              class="itemBtn"
+              ghost
+              @click="edit(item)"
+              style="box-shadow: 8px 8px 8px rgba(128, 128, 128);
+                      color:#4e73b9;"
+            >
+              编辑
+            </a-button>
+
+            <a-button
+              class="itemBtn"
+              ghost
+              @click="detail(item)"
+              style="box-shadow: 8px 8px 8px rgba(128, 128, 128);
+                      color:gray;"
+            >
+              历史
+            </a-button>
+
+            <a-button
+              class="itemBtn"
+              ghost
+              @click="detail(item)"
+              style="box-shadow: 8px 8px 8px rgba(128, 128, 128);
+                      color:red;"
+            >
+              删除
+            </a-button>
+          </span>
+        </div>
+      </div>
+    </a-card>
+    <!--流程申请选择-->
+    <a-drawer
+      title="选择流程"
+      width="33%"
+      placement="right"
+      :closable="false"
+      @close="processModalVisible = false"
+      :visible="processModalVisible"
+    >
+      <a-input-search style="margin-bottom: 10px;width: 200px" placeholder="输入流程名称" @search="onSearchProcess" />
+      <a-empty description="无流程可供选择" v-if="activeKeyAll.length == 0" />
+      <div v-else>
+        <a-collapse v-model="activeKey">
+          <a-collapse-panel
+            v-for="(value, index) in activeKeyAll"
+            :header="filterDictText(dictOptions, value) || '未分类'"
+            :key="value"
+          >
+            <a-list :grid="{ gutter: 10, column: 1 }" :dataSource="processDataMap[value]">
+              <a-list-item slot="renderItem" slot-scope="item">
+                <a-card>
+                  <div slot="title">
+                    <a-row>
+                      <a-col span="12" :title="item.name">{{ item.name }} </a-col>
+                      <a-col span="12" style="text-align: right;">
+                        <a href="javascript:void (0)" @click="chooseProcess(item)">发起申请</a>
+                      </a-col>
+                    </a-row>
+                  </div>
+                  <b>版本:</b>v.{{ item.version }}
+                  <br />
+                  <b>说明:</b>{{ item.description }}
+                </a-card>
+              </a-list-item>
+            </a-list>
+          </a-collapse-panel>
+        </a-collapse>
+      </div>
+    </a-drawer>
+
+    <!--流程表单-->
+    <a-modal :title="lcModa.title" v-model="lcModa.visible" :footer="null" :maskClosable="false" width="100%">
+      <component
+        :disabled="lcModa.disabled"
+        v-if="lcModa.visible"
+        :is="lcModa.formComponent"
+        :processData="lcModa.processData"
+        :isNew="lcModa.isNew"
+        @afterSubmit="afterSub"
+        @close=";(lcModa.visible = false), (lcModa.disabled = false)"
+      ></component>
+    </a-modal>
+
+    <!-- <onl-cgform-auto-modal ref="modal" code="b0bea65bfce141deb0ae3fcb18982d76" /> -->
+
+    <!--提交申请表单-->
+    <a-modal title="提交申请" v-model="modalVisible" :mask-closable="false" :width="500" :footer="null">
+      <div v-if="modalVisible">
+        <a-form-item label="选择审批人" v-show="showAssign">
+          <a-select
+            style="width: 100%"
+            v-model="form.assignees"
+            placeholder="请选择"
+            mode="multiple"
+            :allowClear="true"
+          >
+            <a-select-option v-for="(item, i) in assigneeList" :key="i" :value="item.username">
+              {{ item.realname }}
+            </a-select-option>
+          </a-select>
+        </a-form-item>
+        <a-form-item label="下一审批人" v-show="isGateway">
+          <a-alert type="info" showIcon message="分支网关处不支持自定义选择下一审批人,将自动下发给所有可审批人。"
+            >,将发送给下一节点所有人</a-alert
+          >
+        </a-form-item>
+        <a-form-item label="优先级" prop="priority">
+          <a-select v-model="form.priority" placeholder="请选择" :allowClear="true" style="width: 100%">
+            <a-select-option :value="0">普通</a-select-option>
+            <a-select-option :value="1">重要</a-select-option>
+            <a-select-option :value="2">紧急</a-select-option>
+          </a-select>
+        </a-form-item>
+        <a-form-item label="消息通知">
+          <a-checkbox v-model="form.sendMessage">站内消息通知</a-checkbox>
+          <!-- <a-checkbox v-model="form.sendSms" disabled>短信通知</a-checkbox>
+          <a-checkbox v-model="form.sendEmail" disabled>邮件通知</a-checkbox> -->
+        </a-form-item>
+
+        <!-- 提交 -->
+        <div slot="footer">
+          <a-button type="text" @click="modalVisible = false">取消</a-button>
+          <div style="display:inline-block;width: 20px;"></div>
+          <a-button type="primary" :disabled="submitLoading" @click="applySubmit">提交</a-button>
+        </div>
+        
+      </div>
+    </a-modal>
+
+    <!-- 审批历史 -->
+    <a-modal title="审批历史" v-model="modalLsVisible" :mask-closable="false" :width="'80%'" :footer="null">
+      <div v-if="modalLsVisible">
+        <historicDetail :procInstId="procInstId"></historicDetail>
+      </div>
+    </a-modal>
+
+    <!-- 确认撤回 -->
+    <a-modal title="确认撤回" v-model="modalCancelVisible" :mask-closable="false" :width="500">
+      <a-form ref="delForm" v-model="cancelForm" :label-width="70" v-if="modalCancelVisible">
+        <a-form-item label="撤回原因" prop="reason">
+          <a-input type="textarea" v-model="cancelForm.reason" :rows="4" />
+        </a-form-item>
+      </a-form>
+      <div slot="footer">
+        <a-button type="text" @click="modalCancelVisible = false">取消</a-button>
+        <a-button type="primary" :disabled="submitLoading" @click="handelSubmitCancel">提交</a-button>
+      </div>
+    </a-modal>
+  </div>
+</template>
+
+<script>
+import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+import { activitiMixin } from '@/views/activiti/mixins/activitiMixin'
+import { filterObj } from '@/utils/util'
+import JEllipsis from '@/components/jeecg/JEllipsis'
+import { deleteAction, getAction, downFile } from '@/api/manage'
+import pick from 'lodash.pick'
+import JTreeSelect from '@/components/jeecg/JTreeSelect'
+import { initDictOptions, filterDictText } from '@/components/dict/JDictSelectUtil'
+import historicDetail from '@/views/activiti/historicDetail'
+export default {
+  name: 'ApplyList',
+  mixins: [activitiMixin, JeecgListMixin],
+  components: {
+    JEllipsis,
+    JTreeSelect,
+    historicDetail
+  },
+  data() {
+    return {
+      applyList: [], // 申请列表
+      description: '我的申请',
+      dictOptions: [],
+
+      url: {
+        list: '/actBusiness/listData',
+        getProcessDataList: '/activiti_process/listData',
+        delByIds: '/actBusiness/delByIds',
+        getFirstNode: '/actProcessIns/getFirstNode',
+        applyBusiness: '/actBusiness/apply',
+        cancelApply: '/actBusiness/cancel'
+      },
+      // 查询条件
+      queryParam: {
+        createTimeRange: [],
+        keyWord: ''
+      },
+      // 表头
+      labelCol: {
+        xs: { span: 4 },
+        sm: { span: 4 }
+      },
+      wrapperCol: {
+        xs: { span: 20 },
+        sm: { span: 20 }
+      },
+      processModalVisible: null,
+      activeKeyAll: [],
+      activeKey: [],
+      processDataMap: {},
+      searchProcessKey: null,
+      addApplyLoading: false,
+      lcModa: {
+        title: '',
+        disabled: false,
+        visible: false,
+        formComponent: null,
+        isNew: false
+      },
+      form: {
+        priority: 0,
+        assignees: [],
+        sendMessage: true
+      },
+      modalVisible: false,
+      showAssign: false,
+      assigneeList: [],
+      isGateway: false,
+      dictPriority: [],
+      submitLoading: false,
+      error: '',
+      /*审批历史*/
+      modalLsVisible: false,
+      procInstId: '',
+      modalCancelVisible: false,
+      cancelForm: {}
+    }
+  },
+  computed: {},
+  methods: {
+    //初始化字典 - 流程分类
+    initDictConfig() {
+      initDictOptions('bpm_process_type').then(res => {
+        if (res.success) {
+          this.dictOptions = res.result
+        }
+      })
+    },
+
+    //字典
+    filterDictText(dictOptions, text) {
+      if (dictOptions instanceof Array) {
+        for (let dictItem of dictOptions) {
+          if (text === dictItem.value) {
+            return dictItem.text
+          }
+        }
+      }
+      return text || text == 'null' ? '' : text
+    },
+    //进度列表
+    getProcessList() {
+      this.addApplyLoading = true
+      this.postFormAction(this.url.getProcessDataList, { status: 1, roles: true })
+        .then(res => {
+          this.activeKeyAll = []
+          if (res.success) {
+            var result = res.result || []
+            if (result.length > 0) {
+              let searchProcessKey = this.searchProcessKey
+              if (searchProcessKey) {
+                //过滤条件
+                result = _.filter(result, function(o) {
+                  return o.name.indexOf(searchProcessKey) > -1
+                })
+              }
+              this.processDataMap = _.groupBy(result, 'categoryId')
+              for (const categoryId in this.processDataMap) {
+                this.activeKeyAll.push(categoryId)
+              }
+              this.activeKey = this.activeKeyAll
+            }
+            this.processModalVisible = true
+          } else {
+            this.$message.warning(res.message)
+          }
+        })
+        .finally(() => (this.addApplyLoading = false))
+    },
+
+    //
+    loadData(arg) {
+      console.log('loadData')
+      if (!this.url.list) {
+        this.$message.error('请设置url.list属性!')
+        return
+      }
+      //加载数据 若传入参数1则加载第一页的内容
+      if (arg === 1) {
+        this.ipagination.current = 1
+      }
+      var params = this.getQueryParams() //查询条件
+      this.loading = true
+
+      getAction(this.url.list, params).then(res => {
+        if (res.success) {
+          let records = res.result || []
+          this.applyList = records
+          // console.log('申请列表', this.applyList)
+          // this.ipagination.total = records.length
+        }
+        if (res.code === 510) {
+          this.$message.warning(res.message)
+        }
+        this.loading = false
+      })
+    },
+
+    // 选择参数
+    getQueryParams() {
+      var param = Object.assign({}, this.queryParam, this.isorter)
+      delete param.createTimeRange // 时间参数不传递后台
+      return filterObj(param)
+    },
+
+    // 重置
+    searchReset() {
+      var that = this
+      var logType = that.queryParam.logType
+      that.queryParam = {} //清空查询区域参数
+      that.queryParam.logType = logType
+      that.loadData(this.ipagination.current)
+    },
+
+    //
+    onDateChange: function(value, dateString) {
+      console.log(dateString[0], dateString[1])
+      this.queryParam.createTime_begin = dateString[0]
+      this.queryParam.createTime_end = dateString[1]
+    },
+
+    onDateOk(value) {
+      console.log(value)
+    },
+
+    // 状态
+    getStatus(status) {
+      let text = '未知',
+        color = ''
+      if (status == 0) {
+        text = '草稿'
+        color = 'default'
+      } else if (status == 1) {
+        text = '处理中'
+        color = 'orange'
+      } else if (status == 2) {
+        text = '已结束'
+        color = 'blue'
+      } else if (status == 3) {
+        text = '已撤回'
+        color = 'magenta'
+      }
+      return { text: text, color: color }
+    },
+
+    // 结果
+    getResult(result) {
+      let text = '未知',
+        color = ''
+      if (result == 0) {
+        text = '未提交'
+        color = 'default'
+      } else if (result == 1) {
+        text = '处理中'
+        color = 'orange'
+      } else if (result == 2) {
+        text = '已通过'
+        color = 'green'
+      } else if (result == 3) {
+        text = '已驳回'
+        color = 'red'
+      }
+      return { text: text, color: color }
+    },
+
+    // 申请
+    apply(v) {
+      if (!v.procDefId || v.procDefId == 'null') {
+        this.$message.error('流程定义为空')
+        return
+      }
+      this.form.id = v.id
+      this.form.procDefId = v.procDefId
+      this.form.title = v.title
+      // 加载审批人
+      this.getAction(this.url.getFirstNode, { procDefId: v.procDefId }).then(res => {
+        if (res.success) {
+          if (res.result.type == 3 || res.result.type == 4) {
+            this.isGateway = true
+            this.modalVisible = true
+            this.form.firstGateway = true
+            this.showAssign = false
+            this.error = ''
+            return
+          }
+          this.form.firstGateway = false
+          this.isGateway = false
+          if (res.result.users && res.result.users.length > 0) {
+            this.error = ''
+            this.assigneeList = res.result.users
+            // 默认勾选
+            let ids = []
+            res.result.users.forEach(e => {
+              ids.push(e.username)
+            })
+            this.form.assignees = ids
+            this.showAssign = true
+          } else {
+            this.form.assignees = []
+            this.showAssign = true
+            this.error = '审批节点未分配候选审批人员,请联系管理员!'
+          }
+          if (this.error) {
+            this.$message.error(this.error)
+            return
+          }
+          this.modalVisible = true
+        } else {
+          this.$message.error(res.message)
+        }
+      })
+    },
+
+    //申请提交
+    applySubmit() {
+      if (this.showAssign && this.form.assignees.length < 1) {
+        this.error = '请至少选择一个审批人'
+        this.$message.error(this.error)
+        return
+      } else {
+        this.error = ''
+      }
+      this.submitLoading = true
+      var params = Object.assign({}, this.form)
+      params.assignees = params.assignees.join(',')
+      this.postFormAction(this.url.applyBusiness, params)
+        .then(res => {
+          if (res.success) {
+            this.$message.success('操作成功')
+            this.loadData()
+            this.modalVisible = false
+          } else {
+            this.$message.error(res.message)
+          }
+        })
+        .finally(() => (this.submitLoading = false))
+    },
+
+    // 编辑
+    edit(r, isView) {
+      if (!r.routeName) {
+        this.$message.warning('该流程信息未配置表单,请联系开发人员!')
+        return
+      }
+      if (r.routeName.indexOf('外部表单') != -1) {
+        alert('调用其他项目页面')
+      } else if (r.routeName.indexOf('自定义') != -1) {
+        isView = isView || false
+        this.lcModa.disabled = isView
+        this.lcModa.title = '修改流程业务信息:' + r.title
+        if (isView) this.lcModa.title = '查看流程业务信息:' + r.title
+        let com = { component: () => import(`@/views/activiti/form/demoForm2`) }
+        this.lcModa.formComponent = com.component
+        this.lcModa.isNew = false
+        this.lcModa.processData = r
+        this.lcModa.visible = true
+      } else {
+        isView = isView || false
+        this.lcModa.disabled = isView
+        this.lcModa.title = '修改流程业务信息:' + r.title
+        if (isView) this.lcModa.title = '查看流程业务信息:' + r.title
+        this.lcModa.formComponent = this.getFormComponent(r.routeName).component
+        this.lcModa.processData = r
+        this.lcModa.isNew = false
+        this.lcModa.visible = true
+      }
+    },
+
+    // 删除
+    remove(r) {
+      console.log('点击了删除');
+      this.postFormAction(this.url.delByIds, { ids: r.id }).then(res => {
+        if (res.success) {
+          this.$message.success(res.message)
+          this.loadData()
+        } else {
+          this.$message.error(res.message)
+        }
+      })
+    },
+
+    // 撤回
+    cancel(v) {
+      this.cancelForm.id = v.id
+      this.cancelForm.procInstId = v.procInstId
+      this.modalCancelVisible = true
+    },
+
+    //
+    handelSubmitCancel() {
+      this.submitLoading = true
+      this.postFormAction(this.url.cancelApply, this.cancelForm)
+        .then(res => {
+          if (res.success) {
+            this.$message.success('操作成功')
+            this.loadData()
+            this.modalCancelVisible = false
+          } else {
+            this.$message.error(res.message)
+          }
+        })
+        .finally(() => (this.submitLoading = false))
+    },
+
+    // 历史
+    history(v) {
+      if (!v.procInstId) {
+        this.$message.error('流程实例ID不存在')
+        return
+      }
+      this.procInstId = v.procInstId
+      this.modalLsVisible = true
+    },
+
+    // 详情
+    detail(v) {
+      // this.$refs.modal.detail("1","8a8080f079ea4ed50179ea4f6c470001")
+      this.edit(v, true)
+    },
+
+    //
+    handleTableChange(pagination, filters, sorter) {
+      //分页、排序、筛选变化时触发
+      //TODO 筛选
+      if (Object.keys(sorter).length > 0) {
+        this.isorter.column = sorter.field
+        this.isorter.order = 'ascend' == sorter.order ? 'asc' : 'desc'
+      }
+      this.ipagination = pagination
+      // this.loadData();
+    },
+
+    //
+    addApply() {
+      this.getProcessList()
+    },
+
+    //
+    onSearchProcess(value) {
+      this.searchProcessKey = value
+      this.getProcessList()
+    },
+
+    //
+    chooseProcess(v) {
+      console.log(v)
+      // this.$refs.modal.add("1")
+      if (!v.routeName) {
+        this.$message.warning('该流程信息未配置表单,请联系开发人员!')
+        return
+      }
+      if (v.routeName.indexOf('外部表单') != -1) {
+        alert('调用其他项目页面')
+      } else if (v.routeName.indexOf('自定义') != -1) {
+        this.lcModa.disabled = false
+        let com = { component: () => import(`@/views/activiti/form/demoForm2`) }
+        this.lcModa.formComponent = com.component
+        this.lcModa.title = '发起流程:' + v.name
+        this.lcModa.isNew = true
+        this.lcModa.processData = v
+        this.lcModa.visible = true
+      } else {
+        this.lcModa.disabled = false
+        this.lcModa.formComponent = this.getFormComponent(v.routeName).component
+        this.lcModa.title = '发起流程:' + v.name
+        this.lcModa.isNew = true
+        this.lcModa.processData = v
+        this.lcModa.visible = true
+      }
+
+      console.log('发起', v)
+    },
+
+    //
+    afterSub(formData) {
+      this.lcModa.visible = false
+      this.loadData()
+    }
+  }
+}
+</script>
+
+<style src="@assets/less/overwrite.less" lang="less" scoped></style>
+<style lang="less">
+@import '~@assets/less/common.less';
+</style>
+<style lang="less" scoped>
+//申请 不同情况按钮排布
+.apply .btns .ingBtns,
+.apply .btns .overBtns {
+  display: flex;
+  justify-content: space-between;
+}
+</style>

+ 299 - 0
src/views/user/tabs/DoneTab.vue

@@ -0,0 +1,299 @@
+<template>
+  <div class="waitTab">
+    <a-card class="cardTask" v-for="item in doneList" :key="item.id">
+      <p class="pTitle">
+        <span>
+          <img src="@assets/look.gif" />
+        </span>
+        <i>
+          {{ item.processName }}
+        </i>
+      </p>
+      <p>任务名称:{{ item.name }}</p>
+      <p>创建时间:{{ item.createTime }}</p>
+
+      <!-- 审批操作 -->
+      <p style="float:left;">
+        审批操作:
+        <span
+          v-if="item.deleteReason == '审批通过'"
+          style="background:rgba(20, 137, 184,.3);
+                    padding:4px 10px;
+                    borderRadius:2px;
+                    letterSpacing:1px;
+                    color: #092834;"
+        >
+          {{ item.deleteReason }}</span
+        >
+        <span
+          v-if="item.deleteReason == '审批驳回'"
+          style="background:rgba(9, 40, 52,.7);
+                    padding:4px 10px;
+                    borderRadius:2px;
+                    letterSpacing:1px;
+                    color: white;"
+        >
+          {{ item.deleteReason }}
+        </span>
+      </p>
+      <p style="float:right;">发起人:{{ item.applyer }}</p>
+
+      <a-divider style="background:rgba(128, 128, 128,.1);"></a-divider>
+
+      <!-- 操作 -->
+      <div class="operation">
+        <p>
+          <span class="operationImg">
+            <img src="@assets/down.png" />
+          </span>
+
+          操作
+        </p>
+
+        <div class="btns">
+          <a-button
+            class="itemBtn"
+            ghost
+            @click="detail(item)"
+            style="box-shadow: 8px 8px 8px rgba(128, 128, 128);
+                      color:#4e73b9;"
+          >
+            表单数据
+          </a-button>
+
+          <a-button
+            class="itemBtn"
+            ghost
+            @click="history(item)"
+            style="color:gray;
+                             box-shadow: 8px 8px 8px rgba(128, 128, 128,.7)"
+          >
+            审批历史
+          </a-button>
+
+          <a-popconfirm title="确定删除吗?" placement="left">
+            <a-button
+              class="itemBtn"
+              ghost
+              @click="remove(item)"
+              style="color:gray;
+                               box-shadow: 7px 7px 7px rgba(128, 128, 128,.7);
+                               color:red;"
+            >
+              删除
+            </a-button>
+          </a-popconfirm>
+        </div>
+      </div>
+    </a-card>
+
+    <!--  -->
+
+    <a-modal title="审批历史" v-model="modalLsVisible" :mask-closable="false" :width="'80%'" :footer="null">
+      <div v-if="modalLsVisible">
+        <component :is="historicDetail" :procInstId="procInstId"></component>
+      </div>
+    </a-modal>
+    <!--流程表单-->
+    <a-modal :title="lcModa.title" v-model="lcModa.visible" :footer="null" :maskClosable="false" width="100%">
+      <component
+        :disabled="lcModa.disabled"
+        v-if="lcModa.visible"
+        :is="lcModa.formComponent"
+        :processData="lcModa.processData"
+        :isNew="lcModa.isNew"
+        @close=";(lcModa.visible = false), (lcModa.disabled = false)"
+      ></component>
+    </a-modal>
+  </div>
+</template>
+
+<script>
+import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+import { activitiMixin } from '@/views/activiti/mixins/activitiMixin'
+export default {
+  name: 'DoneTab',
+  mixins: [activitiMixin, JeecgListMixin],
+  data() {
+    return {
+      doneList: [], // 已办列表
+      openSearch: true,
+      openTip: true,
+      loading: true, // 表单加载状态
+      selectCount: 0, // 多选计数
+      selectList: [], // 多选数据
+      searchForm: {
+        // 搜索框对应data对象
+        name: '',
+        pageNumber: 1, // 当前页数
+        pageSize: 10, // 页面大小
+        sort: 'createTime', // 默认排序字段
+        order: 'desc' // 默认排序方式
+      },
+      modalType: 0, // 添加或编辑标识
+      modalVisible: false, // 添加或编辑显示
+      modalTitle: '', // 添加或编辑标题
+      form: {
+        // 添加或编辑表单对象初始化数据
+        reason: ''
+      },
+      formValidate: {
+        // 表单验证规则
+      },
+      submitLoading: false, // 添加或编辑提交状态
+      data: [], // 表数据
+      total: 0, // 表数据总数
+      deleteId: '',
+      url: {
+        doneList: '/actTask/doneList',
+        deleteHistoricTask: '/actTask/deleteHistoric/'
+      },
+      modalLsVisible: false,
+      procInstId: '',
+      lcModa: {
+        title: '',
+        disabled: false,
+        visible: false,
+        formComponent: null,
+        isNew: false
+      }
+    }
+  },
+  mounted() {
+    this.init()
+  },
+  methods: {
+    loadData() {},
+    init() {
+      this.getDataList()
+    },
+
+    // 原始
+    // getDataList() {
+    //   this.loading = true
+    //   this.postFormAction(this.url.doneList, this.searchForm).then(res => {
+    //     this.loading = false
+    //     if (res.success) {
+    //       this.doneList = res.result || []
+    //       console.log(this.doneList)
+    //     } else {
+    //       this.$message.error(res.message)
+    //     }
+    //   })
+    // },
+
+    //拿到数据
+    getDataList() {
+      this.loading = true
+      getAction(this.url.doneList).then(res => {
+        if (res.success) {
+          this.doneList = res.result || []
+          console.log('wait页面渲染已办列表', this.doneList)
+        }
+      })
+    },
+
+    //
+    handleSearch() {
+      this.searchForm.pageNumber = 1
+      this.searchForm.pageSize = 10
+      this.getDataList()
+    },
+
+    //
+    handleReset() {
+      this.searchForm = {}
+      this.searchForm.pageNumber = 1
+      this.searchForm.pageSize = 10
+      // 重新加载数据
+      this.getDataList()
+    },
+
+    //
+    handelCancel() {
+      this.modalVisible = false
+    },
+
+    // 详情
+    detail(r) {
+      console.log('啥也没有,啥情况')
+      if (!r.routeName) {
+        this.$message.warning('该流程信息未配置表单,请联系开发人员!')
+        return
+      }
+      if (r.routeName.indexOf('外部表单') != -1) {
+        //外部项目开发的表单
+        alert('调用其他项目页面')
+      } else if (r.routeName.indexOf('自定义') != -1) {
+        //自定义的表单流程
+        this.lcModa.disabled = true
+        this.lcModa.title = '查看流程业务信息:' + r.processName
+        let com = { component: () => import(`@/views/activiti/form/demoForm2`) }
+        this.lcModa.formComponent = com.component
+        this.lcModa.isNew = false
+        this.lcModa.processData = r
+        this.lcModa.visible = true
+      } else {
+        //固定的表单
+        this.lcModa.disabled = true
+        this.lcModa.title = '查看流程业务信息:' + r.processName
+        this.lcModa.formComponent = this.getFormComponent(r.routeName).component
+        this.lcModa.processData = r
+        this.lcModa.isNew = false
+        this.lcModa.visible = true
+      }
+    },
+
+    // 历史  todo
+    history(v) {
+      console.log('历史吗?', v)
+      if (!v.procInstId) {
+        this.$message.error('流程实例ID不存在')
+        return
+      }
+      console.log('我想看看你', v.procInstId)
+      this.procInstId = v.procInstId
+      this.modalLsVisible = true
+      alert('需要重新做页面')
+    },
+
+    // 删除  todo 删太快了
+    remove(item) {
+      console.log('点击这项是:', item)
+      this.postFormAction(this.url.deleteHistoricTask + item.id).then(res => {
+        if (res.success) {
+          console.log('要删除的这项id是:', item.id)
+          this.$message.success('操作成功')
+          this.getDataList()
+        } else {
+          this.$message.error(res.message)
+        }
+      })
+    },
+
+    //
+    handleTableChange(pagination, filters, sorter) {
+      //分页、排序、筛选变化时触发
+      //TODO 筛选
+      if (Object.keys(sorter).length > 0) {
+        this.isorter.column = sorter.field
+        this.isorter.order = 'ascend' == sorter.order ? 'asc' : 'desc'
+      }
+      this.ipagination = pagination
+      // this.loadData();
+    }
+  }
+}
+</script>
+
+<style src="@assets/less/overwrite.less" lang="less" scoped></style>
+<style lang="less">
+@import '~@assets/less/common.less';
+</style>
+<style lang="less" scoped>
+//已办 操作按钮
+.done .btns {
+  display: flex;
+  justify-content: space-between;
+}
+</style>

+ 675 - 0
src/views/user/tabs/WaitTab.vue

@@ -0,0 +1,675 @@
+<template>
+  <div class="waitTab">
+    <a-card class="cardTask" v-for="item in todoList" :key="item.id">
+      <p class="pTitle">
+        <span>
+          <img src="@assets/look.gif" />
+        </span>
+        {{ item.processName }}
+      </p>
+
+      <p>任务名称:{{ item.name }}</p>
+      <p>创建时间:{{ item.createTime }}</p>
+
+      <!-- 优先级 -->
+      <p>
+        优先级:
+        <span
+          class="priorityComm"
+          v-if="item.priority == 0"
+          style="background:rgba(252, 96, 10,.4);
+                    padding:2px 6px;
+                    borderRadius:2px;
+                    color:#092834;"
+        >
+          普通
+        </span>
+        <span
+          class="priorityComm"
+          v-else-if="item.priority == 1"
+          style="background:#FC600A;
+                    padding:4px 10px;
+                    borderRadius:6px;
+                    color:white;"
+        >
+          重要
+        </span>
+
+        <span
+          class="priorityComm"
+          v-else-if="item.priority == 2"
+          style="background:red;
+                    padding:4px 10px;
+                    borderRadius:6px;
+                    color:white;"
+        >
+          紧急
+        </span>
+        <span class="priorityComm" v-else style="background:#999;">
+          无
+        </span>
+      </p>
+
+      <!-- 状态 -->
+      <p style="float:left;marginBottom:30px;">
+        状态:
+        <span v-if="item.isSuspended == false" style="background:rgba(252, 96, 10,.8);" class="resultComm">
+          已激活
+        </span>
+        <span v-if="item.isSuspended == true" style="background:rgba(20, 137, 184,.8);" class="resultComm">
+          已挂起
+        </span>
+        {{ item.status }}
+      </p>
+
+      <!-- 发起人 -->
+      <p style="float:right;marginBottom:30px;">发起人:{{ item.applyer }}</p>
+
+      <a-divider style="background:rgba(128, 128, 128,.1);"></a-divider>
+
+      <!-- 操作 -->
+      <div class="operation">
+        <p>
+          <span class="operationImg">
+            <img src="@assets/down.png" />
+          </span>
+
+          操作
+        </p>
+
+        <div class="btns">
+          <a-button
+            class="itemBtn"
+            ghost
+            @click="detail(item)"
+            style="box-shadow: 8px 8px 8px rgba(128, 128, 128);
+                      color:#4e73b9;"
+          >
+            详情
+          </a-button>
+
+          <!-- 挂起 状态 按钮不可用 -->
+          <span
+            v-if="item.isSuspended == true"
+            style="cursor: no-drop;color: #999999;"
+            title="流程已被挂起,无法操作!"
+          >
+            <a-button class="itemBtn" disabled>通过</a-button>
+            <a-button class="itemBtn" disabled>驳回</a-button>
+            <a-button class="itemBtn" disabled>历史</a-button>
+          </span>
+
+          <!-- 激活 状态 -->
+          <span v-else>
+            <a-button
+              class="itemBtn midBtn"
+              ghost
+              @click="passTask(item)"
+              style="box-shadow: 8px 8px 8px rgba(128, 128, 128);
+                        color:#4e73b9;"
+            >
+              通过
+            </a-button>
+
+            <a-button
+              class="itemBtn midBtn"
+              ghost
+              @click="backTask(item)"
+              style="color:gray;box-shadow: 5px 5px 5px rgba(128, 128, 128,.7);color:#ea472c;"
+            >
+              驳回
+            </a-button>
+
+            <a-button
+              class="itemBtn midBtn"
+              ghost
+              @click="delegateTask(item)"
+              style="color:gray;box-shadow: 6px 6px 6px rgba(128, 128, 128,.7);color:orange;"
+            >
+              委托
+            </a-button>
+          </span>
+
+          <a-button
+            class="itemBtn"
+            ghost
+            @click="history(item)"
+            style="color:gray;
+                             box-shadow: 4px 4px 4px rgba(128, 128, 128,.7);
+                             position:absolute;
+                             right:0;
+                             marginRight:0;"
+          >
+            历史
+          </a-button>
+        </div>
+      </div>
+    </a-card>
+
+    <!--审批历史-->
+    <a-modal title="审批历史" v-model="modalLsVisible" :mask-closable="false" :width="'80%'" :footer="null">
+      <div v-if="modalLsVisible">
+        <component :is="historicDetail" :procInstId="procInstId"></component>
+      </div>
+    </a-modal>
+
+    <!--流程表单-->
+    <a-modal :title="lcModa.title" v-model="lcModa.visible" :footer="null" :maskClosable="false" width="100%">
+      <component
+        :disabled="lcModa.disabled"
+        v-if="lcModa.visible"
+        :is="lcModa.formComponent"
+        :processData="lcModa.processData"
+        :isNew="lcModa.isNew"
+        @close=";(lcModa.visible = false), (lcModa.disabled = false)"
+        @getDataList="getDataList"
+      ></component>
+    </a-modal>
+
+    <!-- 审批操作 -->
+    <a-modal :title="modalTaskTitle" v-model="modalTaskVisible" :mask-closable="false" :width="500">
+      <div v-if="modalTaskVisible">
+        <a-form ref="form" :model="form" :label-width="85" :rules="formValidate">
+          <a-form-item label="审批意见" prop="reason">
+            <a-input type="textarea" v-model="form.comment" :rows="4" />
+          </a-form-item>
+          <a-form-item label="下一审批人" prop="assignees" v-show="showAssign" :error="error">
+            <a-select v-model="form.assignees" placeholder="请选择" allowClear mode="multiple" :loading="userLoading">
+              <a-select-option v-for="(item, i) in assigneeList" :key="i" :value="item.username">{{
+                item.realname
+              }}</a-select-option>
+            </a-select>
+          </a-form-item>
+          <a-form-item label="下一审批人" v-show="isGateway">
+            <span>分支网关处暂不支持自定义选择下一审批人,将发送给下一节点所有人</span>
+          </a-form-item>
+          <div v-show="form.type == 1">
+            <a-form-item label="驳回至">
+              <a-select v-model="form.backTaskKey" :loading="backLoading" @change="changeBackTask">
+                <a-select-option v-for="(item, i) in backList" :key="i" :value="item.key">{{
+                  item.name
+                }}</a-select-option>
+              </a-select>
+            </a-form-item>
+            <a-form-item label="指定原节点审批人" prop="assignees" v-show="form.backTaskKey != -1" :error="error">
+              <a-select v-model="form.assignees" placeholder="请选择" allowClear mode="multiple" :loading="userLoading">
+                <a-select-option v-for="(item, i) in assigneeList" :key="i" :value="item.id">{{
+                  item.username
+                }}</a-select-option>
+              </a-select>
+            </a-form-item>
+          </div>
+
+          <a-form-item label="选择委托人" prop="userId" :error="error" v-show="form.type == 2">
+            <JSelectUserByDep v-model="form.userId" :multi="false"></JSelectUserByDep>
+          </a-form-item>
+
+          <a-form-item label="消息通知">
+            <a-checkbox v-model="form.sendMessage">站内消息通知</a-checkbox>
+            <a-checkbox v-model="form.sendSms" disabled>短信通知</a-checkbox>
+            <a-checkbox v-model="form.sendEmail" disabled>邮件通知</a-checkbox>
+          </a-form-item>
+        </a-form>
+      </div>
+      <div slot="footer">
+        <a-button type="text" @click="modalTaskVisible = false">取消</a-button>
+        <a-button type="primary" :loading="submitLoading" @click="handelSubmit">提交</a-button>
+      </div>
+    </a-modal>
+  </div>
+</template>
+
+<script>
+import { deleteAction, getAction, downFile } from '@/api/manage'
+import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+import { activitiMixin } from '@/views/activiti/mixins/activitiMixin'
+import JSelectUserByDep from '@/components/jeecgbiz/JSelectUserByDep'
+export default {
+  name: 'WaitTab',
+  mixins: [activitiMixin, JeecgListMixin],
+  components: { JSelectUserByDep },
+  data() {
+    return {
+      todoList: [], // 待办列表
+      openSearch: true,
+      openTip: true,
+      loading: true, // 表单加载状态
+      modalTaskVisible: false,
+      userLoading: false,
+      backLoading: false,
+      selectCount: 0, // 多选计数
+      selectList: [], // 多选数据
+      assigneeList: [],
+      backList: [
+        {
+          key: '-1',
+          name: '发起人'
+        }
+      ],
+      error: '',
+      showAssign: false,
+      searchForm: {
+        // 搜索框对应data对象
+        name: ''
+      },
+      modalTaskTitle: '',
+      modalTitle: '', // 添加或编辑标题
+      form: {
+        id: '',
+        userId: '',
+        procInstId: '',
+        comment: '',
+        type: 0,
+        assignees: [],
+        backTaskKey: '-1',
+        sendMessage: true,
+        sendSms: false,
+        sendEmail: false
+      },
+      formValidate: {
+        // 表单验证规则
+      },
+      submitLoading: false, // 添加或编辑提交状态
+      data: [], // 表单数据
+      total: 0, // 表单数据总数
+      dictPriority: [],
+      isGateway: false,
+      lcModa: {
+        title: '',
+        disabled: false,
+        visible: false,
+        formComponent: null,
+        isNew: false
+      },
+      url: {
+        todoList: '/actTask/todoList',
+        pass: '/actTask/pass',
+        back: '/actTask/back',
+        backToTask: '/actTask/backToTask',
+        delegate: '/actTask/delegate',
+        getNextNode: '/activiti_process/getNextNode',
+        getNode: '/activiti_process/getNode/',
+        getBackList: '/actTask/getBackList/',
+        passAll: '/actTask/passAll/',
+        backAll: '/actTask/backAll/'
+      },
+      /*历史*/
+      modalLsVisible: false,
+      procInstId: ''
+    }
+  },
+  mounted() {
+    this.init()
+  },
+  methods: {
+    //
+    forminitial() {
+      this.form = {
+        id: '',
+        userId: '',
+        procInstId: '',
+        comment: '',
+        type: 0,
+        assignees: [],
+        backTaskKey: '-1',
+        sendMessage: true,
+        sendSms: false,
+        sendEmail: false
+      }
+    },
+
+    //
+    init() {
+      this.getDataList()
+    },
+    loadData() {},
+
+    // 拿到 所有列表(待办、已办) 原始
+    // getDataList() {
+    //   // 待办
+    //   getAction(this.url.todoList, {}).then(res => {
+    //     if (res.success) {
+    //       this.todoList = res.result || []
+    //       this.total = this.data.leading
+    //       console.log('待办列表', this.todoList)
+    //     }
+    //   })
+    // },
+
+    getDataList() {
+      this.loading = true
+      // 待办
+      getAction(this.url.todoList, {}).then(res => {
+        if (res.success) {
+          this.todoList = res.result || []
+          // this.total = this.data.leading
+          console.log('wait页面渲染待办列表', this.todoList)
+        }
+      })
+    },
+    handleTableChange(pagination, filters, sorter) {
+      //分页、排序、筛选变化时触发
+      if (Object.keys(sorter).length > 0) {
+        this.isorter.column = sorter.field
+        this.isorter.order = 'ascend' == sorter.order ? 'asc' : 'desc'
+      }
+      this.ipagination = pagination
+      // this.loadData();
+    },
+
+    //
+    handleSearch() {
+      this.getDataList()
+    },
+
+    //
+    handleReset() {
+      this.searchForm = {}
+      // 重新加载数据
+      this.getDataList()
+    },
+
+    //
+    showSelect(e) {
+      this.selectList = e
+      this.selectCount = e.length
+    },
+
+    //
+    clearSelectAll() {
+      this.$refs.table.selectAll(false)
+    },
+
+    // 提交
+    handelSubmit() {
+      console.log('提交')
+      this.submitLoading = true
+      var formData = Object.assign({}, this.form)
+      formData.assignees = formData.assignees.join(',')
+      if (formData.type == 0) {
+        // 通过
+        if (this.showAssign && formData.assignees.length < 1) {
+          this.$message.error('请至少选择一个审批人')
+          this.submitLoading = false
+          return
+        } else {
+          this.error = ''
+        }
+        this.postFormAction(this.url.pass, formData).then(res => {
+          this.submitLoading = false
+          if (res.success) {
+            this.$message.success('操作成功')
+            this.modalTaskVisible = false
+            this.getDataList()
+          }
+        })
+      } else if (formData.type == 1) {
+        // 驳回
+        if (formData.backTaskKey == '-1') {
+          // 驳回至发起人
+          this.postFormAction(this.url.back, formData).then(res => {
+            this.submitLoading = false
+            if (res.success) {
+              this.$message.success('操作成功')
+              this.modalTaskVisible = false
+              this.getDataList()
+            }
+          })
+        } else {
+          // 自定义驳回
+          if (formData.backTaskKey != '-1' && formData.assignees.length < 1) {
+            this.$message.error('请至少选择一个审批人')
+            this.submitLoading = false
+            return
+          } else {
+            this.error = ''
+          }
+          this.postFormAction(this.url.backToTask, formData).then(res => {
+            this.submitLoading = false
+            if (res.success) {
+              this.$message.success('操作成功')
+              this.modalTaskVisible = false
+              this.getDataList()
+            }
+          })
+        }
+      } else if (formData.type == 2) {
+        // 委托
+        if (!formData.userId) {
+          this.$message.error('请选择一委托人')
+          this.submitLoading = false
+          return
+        } else {
+          this.error = ''
+        }
+        this.postFormAction(this.url.delegate, formData).then(res => {
+          this.submitLoading = false
+          if (res.success) {
+            this.$message.success('操作成功')
+            this.modalTaskVisible = false
+            this.getDataList()
+          }
+        })
+      }
+    },
+
+    // 详情
+    detail(r) {
+      if (!r.routeName) {
+        this.$message.warning('该流程信息未配置表单,请联系开发人员!')
+        return
+      }
+      r.operationType = '1' //代办
+      if (r.routeName.indexOf('外部表单') != -1) {
+        //其他项目的表单流程
+        alert('调用其他项目页面')
+      } else if (r.routeName.indexOf('自定义') != -1) {
+        //自定义的表单流程
+        this.lcModa.disabled = true
+        this.lcModa.title = '查看流程业务信息:' + r.processName
+        let com = { component: () => import(`@/views/activiti/form/demoForm2`) }
+        this.lcModa.formComponent = com.component
+        this.lcModa.isNew = false
+        this.lcModa.processData = r
+        this.lcModa.visible = true
+      } else {
+        //固定的表单流程
+        this.lcModa.disabled = true
+        this.lcModa.title = '查看流程业务信息:' + r.processName
+        this.lcModa.formComponent = this.getFormComponent(r.routeName).component
+        this.lcModa.processData = r
+        this.lcModa.isNew = false
+        this.lcModa.visible = true
+      }
+    },
+
+    // 通过
+    passTask(v) {
+      this.forminitial()
+      this.modalTaskTitle = '审批通过'
+      this.form.id = v.id
+      this.form.procInstId = v.procInstId
+      this.form.priority = v.priority
+      this.form.type = 0
+      this.modalTaskVisible = true
+      this.userLoading = true
+      this.getAction(this.url.getNextNode, { procDefId: v.procDefId, currActId: v.key, procInstId: v.procInstId }).then(
+        res => {
+          this.userLoading = false
+          if (res.success) {
+            if (res.result.type == 3 || res.result.type == 4) {
+              this.isGateway = true
+              this.showAssign = false
+              this.error = ''
+              return
+            }
+            this.isGateway = false
+            if (res.result.users && res.result.users.length > 0) {
+              this.error = ''
+              this.assigneeList = res.result.users
+              // 默认勾选
+              let ids = []
+              res.result.users.forEach(e => {
+                ids.push(e.username)
+              })
+              this.form.assignees = ids
+              this.showAssign = true
+            } else {
+              this.form.assignees = []
+              this.showAssign = false
+            }
+          }
+        }
+      )
+    },
+
+    //
+    changeBackTask(v) {
+      if (v == '-1') {
+        return
+      }
+      this.userLoading = true
+      this.getAction(this.url.getNode + v + '&' + this.form.procInstId).then(res => {
+        this.userLoading = false
+        if (res.success) {
+          if (res.result.users && res.result.users.length > 0) {
+            this.assigneeList = res.result.users
+            // 默认勾选
+            let ids = []
+            res.result.users.forEach(e => {
+              ids.push(e.username)
+            })
+            this.form.assignees = ids
+          }
+        }
+      })
+    },
+
+    // 驳回
+    backTask(v) {
+      this.forminitial()
+      this.modalTaskTitle = '审批驳回'
+      this.form.id = v.id
+      this.form.procInstId = v.procInstId
+      this.form.procDefId = v.procDefId
+      this.form.priority = v.priority
+      this.form.type = 1
+      this.showAssign = false
+      this.modalTaskVisible = true
+      // 获取可驳回节点
+      this.backList = [
+        {
+          key: '-1',
+          name: '发起人'
+        }
+      ]
+      this.form.backTaskKey = '-1'
+      this.backLoading = true
+      this.getAction(this.url.getBackList + v.procInstId).then(res => {
+        this.backLoading = false
+        if (res.success) {
+          res.result.forEach(e => {
+            this.backList.push(e)
+          })
+        }
+      })
+    },
+
+    // 委托
+    delegateTask(v) {
+      this.forminitial()
+      this.modalTaskTitle = '委托他人代办'
+      this.form.id = v.id
+      this.form.procInstId = v.procInstId
+      this.form.type = 2
+      this.showAssign = false
+      this.modalTaskVisible = true
+    },
+
+    // 历史
+    history(v) {
+      if (!v.procInstId) {
+        this.$message.error('流程实例ID不存在')
+        return
+      }
+      this.procInstId = v.procInstId
+      this.modalLsVisible = true
+    },
+
+    //
+    passAll() {
+      if (this.selectCount <= 0) {
+        this.$message.warning('您还未选择要通过的数据')
+        return
+      }
+      // 批量通过
+      this.modalVisible = true
+      this.$confirm({
+        title: '确认通过',
+        content: '您确认要通过所选的 ' + this.selectCount + ' 条数据? 注意:将默认分配给节点设定的所有可审批用户',
+        loading: true,
+        onOk: () => {
+          let ids = ''
+          this.selectList.forEach(function(e) {
+            ids += e.id + ','
+          })
+          ids = ids.substring(0, ids.length - 1)
+          this.postFormAction(this.url.passAll, { ids: ids }).then(res => {
+            if (res.success) {
+              this.$message.success('操作成功')
+              this.modalVisible = false
+              this.clearSelectAll()
+              this.getDataList()
+            }
+          })
+        }
+      })
+    },
+
+    //
+    backAll() {
+      if (this.selectCount <= 0) {
+        this.$message.warning('您还未选择要驳回的数据')
+        return
+      }
+      // 批量驳回
+      this.modalVisible = true
+      this.$confirm({
+        title: '确认驳回',
+        content: '您确认要驳回所选的 ' + this.selectCount + ' 条数据? 注意:所有流程将驳回至发起人',
+        loading: true,
+        onOk: () => {
+          let procInstIds = ''
+          this.selectList.forEach(function(e) {
+            procInstIds += e.procInstId + ','
+          })
+          procInstIds = procInstIds.substring(0, procInstIds.length - 1)
+          this.postFormAction(this.url.backAll, { procInstIds: procInstIds }).then(res => {
+            if (res.success) {
+              this.$message.success('操作成功')
+              this.modalVisible = false
+              this.clearSelectAll()
+              this.getDataList()
+            }
+          })
+        }
+      })
+    }
+  }
+}
+</script>
+
+<style src="@assets/less/overwrite.less" lang="less" scoped></style>
+<style lang="less">
+@import '~@assets/less/common.less';
+</style>
+<style lang="less" scoped>
+// 操作按钮
+.wait .btns {
+  position: relative;
+
+  .midBtn {
+    margin-left: 3.3%;
+  }
+}
+</style>

+ 0 - 90
src/views/user/todoNav/Apply.vue

@@ -1,90 +0,0 @@
-<template>
-  <div id="apply">
-    <!-- <a-tab-pane key="apply" tab="我的申请">
-      <div v-for="item in applyList" :key="item.id"> -->
-
-    <a-card
-      style="width: 100%;
-                border-radius:20px;
-                text-align:left;
-                marginBottom:20px;
-                border:none;
-                background-color:rgba(247, 224, 212,.8);">
-      <p style="fontSize:16px;fontWeight:700;color:#092834;">
-        <a-icon type="highlight" class="cardIcon" />
-        {{ item.processName }}
-      </p>
-      <p>当前审批环节:{{ item.currTaskName }}</p>
-      <p>创建时间:{{ item.createTime }}</p>
-
-      <!-- 申请状态 -->
-      <p>
-        状态:
-        <span
-          v-if="item.status == 0"
-          class="statusComm"
-          style="background:rgb(9, 40, 52,.1);">
-          草稿
-        </span>
-
-        <span
-          v-if="item.status == 1"
-          class="statusComm"
-          style="background:rgb(252, 96, 10,.2);">
-          处理中
-        </span>
-
-        <span
-          v-if="item.status == 2"
-          class="statusComm"
-          style="background:rgb(9, 40, 52,.2);">
-          已结束
-        </span>
-
-        <span
-          v-if="item.status == 3"
-          class="statusComm"
-          style="background:rgb(9, 40, 52,.1);">
-          已撤回
-        </span>
-      </p>
-
-      <!-- 申请结果 -->
-      <p style="float:left;">
-        结果:
-
-        <span class="resultComm" v-if="item.result == 0" style="background:rgba(52, 123, 152,.7);">
-          未提交
-        </span>
-
-        <span class="resultComm" v-else-if="item.result == 1" style="background:rgb(252, 96, 10,.8);">
-          处理中
-        </span>
-
-        <span class="resultComm" v-else-if="item.result == 2" style="background:rgb(9, 40, 52,.8);">
-          通过
-        </span>
-
-        <span class="resultComm" v-else-if="item.result == 3" style="background:rgba(9, 40, 52,.7);">
-          驳回
-        </span>
-      </p>
-
-      <p style="float:right;">发起人:{{ item.createBy }}</p>
-
-      <a-divider style="background:rgba(128, 128, 128,.1);"></a-divider>
-    </a-card>
-    <!-- </div>
-    </a-tab-pane> -->
-  </div>
-</template>
-
-<script>
-export default {}
-</script>
-
-<style src="@assets/less/overwrite.less" lang="less" scoped></style>
-<style lang="less">
-@import '~@assets/less/common.less';
-</style>
-<style lang="less" scoped></style>

+ 0 - 99
src/views/user/todoNav/Done.vue

@@ -1,99 +0,0 @@
-<template>
-  <div id="done">
-    <!-- <a-tab-pane key="done" tab="我的已办">
-      <div v-for="item in doneList" :key="item.id"> -->
-        <a-card
-          style="width: 100%;
-                border-radius:20px;
-                text-align:left;
-                marginBottom:20px;
-                border:none;
-                background-color:rgba(247, 224, 212,.8);"
-        >
-          <p style="fontSize:16px;fontWeight:700;color:#092834;">
-            <img
-              src="@assets/look.png"
-              width="30px;"
-              alt="????"
-              style="background: rgb(34,193,195);
-                           background: linear-gradient(0deg, rgba(34,193,195,1) 0%,
-                           rgba(253,187,45,1) 100%);borderRadius:6px;"
-            />
-            {{ item.processName }}
-          </p>
-          <p>任务名称:{{ item.name }}</p>
-          <p>创建时间:{{ item.createTime }}</p>
-
-          <!-- 审批操作 -->
-          <p style="float:left;">
-            审批操作:
-            <span
-              style="background:rgba(20, 137, 184,.3);
-                    padding:4px 10px;
-                    borderRadius:2px;
-                    letterSpacing:1px;
-                    color: #092834;"
-            >
-              {{ item.deleteReason }}
-            </span>
-          </p>
-          <p style="float:right;">发起人:{{ item.applyer }}</p>
-
-          <a-divider style="background:rgba(128, 128, 128,.1);"></a-divider>
-
-          <!-- 操作按钮 -->
-          <div class="operation">
-            <p style="fontSize:16px;fontWeight:700;color:#092834;">
-              <img src="@assets/down.png" width="30px;" alt="???? " />
-              操作
-            </p>
-
-            <div class="btns">
-              <a-button
-                class="itemBtn"
-                ghost
-                @click="detail(item)"
-                style="box-shadow: 8px 8px 8px rgba(128, 128, 128,.9);
-                      color:#4e73b9;"
-              >
-                表单数据
-              </a-button>
-
-              <a-button
-                class="itemBtn"
-                ghost
-                @click="Donehistory(item.id)"
-                style="color:gray;box-shadow: 4px 4px 4px rgba(128, 128, 128,.9);color#f2c617;position:absolute;right:0;marginRight:0;"
-              >
-                审批历史
-              </a-button>
-
-              <a-popconfirm title="确定删除吗?">
-                <a-button
-                  class="itemBtn mid"
-                  ghost
-                  @click="remove(item.id)"
-                  style="color:gray;box-shadow: 5px 5px 5px rgba(128, 128, 128,.7);color:red;"
-                >
-                  删除
-                </a-button>
-              </a-popconfirm>
-            </div>
-          </div>
-        </a-card>
-      <!-- </div>
-    </a-tab-pane> -->
-  </div>
-</template>
-
-<script>
-export default {
-  
-}
-</script>
-
-<style src="@assets/less/overwrite.less" lang="less" scoped></style>
-<style lang="less">
-@import '~@assets/less/common.less';
-</style>
-<style lang="less" scoped></style>

+ 0 - 240
src/views/user/todoNav/Wait.vue

@@ -1,240 +0,0 @@
-<template>
-  <div id="wait">
-    <!-- <a-tab-pane key="wait" tab="我的待办" force-render>
-      <div v-for="item in todoList" :key="item.id"> -->
-        <a-card
-          style="width: 100%;
-                borderRadius:20px;
-                text-align:left;
-                marginBottom:20px;
-                border:none;
-                background-color:rgba(247, 224, 212,.8);"
-        >
-          <p style="fontSize:16px;fontWeight:700;color:#092834;">
-            <img src="@assets/look.png" width="30px;" alt="????" />
-            {{ item.processName }}
-          </p>
-          <p>任务名称:{{ item.name }}</p>
-          <p>创建时间:{{ item.createTime }}</p>
-          <!-- 优先级 -->
-          <p>
-            优先级:
-            <span
-              class="priorityComm"
-              v-if="item.priority == 0"
-              style="background:rgba(252, 96, 10,.4);
-                    padding:2px 6px;
-                    borderRadius:2px;
-                    color:#092834;"
-            >
-              普通
-            </span>
-            <span
-              class="priorityComm"
-              v-else-if="item.priority == 1"
-              style="background:#FC600A;
-                    padding:4px 10px;
-                    borderRadius:6px;
-                    color:white;"
-            >
-              重要
-            </span>
-
-            <span
-              class="priorityComm"
-              v-else-if="item.priority == 2"
-              style="background:red;
-                    padding:4px 10px;
-                    borderRadius:6px;
-                    color:white;"
-            >
-              紧急
-            </span>
-            <span class="priorityComm" v-else style="background:#999;">
-              无
-            </span>
-          </p>
-
-          <!-- 状态 -->
-          <p style="float:left;marginBottom:30px;">
-            状态:
-            <span v-if="item.isSuspended == false" style="background:rgba(252, 96, 10,.8);" class="resultComm">
-              已激活
-            </span>
-            <span v-if="item.isSuspended == true" style="background:rgba(20, 137, 184,.8);" class="resultComm">
-              已挂起
-            </span>
-            {{ item.status }}
-          </p>
-
-          <!-- 发起人 -->
-          <p style="float:right;marginBottom:30px;">发起人:{{ item.applyer }}</p>
-
-          <a-divider style="background:rgba(128, 128, 128,.1);"></a-divider>
-
-          <!-- 操作按钮 -->
-          <div class="operation">
-            <p style="fontSize:16px;fontWeight:700;color:#092834;">
-              <img src="@assets/down.png" width="30px;" alt="???? " />
-              操作
-            </p>
-
-            <div class="btns">
-              <a-button
-                class="itemBtn"
-                ghost
-                @click="detail(item)"
-                style="box-shadow: 8px 8px 8px rgba(128, 128, 128,.9);
-                      color:#4e73b9;"
-              >
-                详情
-              </a-button>
-
-              <!-- 挂起状态 按钮不可以 -->
-              <span
-                v-if="item.isSuspended == true"
-                style="cursor: no-drop;color: #999999;"
-                title="流程已被挂起,无法操作!"
-              >
-                <a-button class="itemBtn" disabled>通过</a-button>
-                <a-button class="itemBtn" disabled>驳回</a-button>
-                <a-button class="itemBtn" disabled>历史</a-button>
-              </span>
-
-              <!-- 激活状态 -->
-              <span v-else>
-                <a-button
-                  class="itemBtn mid"
-                  ghost
-                  @click="passTask(item.id)"
-                  style="box-shadow: 8px 8px 8px rgba(128, 128, 128,.9);
-                        color:#4e73b9;"
-                >
-                  通过
-                </a-button>
-
-                <a-button
-                  class="itemBtn mid"
-                  ghost
-                  @click="backTask(item.id)"
-                  style="color:gray;box-shadow: 5px 5px 5px rgba(128, 128, 128,.7);color:#ea472c;"
-                >
-                  驳回
-                </a-button>
-
-                <a-button
-                  class="itemBtn mid"
-                  ghost
-                  @click="delegateTask(item.id)"
-                  style="color:gray;box-shadow: 6px 6px 6px rgba(128, 128, 128,.7);color:orange;"
-                >
-                  委托
-                </a-button>
-              </span>
-
-              <a-button
-                class="itemBtn"
-                ghost
-                @click="history(item.id)"
-                style="color:gray;box-shadow: 4px 4px 4px rgba(128, 128, 128,.9);color#f2c617;position:absolute;right:0;marginRight:0;"
-              >
-                历史
-              </a-button>
-            </div>
-          </div>
-        </a-card>
-
-        <!-- 审批历史 -->
-        <a-modal title="审批历史" v-model="modalLsVisible" :mask-closable="false" :width="'80%'" :footer="null">
-          <div v-if="modalLsVisible">
-            <component :is="historicDetail" :procInstId="procInstId"></component>
-          </div>
-        </a-modal>
-
-        <!--流程表单-->
-        <a-modal :title="lcModal.title" v-model="lcModal.visible" :footer="null" :maskClosable="false" width="100%">
-          <component
-            :disabled="lcModal.disabled"
-            v-if="lcModal.visible"
-            :is="lcModal.formComponent"
-            :processData="lcModal.processData"
-            :isNew="lcModal.isNew"
-            @close=";(lcModal.visible = false), (lcModal.disabled = false)"
-            @getDataList="getDataList"
-          ></component>
-        </a-modal>
-
-        <!-- 审批操作 -->
-        <a-modal :title="modalTaskTitle" v-model="modalTaskVisible" :mask-closable="false" :width="500">
-          <div v-if="modalTaskVisible">
-            <a-form ref="form" :model="form" :label-width="85" :rules="formValidate">
-              <a-form-item label="审批意见" prop="reason">
-                <a-input type="textarea" v-model="form.comment" :rows="4" />
-              </a-form-item>
-              <a-form-item label="下一审批人" prop="assignees" v-show="showAssign" :error="error">
-                <a-select
-                  v-model="form.assignees"
-                  placeholder="请选择"
-                  allowClear
-                  mode="multiple"
-                  :loading="userLoading"
-                >
-                  <a-select-option v-for="(item, i) in assigneeList" :key="i" :value="item.username">{{
-                    item.realname
-                  }}</a-select-option>
-                </a-select>
-              </a-form-item>
-              <a-form-item label="下一审批人" v-show="isGateway">
-                <span>分支网关处暂不支持自定义选择下一审批人,将发送给下一节点所有人</span>
-              </a-form-item>
-              <div v-show="form.type == 1">
-                <a-form-item label="驳回至">
-                  <a-select v-model="form.backTaskKey" :loading="backLoading" @change="changeBackTask">
-                    <a-select-option v-for="(item, i) in backList" :key="i" :value="item.key">{{
-                      item.name
-                    }}</a-select-option>
-                  </a-select>
-                </a-form-item>
-                <a-form-item label="指定原节点审批人" prop="assignees" v-show="form.backTaskKey != -1" :error="error">
-                  <a-select
-                    v-model="form.assignees"
-                    placeholder="请选择"
-                    allowClear
-                    mode="multiple"
-                    :loading="userLoading"
-                  >
-                    <a-select-option v-for="(item, i) in assigneeList" :key="i" :value="item.id">{{
-                      item.username
-                    }}</a-select-option>
-                  </a-select>
-                </a-form-item>
-              </div>
-              <a-form-item label="选择委托人" prop="userId" :error="error" v-show="form.type == 2">
-                <JSelectUserByDep v-model="form.userId" :multi="false"></JSelectUserByDep>
-              </a-form-item>
-              <a-form-item label="消息通知">
-                <a-checkbox v-model="form.sendMessage">站内消息通知</a-checkbox>
-                <a-checkbox v-model="form.sendSms" disabled>短信通知</a-checkbox>
-                <a-checkbox v-model="form.sendEmail" disabled>邮件通知</a-checkbox>
-              </a-form-item>
-            </a-form>
-          </div>
-          <div slot="footer">
-            <a-button type="text" @click="modalTaskVisible = false">取消</a-button>
-            <a-button type="primary" :loading="submitLoading" @click="handelSubmit">提交</a-button>
-          </div>
-        </a-modal>
-      <!-- </div>
-    </a-tab-pane> -->
-  </div>
-</template>
-
-<script>
-export default {}
-</script>
-
-<style src="@assets/less/overwrite.less" lang="less" scoped></style>
-<style lang="less">
-@import '~@assets/less/common.less';
-</style>
-<style lang="less" scoped></style>

Bu fark içinde çok fazla dosya değişikliği olduğu için bazı dosyalar gösterilmiyor