فهرست منبع

动态表单适配

xiongzhu 7 سال پیش
والد
کامیت
894a87cb28

+ 2 - 2
src/main/java/com/izouma/awesomeadmin/frame/gen/GenEntity.java

@@ -602,7 +602,7 @@ public class GenEntity {
         sb.append("\t\t\t\t},\r\n");
         sb.append("\t\t\t\tloading: false,\r\n");
         sb.append("\t\t\t\ttotalNumber: 0,\r\n");
-        sb.append("\t\t\t\ttotalPage: 10,\r\n");
+        sb.append("\t\t\t\ttotalPage: 0,\r\n");
         sb.append("\t\t\t\tcurrentPage: 1,\r\n");
         sb.append("\t\t\t\tpageSize: 20,\r\n");
         sb.append("\t\t\t\trows: []\r\n");
@@ -872,7 +872,7 @@ public class GenEntity {
         sb.append("\t\tdata() {\r\n");
         sb.append("\t\t\treturn {\r\n");
         sb.append("\t\t\t\ttotalNumber: 0,\r\n");
-        sb.append("\t\t\t\ttotalPage: 10,\r\n");
+        sb.append("\t\t\t\ttotalPage: 0,\r\n");
         sb.append("\t\t\t\tcurrentPage: 1,\r\n");
         sb.append("\t\t\t\tpageSize: 20,\r\n");
         sb.append("\t\t\t\ttableData: [],\r\n");

+ 49 - 9
src/main/java/com/izouma/awesomeadmin/web/ActivitiController.java

@@ -3,35 +3,48 @@ package com.izouma.awesomeadmin.web;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.izouma.awesomeadmin.dto.Result;
+import org.activiti.bpmn.converter.BpmnXMLConverter;
+import org.activiti.bpmn.model.BpmnModel;
 import org.activiti.editor.constants.ModelDataJsonConstants;
+import org.activiti.editor.language.json.converter.BpmnJsonConverter;
 import org.activiti.engine.*;
+import org.activiti.engine.form.FormProperty;
 import org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl;
+import org.activiti.engine.impl.form.EnumFormType;
+import org.activiti.engine.impl.form.FormData;
+import org.activiti.engine.impl.form.StartFormDataImpl;
+import org.activiti.engine.repository.Deployment;
+import org.activiti.engine.repository.DeploymentBuilder;
 import org.activiti.engine.repository.Model;
 import org.activiti.engine.repository.ModelQuery;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.*;
 
+import javax.servlet.http.HttpServletRequest;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
+import java.util.Set;
 
 @Controller
 @RequestMapping("/activiti")
 public class ActivitiController {
     @Autowired
-    protected IdentityService                identityService;
+    private IdentityService                identityService;
     @Autowired
-    protected RepositoryService              repositoryService;
+    private RepositoryService              repositoryService;
     @Autowired
-    protected RuntimeService                 runtimeService;
+    private RuntimeService                 runtimeService;
     @Autowired
-    protected TaskService                    taskService;
+    private TaskService                    taskService;
     @Autowired
-    protected ManagementService              managementService;
+    private ManagementService              managementService;
     @Autowired
-    protected ProcessEngineConfigurationImpl processEngineConfiguration;
+    private FormService                    formService;
+    @Autowired
+    private ProcessEngineConfigurationImpl processEngineConfiguration;
 
     @RequestMapping(value = "/processList", method = RequestMethod.GET)
     @ResponseBody
@@ -72,4 +85,31 @@ public class ActivitiController {
         }
         return new Result(false, "创建失败");
     }
+
+    @RequestMapping(value = "/publishModel", method = RequestMethod.GET)
+    @ResponseBody
+    public Result publishModel(@RequestParam("id") String id) {
+        try {
+            Model modelData = repositoryService.getModel(id);
+            ObjectNode modelNode = (ObjectNode) new ObjectMapper().readTree(repositoryService.getModelEditorSource(modelData.getId()));
+            byte[] bpmnBytes = null;
+
+            BpmnModel model = new BpmnJsonConverter().convertToBpmnModel(modelNode);
+            bpmnBytes = new BpmnXMLConverter().convertToXML(model);
+
+            String processName = modelData.getName() + ".bpmn20.xml";
+            Deployment deployment = repositoryService.createDeployment().name(modelData.getName()).addString(processName, new String(bpmnBytes)).deploy();
+            return new Result(true, deployment);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return new Result(false, "失败");
+    }
+
+    @RequestMapping(value = "/startProcess", method = RequestMethod.POST)
+    @ResponseBody
+    public Result startProcess(@RequestBody Map<String, String> formProperties) {
+        return new Result(true, "");
+    }
+
 }

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 202 - 163
src/main/vue/package-lock.json


+ 16 - 16
src/main/vue/package.json

@@ -10,59 +10,59 @@
     "build": "node build/build.js"
   },
   "dependencies": {
-    "@fortawesome/fontawesome": "^1.1.5",
-    "@fortawesome/fontawesome-free-solid": "^5.0.10",
+    "@fortawesome/fontawesome": "^1.1.8",
+    "@fortawesome/fontawesome-free-solid": "^5.0.13",
     "@fortawesome/vue-fontawesome": "0.0.22",
     "axios": "^0.18.0",
     "chart.js": "^2.7.2",
     "date-fns": "^1.29.0",
-    "element-ui": "^2.3.2",
-    "less": "^3.0.1",
+    "element-ui": "^2.4.1",
+    "less": "^3.0.4",
     "less-loader": "^4.1.0",
     "normalize.css": "^8.0.0",
     "vue": "^2.5.2",
     "vue-axios": "^2.1.1",
     "vue-chartjs": "^3.3.1",
-    "vue-i18n": "^7.7.0",
+    "vue-i18n": "^7.8.0",
     "vue-router": "^3.0.1",
     "vuex": "^3.0.1"
   },
   "devDependencies": {
     "autoprefixer": "^7.1.2",
-    "babel-core": "^6.22.1",
+    "babel-core": "^6.26.3",
     "babel-helper-vue-jsx-merge-props": "^2.0.3",
     "babel-loader": "^7.1.1",
     "babel-plugin-syntax-jsx": "^6.18.0",
     "babel-plugin-transform-runtime": "^6.22.0",
     "babel-plugin-transform-vue-jsx": "^3.5.0",
-    "babel-preset-env": "^1.3.2",
+    "babel-preset-env": "^1.7.0",
     "babel-preset-stage-2": "^6.22.0",
-    "chalk": "^2.0.1",
+    "chalk": "^2.4.1",
     "copy-webpack-plugin": "^4.0.1",
     "css-loader": "^0.28.0",
     "extract-text-webpack-plugin": "^3.0.0",
     "file-loader": "^1.1.4",
-    "friendly-errors-webpack-plugin": "^1.6.1",
+    "friendly-errors-webpack-plugin": "^1.7.0",
     "html-webpack-plugin": "^2.30.1",
     "node-notifier": "^5.1.2",
     "optimize-css-assets-webpack-plugin": "^3.2.0",
     "ora": "^1.2.0",
     "portfinder": "^1.0.13",
     "postcss-import": "^11.0.0",
-    "postcss-loader": "^2.0.8",
-    "postcss-url": "^7.2.1",
+    "postcss-loader": "^2.1.5",
+    "postcss-url": "^7.3.2",
     "rimraf": "^2.6.0",
     "semver": "^5.3.0",
     "shelljs": "^0.7.6",
-    "uglifyjs-webpack-plugin": "^1.1.1",
+    "uglifyjs-webpack-plugin": "^1.2.5",
     "url-loader": "^0.5.8",
-    "vue-loader": "^13.3.0",
+    "vue-loader": "^13.7.2",
     "vue-style-loader": "^3.0.1",
     "vue-template-compiler": "^2.5.2",
-    "webpack": "^3.6.0",
-    "webpack-bundle-analyzer": "^2.9.0",
+    "webpack": "^3.12.0",
+    "webpack-bundle-analyzer": "^2.13.1",
     "webpack-dev-server": "^2.9.1",
-    "webpack-merge": "^4.1.0"
+    "webpack-merge": "^4.1.3"
   },
   "engines": {
     "node": ">= 6.0.0",

+ 191 - 0
src/main/vue/src/pages/MyProcesses.vue

@@ -0,0 +1,191 @@
+<template>
+    <div>
+        <div class="filters-container">
+            <el-select class="filter-item" v-model="selectedDeploymentId" size="small">
+                <el-option v-for="item in processDefinitions" :label="item.name" :value="item.id"
+                           :key="item.id"></el-option>
+            </el-select>
+            <el-button @click="startProcess" type="primary" size="small" class="filter-item">发起
+            </el-button>
+        </div>
+        <el-table
+            :data="tableData"
+            :height="tableHeight"
+            row-key="id"
+            ref="table">
+            <el-table-column
+                v-if="multipleMode"
+                align="center"
+                type="selection"
+                min-width="50">
+            </el-table-column>
+            <el-table-column
+                prop="id"
+                label="id"
+                width="150">
+            </el-table-column>
+            <el-table-column
+                prop="name"
+                label="名称">
+            </el-table-column>
+            <el-table-column
+                prop="createTime"
+                label="创建时间"
+                :formatter="datetimeFormatter">
+            </el-table-column>
+            <el-table-column
+                prop="lastUpdateTime"
+                label="更新时间"
+                :formatter="datetimeFormatter">
+            </el-table-column>
+            <el-table-column
+                label="操作"
+                align="center"
+                width="300">
+                <template slot-scope="{row}">
+                    <el-button @click="editRow(row)" type="primary" size="mini" plain>编辑</el-button>
+                    <el-button @click="publishModel(row)" type="success" size="mini" plain>发布</el-button>
+                    <el-button @click="editRow(row)" size="mini" plain>导出</el-button>
+                    <el-button @click="deleteModel(row)" type="danger" size="mini" plain>删除</el-button>
+                </template>
+            </el-table-column>
+        </el-table>
+        <div class="pagination-wrapper">
+            <el-pagination
+                background
+                @size-change="pageSizeChange"
+                @current-change="currentPageChange"
+                :current-page="currentPage"
+                :page-sizes="[10, 20, 30, 40, 50]"
+                :page-size="pageSize"
+                layout="total, sizes, prev, pager, next, jumper"
+                :total="totalNumber">
+            </el-pagination>
+        </div>
+        <el-dialog :visible.sync="dialogVisible" title="发起流程">
+            <el-form :model="startFormModel" ref="startForm" label-position="top" size="small" :rules="rules">
+                <el-form-item
+                    v-for="item in startForm"
+                    :prop="item.id"
+                    :label="item.name"
+                    :key="item.id">
+                    <el-input v-if="item.type === 'string'" v-model="startFormModel[item.id]"></el-input>
+                    <el-select
+                        v-else-if="item.type === 'enum'"
+                        v-model="startFormModel[item.id]">
+                        <el-option
+                            v-for="option in item.enumValues"
+                            :label="option.name"
+                            :value="option.id">
+                        </el-option>
+                    </el-select>
+                    <el-date-picker
+                        v-else-if="item.type === 'date'"
+                        v-model="startFormModel[item.id]"
+                        type="datetime"
+                        :format="item.datePattern"
+                        :value-format="item.datePattern">
+                    </el-date-picker>
+                    <el-switch
+                        v-else-if="item.type === 'boolean'"
+                        v-model="startFormModel[item.id]">
+                    </el-switch>
+                </el-form-item>
+            </el-form>
+            <div slot="footer">
+                <el-button @click="dialogVisible = false" size="small">取消</el-button>
+                <el-button type="primary" @click="confirmStartProcess" :loading="loading" size="small">确定</el-button>
+            </div>
+        </el-dialog>
+    </div>
+</template>
+<script>
+    import {mapState} from 'vuex'
+    import axios from 'axios'
+
+    export default {
+        created() {
+            this.getData();
+        },
+        data() {
+            return {
+                totalNumber: 0,
+                totalPage: 0,
+                currentPage: 1,
+                pageSize: 20,
+                tableData: [],
+                multipleMode: false,
+                loading: false,
+                processDefinitions: [],
+                selectedDeploymentId: '',
+                dialogVisible: false,
+                startForm: [],
+                startFormModel: {},
+                enumValues: {}
+            }
+        },
+        computed: {
+            ...mapState(['tableHeight']),
+            selection() {
+                return this.$refs.table.selection.map(i => i.id);
+            },
+            rules() {
+                let rules = {};
+                this.startForm.forEach(item => {
+                    rules[item.id] = [{required: true, message: `请填写${item.name}`, trigger: 'blur'}]
+                });
+                return rules;
+            }
+        },
+        methods: {
+            pageSizeChange(size) {
+                this.pageSize = size;
+                this.getData();
+            },
+            currentPageChange(page) {
+                this.currentPage = page;
+                this.getData();
+            },
+            getData() {
+                this.$http.get({
+                    url: '/rest/repository/process-definitions',
+                    data: {
+                        suspended: false
+                    }
+                }).then(res => {
+                    this.processDefinitions = res.data;
+                })
+            },
+            startProcess() {
+                this.$http.get({
+                    url: '/rest/form/form-data',
+                    data: {
+                        processDefinitionId: this.selectedDeploymentId
+                    }
+                }).then(res => {
+                    this.startForm = res.formProperties;
+                    this.startFormModel = {};
+                    this.dialogVisible = true;
+                })
+            },
+            confirmStartProcess() {
+                this.$refs.startForm.validate(valid => {
+                    if (valid) {
+                        this.$http.post({
+                            url: '/activiti/startProcess',
+                            data: this.startFormModel
+                        }).then(res => {
+                            if (res.success) {
+                                this.dialogVisible = false;
+                                this.$message.success('成功');
+                            }
+                        })
+                    }
+                })
+            }
+        }
+    }
+</script>
+<style lang="less" scoped>
+
+</style>

+ 210 - 0
src/main/vue/src/pages/MyTasks.vue

@@ -0,0 +1,210 @@
+<template>
+    <div>
+        <div class="filters-container">
+            <el-input placeholder="输入关键字" size="small" v-model="name" clearable class="filter-item"></el-input>
+            <el-button @click="getData" type="primary" size="small" icon="el-icon-search" class="filter-item">搜索
+            </el-button>
+            <el-button @click="showCreateModelDialog" type="primary" size="small" icon="el-icon-edit"
+                       class="filter-item">创建
+            </el-button>
+        </div>
+        <el-table
+            :data="tableData"
+            :height="tableHeight"
+            row-key="id"
+            ref="table">
+            <el-table-column
+                v-if="multipleMode"
+                align="center"
+                type="selection"
+                min-width="50">
+            </el-table-column>
+            <el-table-column
+                prop="id"
+                label="id"
+                width="150">
+            </el-table-column>
+            <el-table-column
+                prop="name"
+                label="名称">
+            </el-table-column>
+            <el-table-column
+                prop="createTime"
+                label="创建时间"
+                :formatter="datetimeFormatter">
+            </el-table-column>
+            <el-table-column
+                prop="lastUpdateTime"
+                label="更新时间"
+                :formatter="datetimeFormatter">
+            </el-table-column>
+            <el-table-column
+                label="操作"
+                align="center"
+                width="300">
+                <template slot-scope="{row}">
+                    <el-button @click="editRow(row)" type="primary" size="mini" plain>编辑</el-button>
+                    <el-button @click="publishModel(row)" type="success" size="mini" plain>发布</el-button>
+                    <el-button @click="editRow(row)" size="mini" plain>导出</el-button>
+                    <el-button @click="deleteModel(row)" type="danger" size="mini" plain>删除</el-button>
+                </template>
+            </el-table-column>
+        </el-table>
+        <div class="pagination-wrapper">
+            <el-pagination
+                background
+                @size-change="pageSizeChange"
+                @current-change="currentPageChange"
+                :current-page="currentPage"
+                :page-sizes="[10, 20, 30, 40, 50]"
+                :page-size="pageSize"
+                layout="total, sizes, prev, pager, next, jumper"
+                :total="totalNumber">
+            </el-pagination>
+        </div>
+        <el-dialog :visible.sync="dialogVisible" title="创建菜单">
+            <el-form :model="newModel" ref="newModelForm" label-position="top" size="small">
+                <el-form-item label="名称" prop="name" :rules="[{required: true, message: '请填写名称', trigger: 'blur'}]">
+                    <el-input v-model="newModel.name"></el-input>
+                </el-form-item>
+                <el-form-item label="描述" prop="description"
+                              :rules="[{required: true, message: '请填写描述', trigger: 'blur'}]">
+                    <el-input v-model="newModel.description"></el-input>
+                </el-form-item>
+            </el-form>
+            <div slot="footer">
+                <el-button @click="dialogVisible = false" size="small">取消</el-button>
+                <el-button type="primary" @click="createModel" :loading="loading" size="small">保存</el-button>
+            </div>
+        </el-dialog>
+    </div>
+</template>
+<script>
+    import {mapState} from 'vuex'
+    import axios from 'axios'
+
+    export default {
+        created() {
+            this.getData();
+        },
+        data() {
+            return {
+                totalNumber: 0,
+                totalPage: 0,
+                currentPage: 1,
+                pageSize: 20,
+                tableData: [],
+                name: '',
+                multipleMode: false,
+                dialogVisible: false,
+                newModel: {
+                    name: '',
+                    description: ''
+                },
+                loading: false
+            }
+        },
+        computed: {
+            ...mapState(['tableHeight']),
+            selection() {
+                return this.$refs.table.selection.map(i => i.id);
+            }
+        },
+        methods: {
+            pageSizeChange(size) {
+                this.pageSize = size;
+                this.getData();
+            },
+            currentPageChange(page) {
+                this.currentPage = page;
+                this.getData();
+            },
+            getData() {
+                var data = {};
+                if (this.name) {
+                    data.name = this.name;
+                }
+                this.$http.get({
+                    url: '/activiti/processList',
+                    data: data
+                }).then(res => {
+                    if (res.success) {
+                        this.totalNumber = res.data.length;
+                        let i = this.currentPage - 1;
+                        this.tableData = res.data.splice((i < 0 ? 0 : i) * this.pageSize, this.pageSize);
+                    }
+                })
+            },
+            toggleMultipleMode(multipleMode) {
+                this.multipleMode = multipleMode;
+                if (!multipleMode) {
+                    this.$refs.table.clearSelection();
+                }
+            },
+            editRow(row) {
+                window.open(`${this.$baseUrl}/modeler.html?modelId=${row.id}`);
+            },
+            operation1() {
+                this.$notify({
+                    title: '提示',
+                    message: this.selection
+                });
+            },
+            operation2() {
+                this.$message('操作2');
+            },
+            showCreateModelDialog() {
+                this.newModel = {
+                    name: '',
+                    description: ''
+                };
+                this.dialogVisible = true;
+            },
+            createModel() {
+                this.$refs.newModelForm.validate(valid => {
+                    if (valid) {
+                        this.loading = true;
+                        this.$http.get({
+                            url: '/activiti/createModel',
+                            data: this.newModel
+                        }).then(res => {
+                            this.loading = false;
+                            if (res.success) {
+                                this.dialogVisible = false;
+                                this.$message.success('创建成功');
+                                this.getData();
+                            }
+                        }).catch(() => {
+                            this.loading = false;
+                        })
+                    }
+                })
+            },
+            publishModel(row) {
+                this.$http.get({
+                    url: '/activiti/publishModel',
+                    data: {
+                        id: row.id
+                    }
+                }).then(res => {
+                    if (res.success) {
+                        this.$message.success('发布成功');
+                    }
+                })
+            },
+            deleteModel(row) {
+                this.$alert('确认删除?', '警告', {type: 'error'}).then(() => {
+                    return axios.delete(`/rest/repository/models/${row.id}`)
+                }).then(() => {
+                    this.$message.success("删除成功");
+                    this.getData();
+                }).catch(() => {
+                    this.$message.error("删除失败");
+                })
+            }
+        }
+    }
+</script>
+<style lang="less" scoped>
+
+</style>

+ 1 - 1
src/main/vue/src/pages/Permissions.vue

@@ -85,7 +85,7 @@
         data() {
             return {
                 totalNumber: 0,
-                totalPage: 10,
+                totalPage: 0,
                 currentPage: 1,
                 pageSize: 20,
                 tableData: [],

+ 43 - 21
src/main/vue/src/pages/ProcessDefinitions.vue

@@ -29,24 +29,31 @@
                 label="名称">
             </el-table-column>
             <el-table-column
-                prop="createTime"
-                label="创建时间"
-                :formatter="datetimeFormatter">
+                prop="description"
+                label="描述">
             </el-table-column>
             <el-table-column
-                prop="lastUpdateTime"
-                label="更新时间"
-                :formatter="datetimeFormatter">
+                prop="version"
+                label="版本"
+                align="center">
+            </el-table-column>
+            <el-table-column
+                label="状态"
+                align="center">
+                <template slot-scope="{row}">
+                    <el-tag size="mini" type="info" v-if="row.suspended">已挂起</el-tag>
+                    <el-tag size="mini" type="success" v-else>已激活</el-tag>
+                </template>
             </el-table-column>
             <el-table-column
                 label="操作"
                 align="center"
-                width="300">
-                <template slot-scope="scope">
-                    <el-button @click="editRow(scope.row)" type="primary" size="mini" plain>编辑</el-button>
-                    <el-button @click="editRow(scope.row)" type="success" size="mini" plain>发布</el-button>
-                    <el-button @click="editRow(scope.row)" size="mini" plain>导出</el-button>
-                    <el-button @click="deleteModel(scope.row)" type="danger" size="mini" plain>删除</el-button>
+                width="200">
+                <template slot-scope="{row}">
+                    <el-button @click="changeState(row, true)" type="primary" size="mini" plain v-if="row.suspended">激活
+                    </el-button>
+                    <el-button @click="changeState(row, false)" type="warning" size="mini" plain v-else>挂起</el-button>
+                    <el-button @click="deleteDeployment(row)" type="danger" size="mini" plain>删除</el-button>
                 </template>
             </el-table-column>
         </el-table>
@@ -62,7 +69,7 @@
                 :total="totalNumber">
             </el-pagination>
         </div>
-        <el-dialog :visible.sync="dialogVisible" title="创建菜单">
+        <el-dialog :visible.sync="dialogVisible" title="创建流程">
             <el-form :model="newModel" ref="newModelForm" label-position="top" size="small">
                 <el-form-item label="名称" prop="name" :rules="[{required: true, message: '请填写名称', trigger: 'blur'}]">
                     <el-input v-model="newModel.name"></el-input>
@@ -90,7 +97,7 @@
         data() {
             return {
                 totalNumber: 0,
-                totalPage: 10,
+                totalPage: 0,
                 currentPage: 1,
                 pageSize: 20,
                 tableData: [],
@@ -128,11 +135,9 @@
                     url: '/rest/repository/process-definitions',
                     data: data
                 }).then(res => {
-                    if (res.success) {
-                        this.totalNumber = res.data.length;
-                        let i = this.currentPage - 1;
-                        this.tableData = res.data.splice((i < 0 ? 0 : i) * this.pageSize, this.pageSize);
-                    }
+                    this.totalNumber = res.data.length;
+                    let i = this.currentPage - 1;
+                    this.tableData = res.data.splice((i < 0 ? 0 : i) * this.pageSize, this.pageSize);
                 })
             },
             toggleMultipleMode(multipleMode) {
@@ -180,9 +185,26 @@
                     }
                 })
             },
-            deleteModel(row) {
+            changeState(row, state) {
+                this.$alert(`确认${state ? '激活' : '挂起'}?`, '警告', {type: 'warning'}).then(() => {
+                    return axios.put(`rest/repository/process-definitions/${row.id}`, {
+                        action: state ? 'activate' : 'suspend',
+                        includeProcessInstances: false
+                    })
+                }).then(() => {
+                    this.$message.success("操作成功");
+                    this.getData();
+                }).catch(res => {
+                    if (res === 'cancel') {
+
+                    } else {
+                        this.$message.error("操作失败");
+                    }
+                })
+            },
+            deleteDeployment(row) {
                 this.$alert('确认删除?', '警告', {type: 'error'}).then(() => {
-                    return axios.delete(`rest/repository/models/${row.id}`)
+                    return axios.delete(`rest/repository/deployments/${row.deploymentId}`)
                 }).then(() => {
                     this.$message.success("删除成功");
                     this.getData();

+ 23 - 7
src/main/vue/src/pages/ProcessModels.vue

@@ -42,11 +42,11 @@
                 label="操作"
                 align="center"
                 width="300">
-                <template slot-scope="scope">
-                    <el-button @click="editRow(scope.row)" type="primary" size="mini" plain>编辑</el-button>
-                    <el-button @click="editRow(scope.row)" type="success" size="mini" plain>发布</el-button>
-                    <el-button @click="editRow(scope.row)" size="mini" plain>导出</el-button>
-                    <el-button @click="deleteModel(scope.row)" type="danger" size="mini" plain>删除</el-button>
+                <template slot-scope="{row}">
+                    <el-button @click="editRow(row)" type="primary" size="mini" plain>编辑</el-button>
+                    <el-button @click="publishModel(row)" type="success" size="mini" plain>发布</el-button>
+                    <el-button @click="editRow(row)" size="mini" plain>导出</el-button>
+                    <el-button @click="deleteModel(row)" type="danger" size="mini" plain>删除</el-button>
                 </template>
             </el-table-column>
         </el-table>
@@ -90,7 +90,7 @@
         data() {
             return {
                 totalNumber: 0,
-                totalPage: 10,
+                totalPage: 0,
                 currentPage: 1,
                 pageSize: 20,
                 tableData: [],
@@ -180,6 +180,18 @@
                     }
                 })
             },
+            publishModel(row) {
+                this.$http.get({
+                    url: '/activiti/publishModel',
+                    data: {
+                        id: row.id
+                    }
+                }).then(res => {
+                    if (res.success) {
+                        this.$message.success('发布成功');
+                    }
+                })
+            },
             deleteModel(row) {
                 this.$alert('确认删除?', '警告', {type: 'error'}).then(() => {
                     return axios.delete(`/rest/repository/models/${row.id}`)
@@ -187,7 +199,11 @@
                     this.$message.success("删除成功");
                     this.getData();
                 }).catch(() => {
-                    this.$message.error("删除失败");
+                    if (res === 'cancel') {
+
+                    } else {
+                        this.$message.error("删除失败");
+                    }
                 })
             }
         }

+ 1 - 1
src/main/vue/src/pages/Roles.vue

@@ -126,7 +126,7 @@
         data() {
             return {
                 totalNumber: 0,
-                totalPage: 10,
+                totalPage: 0,
                 currentPage: 1,
                 pageSize: 20,
                 tableData: [],

+ 2 - 2
src/main/vue/src/pages/TestAaas.vue

@@ -1,7 +1,7 @@
 <template>
     <div>
         <div class="filters-container">
-          
+
             <el-input placeholder="用户名" size="small" v-model="filter1" clearable class="filter-item"></el-input>
             <el-select placeholder="性别" size="small" v-model="filter2" clearable class="filter-item">
                 <el-option
@@ -98,7 +98,7 @@
         data() {
             return {
                 totalNumber: 0,
-                totalPage: 10,
+                totalPage: 0,
                 currentPage: 1,
                 pageSize: 20,
                 tableData: [],

+ 1 - 1
src/main/vue/src/pages/TestGenList.vue

@@ -96,7 +96,7 @@
         data() {
             return {
                 totalNumber: 0,
-                totalPage: 10,
+                totalPage: 0,
                 currentPage: 1,
                 pageSize: 20,
                 tableData: [],

+ 1 - 1
src/main/vue/src/pages/Users.vue

@@ -117,7 +117,7 @@
         data() {
             return {
                 totalNumber: 0,
-                totalPage: 10,
+                totalPage: 0,
                 currentPage: 1,
                 pageSize: 20,
                 tableData: [],

+ 10 - 0
src/main/vue/src/router/index.js

@@ -115,6 +115,16 @@ const router = new Router({
                     path: '/processDefinitions',
                     name: 'processDefinitions',
                     component: () => import('../pages/ProcessDefinitions')
+                },
+                {
+                    path: '/myProcesses',
+                    name: 'myProcesses',
+                    component: () => import('../pages/MyProcesses')
+                },
+                {
+                    path: '/myTasks',
+                    name: 'myTasks',
+                    component: () => import('../pages/MyTasks')
                 }
             ]
         },

برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است