Sfoglia il codice sorgente

工作流管理 增加历史数据归档

liuyanpeng 2 anni fa
parent
commit
7930767b98

+ 4 - 4
.babelrc

@@ -1,10 +1,10 @@
 {
   "presets": [
-    "@babel/env",
-    "@vue/babel-preset-jsx"
+    "@babel/env"
+    // "@vue/babel-preset-jsx",
     // ["env", { "modules": false }],
     // "stage-3", 
     // "es2015"
-  ],
-  "plugins": ["@vue/babel-plugin-jsx"]
+  ]
+  // "plugins": ["@vue/babel-plugin-jsx"]
 }

+ 20 - 0
src/api/workflow/workflow.js

@@ -22,3 +22,23 @@ export const ajaxApi = (url, datas) => {
     });
   });
 };
+
+export const ajaxApiGet = (url, datas) => {
+  return new Promise((resolve, reject) => {
+    $.ajax({
+      url: Common.getApiUrl2(url),
+      type: 'get',
+      contentType: 'application/json',
+      beforeSend: function (request) {
+        Common.addTokenToRequest(request);
+      },
+      success: function (data) {
+        resolve(data);
+      },
+      error: function (XMLHttpRequest, textStatus, errorThrown) {
+        reject(XMLHttpRequest);
+      },
+    });
+  });
+};
+

+ 503 - 0
src/workflow/ApprovedWorkflowOld.vue

@@ -0,0 +1,503 @@
+<template>
+  <div>
+    <div class="container-fluid">
+      <div class="row m-row">
+        <div class="col-md-12 col-sm-12 col-xs-12">
+          <input
+            v-model="taskQueryParam.condition"
+            autocomplete="off"
+            type="text"
+            :placeholder="$t('lang.ApprovedWorkflow.describe1')"
+            class="form-control"
+          />
+        </div>
+      </div>
+
+      <div
+        v-if="taskQueryParam.advancedQuery"
+        class="row m-row"
+      >
+        <div class="col-md-2 col-sm-2 col-xs-4">
+          <label class="form-control-static">{{ $t("lang.ApprovedWorkflow.startTime") }}</label>
+        </div>
+
+        <div class="col-md-5 col-sm-5 col-xs-4">
+          <DateTime
+            v-model="startAfter"
+          />
+        </div>
+
+        <div class="col-md-5 col-sm-5 col-xs-4">
+          <DateTime
+            v-model="startBefore"
+          />
+        </div>
+      </div>
+
+      <div
+        v-if="taskQueryParam.advancedQuery"
+        class="row m-row"
+      >
+        <div class="col-md-2 col-sm-2 col-xs-4">
+          <label class="form-control-static">{{ $t("lang.ApprovedWorkflow.completionTime") }}</label>
+        </div>
+
+        <div class="col-md-5 col-sm-5 col-xs-4">
+          <DateTime
+            v-model="finishAfter"
+          />
+        </div>
+
+        <div class="col-md-5 col-sm-5 col-xs-4">
+          <DateTime
+            v-model="finishBefore"
+          />
+        </div>
+      </div>
+
+      <div
+        v-if="taskQueryParam.advancedQuery"
+        class="row m-row"
+      >
+        <div class="col-md-2 col-sm-2 col-xs-4">
+          <label class="form-control-static">{{ $t("lang.ApprovedWorkflow.approvalOriginator") }}</label>
+        </div>
+        <div class="col-md-10 col-sm-10 col-xs-8">
+          <input
+            id="applyUser"
+            v-model="userName"
+            autocomplete="off"
+            type="text"
+            class="form-control"
+          />
+        </div>
+      </div>
+
+      <div class="row m-row">
+        <div class="col-md-2 col-sm-2 col-xs-4">
+          <label class="form-control-static">{{ $t("lang.ApprovedWorkflow.subject") }}</label>
+        </div>
+        <div class="col-md-10 col-sm-10 col-xs-8">
+          <select
+            v-model="deploymentId"
+            class="form-control"
+          >
+            <option value="">{{ $t("lang.ApprovedWorkflow.all") }}</option>
+            <option
+              v-for="item in approveType"
+              :key="item.deploymentId"
+              :value="item.deploymentId"
+            >
+              {{ item.name }}
+            </option>
+          </select>
+        </div>
+      </div>
+
+      <div class="row m-row">
+        <div class="col-md-12 col-sm-12 col-xs-10">
+          <button
+            role="button"
+            target="_self"
+            class="btn btn-primary"
+            @click="searchApproved()"
+          >
+            {{ $t("lang.ApprovedWorkflow.search") }}
+          </button>
+          <a
+            class="form-label"
+            @click="taskQueryParam.advancedQuery = !taskQueryParam.advancedQuery"
+          >{{ (taskQueryParam.advancedQuery) ? $t("lang.ApprovedWorkflow.closeAdvancedSearch") : $t("lang.ApprovedWorkflow.advancedSearch") }}</a>
+          <a
+            id="clearSearchCondition"
+            class="form-label"
+            @click="clean()"
+          >{{ $t("lang.ApprovedWorkflow.clearSearchCriteria") }}</a>
+          <span id="choiceStatus">
+            <button
+              class="btn"
+              :class="{&quot;btn-info active&quot;: taskQueryParam.processStatusQuery == &quot;ALL&quot;}"
+              @click="choiceStatus('ALL')"
+            >{{ $t("lang.ApprovedWorkflow.all") }}</button>
+            <button
+              class="btn"
+              :class="{&quot;btn-info active&quot;: taskQueryParam.processStatusQuery == &quot;FINISH&quot;}"
+              @click="choiceStatus('FINISH')"
+            >{{ $t("lang.ApprovedWorkflow.done") }}</button>
+            <button
+              class="btn"
+              :class="{&quot;btn-info active&quot;: taskQueryParam.processStatusQuery == &quot;RUNNING&quot;}"
+              @click="choiceStatus('RUNNING')"
+            >{{ $t("lang.ApprovedWorkflow.inProcess") }}</button>
+          </span>
+        </div>
+      </div>
+
+      <div class="row m-row">
+        <div class="table-responsive">
+          <table class="table table-bordered table-hover">
+            <thead>
+              <tr>
+                <td>{{ $t("lang.ApprovedWorkflow.documentCode") }}</td>
+                <td>{{ $t("lang.ApprovedWorkflow.subject") }}</td>
+                <td>{{ $t("lang.ApprovedWorkflow.approvalSummary") }}</td>
+                <td>{{ $t("lang.ApprovedWorkflow.originatingTime") }}</td>
+                <td>{{ $t("lang.ApprovedWorkflow.completionTime") }}</td>
+                <td>{{ $t("lang.ApprovedWorkflow.status") }}</td>
+              </tr>
+            </thead>
+            <tbody>
+              <tr
+                v-for="item in historicTaskInfos.historicTaskInfos"
+                :key="item.id"
+                class="m-tr"
+                @click="selectTaskInfo(item)"
+              >
+                <td>
+                  {{ item.no }}
+                </td>
+                <!-- <td>
+                  {{ item.title }}
+                </td>
+                <td>
+                  <span style="white-space: pre-line">{{ item.content }}</span>
+                </td> -->
+                <td>
+                  <span v-if="item.category != 'CurdWindow'">
+                    {{ item.name }}
+                  </span>
+                  <span v-else>
+                    {{ item.title }}
+                  </span>
+                </td>
+                <td>
+                  <span v-if="item.category != 'CurdWindow'" style="white-space: pre-line">{{ item.description }}</span>
+                  <span v-else style="white-space: pre-line">{{ item.content }}</span>
+                </td>
+                <td>
+                  {{ item.startDate }}
+                </td>
+                <td>
+                  {{ item.endDate }}
+                </td>
+                <td>
+                  {{ item.documentStatus == '进行中' ? $t("lang.ApprovedWorkflow.inProcess"):$t("lang.ApprovedWorkflow.done") }}
+                </td>
+              </tr>
+            </tbody>
+          </table>
+        </div>
+      </div>
+      <VueBootstrapPagination
+        :pagination="pagination"
+        :callback="changePage"
+      />
+    </div>
+    <Loading v-if="loading" />
+  </div>
+</template>
+
+<script>
+import Common from '../common/Common.js';
+
+
+
+
+import FrameWindow from '../widget/FrameWindow.vue';
+import WindowService from '../common/WindowService.js';
+import { Notify, Uuid } from 'pc-component-v3';
+import TaskOpenUtil from './TaskOpenUtil.js';
+import * as dayjs from 'dayjs';
+
+
+export default {
+
+  components: {
+  },
+  data: function () {
+    return {
+      'defaultStartAfter': '',   //默认开始日期
+      'defaultStartBefore': '',
+      'defaultFinishAfter': '',   //默认结束日期
+      'defaultFinishBefore': '',
+      'startAfter': '',          //开始日期
+      'startBefore': '',
+      'finishAfter': '',          //结束日期
+      'finishBefore': '',
+      'taskQueryParam': { 'processStatusQuery': 'ALL' },    	//查询条件       
+      'historicTaskInfos': [],
+      'deploymentId': '',
+      'userName': '',
+      'approveType': [],
+      pagination: {
+        total: 0,
+        per_page: 20,    // required
+        current_page: 1, // required
+        last_page: 0,    // required
+      },
+      loading: false,
+    };
+  },
+  mounted: function () {
+    this.init();
+  },
+
+  methods: {
+    // 加载数据
+    init: function () {
+      var _self = this;
+      _self.loading=true;
+      _self.defaultStartAfter = dayjs().add(-1, 'month').format('YYYY-MM-DD HH:mm:ss');
+      _self.defaultStartBefore = dayjs().format('YYYY-MM-DD HH:mm:ss');
+      _self.defaultFinishAfter = dayjs().add(-1, 'month').format('YYYY-MM-DD HH:mm:ss');
+      _self.defaultFinishBefore = dayjs().format('YYYY-MM-DD HH:mm:ss');
+      _self.taskQueryParam = {
+        'condition': '',         //查询条件(主题、文件编码、正文内容、审批意见).
+        'startAfter': _self.defaultStartAfter,
+        'startBefore': _self.defaultStartBefore,
+        'advancedQuery': false,    //是否高级查询
+        //"startUserId" : "",     //审批单发起人
+        'deploymentId': '',      //工作流部署Id
+        'processStatusQuery': 'ALL',  //审批状态
+        'range': {               //查询区间
+          'length': 100,
+          'start': 0,
+        },
+      };
+      console.log(JSON.stringify(_self.taskQueryParam));
+      $.ajax({
+        url: Common.getApiURL('WorkflowResource/approveType'),
+        type: 'GET',
+        dataType: 'json',
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          _self.loading=false;
+          _self.approveType = data;
+          _self.searchApproved();
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          _self.loading=false;
+          Common.processException(XMLHttpRequest, textStatus, errorThrown);
+        },
+      });
+    },
+    getStartUserId: function () {
+      var _self = this;
+      _self.loading=true;
+      if (_self.userName != null && _self.userName != '') {
+        var infoQueryParam = {};
+        infoQueryParam.infoWindowNo = 11531;
+        infoQueryParam.start = 0;
+        infoQueryParam.length = 1;
+        infoQueryParam.sortClause = '';
+        infoQueryParam.infoFilterFieldValues = [];
+        infoQueryParam.infoFilterFieldValues[0] = {};
+        infoQueryParam.infoFilterFieldValues[0].infoFilterFieldId = 11532;
+        infoQueryParam.infoFilterFieldValues[0].value1 = _self.userName;
+        $.ajax({
+          url: Common.getApiURL('InfoWindowResource/QueryInfoWindowData2'),
+          type: 'post',
+          dataType: 'json',
+          beforeSend: function (request) {
+            Common.addTokenToRequest(request);
+          },
+          contentType: 'application/json',
+          data: JSON.stringify(infoQueryParam),
+          async: false,
+          success: function (data) {
+            _self.loading=false;
+            _self.taskQueryParam.startUserId = '';
+            if (data.dataList[0].id != null) {
+              _self.taskQueryParam.startUserId = data.dataList[0].id;
+            }
+
+          },
+          error: function (XMLHttpRequest, textStatus, errorThrown) {
+            _self.loading=false;
+            _self.$refs.common.processException(XMLHttpRequest, textStatus, errorThrown);
+          },
+        });
+      }
+    },
+    searchApproved: function () {
+      var _self = this;
+      _self.loading=true;
+      _self.taskQueryParam.range.start = 0;
+      _self.taskQueryParam.range.length = _self.pagination.per_page;
+      _self.pagination.current_page = 1;
+      _self.taskQueryParam.startAfter = _self.defaultStartAfter;
+      _self.taskQueryParam.startBefore = _self.defaultStartBefore;
+      _self.taskQueryParam.finishAfter = _self.defaultFinishAfter;
+      _self.taskQueryParam.finishBefore = _self.defaultFinishBefore;
+      _self.taskQueryParam.deploymentId = _self.deploymentId;
+      if (_self.taskQueryParam.advancedQuery) {
+        _self.getStartUserId();
+        _self.taskQueryParam.startAfter = _self.startAfter;
+        _self.taskQueryParam.startBefore = _self.startBefore;
+        _self.taskQueryParam.finishAfter = _self.finishAfter;
+        _self.taskQueryParam.finishBefore = _self.finishBefore;
+      }
+      console.log(JSON.stringify(_self.taskQueryParam));
+      $.ajax({
+        url: Common.getApiURL('WorkflowResource/approved'),
+        type: 'post',
+        dataType: 'json',
+        contentType: 'application/json',
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        data: JSON.stringify(_self.taskQueryParam),
+        success: function (data) {
+          _self.loading=false;
+          _self.historicTaskInfos = data;
+          _self.historicTaskInfos.historicTaskInfos.forEach(item => {
+            try{
+              var content = JSON.parse(item.content);
+              var parentForm = '';
+              content.parentForm.forEach(item => {
+                parentForm =parentForm + item.title+':'+item.content+',\n';
+              });
+              item.content = parentForm;
+            // eslint-disable-next-line no-empty
+            }catch(e){
+              
+            }
+          });
+          _self.pagination.total = data.totalCount;
+          _self.pagination.last_page = Math.ceil(data.totalCount / _self.taskQueryParam.range.length);
+          console.log('totalCount=' + _self.pagination.total);
+          console.log('totalPage=' + _self.pagination.last_page);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          _self.loading=false;
+          Common.processException(XMLHttpRequest, textStatus, errorThrown);
+        },
+      });
+
+    },
+    //是否开启高级查询
+    isAdvancedQuery: function (flag) {
+      let _self = this;
+      _self.taskQueryParam.advancedQuery = flag;
+      if (!flag) {
+        //初始化日期
+        _self.taskQueryParam.startAfter = _self.defaultStartAfter;
+        _self.taskQueryParam.startBefore = _self.defaultStartBefore;
+
+      }
+    },
+    showTaskInfo: function (id) {
+      var _self = this;
+      _self.taskInfoId = id;
+
+    },
+    clean: function () {   //清空搜索条件
+      var _self = this;
+      _self.userName = '';
+      _self.taskQueryParam.condition = '';
+      _self.defaultStartAfter = dayjs().add(-1, 'month').format('YYYY-MM-DD HH:mm:ss');
+      _self.defaultStartBefore = dayjs().format('YYYY-MM-DD HH:mm:ss');
+      _self.defaultFinishAfter = dayjs().add(-1, 'month').format('YYYY-MM-DD HH:mm:ss');
+      _self.defaultFinishBefore = dayjs().format('YYYY-MM-DD HH:mm:ss');
+      _self.startAfter = '';
+      _self.startBefore = '';
+      _self.finishAfter = '';
+      _self.finishBefore = '';
+    },
+    choiceStatus: function (status) {
+      this.taskQueryParam.processStatusQuery = status;
+      this.searchApproved();
+    },
+    changePage: function () {
+      var _self = this;
+      _self.loading=true;
+      _self.taskQueryParam.range.start = _self.pagination.per_page * (parseInt(_self.pagination.current_page) - 1);
+      _self.taskQueryParam.startAfter = _self.defaultStartAfter;
+      _self.taskQueryParam.startBefore = _self.defaultStartBefore;
+      _self.taskQueryParam.finishAfter = _self.defaultFinishAfter;
+      _self.taskQueryParam.finishBefore = _self.defaultFinishBefore;
+      if (_self.taskQueryParam.advancedQuery) {
+        _self.taskQueryParam.startAfter = _self.startAfter;
+        _self.taskQueryParam.startBefore = _self.startBefore;
+        _self.taskQueryParam.finishAfter = _self.finishAfter;
+        _self.taskQueryParam.finishBefore = _self.finishBefore;
+      }
+      console.log(JSON.stringify(_self.taskQueryParam));
+      $.ajax({
+        url: Common.getApiURL('WorkflowResource/approved'),
+        type: 'post',
+        dataType: 'json',
+        contentType: 'application/json',
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        data: JSON.stringify(_self.taskQueryParam),
+        success: function (data) {
+          _self.loading=false;
+          _self.historicTaskInfos = data;
+          _self.historicTaskInfos.historicTaskInfos.forEach(item => {
+            try{
+              var content = JSON.parse(item.content);
+              var parentForm = '';
+              content.parentForm.forEach(item => {
+                parentForm =parentForm + item.title+':'+item.content+',\n';
+              });
+              item.content = parentForm;
+            // eslint-disable-next-line no-empty
+            }catch(e){
+              
+            }
+            
+          });
+          _self.pagination.total = data.totalCount;
+          _self.pagination.last_page = Math.ceil(data.totalCount / _self.taskQueryParam.range.length);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          _self.loading=false;
+          _self.$refs.common.processException(XMLHttpRequest, textStatus, errorThrown);
+        },
+      });
+    },
+
+
+    
+    // 选择了taskInfo
+    selectTaskInfo: function (taskInfo) {
+      let _self = this;
+      TaskOpenUtil.openHistoryTask(taskInfo).then(successData => {
+        if(successData.type === 'newWindow'){
+          WindowService.open(successData.url, '已处理的', function(){
+            _self.$emit('refreshStasticCount');
+            _self.searchApproved();
+          });
+        }else if(successData.type === 'customerTask'){
+          // 打开自定义的界面
+          _self.selectedTaskId = taskInfo.id;
+          _self.$refs.customerTask.show();
+          _self.$emit('refreshStasticCount');
+          _self.searchApproved();
+        }
+      }, errorData => {
+        if(errorData != null){
+          Notify.error(errorData.title, errorData.message, false);
+        }
+      });
+    },
+
+
+  },
+};
+</script>
+
+<style scoped>
+.form-label {
+    margin-left: 10px;
+    cursor: pointer;
+}
+
+.m-tr {
+    cursor: pointer;
+}
+</style>

+ 569 - 0
src/workflow/CopyTaskWorkflowOld.vue

@@ -0,0 +1,569 @@
+<template>
+  <div>
+    <div class="container-fluid">
+      <div class="row m-row">
+        <div class="col-md-12 col-sm-12 col-xs-12">
+          <input
+            v-model="taskQueryParam.condition"
+            autocomplete="off"
+            type="text"
+            :placeholder="$t('lang.CopyTaskWorkflow.describe1')"
+            class="form-control"
+          />
+        </div>
+      </div>
+
+      <div
+        v-if="taskQueryParam.advancedQuery"
+        class="row m-row"
+      >
+        <div class="col-md-2 col-sm-2 col-xs-4">
+          <label class="form-control-static">{{ $t("lang.CopyTaskWorkflow.startTime") }}</label>
+        </div>
+
+        <div class="col-md-5 col-sm-5 col-xs-4">
+          <DateTime v-model="startAfter" />
+        </div>
+
+        <div class="col-md-5 col-sm-5 col-xs-4">
+          <DateTime v-model="startBefore" />
+        </div>
+      </div>
+
+      <div
+        v-if="taskQueryParam.advancedQuery"
+        class="row m-row"
+      >
+        <div class="col-md-2 col-sm-2 col-xs-4">
+          <label class="form-control-static">{{ $t("lang.CopyTaskWorkflow.completionTime") }}</label>
+        </div>
+
+        <div class="col-md-5 col-sm-5 col-xs-4">
+          <DateTime v-model="finishAfter" />
+        </div>
+
+        <div class="col-md-5 col-sm-5 col-xs-4">
+          <DateTime v-model="finishBefore" />
+        </div>
+      </div>
+
+      <div
+        v-if="taskQueryParam.advancedQuery"
+        class="row m-row"
+      >
+        <div class="col-md-2 col-sm-2 col-xs-4">
+          <label class="form-control-static">{{ $t("lang.CopyTaskWorkflow.approvalOriginator") }}</label>
+        </div>
+        <div class="col-md-10 col-sm-10 col-xs-8">
+          <input
+            id="applyUser"
+            v-model="userName"
+            autocomplete="off"
+            type="text"
+            class="form-control"
+          />
+        </div>
+      </div>
+
+      <div class="row m-row">
+        <div class="col-md-2 col-sm-2 col-xs-4">
+          <label class="form-control-static">{{ $t("lang.CopyTaskWorkflow.subject") }}</label>
+        </div>
+        <div class="col-md-10 col-sm-10 col-xs-8">
+          <select
+            v-model="deploymentId"
+            class="form-control"
+          >
+            <option value="">{{ $t("lang.CopyTaskWorkflow.all") }}</option>
+            <option
+              v-for="item in approveType"
+              :key="item.deploymentId"
+              :value="item.deploymentId"
+            >
+              {{ item.name }}
+            </option>
+          </select>
+        </div>
+      </div>
+
+      <div class="row m-row">
+        <div class="col-md-12 col-sm-12 col-xs-10">
+          <button
+            role="button"
+            target="_self"
+            class="btn btn-primary"
+            @click="searchCopyTask()"
+          >
+            {{ $t("lang.CopyTaskWorkflow.search") }}
+          </button>
+          <a
+            class="form-label"
+            @click="taskQueryParam.advancedQuery = !taskQueryParam.advancedQuery"
+          >
+
+            {{ (taskQueryParam.advancedQuery) ? $t("lang.CopyTaskWorkflow.closeAdvancedSearch") : $t("lang.CopyTaskWorkflow.advancedSearch") }}
+
+          </a>
+          <a
+            id="clearSearchCondition"
+            class="form-label"
+            @click="clean()"
+          >{{ $t("lang.CopyTaskWorkflow.clearSearchCriteria") }}</a>
+          <span id="choiceStatus">
+            <button
+              class="btn"
+              :class="{&quot;btn-info active&quot;: taskQueryParam.processStatusQuery == &quot;ALL&quot;}"
+              @click="choiceStatus('ALL')"
+            >{{ $t("lang.CopyTaskWorkflow.all") }}</button>
+            <button
+              class="btn"
+              :class="{&quot;btn-info active&quot;: taskQueryParam.processStatusQuery == &quot;FINISH&quot;}"
+              @click="choiceStatus('FINISH')"
+            >{{ $t("lang.CopyTaskWorkflow.completed") }}</button>
+            <button
+              class="btn"
+              :class="{&quot;btn-info active&quot;: taskQueryParam.processStatusQuery == &quot;RUNNING&quot;}"
+              @click="choiceStatus('RUNNING')"
+            >{{ $t("lang.CopyTaskWorkflow.haveInHand") }}</button>
+            <a-button type="link" @click="completeApproval">全部完成审阅</a-button>
+          </span>
+        </div>
+      </div>
+
+      <div class="row m-row">
+        <div class="table-responsive">
+          <table class="table table-bordered table-hover">
+            <thead>
+              <tr>
+                <td>{{ $t("lang.CopyTaskWorkflow.documentCode") }}</td>
+                <td>{{ $t("lang.CopyTaskWorkflow.subject") }}</td>
+                <td>{{ $t("lang.CopyTaskWorkflow.approvalSummary") }}</td>
+                <td>{{ $t("lang.CopyTaskWorkflow.originatingTime") }}</td>
+                <td>{{ $t("lang.CopyTaskWorkflow.completionTime") }}</td>
+                <td>{{ $t("lang.CopyTaskWorkflow.status") }}</td>
+              </tr>
+            </thead>
+            <tbody>
+              <tr
+                v-for="item in copyTaskInfos.copyTaskInfo"
+                :key="item.id"
+                class="m-tr"
+                @click="selectTaskInfo(item)"
+              >
+                <td>
+                  {{ item.no }}
+                </td>
+                <td>
+                  {{ item.title }}
+                </td>
+                <td>
+                  <span style="white-space: pre-line">{{ item.content }}</span>
+                </td>
+                <td>
+                  {{ item.startDate }}
+                </td>
+                <td>
+                  {{ item.endDate }}
+                </td>
+                <td>
+                  {{ item.documentStatus }}
+                </td>
+              </tr>
+            </tbody>
+          </table>
+        </div>
+      </div>
+      <VueBootstrapPagination
+        :pagination="pagination"
+        :callback="changePage"
+      />
+    </div>
+    <Loading v-if="loading" />
+  </div>
+</template>
+
+<script>
+import Common from '../common/Common.js';
+import WindowService from '../common/WindowService.js';
+import TaskOpenUtil from './TaskOpenUtil.js';
+import { Notify, Uuid } from 'pc-component-v3';
+import * as dayjs from 'dayjs';
+
+export default {
+
+  components: {
+  },
+  emits:['refreshStasticCount'],
+  data: function () {
+    return {
+      defaultStartAfter: '', //默认开始日期
+      defaultStartBefore: '',
+      defaultFinishAfter: '', //默认结束日期
+      defaultFinishBefore: '',
+      startAfter: '', //开始日期
+      startBefore: '',
+      finishAfter: '', //结束日期
+      finishBefore: '',
+      taskQueryParam: { processStatusQuery: 'ALL' }, //查询条件
+      copyTaskInfos: '',
+      deploymentId: '',
+      userName: '',
+      approveType: [],
+      pagination: {
+        total: 0,
+        per_page: 12, // required
+        current_page: 1, // required
+        last_page: 0, // required
+      },
+      loading: false,
+    };
+  },
+  mounted: function () {
+    this.init();
+  },
+
+  methods: {
+    // 加载数据
+    init: function () {
+      var _self = this;
+      _self.loading = true;
+      _self.defaultStartAfter = dayjs().add(-1, 'month').format('YYYY-MM-DD HH:mm:ss');
+      _self.defaultStartBefore = dayjs().format('YYYY-MM-DD HH:mm:ss');
+      _self.defaultFinishAfter = dayjs().add(-1, 'month').format('YYYY-MM-DD HH:mm:ss');
+      _self.defaultFinishBefore = dayjs().format('YYYY-MM-DD HH:mm:ss');
+      _self.taskQueryParam = {
+        condition: '', //查询条件(主题、文件编码、正文内容、审批意见).
+        startAfter: _self.defaultStartAfter,
+        startBefore: _self.defaultStartBefore,
+        advancedQuery: false, //是否高级查询
+        //"startUserId" : "",     //审批单发起人
+        deploymentId: '', //工作流部署Id
+        processStatusQuery: 'RUNNING', //审批状态
+        range: {
+          //查询区间
+          length: 100,
+          start: 0,
+        },
+      };
+
+      $.ajax({
+        url: Common.getApiURL('WorkflowResource/approveType'),
+        type: 'GET',
+        dataType: 'json',
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          _self.loading = false;
+          _self.approveType = data;
+          _self.searchCopyTask();
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          _self.loading = false;
+          Common.processException(XMLHttpRequest, textStatus, errorThrown);
+        },
+      });
+    },
+
+    getStartUserId: function () {
+      var _self = this;
+
+      _self.loading = true;
+
+      if (_self.userName != null && _self.userName != '') {
+        var infoQueryParam = {};
+        infoQueryParam.infoWindowNo = 11531;
+        infoQueryParam.start = 0;
+        infoQueryParam.length = 1;
+        infoQueryParam.sortClause = '';
+        infoQueryParam.infoFilterFieldValues = [];
+        infoQueryParam.infoFilterFieldValues[0] = {};
+        infoQueryParam.infoFilterFieldValues[0].infoFilterFieldId = 11532;
+        infoQueryParam.infoFilterFieldValues[0].value1 = _self.userName;
+        $.ajax({
+          url: Common.getApiURL('InfoWindowResource/QueryInfoWindowData2'),
+          type: 'post',
+          dataType: 'json',
+          beforeSend: function (request) {
+            Common.addTokenToRequest(request);
+          },
+          contentType: 'application/json',
+          data: JSON.stringify(infoQueryParam),
+          async: false,
+          success: function (data) {
+            _self.loading = false;
+            _self.taskQueryParam.startUserId = '';
+            if (data.dataList[0].id != null) {
+              _self.taskQueryParam.startUserId = data.dataList[0].id;
+            }
+          },
+          error: function (XMLHttpRequest, textStatus, errorThrown) {
+            _self.loading = false;
+            Common.processException(XMLHttpRequest, textStatus, errorThrown);
+          },
+        });
+      }
+    },
+
+    searchCopyTask: function () {
+      var _self = this;
+      _self.loading = true;
+      _self.taskQueryParam.range.start = 0;
+      _self.taskQueryParam.range.length = _self.pagination.per_page;
+      _self.pagination.current_page = 1;
+      _self.taskQueryParam.startAfter = _self.defaultStartAfter;
+      _self.taskQueryParam.startBefore = _self.defaultStartBefore;
+      _self.taskQueryParam.finishAfter = _self.defaultFinishAfter;
+      _self.taskQueryParam.finishBefore = _self.defaultFinishBefore;
+      _self.taskQueryParam.deploymentId = _self.deploymentId;
+      if (_self.taskQueryParam.advancedQuery) {
+        _self.getStartUserId();
+        _self.taskQueryParam.startAfter = _self.startAfter;
+        _self.taskQueryParam.startBefore = _self.startBefore;
+        _self.taskQueryParam.finishAfter = _self.finishAfter;
+        _self.taskQueryParam.finishBefore = _self.finishBefore;
+      }
+      console.log(JSON.stringify(_self.taskQueryParam));
+      $.ajax({
+        url: Common.getApiURL('WorkflowResource/copyTask'),
+        type: 'post',
+        dataType: 'json',
+        contentType: 'application/json',
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        data: JSON.stringify(_self.taskQueryParam),
+        success: function (data) {
+          console.log(JSON.stringify(data));
+          _self.loading = false;
+          _self.copyTaskInfos = data;
+          _self.copyTaskInfos.copyTaskInfo.forEach(item => {
+            try {
+              var content = JSON.parse(item.content);
+              var parentForm = '';
+              content.parentForm.forEach(item => {
+                parentForm =
+                                    parentForm + item.title + ':' + item.content + ',\n';
+              });
+              item.content = parentForm;
+              // eslint-disable-next-line no-empty
+            } catch (e) {
+
+            }
+
+          });
+          _self.pagination.total = data.totalCount;
+          _self.pagination.last_page =
+                        data.totalCount % _self.taskQueryParam.range.length == 0
+                          ? data.totalCount / _self.taskQueryParam.range.length
+                          : Math.floor(
+                            data.totalCount / _self.taskQueryParam.range.length,
+                          ) + 1;
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          _self.loading = false;
+          Common.processException(XMLHttpRequest, textStatus, errorThrown);
+        },
+      });
+    },
+
+    //是否开启高级查询
+    isAdvancedQuery: function (flag) {
+      let _self = this;
+      _self.taskQueryParam.advancedQuery = flag;
+      if (!flag) {
+        //初始化日期
+        _self.taskQueryParam.startAfter = _self.defaultStartAfter;
+        _self.taskQueryParam.startBefore = _self.defaultStartBefore;
+      }
+    },
+
+    showTaskInfo: function (id) {
+      var _self = this;
+      _self.taskInfoId = id;
+    },
+
+    clean: function () {
+      //清空搜索条件
+      var _self = this;
+      _self.userName = '';
+      _self.taskQueryParam.condition = '';
+      _self.defaultStartAfter = dayjs().add(-1, 'month').format('YYYY-MM-DD HH:mm:ss');
+      _self.defaultStartBefore = dayjs().format('YYYY-MM-DD HH:mm:ss');
+      _self.defaultFinishAfter = dayjs().add(-1, 'month').format('YYYY-MM-DD HH:mm:ss');
+      _self.defaultFinishBefore = dayjs().format('YYYY-MM-DD HH:mm:ss');
+      _self.startAfter = '';
+      _self.startBefore = '';
+      _self.finishAfter = '';
+      _self.finishBefore = '';
+    },
+
+    choiceStatus: function (status) {
+      this.taskQueryParam.processStatusQuery = status;
+      this.searchCopyTask();
+    },
+
+    changePage: function () {
+      var _self = this;
+      _self.loading = true;
+      _self.taskQueryParam.range.start =
+                _self.pagination.per_page *
+                (parseInt(_self.pagination.current_page) - 1);
+      _self.taskQueryParam.startAfter = _self.defaultStartAfter;
+      _self.taskQueryParam.startBefore = _self.defaultStartBefore;
+      _self.taskQueryParam.finishAfter = _self.defaultFinishAfter;
+      _self.taskQueryParam.finishBefore = _self.defaultFinishBefore;
+      if (_self.taskQueryParam.advancedQuery) {
+        _self.taskQueryParam.startAfter = _self.startAfter;
+        _self.taskQueryParam.startBefore = _self.startBefore;
+        _self.taskQueryParam.finishAfter = _self.finishAfter;
+        _self.taskQueryParam.finishBefore = _self.finishBefore;
+      }
+      console.log(JSON.stringify(_self.taskQueryParam));
+      $.ajax({
+        url: Common.getApiURL('WorkflowResource/copyTask'),
+        type: 'post',
+        dataType: 'json',
+        contentType: 'application/json',
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        data: JSON.stringify(_self.taskQueryParam),
+        success: function (data) {
+          _self.loading = false;
+          //console.log(JSON.stringify(data));
+          _self.copyTaskInfos = data;
+          _self.copyTaskInfos.copyTaskInfo.forEach(item => {
+            try {
+              var content = JSON.parse(item.content);
+              var parentForm = '';
+              content.parentForm.forEach(item => {
+                parentForm =
+                                    parentForm + item.title + ':' + item.content + ',\n';
+              });
+              item.content = parentForm;
+              // eslint-disable-next-line no-empty
+            } catch (e) {
+
+            }
+          });
+          _self.pagination.total = data.totalCount;
+          _self.pagination.last_page =
+                        data.totalCount % _self.taskQueryParam.range.length == 0
+                          ? data.totalCount / _self.taskQueryParam.range.length
+                          : Math.floor(
+                            data.totalCount / _self.taskQueryParam.range.length,
+                          ) + 1;
+          console.log('totalCount=' + _self.pagination.total);
+          console.log('totalPage=' + _self.pagination.last_page);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          _self.loading = false;
+          Common.processException(
+            XMLHttpRequest,
+            textStatus,
+            errorThrown,
+          );
+        },
+      });
+    },
+
+    // 选择了taskInfo
+    selectTaskInfo: function (taskInfo) {
+      var _self = this;
+      _self.loading = true;
+      if (
+        taskInfo.systemProcess == undefined ||
+                taskInfo.systemProcess == false
+      ) {
+        $.ajax({
+          url: Common.getApiURL('WorkflowResource/processTaskInfo'),
+          type: 'get',
+          dataType: 'json',
+          contentType: 'application/json',
+          beforeSend: function (request) {
+            Common.addTokenToRequest(request);
+          },
+          data: {
+            taskInfoId: taskInfo.id,
+          },
+          success: function (data) {
+            _self.loading = false;
+          },
+          error: function (XMLHttpRequest, textStatus, errorThrown) {
+            _self.loading = false;
+            Common.processException(
+              XMLHttpRequest,
+              textStatus,
+              errorThrown,
+            );
+          },
+        });
+      }
+
+
+      TaskOpenUtil.openCopyTask(taskInfo).then(successData => {
+        if (successData.type === 'newWindow') {
+          WindowService.open(successData.url, '抄送我的', function () {
+            _self.$emit('refreshStasticCount');
+            _self.searchCopyTask();
+          });
+        } else if (successData.type === 'customerTask') {
+          // 打开自定义的界面
+          //_self.selectedTaskId = taskInfo.id;
+          //_self.$refs.customerTask.show();
+          //_self.$emit('refreshStasticCount');
+          //_self.searchCopyTask();
+        }
+      }, errorData => {
+        if (errorData != null) {
+          Notify.error(errorData.title, errorData.message, false);
+        }
+      });
+    },
+
+    // 全部完成审阅
+    completeApproval: function () {
+      const _self = this;
+      _self.loading = false;
+      $.ajax({
+        url: Common.getApiURL('WorkflowResource/completeCopyTasks'),
+        type: 'post',
+        dataType: 'json',
+        contentType: 'application/json',
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          _self.loading = false;
+          if(data.errorCode === 0){
+            _self.$emit('refreshStasticCount');
+            _self.searchCopyTask();
+          } else {
+            Notify.error('错误', data.errorMessage, false);
+          }
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          _self.loading = false;
+          Common.processException(
+            XMLHttpRequest,
+            textStatus,
+            errorThrown,
+          );
+        },
+      });
+    },
+  },
+};
+</script>
+
+<style scoped>
+.form-label {
+    margin-left: 10px;
+    cursor: pointer;
+}
+
+.m-tr {
+    cursor: pointer;
+}
+</style>

+ 474 - 0
src/workflow/MyApplyWorkflowOld.vue

@@ -0,0 +1,474 @@
+<template>
+  <div>
+    <div class="container-fluid">
+      <div class="row m-row">
+        <div class="col-md-12 col-sm-12 col-xs-12">
+          <input
+            v-model="taskQueryParam.condition"
+            autocomplete="off"
+            type="text"
+            :placeholder="$t('lang.MyApplyWorkflow.describe1')"
+            class="form-control"
+          />
+        </div>
+      </div>
+
+      <div
+        v-if="taskQueryParam.advancedQuery"
+        class="row m-row"
+      >
+        <div class="col-md-2 col-sm-2 col-xs-4">
+          <label class="form-control-static">{{ $t("lang.MyApplyWorkflow.startTime") }}</label>
+        </div>
+
+        <div class="col-md-5 col-sm-5 col-xs-4">
+          <DateTime
+            v-model="startAfter"
+          />
+        </div>
+
+        <div class="col-md-5 col-sm-5 col-xs-4">
+          <DateTime
+            v-model="startBefore"
+          />
+        </div>
+      </div>
+
+      <div
+        v-if="taskQueryParam.advancedQuery"
+        class="row m-row"
+      >
+        <div class="col-md-2 col-sm-2 col-xs-4">
+          <label class="form-control-static">{{ $t("lang.MyApplyWorkflow.completionTime") }}</label>
+        </div>
+
+        <div class="col-md-5 col-sm-5 col-xs-4">
+          <DateTime
+            v-model="finishAfter"
+          />
+        </div>
+
+        <div class="col-md-5 col-sm-5 col-xs-4">
+          <DateTime
+            v-model="finishBefore"
+          />
+        </div>
+      </div>
+
+      <div
+        v-if="taskQueryParam.advancedQuery"
+        class="row m-row"
+      >
+        <div class="col-md-2 col-sm-2 col-xs-4">
+          <label class="form-control-static">{{ $t("lang.MyApplyWorkflow.approvalOriginator") }}</label>
+        </div>
+        <div class="col-md-10 col-sm-10 col-xs-8">
+          <input
+            id="applyUser"
+            v-model="userName"
+            autocomplete="off"
+            type="text"
+            class="form-control"
+          />
+        </div>
+      </div>
+
+      <div class="row m-row">
+        <div class="col-md-2 col-sm-2 col-xs-4">
+          <label class="form-control-static">{{ $t("lang.MyApplyWorkflow.subject") }}</label>
+        </div>
+        <div class="col-md-10 col-sm-10 col-xs-8">
+          <select
+            v-model="deploymentId"
+            class="form-control"
+          >
+            <option value="">{{ $t("lang.MyApplyWorkflow.all") }}</option>
+            <option
+              v-for="item in approveType"
+              :key="item.deploymentId"
+              :value="item.deploymentId"
+            >
+              {{ item.name }}
+            </option>
+          </select>
+        </div>
+      </div>
+
+      <div class="row m-row">
+        <div class="col-md-12 col-sm-12 col-xs-10">
+          <button
+            role="button"
+            target="_self"
+            class="btn btn-primary"
+            @click="searchMyApply()"
+          >
+            {{ $t("lang.MyApplyWorkflow.search") }}
+          </button>
+          <a
+            class="form-label"
+            @click="taskQueryParam.advancedQuery = !taskQueryParam.advancedQuery"
+          >{{ (taskQueryParam.advancedQuery) ? $t("lang.MyApplyWorkflow.closeAdvancedSearch") : $t("lang.MyApplyWorkflow.advancedSearch") }}</a>
+          <a
+            id="clearSearchCondition"
+            class="form-label"
+            @click="clean()"
+          >{{ $t("lang.MyApplyWorkflow.clearSearchCriteria") }}</a>
+          <span id="choiceStatus">
+            <button
+              class="btn"
+              :class="{&quot;btn-info active&quot;: taskQueryParam.processStatusQuery == &quot;ALL&quot;}"
+              @click="choiceStatus('ALL')"
+            >{{ $t("lang.MyApplyWorkflow.all") }}</button>
+            <button
+              class="btn"
+              :class="{&quot;btn-info active&quot;: taskQueryParam.processStatusQuery == &quot;FINISH&quot;}"
+              @click="choiceStatus('FINISH')"
+            >{{ $t("lang.MyApplyWorkflow.done") }}</button>
+            <button
+              class="btn"
+              :class="{&quot;btn-info active&quot;: taskQueryParam.processStatusQuery == &quot;RUNNING&quot;}"
+              @click="choiceStatus('RUNNING')"
+            >{{ $t("lang.MyApplyWorkflow.inProcess") }}</button>
+          </span>
+        </div>
+      </div>
+      <div class="row m-row">
+        <div class="table-responsive">
+          <table class="table  table-hover table-bordered">
+            <thead>
+              <tr>
+                <td>{{ $t("lang.MyApplyWorkflow.documentCode") }}</td>
+                <td>{{ $t("lang.MyApplyWorkflow.subject") }}</td>
+                <td>{{ $t("lang.MyApplyWorkflow.approvalSummary") }}</td>
+                <td>{{ $t("lang.MyApplyWorkflow.originatingTime") }}</td>
+                <td>{{ $t("lang.MyApplyWorkflow.completionTime") }}</td>
+                <td>{{ $t("lang.MyApplyWorkflow.status") }}</td>
+              </tr>
+            </thead>
+            <tbody>
+              <tr
+                v-for="item in historicProcessInstanceInfos.historicProcessInstanceInfos"
+                :key="item.id"
+                class="m-tr"
+                @click="selectTaskInfo(item)"
+              >
+                <td>
+                  {{ item.no }}
+                </td>
+                <td>
+                  {{ item.title }}
+                </td>
+                <td>
+                  <span style="white-space: pre-line">{{ item.content }}</span>
+                </td>
+                <td>
+                  {{ item.startDate }}
+                </td>
+                <td>
+                  {{ item.endDate }}
+                </td>
+                <td>
+                  {{ item.documentStatus }}
+                </td>
+              </tr>
+            </tbody>
+          </table>
+        </div>
+      </div>
+      <VueBootstrapPagination
+        :pagination="pagination"
+        :callback="changePage"
+      />
+    </div>
+    <Loading v-if="loading" />
+  </div>
+</template>
+
+<script>
+import Common from '../common/Common.js';
+
+
+import { Uuid} from 'pc-component-v3';
+import * as dayjs from 'dayjs';
+
+
+
+export default {
+
+  components: {
+  },
+  data: function () {
+    return {
+      'defaultStartAfter': '',   //默认开始日期
+      'defaultStartBefore': '',
+      'defaultFinishAfter': '',   //默认结束日期
+      'defaultFinishBefore': '',
+      'startAfter': '',          //开始日期
+      'startBefore': '',
+      'finishAfter': '',          //结束日期
+      'finishBefore': '',
+      'taskQueryParam': { 'processStatusQuery': 'ALL' },    	//查询条件       
+      'historicProcessInstanceInfos': '',
+      'deploymentId': '',
+      'userName': '',
+      'approveType': [],
+      pagination: {
+        total: 0,
+        per_page: 15,    // 每页的信息数
+        current_page: 1, // required
+        last_page: 0,    // required
+      },
+      loading: false,
+    };
+  },
+  mounted: function () {
+    this.init();
+  },
+
+  methods: {
+    // 加载数据
+    init: function () {
+      var _self = this;
+      _self.loading=true;
+      _self.defaultStartAfter = dayjs().add(-1, 'month').format('YYYY-MM-DD HH:mm:ss');
+      _self.defaultStartBefore = dayjs().format('YYYY-MM-DD HH:mm:ss');
+      _self.defaultFinishAfter = dayjs().add(-1, 'month').format('YYYY-MM-DD HH:mm:ss');
+      _self.defaultFinishBefore = dayjs().format('YYYY-MM-DD HH:mm:ss');
+      _self.taskQueryParam = {
+        'condition': '',         //查询条件(主题、文件编码、正文内容、审批意见).
+        'startAfter': _self.defaultStartAfter,
+        'startBefore': _self.defaultStartBefore,
+        'advancedQuery': false,    //是否高级查询
+        //"startUserId" : "",     //审批单发起人
+        'deploymentId': '',      //工作流部署Id
+        'processStatusQuery': 'ALL',  //审批状态
+        'range': {               //查询区间
+          'length': 100,
+          'start': 0,
+        },
+      };
+      console.log(JSON.stringify(_self.taskQueryParam));
+      $.ajax({
+        url: Common.getApiURL('WorkflowResource/approveType'),
+        type: 'GET',
+        dataType: 'json',
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          _self.loading=false;
+          _self.approveType = data;
+          _self.searchMyApply();
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          _self.loading=false;
+          Common.processException(XMLHttpRequest, textStatus, errorThrown);
+        },
+      });
+    },
+    getStartUserId: function () {
+      var _self = this;
+      if (_self.userName != null && _self.userName != '') {
+        _self.loading=true;
+        var infoQueryParam = {};
+        infoQueryParam.infoWindowNo = 11531;
+        infoQueryParam.start = 0;
+        infoQueryParam.length = 1;
+        infoQueryParam.sortClause = '';
+        infoQueryParam.infoFilterFieldValues = [];
+        infoQueryParam.infoFilterFieldValues[0] = {};
+        infoQueryParam.infoFilterFieldValues[0].infoFilterFieldId = 11532;
+        infoQueryParam.infoFilterFieldValues[0].value1 = _self.userName;
+        $.ajax({
+          url: Common.getApiURL('InfoWindowResource/QueryInfoWindowData2'),
+          type: 'post',
+          dataType: 'json',
+          beforeSend: function (request) {
+            Common.addTokenToRequest(request);
+          },
+          contentType: 'application/json',
+          data: JSON.stringify(infoQueryParam),
+          async: false,
+          success: function (data) {
+            _self.loading=false;
+            _self.taskQueryParam.startUserId = '';
+            if (data.dataList[0].id != null) {
+              _self.taskQueryParam.startUserId = data.dataList[0].id;
+            }
+          },
+          error: function (XMLHttpRequest, textStatus, errorThrown) {
+            _self.loading=false;
+            _self.$refs.common.processException(XMLHttpRequest, textStatus, errorThrown);
+          },
+        });
+      }
+    },
+    searchMyApply: function () {
+      var _self = this;
+      _self.loading=true;
+      _self.taskQueryParam.range.start = 0;
+      _self.taskQueryParam.range.length = _self.pagination.per_page;
+      _self.pagination.current_page = 1;
+      _self.taskQueryParam.startAfter = _self.defaultStartAfter;
+      _self.taskQueryParam.startBefore = _self.defaultStartBefore;
+      _self.taskQueryParam.finishAfter = _self.defaultFinishAfter;
+      _self.taskQueryParam.finishBefore = _self.defaultFinishBefore;
+      _self.taskQueryParam.deploymentId = _self.deploymentId;
+      if (_self.taskQueryParam.advancedQuery) {
+        _self.getStartUserId();
+        _self.taskQueryParam.startAfter = _self.startAfter;
+        _self.taskQueryParam.startBefore = _self.startBefore;
+        _self.taskQueryParam.finishAfter = _self.finishAfter;
+        _self.taskQueryParam.finishBefore = _self.finishBefore;
+      }
+						
+      $.ajax({
+        url: Common.getApiURL('WorkflowResource/myApply'),
+        type: 'post',
+        dataType: 'json',
+        contentType: 'application/json',
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        data: JSON.stringify(_self.taskQueryParam),
+        success: function (data) {
+          _self.loading=false;
+          _self.historicProcessInstanceInfos = data;
+          _self.historicProcessInstanceInfos.historicProcessInstanceInfos.forEach(item => {
+            
+            try{
+              var content = JSON.parse(item.content);
+              var parentForm = '';
+              content.parentForm.forEach(item => {
+                parentForm =parentForm + item.title+':'+item.content+',\n';
+              });
+              item.content = parentForm;
+            // eslint-disable-next-line no-empty
+            }catch(e){
+              
+            }
+            
+          });
+          _self.pagination.total = data.totalCount;
+          _self.pagination.last_page = Math.ceil(data.totalCount / _self.taskQueryParam.range.length);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          _self.loading=false;
+          _self.$refs.common.processException(XMLHttpRequest, textStatus, errorThrown);
+        },
+      });
+    },
+    //是否开启高级查询
+    isAdvancedQuery: function (flag) {
+      let _self = this;
+      _self.taskQueryParam.advancedQuery = flag;
+      if (!flag) {
+        //初始化日期
+        _self.taskQueryParam.startAfter = _self.defaultStartAfter;
+        _self.taskQueryParam.startBefore = _self.defaultStartBefore;
+      }
+    },
+    showTaskInfo: function (id) {
+      var _self = this;
+      _self.taskInfoId = id;
+    },
+    clean: function () {   //清空搜索条件
+      var _self = this;
+      _self.userName = '';
+      _self.taskQueryParam.condition = '';
+      _self.defaultStartAfter = dayjs().add(-1, 'month').format('YYYY-MM-DD HH:mm:ss');
+      _self.defaultStartBefore = dayjs().format('YYYY-MM-DD HH:mm:ss');
+      _self.defaultFinishAfter = dayjs().add(-1, 'month').format('YYYY-MM-DD HH:mm:ss');
+      _self.defaultFinishBefore = dayjs().format('YYYY-MM-DD HH:mm:ss');
+      _self.startAfter = '';
+      _self.startBefore = '';
+      _self.finishAfter = '';
+      _self.finishBefore = '';
+    },
+    choiceStatus: function (status) {
+      this.taskQueryParam.processStatusQuery = status;
+      this.searchMyApply();
+    },
+    changePage: function () {
+      var _self = this;
+      _self.loading=true;
+      _self.taskQueryParam.range.start = _self.pagination.per_page * (parseInt(_self.pagination.current_page) - 1);
+      _self.taskQueryParam.startAfter = _self.defaultStartAfter;
+      _self.taskQueryParam.startBefore = _self.defaultStartBefore;
+      _self.taskQueryParam.finishAfter = _self.defaultFinishAfter;
+      _self.taskQueryParam.finishBefore = _self.defaultFinishBefore;
+      if (_self.taskQueryParam.advancedQuery) {
+        _self.taskQueryParam.startAfter = _self.startAfter;
+        _self.taskQueryParam.startBefore = _self.startBefore;
+        _self.taskQueryParam.finishAfter = _self.finishAfter;
+        _self.taskQueryParam.finishBefore = _self.finishBefore;
+      }
+      console.log(JSON.stringify(_self.taskQueryParam));
+      $.ajax({
+        url: Common.getApiURL('WorkflowResource/myApply'),
+        type: 'post',
+        dataType: 'json',
+        contentType: 'application/json',
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        data: JSON.stringify(_self.taskQueryParam),
+        success: function (data) {
+          _self.loading=false;
+          _self.historicProcessInstanceInfos = data;
+          _self.historicProcessInstanceInfos.historicProcessInstanceInfos.forEach(item => {
+            
+            try{
+
+              var content = JSON.parse(item.content);
+              var parentForm = '';
+              content.parentForm.forEach(item => {
+                parentForm =parentForm + item.title+':'+item.content+',\n';
+              });
+              item.content = parentForm;
+            // eslint-disable-next-line no-empty
+            }catch(e){
+              
+            }
+          });
+          _self.pagination.total = data.totalCount;
+          _self.pagination.last_page = Math.ceil(data.totalCount / _self.taskQueryParam.range.length);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          _self.loading=false;
+          _self.$refs.common.processException(XMLHttpRequest, textStatus, errorThrown);
+        },
+      });
+    },
+        
+    // 选择了taskInfo
+    selectTaskInfo: function (taskInfo) {
+      var _self = this;
+      var type = 'view';
+      var windowNo = taskInfo.windowNo;
+      var tabIndex = taskInfo.tabIndex;
+      var recordId = taskInfo.recordId;
+      var url = '/desktop/window/window-read/'
+                + type + '/'
+                + windowNo + '/'
+                + tabIndex + '/'
+                + recordId
+                + '?workflowType=approve&taskInfoId=' + taskInfo.id
+                + '&currIndex=1&totalCount=1&canGoBack=false&uuid=' + Uuid.createUUID();
+
+      window.open(Common.getRedirectUrl('#' + url));
+    },
+  },
+};
+</script>
+
+<style scoped>
+.form-label {
+    margin-left: 10px;
+    cursor: pointer;
+}
+
+.m-tr {
+    cursor: pointer;
+}
+</style>

+ 480 - 0
src/workflow/NotApproveWorkflowOld.vue

@@ -0,0 +1,480 @@
+<template>
+  <div>
+    <div class="container-fluid">
+      <div class="row m-row">
+        <div class="col-md-12 col-sm-12 col-xs-12">
+          <input
+            v-model="taskQueryParam.condition"
+            autocomplete="off"
+            type="text"
+            :placeholder="$t('lang.NotApproveWorkflow.describe1')"
+            class="form-control"
+          />
+        </div>
+      </div>
+
+      <div
+        v-if="taskQueryParam.advancedQuery"
+        class="row m-row"
+      >
+        <div class="col-md-2 col-sm-2 col-xs-4">
+          <label class="form-control-static">{{ $t("lang.NotApproveWorkflow.startTime") }}</label>
+        </div>
+
+        <div class="col-md-5 col-sm-5 col-xs-4">
+          <DateTime
+            v-model="startAfter"
+          />
+        </div>
+
+        <div class="col-md-5 col-sm-5 col-xs-4">
+          <DateTime
+            v-model="startBefore"
+          />
+        </div>
+      </div>
+
+      <div
+        v-if="taskQueryParam.advancedQuery"
+        class="row m-row"
+      >
+        <div class="col-md-2 col-sm-2 col-xs-4">
+          <label class="form-control-static">{{ $t("lang.NotApproveWorkflow.completionTime") }}</label>
+        </div>
+
+        <div class="col-md-5 col-sm-5 col-xs-4">
+          <DateTime
+            v-model="finishAfter"
+          />
+        </div>
+
+        <div class="col-md-5 col-sm-5 col-xs-4">
+          <DateTime
+            v-model="finishBefore"
+          />
+        </div>
+      </div>
+
+      <div
+        v-if="taskQueryParam.advancedQuery"
+        class="row m-row"
+      >
+        <div class="col-md-2 col-sm-2 col-xs-4">
+          <label class="form-control-static">{{ $t("lang.NotApproveWorkflow.approvalOriginator") }}</label>
+        </div>
+        <div class="col-md-10 col-sm-10 col-xs-8">
+          <input
+            id="applyUser"
+            v-model="userName"
+            autocomplete="off"
+            type="text"
+            class="form-control"
+          />
+        </div>
+      </div>
+
+      <div class="row m-row">
+        <div class="col-md-2 col-sm-2 col-xs-4">
+          <label class="form-control-static">{{ $t("lang.NotApproveWorkflow.subject") }}</label>
+        </div>
+        <div class="col-md-10 col-sm-10 col-xs-8">
+          <select
+            v-model="deploymentId"
+            class="form-control"
+          >
+            <option value="">{{ $t("lang.NotApproveWorkflow.all") }}</option>
+            <option
+              v-for="item in approveType"
+              :key="item.deploymentId"
+              :value="item.deploymentId"
+            >
+              {{ item.name }}
+            </option>
+          </select>
+        </div>
+      </div>
+
+      <div class="row m-row">
+        <div class="col-md-12 col-sm-12 col-xs-10">
+          <button
+            role="button"
+            target="_self"
+            class="btn btn-primary"
+            @click="searchNotApproved()"
+          >
+            {{ $t("lang.NotApproveWorkflow.search") }}
+          </button>
+          <a
+            class="form-label"
+            @click="taskQueryParam.advancedQuery = !taskQueryParam.advancedQuery"
+          >{{ (taskQueryParam.advancedQuery) ? $t("lang.NotApproveWorkflow.closeAdvancedSearch") : $t("lang.NotApproveWorkflow.advancedSearch") }}</a>
+          <a
+            id="clearSearchCondition"
+            class="form-label"
+            @click="clean()"
+          >{{ $t("lang.NotApproveWorkflow.clearSearchCriteria") }}</a>
+          <span id="choiceStatus">
+            <button
+              class="btn"
+              :class="{&quot;btn-info active&quot;: taskQueryParam.processStatusQuery == &quot;ALL&quot;}"
+              @click="choiceStatus('ALL')"
+            >{{ $t("lang.NotApproveWorkflow.all") }}</button>
+            <button
+              class="btn"
+              :class="{&quot;btn-info active&quot;: taskQueryParam.processStatusQuery == &quot;FINISH&quot;}"
+              @click="choiceStatus('FINISH')"
+            >{{ $t("lang.NotApproveWorkflow.done") }}</button>
+            <button
+              class="btn"
+              :class="{&quot;btn-info active&quot;: taskQueryParam.processStatusQuery == &quot;RUNNING&quot;}"
+              @click="choiceStatus('RUNNING')"
+            >{{ $t("lang.NotApproveWorkflow.inProcess") }}</button>
+          </span>
+        </div>
+      </div>
+
+      <div class="row m-row">
+        <div class="table-responsive">
+          <table class="table table-bordered table-hover">
+            <thead>
+              <tr>
+                <td>{{ $t("lang.NotApproveWorkflow.documentCode") }}</td>
+                <td>{{ $t("lang.NotApproveWorkflow.subject") }}</td>
+                <td>{{ $t("lang.NotApproveWorkflow.approvalSummary") }}</td>
+                <td>{{ $t("lang.NotApproveWorkflow.originatingTime") }}</td>
+                <td>{{ $t("lang.NotApproveWorkflow.completionTime") }}</td>
+                <td>{{ $t("lang.NotApproveWorkflow.status") }}</td>
+              </tr>
+            </thead>
+            <tbody>
+              <tr
+                v-for="item in historicTaskInfos.historicProcessInstanceInfos"
+                :key="item.id"
+                class="m-tr"
+                @click="selectTaskInfo(item)"
+              >
+                <td>
+                  {{ item.no }}
+                </td>
+                <td>
+                  {{ item.title }}
+                </td>
+                <td>
+                  <span style="white-space: pre-line">{{ item.content }}</span>
+                </td>
+                <td>
+                  {{ item.startDate }}
+                </td>
+                <td>
+                  {{ item.endDate }}
+                </td>
+                <td>
+                  {{ item.documentStatus == '进行中' ? $t("lang.NotApproveWorkflow.inProcess"):$t("lang.NotApproveWorkflow.done") }}
+                </td>
+              </tr>
+            </tbody>
+          </table>
+        </div>
+      </div>
+      <VueBootstrapPagination
+        :pagination="pagination"
+        :callback="changePage"
+      />
+    </div>
+    <Loading v-if="loading" />
+  </div>
+</template>
+
+<script>
+import Common from '../common/Common.js';
+import WindowService from '../common/WindowService.js';
+import { Notify } from 'pc-component-v3';
+import TaskOpenUtil from './TaskOpenUtil.js';
+import * as dayjs from 'dayjs';
+
+export default {
+
+  components: {
+  },
+  data: function () {
+    return {
+      'defaultStartAfter': '',   //默认开始日期
+      'defaultStartBefore': '',
+      'defaultFinishAfter': '',   //默认结束日期
+      'defaultFinishBefore': '',
+      'startAfter': '',          //开始日期
+      'startBefore': '',
+      'finishAfter': '',          //结束日期
+      'finishBefore': '',
+      'taskQueryParam': { 'processStatusQuery': 'FINISH' },    	//查询条件       
+      'historicTaskInfos': [],
+      'deploymentId': '',
+      'userName': '',
+      'approveType': [],
+      pagination: {
+        total: 0,
+        per_page: 20,    // required
+        current_page: 1, // required
+        last_page: 0,    // required
+      },
+      loading: false,
+    };
+  },
+  mounted: function () {
+    this.init();
+  },
+
+  methods: {
+    // 加载数据
+    init: function () {
+      var _self = this;
+      _self.loading=true;
+      _self.defaultStartAfter = dayjs().add(-1, 'month').format('YYYY-MM-DD HH:mm:ss');
+      _self.defaultStartBefore = dayjs().format('YYYY-MM-DD HH:mm:ss');
+      _self.defaultFinishAfter = dayjs().add(-1, 'month').format('YYYY-MM-DD HH:mm:ss');
+      _self.defaultFinishBefore = dayjs().format('YYYY-MM-DD HH:mm:ss');
+      _self.taskQueryParam = {
+        'condition': '',         //查询条件(主题、文件编码、正文内容、审批意见).
+        'startAfter': _self.defaultStartAfter,
+        'startBefore': _self.defaultStartBefore,
+        'advancedQuery': false,    //是否高级查询
+        //"startUserId" : "",     //审批单发起人
+        'deploymentId': '',      //工作流部署Id
+        'processStatusQuery': 'ALL',  //审批状态
+        'range': {               //查询区间
+          'length': 100,
+          'start': 0,
+        },
+      };
+      console.log(JSON.stringify(_self.taskQueryParam));
+      $.ajax({
+        url: Common.getApiURL('WorkflowResource/approveType'),
+        type: 'GET',
+        dataType: 'json',
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          _self.loading=false;
+          _self.approveType = data;
+          _self.searchNotApproved();
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          _self.loading=false;
+          Common.processException(XMLHttpRequest, textStatus, errorThrown);
+        },
+      });
+    },
+    getStartUserId: function () {
+      var _self = this;
+      _self.loading=true;
+      if (_self.userName != null && _self.userName != '') {
+        var infoQueryParam = {};
+        infoQueryParam.infoWindowNo = 11531;
+        infoQueryParam.start = 0;
+        infoQueryParam.length = 1;
+        infoQueryParam.sortClause = '';
+        infoQueryParam.infoFilterFieldValues = [];
+        infoQueryParam.infoFilterFieldValues[0] = {};
+        infoQueryParam.infoFilterFieldValues[0].infoFilterFieldId = 11532;
+        infoQueryParam.infoFilterFieldValues[0].value1 = _self.userName;
+        $.ajax({
+          url: Common.getApiURL('InfoWindowResource/QueryInfoWindowData2'),
+          type: 'post',
+          dataType: 'json',
+          beforeSend: function (request) {
+            Common.addTokenToRequest(request);
+          },
+          contentType: 'application/json',
+          data: JSON.stringify(infoQueryParam),
+          async: false,
+          success: function (data) {
+            _self.loading=false;
+            _self.taskQueryParam.startUserId = '';
+            if (data.dataList[0].id != null) {
+              _self.taskQueryParam.startUserId = data.dataList[0].id;
+            }
+
+          },
+          error: function (XMLHttpRequest, textStatus, errorThrown) {
+            _self.loading=false;
+            Common.processException(XMLHttpRequest);
+          },
+        });
+      }
+    },
+    searchNotApproved: function () {
+      var _self = this;
+      _self.loading=true;
+      _self.taskQueryParam.range.start = 0;
+      _self.taskQueryParam.range.length = _self.pagination.per_page;
+      _self.pagination.current_page = 1;
+      _self.taskQueryParam.startAfter = _self.defaultStartAfter;
+      _self.taskQueryParam.startBefore = _self.defaultStartBefore;
+      _self.taskQueryParam.finishAfter = _self.defaultFinishAfter;
+      _self.taskQueryParam.finishBefore = _self.defaultFinishBefore;
+      _self.taskQueryParam.deploymentId = _self.deploymentId;
+      if (_self.taskQueryParam.advancedQuery) {
+        _self.getStartUserId();
+        _self.taskQueryParam.startAfter = _self.startAfter;
+        _self.taskQueryParam.startBefore = _self.startBefore;
+        _self.taskQueryParam.finishAfter = _self.finishAfter;
+        _self.taskQueryParam.finishBefore = _self.finishBefore;
+      }
+      console.log(JSON.stringify(_self.taskQueryParam));
+      $.ajax({
+        url: Common.getApiURL('WorkflowResource/refuse'),
+        type: 'post',
+        dataType: 'json',
+        contentType: 'application/json',
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        data: JSON.stringify(_self.taskQueryParam),
+        success: function (data) {
+          _self.loading=false;
+          _self.historicTaskInfos = data;
+          _self.historicTaskInfos.historicProcessInstanceInfos.forEach(item => {
+            try{
+              var content = JSON.parse(item.content);
+              var parentForm = '';
+              content.parentForm.forEach(item => {
+                parentForm =parentForm + item.title+':'+item.content+',\n';
+              });
+              item.content = parentForm;
+            // eslint-disable-next-line no-empty
+            }catch(e){
+              
+            }
+          });
+          _self.pagination.total = data.totalCount;
+          _self.pagination.last_page = Math.ceil(data.totalCount / _self.taskQueryParam.range.length);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          _self.loading=false;
+          Common.processException(XMLHttpRequest, textStatus, errorThrown);
+        },
+      });
+
+    },
+    //是否开启高级查询
+    isAdvancedQuery: function (flag) {
+      let _self = this;
+      _self.taskQueryParam.advancedQuery = flag;
+      if (!flag) {
+        //初始化日期
+        _self.taskQueryParam.startAfter = _self.defaultStartAfter;
+        _self.taskQueryParam.startBefore = _self.defaultStartBefore;
+
+      }
+    },
+    showTaskInfo: function (id) {
+      var _self = this;
+      _self.taskInfoId = id;
+
+    },
+    clean: function () {   //清空搜索条件
+      var _self = this;
+      _self.userName = '';
+      _self.taskQueryParam.condition = '';
+      _self.defaultStartAfter = dayjs().add(-1, 'month').format('YYYY-MM-DD HH:mm:ss');
+      _self.defaultStartBefore = dayjs().format('YYYY-MM-DD HH:mm:ss');
+      _self.defaultFinishAfter = dayjs().add(-1, 'month').format('YYYY-MM-DD HH:mm:ss');
+      _self.defaultFinishBefore = dayjs().format('YYYY-MM-DD HH:mm:ss');
+      _self.startAfter = '';
+      _self.startBefore = '';
+      _self.finishAfter = '';
+      _self.finishBefore = '';
+    },
+    choiceStatus: function (status) {
+      this.taskQueryParam.processStatusQuery = status;
+      this.searchNotApproved();
+    },
+    changePage: function () {
+      var _self = this;
+      _self.loading=true;
+      _self.taskQueryParam.range.start = _self.pagination.per_page * (parseInt(_self.pagination.current_page) - 1);
+      _self.taskQueryParam.startAfter = _self.defaultStartAfter;
+      _self.taskQueryParam.startBefore = _self.defaultStartBefore;
+      _self.taskQueryParam.finishAfter = _self.defaultFinishAfter;
+      _self.taskQueryParam.finishBefore = _self.defaultFinishBefore;
+      if (_self.taskQueryParam.advancedQuery) {
+        _self.taskQueryParam.startAfter = _self.startAfter;
+        _self.taskQueryParam.startBefore = _self.startBefore;
+        _self.taskQueryParam.finishAfter = _self.finishAfter;
+        _self.taskQueryParam.finishBefore = _self.finishBefore;
+      }
+      console.log(JSON.stringify(_self.taskQueryParam));
+      $.ajax({
+        url: Common.getApiURL('WorkflowResource/refuse'),
+        type: 'post',
+        dataType: 'json',
+        contentType: 'application/json',
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        data: JSON.stringify(_self.taskQueryParam),
+        success: function (data) {
+          _self.loading=false;
+          _self.historicTaskInfos = data;
+          _self.historicTaskInfos.historicProcessInstanceInfos.forEach(item => {
+            try{
+
+              var content = JSON.parse(item.content);
+              var parentForm = '';
+              content.parentForm.forEach(item => {
+                parentForm =parentForm + item.title+':'+item.content+',\n';
+              });
+              item.content = parentForm;
+            // eslint-disable-next-line no-empty
+            }catch(e){
+              
+            }
+          });
+          _self.pagination.total = data.totalCount;
+          _self.pagination.last_page = Math.ceil(data.totalCount / _self.taskQueryParam.range.length);
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          _self.loading=false;
+          Common.processException(XMLHttpRequest, textStatus, errorThrown);
+        },
+      });
+    },
+    // 选择了taskInfo
+    selectTaskInfo: function (taskInfo) {
+      let _self = this;
+      TaskOpenUtil.openHistoryTask(taskInfo).then(successData => {
+        if(successData.type === 'newWindow'){
+          WindowService.open(successData.url, '已驳回的', function(){
+            _self.$emit('refreshStasticCount');
+            _self.searchNotApproved();
+          });
+        }else if(successData.type === 'customerTask'){
+          // 打开自定义的界面
+          _self.selectedTaskId = taskInfo.id;
+          _self.$refs.customerTask.show();
+          _self.$emit('refreshStasticCount');
+          _self.searchNotApproved();
+        }
+      }, errorData => {
+        if(errorData != null){
+          Notify.error(errorData.title, errorData.message, false);
+        }
+      });
+    },
+
+
+  },
+};
+</script>
+
+<style scoped>
+.form-label {
+    margin-left: 10px;
+    cursor: pointer;
+}
+
+.m-tr {
+    cursor: pointer;
+}
+</style>

+ 275 - 28
src/workflow/WorkflowEdit.vue

@@ -4,37 +4,46 @@
       :title="$t('lang.WorkflowEdit.workflowManagement')"
       :is-go-back="false"
     />
+    <div
+      style="display: flex; justify-content: space-between; align-items: center"
+    >
+      <div class="form-inline" style="margin-top: 10px">
+        <div class="form-group">
+          <label for="condition">{{ $t("lang.WorkflowEdit.queryCondition") }}:</label>
+          <input
+            id="condition"
+            v-model="condition"
+            autocomplete="off"
+            class="form-control"
+            type="text"
+            @change="query"
+          />
+        </div>
 
-    <div class="form-inline" style="margin-top: 10px">
-      <div class="form-group">
-        <label for="condition">{{ $t("lang.WorkflowEdit.queryCondition") }}:</label>
-        <input
-          id="condition"
-          v-model="condition"
-          autocomplete="off"
-          class="form-control"
-          type="text"
-          @change="query"
-        />
-      </div>
+        <a-button class="btn btn-default" @click="requeryWorkflows">
+          {{ $t("lang.WorkflowEdit.query") }}
+        </a-button>
 
-      <a-button class="btn btn-default" @click="requeryWorkflows">
-        {{ $t("lang.WorkflowEdit.query") }}
-      </a-button>
+        <a-button class="btn btn-default" @click="addition">
+          {{ $t("lang.WorkflowEdit.newlyBuild") }}
+        </a-button>
 
-      <a-button class="btn btn-default" @click="addition">
-        {{ $t("lang.WorkflowEdit.newlyBuild") }}
-      </a-button>
-
-      <a-button class="btn btn-default" @click="exportJsonFile">
-        {{ $t("lang.WorkflowEdit.export") }}
-      </a-button>
+        <a-button class="btn btn-default" @click="exportJsonFile">
+          {{ $t("lang.WorkflowEdit.export") }}
+        </a-button>
 
-      <a-button class="btn btn-default" @click="importJsonFile">
-        {{ $t("lang.WorkflowEdit.import") }}
+        <a-button class="btn btn-default" @click="importJsonFile">
+          {{ $t("lang.WorkflowEdit.import") }}
+        </a-button>
+      </div>
+      <a-button
+        class="btn btn-default"
+        style="margin: 10px 60px 0 0"
+        @click="openArchive"
+      >
+        历史数据归档
       </a-button>
     </div>
-
     <div class="table-responsive" style="margin-top: 10px">
       <template v-if="hasSelected">
         {{ `Selected ${selectedRowKeys.length} items` }}
@@ -245,6 +254,89 @@
         </div>
       </template>
     </Modal>
+    <a-modal
+      v-model:visible="archiveVisible"
+      title="请确认是否进行历史数据归档"
+      width="600px"
+      :mask-closable="false"
+    >
+      <a-steps :current="current">
+        <a-step
+          v-for="item in steps"
+          :key="item.title"
+          :title="item.title"
+          :description="item.content"
+        />
+      </a-steps>
+      <div class="steps-content">
+        <div v-if="steps[current].title === '步骤一'">
+          <a-textarea v-model:value="tableSql" :rows="8" />
+          <h4 style="margin: 20px 0; color: red">
+            注意:一定要复制SQL到数据库中执行,很重要!很重要!很重要!
+          </h4>
+        </div>
+        <div v-if="steps[current].title === '步骤二'">
+          <h4 style="padding: 100px 0; text-align: center; color: red">
+            注意:改操作执行时间较长,执行时请您耐心等待。
+          </h4>
+        </div>
+        <div v-if="steps[current].title === '步骤三'">
+          <a-textarea v-model:value="deleteTableSql" :rows="8" />
+          <h4 style="margin: 20px 0; color: red">
+            注意:一定要复制SQL到数据库中执行,很重要!很重要!很重要!
+          </h4>
+        </div>
+      </div>
+      <div class="steps-action">
+        <div>
+          <a-button v-if="current > 0" @click="prev"> 上一步 </a-button>
+          <span v-else />
+        </div>
+        <div>
+          <a-button
+            v-if="current === 0 || current === 2"
+            type="dashed"
+            style="margin-right: 8px"
+            @click="copyText"
+          >
+            复制
+          </a-button>
+          <a-button
+            v-if="current === 1"
+            type="dashed"
+            style="margin-right: 8px"
+            @click="archiveDatas"
+          >
+            归档
+          </a-button>
+          <a-button
+            v-if="current === 0"
+            type="primary"
+            :disabled="!isOk"
+            @click="next"
+          >
+            下一步
+          </a-button>
+          <a-button
+            v-if="current === 1"
+            type="primary"
+            :disabled="!isNext"
+            @click="next"
+          >
+            下一步
+          </a-button>
+          <a-button
+            v-if="current === 2"
+            type="primary"
+            :disabled="!isDeleteOk"
+            @click="archiveVisible = false"
+          >
+            完成
+          </a-button>
+        </div>
+      </div>
+      <template #footer />
+    </a-modal>
   </div>
 </template>
 
@@ -255,6 +347,9 @@ import WorkflowEditResource from './WorkflowEditResource.js';
 import 'vue-select/dist/vue-select.css';
 import { Notify, Uuid } from 'pc-component-v3';
 import CommonTable from '../common/CommonTable.vue';
+import { ajaxApiGet, ajaxApi } from '../api/workflow/workflow';
+import { message } from 'ant-design-vue';
+
 export default {
   components: {
     'v-select': vSelect,
@@ -359,17 +454,38 @@ export default {
       selectWorkflowDatas: undefined,
       jsonFile: undefined,
       loading: false,
+      isNext: false,
       modal: false,
       modal1: false,
       modal2: false,
+      archiveVisible: false,
+      isOk: false,
+      isDeleteOk: false,
+      current: 0,
+      tableSql: '',
+      deleteTableSql: '',
+      steps: [
+        {
+          title: '步骤一',
+          content: '备份历史流程数据',
+        },
+        {
+          title: '步骤二',
+          content: '执行归档',
+        },
+        {
+          title: '步骤三',
+          content: '清理历史流程数据',
+        },
+      ],
     };
   },
 
   computed: {},
-  watch:{
+  watch: {
     'selectedWorkflow.window': {
-      handler(newValue,oldVal) {
-        if(newValue != oldVal && newValue){
+      handler(newValue, oldVal) {
+        if (newValue != oldVal && newValue) {
           this.selectedWorkflow.name = newValue.value;
         }
       },
@@ -386,6 +502,23 @@ export default {
     this.loadProcessReports();
   },
   methods: {
+    openArchive: function () {
+      this.current = 0;
+      this.getTableSql();
+      this.isOk =  false;
+      this.isNext =  false;
+      this.isDeleteOk =  false;
+      this.archiveVisible = true;
+    },
+    next: function () {
+      this.current++;
+      if (this.current === 2) {
+        this.getDeleteTableSql();
+      }
+    },
+    prev: function () {
+      this.current--;
+    },
     rowSelection: function () {
       const onChange = (selectedRowKeys, selectedRows) => {
         //第一个参数控制选不选中,第二个参数是选中列表的数据的集合
@@ -1058,6 +1191,112 @@ export default {
         }
       }
     },
+    // 获取备份历史流程Sql
+    getTableSql: function () {
+      const _self = this;
+      const url = 'api/MongoDBResource/getBackUpsTableSql';
+      ajaxApiGet(url).then(
+        success => {
+          _self.tableSql = success;
+        },
+
+        error => {
+          if (error.status === 404) {
+            _self.archiveVisible = false;
+            Notify.error(
+              '服务器未配置历史流程归档实现,请配置:',
+              'prodog-workflow-history-spring-boot-starter 历史流程归档服务。',
+              false,
+            );
+          } else {
+            Common.processException(error);
+          }
+        },
+      );
+    },
+    // 获取删除已归档历史表数据sql和清空待删除表sql
+    getDeleteTableSql: function () {
+      const _self = this;
+      const url = 'api/MongoDBResource/getDeleteTableSql';
+      ajaxApiGet(url).then(
+        success => {
+          _self.deleteTableSql = success;
+        },
+        error => {
+          Common.processException(error);
+        },
+      );
+    },
+
+    // 执行归档
+    archiveDatas: function () {
+      const _self = this;
+      const url = 'api/MongoDBResource/archiveHistoryData';
+      _self.loading = true;
+      ajaxApi(url).then(
+        success => {
+          if (success === 0) {
+            _self.isNext = true;
+            Notify.success('成功', '归档执行成功。', false);
+          }
+          _self.loading = false;
+        },
+        error => {
+          _self.loading = false;
+          Common.processException(error);
+        },
+      );
+    },
+
+    // 复制文本(兼容http和https)
+    copyText() {
+      const _self = this;
+      let text;
+      if (_self.current === 0) {
+        text = _self.tableSql;
+      } else if (_self.current === 2) {
+        text = _self.deleteTableSql;
+      }
+      if (navigator.clipboard && window.isSecureContext) {
+        navigator.clipboard
+          .writeText(text)
+          .then(() => {
+            if (_self.current === 0) {
+              _self.isOk = true;
+            } else if (_self.current === 2) {
+              _self.isDeleteOk = true;
+            }
+            message.success('复制成功');
+          })
+          .catch(err => {
+            console.error(err);
+          });
+      } else {
+        const textArea = document.createElement('textarea');
+        textArea.value = text;
+        document.body.appendChild(textArea);
+        textArea.focus();
+        textArea.select();
+        return new Promise((resolve, reject) => {
+          document.execCommand('copy')
+            ? resolve()
+            : reject(new Error('出错了'));
+          textArea.remove();
+        }).then(
+          () => {
+            if (_self.current === 0) {
+              _self.isOk = true;
+            } else if (_self.current === 2) {
+              _self.isDeleteOk = true;
+            }
+            message.success('复制成功');
+          },
+          () => {
+            console.log('复制失败');
+          },
+        );
+      }
+    },
   },
 };
 </script>
@@ -1072,4 +1311,12 @@ export default {
 .footerStyle {
   float: right;
 }
+.steps-content,
+.steps-action {
+  margin-top: 10px;
+}
+.steps-action {
+  display: flex;
+  justify-content: space-between;
+}
 </style>