🎉 1.2.2.RELEASE

saber
ssc 4 years ago
parent 7afbd8672c
commit 2b7be663f0
  1. 2
      public/cdn/avue-form-design/index.umd.min.js
  2. 15
      src/api/plugin/workflow/ops.js
  3. 7
      src/views/plugin/workflow/design/index.vue
  4. 10
      src/views/plugin/workflow/mixins/ex-form.js
  5. 245
      src/views/plugin/workflow/ops/done.vue
  6. 6
      src/views/plugin/workflow/ops/index.vue
  7. 1
      src/views/plugin/workflow/process/components/form.vue
  8. 12
      src/views/plugin/workflow/process/components/user-select.vue
  9. 2
      src/views/plugin/workflow/process/done.vue
  10. 2
      src/views/plugin/workflow/process/my-done.vue

File diff suppressed because one or more lines are too long

@ -17,6 +17,21 @@ export const getList = (current, size, params) => {
})
}
/**
* 所有办结流程
*/
export const getDoneList = (current, size, params) => {
return request({
url: `${prefix}/doneList`,
method: 'get',
params: {
...params,
current,
size,
}
})
}
/**
* 完成任务
*/

@ -30,8 +30,9 @@
:underline="false"
@click="$router.push('/plugin/workflow/design/form')">没有想要的表单点击去设计</el-link>
</template>
<template slot="form">
<avue-form ref="form2"
<template #form>
<avue-form style="margin-bottom: 66px;"
ref="form2"
v-model="step1.form"
:option="step1.option1"></avue-form>
</template>
@ -183,7 +184,7 @@ export default {
label: '表单',
prop: 'formKey',
type: 'select',
dicUrl: '/api/blade-workflow/design/form/list?current=1&size=99',
dicUrl: '/api/blade-workflow/design/form/list?size=-1&status=1',
dicFormatter: (data) => {
return data.data.records
},

@ -30,7 +30,7 @@ export default {
},
methods: {
// 动态路由跳转
dynamicRoute(row, type) {
dynamicRoute(row, type, async = false) {
const { id, taskId, processInstanceId, processId, formKey, formUrl } = row
let param = Buffer.from(JSON.stringify({
processId: id,
@ -55,7 +55,13 @@ export default {
this.$router.push(`/workflow/process/external/${formKey.substring(6)}/${type}?p=${param}`)
}
} else {
this.$router.push(`/workflow/process/${type}/${param}`)
if (async) {
return new Promise((resolve) => {
resolve({ row, type, param })
})
} else {
this.$router.push(`/workflow/process/${type}/${param}`)
}
}
},
// 根据可读可写,过滤avue column

@ -0,0 +1,245 @@
<template>
<basic-container>
<avue-crud ref="crud"
:option="option"
:table-loading="loading"
:data="data"
:page.sync="page"
v-model="form"
@search-change="searchChange"
@search-reset="searchReset"
@selection-change="selectionChange"
@current-change="currentChange"
@size-change="sizeChange"
@refresh-change="onLoad(page, query)"
@on-load="onLoad">
<template #processDefinitionName="{row}">
<el-link v-if="permission.wf_ops_detail"
style="font-size: 12px;"
type="primary"
@click="handleDetail(row)">{{row.processDefinitionName}}</el-link>
<span v-else>{{row.processDefinitionName}}</span>
</template>
<template #menu="{row}">
<el-button v-if="permission.wf_ops_follow"
type="text"
size="small"
icon="el-icon-search"
@click="handleFlow(row)">流程图</el-button>
</template>
</avue-crud>
<el-dialog :visible.sync="bpmnVisible"
append-to-body
destroy-on-close
title="流程图">
<wf-design ref="bpmn"
style="height: 500px;"
:options="bpmnOption"></wf-design>
</el-dialog>
<el-drawer :visible.sync="detailVisible"
:title="form.processDefinitionName"
custom-class="wf-drawer"
size="60%"
append-to-body>
<task-detail v-if="detailVisible"
:taskId="form.taskId"
:processInstanceId="form.processInstanceId"></task-detail>
</el-drawer>
</basic-container>
</template>
<script>
import { detail } from '@/api/plugin/workflow/process'
import { getDoneList as getList } from "@/api/plugin/workflow/ops";
import { mapGetters } from "vuex";
import TaskDetail from './detail.vue'
import exForm from '../mixins/ex-form'
export default {
mixins: [exForm],
components: {
TaskDetail
},
data() {
return {
form: {},
query: {},
loading: true,
page: {
pageSize: 10,
currentPage: 1,
total: 0
},
selectionList: [],
option: {
size: 'mini',
height: 'auto',
calcHeight: 30,
tip: false,
border: true,
selection: true,
dialogType: 'drawer',
addBtn: false,
editBtn: false,
delBtn: false,
align: 'center',
searchSize: 'mini',
searchMenuSpan: 6,
// searchIndex: 3,
// searchIcon: true,
column: [
{
label: '流程名称',
prop: 'processDefinitionName',
search: true,
overHidden: true
},
{
label: '流程标识',
prop: 'processDefinitionKey',
search: true,
overHidden: true
},
{
label: '流水号',
prop: 'serialNumber',
search: true,
overHidden: true
},
{
label: "流程分类",
row: true,
type: 'tree',
dicUrl: '/api/blade-workflow/design/category/tree',
props: {
label: 'name',
value: 'id'
},
prop: "category",
search: true,
},
{
label: '申请人',
prop: 'applyUserName',
search: true
},
{
label: '开始时间',
prop: 'createTime',
type: 'datetime',
format: 'yyyy-MM-dd HH:mm',
width: 165,
},
{
label: '结束时间',
prop: 'endTime',
type: 'datetime',
format: 'yyyy-MM-dd HH:mm',
width: 165,
},
{
label: '开始时间',
prop: 'date',
type: 'date',
dataType: 'string',
format: 'yyyy-MM-dd',
valueFormat: 'yyyy-MM-dd',
hide: true,
search: true,
searchRange: true,
},
{
label: '结束时间',
prop: 'date2',
type: 'date',
dataType: 'string',
format: 'yyyy-MM-dd',
valueFormat: 'yyyy-MM-dd',
hide: true,
search: true,
searchRange: true,
}
]
},
data: [],
bpmnVisible: false,
bpmnOption: {},
detailVisible: false
};
},
computed: {
...mapGetters(["permission"]),
ids() {
let ids = [];
this.selectionList.forEach(ele => {
ids.push(ele.taskId);
});
return ids.join(",");
}
},
methods: {
handleDetail(row) {
this.dynamicRoute(row, 'detail', true).then(() => {
this.form = { ...row }
this.detailVisible = true
})
},
handleFlow(row) {
const { taskId, processInstanceId } = row
detail({ taskId, processInsId: processInstanceId }).then(res => {
const { process, flow } = res.data.data
this.bpmnOption = {
mode: 'view',
xml: process.xml,
flows: this.handleResolveFlows(flow)
}
this.bpmnVisible = true
})
},
searchReset() {
this.query = {};
this.onLoad(this.page);
},
searchChange(params, done) {
this.query = params;
this.page.currentPage = 1;
this.onLoad(this.page, params);
done();
},
selectionChange(list) {
this.selectionList = list;
},
currentChange(currentPage) {
this.page.currentPage = currentPage;
},
sizeChange(pageSize) {
this.page.pageSize = pageSize;
},
async onLoad(page, params = {}) {
this.loading = true;
getList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
const data = res.data.data
this.page.total = data.total
this.data = data.records
this.loading = false
}).catch(() => {
this.loading = false
})
}
}
};
</script>
<style lang="scss">
.wf-drawer {
.el-drawer__body {
padding: 0 20px;
overflow: auto;
}
}
</style>

@ -326,8 +326,10 @@ export default {
}).catch(() => { })
},
handleDetail(row) {
this.form = { ...row }
this.detailVisible = true
this.dynamicRoute(row, 'detail', true).then(() => {
this.form = { ...row }
this.detailVisible = true
})
},
rollbackTask,
dispatchTask,

@ -32,6 +32,7 @@
<!-- 人员选择弹窗 -->
<wf-user-select ref="user-select"
:check-type="checkType"
:default-checked="defaultChecked"
@onConfirm="handleUserSelectConfirm"></wf-user-select>
</basic-container>
</template>

@ -208,10 +208,12 @@ export default {
this.selectionClear()
const checks = defaultChecked.split(",")
if (checks.length > 0) {
checks.forEach(c => {
const row = this.data.find(d => d.id == c)
if (row && this.$refs.crud) this.$refs.crud.toggleRowSelection(row, true)
})
setTimeout(() => {
checks.forEach(c => {
const row = this.data.find(d => d.id == c)
if (row && this.$refs.crud) this.$refs.crud.toggleRowSelection(row, true)
})
}, 500);
}
} else {
const row = this.data.find(d => d.id == defaultChecked)
@ -236,7 +238,7 @@ export default {
this.data = this.getAsVal(res, this.props.records) || []
this.loading = false
this.changeDefaultChecked()
// this.changeDefaultChecked()
})
},
getAsVal(obj, bind = '') {

@ -94,7 +94,7 @@ export default {
},
{
label: "流程分类",
type: "select",
type: "tree",
row: true,
dicUrl: '/api/blade-workflow/design/category/tree',
props: {

@ -90,7 +90,7 @@ export default {
},
{
label: "流程分类",
type: "select",
type: "tree",
row: true,
dicUrl: '/api/blade-workflow/design/category/tree',
props: {

Loading…
Cancel
Save