index.vue 7.67 KB
Newer Older
sunhongwei's avatar
sunhongwei committed
1 2 3 4
<template>
  <div class="app-container">
    <!-- 搜索工作栏 -->
    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
dragondean@qq.com's avatar
dragondean@qq.com committed
5 6
      <el-form-item :label="$t('流程编号')" prop="name">
        <el-input v-model="queryParams.processDefinitionId" :placeholder="$t('流程编号')" clearable @keyup.enter.native="handleQuery"/>
sunhongwei's avatar
sunhongwei committed
7
      </el-form-item>
dragondean@qq.com's avatar
dragondean@qq.com committed
8 9 10 11 12
      <el-form-item :label="$t('流程名称')" prop="name">
        <el-input v-model="queryParams.name" :placeholder="$t('任务名称')" clearable @keyup.enter.native="handleQuery"/>
      </el-form-item>
      <el-form-item :label="$t('流程分类')" prop="category">
        <el-select v-model="queryParams.category" :placeholder="$t('请选择流程分类')" clearable>
sunhongwei's avatar
sunhongwei committed
13 14 15 16
          <el-option v-for="dict in this.getDictDatas(DICT_TYPE.BPM_MODEL_CATEGORY)"
                     :key="dict.value" :label="dict.label" :value="dict.value"/>
        </el-select>
      </el-form-item>
dragondean@qq.com's avatar
dragondean@qq.com committed
17
      <el-form-item :label="$t('提交时间')">
sunhongwei's avatar
sunhongwei committed
18
        <el-date-picker v-model="dateRangeCreateTime" style="width: 240px" value-format="yyyy-MM-dd"
dragondean@qq.com's avatar
dragondean@qq.com committed
19
                        type="daterange" range-separator="-" start-:placeholder="$t('开始日期')" end-:placeholder="$t('结束日期')" />
sunhongwei's avatar
sunhongwei committed
20
      </el-form-item>
dragondean@qq.com's avatar
dragondean@qq.com committed
21 22
      <el-form-item :label="$t('状态')" prop="status">
        <el-select v-model="queryParams.status" :placeholder="$t('请选择状态')" clearable>
sunhongwei's avatar
sunhongwei committed
23
          <el-option v-for="dict in this.getDictDatas(DICT_TYPE.BPM_PROCESS_INSTANCE_STATUS)"
dragondean@qq.com's avatar
dragondean@qq.com committed
24
                     :key="dict.value" :label="$l(dict, 'label')" :value="dict.value"/>
sunhongwei's avatar
sunhongwei committed
25 26
        </el-select>
      </el-form-item>
dragondean@qq.com's avatar
dragondean@qq.com committed
27 28
      <el-form-item :label="$t('结果')" prop="result">
        <el-select v-model="queryParams.result" :placeholder="$t('请选择流结果')" clearable>
sunhongwei's avatar
sunhongwei committed
29 30 31 32 33
          <el-option v-for="dict in this.getDictDatas(DICT_TYPE.BPM_PROCESS_INSTANCE_RESULT)"
                     :key="dict.value" :label="dict.label" :value="dict.value"/>
        </el-select>
      </el-form-item>
      <el-form-item>
dragondean@qq.com's avatar
dragondean@qq.com committed
34 35
        <el-button type="primary" icon="el-icon-search" @click="handleQuery">{{$t('搜索')}}</el-button>
        <el-button icon="el-icon-refresh" @click="resetQuery">{{$t('重置')}}</el-button>
sunhongwei's avatar
sunhongwei committed
36 37 38 39 40
      </el-form-item>
    </el-form>

    <!-- 操作工具栏 -->
    <el-row :gutter="10" class="mb8">
dragondean@qq.com's avatar
dragondean@qq.com committed
41
       <!-- <el-col :span="1.5">
sunhongwei's avatar
sunhongwei committed
42
        <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
dragondean@qq.com's avatar
dragondean@qq.com committed
43
                   v-hasPermi="['bpm:process-instance:query']">{{$t('发起流程')}}</el-button>
dragondean@qq.com's avatar
dragondean@qq.com committed
44
      </el-col> -->
sunhongwei's avatar
sunhongwei committed
45 46 47 48 49
      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
    </el-row>

    <!-- 列表 -->
    <el-table v-loading="loading" :data="list">
dragondean@qq.com's avatar
dragondean@qq.com committed
50 51 52 53
      <el-table-column :label="$t('流程编号')" align="center" prop="id" width="320" />
      <el-table-column :label="$t('流程名称')" align="center" prop="name" />
      <el-table-column :label="$t('业务编号')" align="center" prop="businessNo" />
      <el-table-column :label="$t('流程分类')" align="center" prop="category">
sunhongwei's avatar
sunhongwei committed
54 55 56 57
        <template slot-scope="scope">
          <dict-tag :type="DICT_TYPE.BPM_MODEL_CATEGORY" :value="scope.row.category" />
        </template>
      </el-table-column>
dragondean@qq.com's avatar
dragondean@qq.com committed
58
      <el-table-column :label="$t('当前审批节点')" align="center" prop="tasks">
sunhongwei's avatar
sunhongwei committed
59
        <template slot-scope="scope">
60
          <el-button v-for="(task, taskIndex) in scope.row.tasks" type="text" @click="handleFormDetail(task.id)" :key="taskIndex">
sunhongwei's avatar
sunhongwei committed
61 62 63 64
            <span>{{ task.name }}</span>
          </el-button>
        </template>
      </el-table-column>
dragondean@qq.com's avatar
dragondean@qq.com committed
65
      <el-table-column :label="$t('状态')" align="center" prop="status">
sunhongwei's avatar
sunhongwei committed
66 67 68 69
        <template slot-scope="scope">
          <dict-tag :type="DICT_TYPE.BPM_PROCESS_INSTANCE_STATUS" :value="scope.row.status" />
        </template>
      </el-table-column>
dragondean@qq.com's avatar
dragondean@qq.com committed
70
      <el-table-column :label="$t('结果')" align="center" prop="result">
sunhongwei's avatar
sunhongwei committed
71 72 73 74
        <template slot-scope="scope">
          <dict-tag :type="DICT_TYPE.BPM_PROCESS_INSTANCE_RESULT" :value="scope.row.result"/>
        </template>
      </el-table-column>
dragondean@qq.com's avatar
dragondean@qq.com committed
75
      <el-table-column :label="$t('提交时间')" align="center" prop="createTime" width="180">
sunhongwei's avatar
sunhongwei committed
76 77 78 79
        <template slot-scope="scope">
          <span>{{ parseTime(scope.row.createTime) }}</span>
        </template>
      </el-table-column>
dragondean@qq.com's avatar
dragondean@qq.com committed
80
      <el-table-column :label="$t('结束时间')" align="center" prop="createTime" width="180">
sunhongwei's avatar
sunhongwei committed
81 82 83 84
        <template slot-scope="scope">
          <span>{{ parseTime(scope.row.endTime) }}</span>
        </template>
      </el-table-column>
85 86
      <el-table-column :label="$t('操作')" align="center" fixed="right" class-name="small-padding fixed-width" width="120px">
        <div slot-scope="scope" style="white-space:nowrap">
sunhongwei's avatar
sunhongwei committed
87
          <el-button type="text" size="small" icon="el-icon-delete" v-if="scope.row.result === 1"
dragondean@qq.com's avatar
dragondean@qq.com committed
88
                     v-hasPermi="['bpm:process-instance:cancel']" @click="handleCancel(scope.row)">{{$t('取消')}}</el-button>
sunhongwei's avatar
sunhongwei committed
89
          <el-button size="mini" type="text" icon="el-icon-edit" @click="handleDetail(scope.row)"
dragondean@qq.com's avatar
dragondean@qq.com committed
90
                     v-hasPermi="['bpm:process-instance:query']">{{$t('详情')}}</el-button>
91
        </div>
sunhongwei's avatar
sunhongwei committed
92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166
      </el-table-column>
    </el-table>
    <!-- 分页组件 -->
    <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
                @pagination="getList"/>

  </div>
</template>

<script>
import { getMyProcessInstancePage, cancelProcessInstance } from "@/api/bpm/processInstance";

export default {
  name: "ProcessInstance",
  components: {
  },
  data() {
    return {
      // 遮罩层
      loading: true,
      // 显示搜索条件
      showSearch: true,
      // 总条数
      total: 0,
      // 工作流的流程实例的拓展列表
      list: [],
      // 是否显示弹出层
      dateRangeCreateTime: [],
      // 查询参数
      queryParams: {
        pageNo: 1,
        pageSize: 10,
        name: null,
        processDefinitionId: null,
        category: null,
        status: null,
        result: null,
      }
    };
  },
  created() {
    this.getList();
  },
  methods: {
    /** 查询列表 */
    getList() {
      this.loading = true;
      // 处理查询参数
      let params = {...this.queryParams};
      this.addBeginAndEndTime(params, this.dateRangeCreateTime, 'createTime');
      // 执行查询
      getMyProcessInstancePage(params).then(response => {
        this.list = response.data.list;
        this.total = response.data.total;
        this.loading = false;
      });
    },
    /** 搜索按钮操作 */
    handleQuery() {
      this.queryParams.pageNo = 1;
      this.getList();
    },
    /** 重置按钮操作 */
    resetQuery() {
      this.dateRangeCreateTime = [];
      this.resetForm("queryForm");
      this.handleQuery();
    },
    /** 新增按钮操作 **/
    handleAdd() {
      this.$router.push({ path: "/bpm/process-instance/create"})
    },
    /** 取消按钮操作 */
    handleCancel(row) {
      const id = row.id;
dragondean@qq.com's avatar
dragondean@qq.com committed
167
      this.$prompt(this.$t('请输入取消原因?'), this.$t("取消流程"), {
sunhongwei's avatar
sunhongwei committed
168
        type: 'warning',
dragondean@qq.com's avatar
dragondean@qq.com committed
169 170
        confirmButtonText: this.$t("确定"),
        cancelButtonText: this.$t("取消"),
sunhongwei's avatar
sunhongwei committed
171
        inputPattern: /^[\s\S]*.*[^\s][\s\S]*$/, // 判断非空,且非空格
dragondean@qq.com's avatar
dragondean@qq.com committed
172
        inputErrorMessage: this.$t("取消原因不能为空"),
sunhongwei's avatar
sunhongwei committed
173 174 175 176
      }).then(({ value }) => {
        return cancelProcessInstance(id, value);
      }).then(() => {
        this.getList();
dragondean@qq.com's avatar
dragondean@qq.com committed
177
        this.$modal.msgSuccess(this.$t("取消成功"));
sunhongwei's avatar
sunhongwei committed
178 179 180 181 182 183 184 185 186
      })
    },
    /** 处理详情按钮 */
    handleDetail(row) {
      this.$router.push({ path: "/bpm/process-instance/detail", query: { id: row.id}});
    },
  }
};
</script>