1. 流程节点功能修改

main
赵培友 3 years ago
parent 3246a8a717
commit f622563d43
  1. 42
      src/api/plugin/workflow/workorder.js
  2. 26
      src/const/workflow/crontab.js
  3. 5
      src/option/user/info.js
  4. 16
      src/views/plugin/workflow/mixins/ex-form.js
  5. 5
      src/views/plugin/workflow/process/components/button.vue
  6. 9
      src/views/plugin/workflow/process/components/examForm.vue
  7. 4
      src/views/plugin/workflow/process/components/flow.vue
  8. 5
      src/views/plugin/workflow/process/components/form.vue
  9. 80
      src/views/plugin/workflow/process/crontab.vue
  10. 17
      src/views/wel/index.vue

@ -1,5 +1,6 @@
import request from '@/router/axios'; import request from '@/router/axios';
const prefix = '/api/blade-workflow/workOrder' const prefix = '/api/blade-workflow/workOrder'
const prefix2 = '/api/blade-workflow/autoProcess'
// 工单记录查询 // 工单记录查询
export const getList = (query) => { export const getList = (query) => {
return request({ return request({
@ -8,6 +9,23 @@ export const getList = (query) => {
params:query params:query
}) })
} }
// 导出
export const exportExcel = (query) => {
return request({
url: `${prefix}/exportExcel`,
method: 'get',
params:query,
responseType: 'blob'
})
}
// 头部查询
export const conditionalData = (query) => {
return request({
url: `${prefix}/conditionalData`,
method: 'get',
params:query
})
}
// 我的待办 // 我的待办
export const todoList = (query) => { export const todoList = (query) => {
return request({ return request({
@ -16,20 +34,26 @@ export const todoList = (query) => {
params:query params:query
}) })
} }
// 头部查询 // 定时任务
export const conditionalData = (query) => { export const taskList = (query) => {
return request({ return request({
url: `${prefix}/conditionalData`, url: `${prefix2}/list`,
method: 'get', method: 'get',
params:query params:query
}) })
} }
// 导出 // 定时任务终止
export const exportExcel = (query) => { export const taskRemove = (query) => {
return request({ return request({
url: `${prefix}/exportExcel`, url: `${prefix2}/remove`,
method: 'get', method: 'get',
params:query, params:query
responseType: 'blob'
}) })
} }
// 重复模式
export const repeatMode = () => {
return request({
url: "/api/blade-system/dict-biz/dictionary?code=repeat_mode",
method: 'get',
})
}

@ -38,7 +38,7 @@ export const tableOption = {
{ {
type: "input", type: "input",
label: "操作模块", label: "操作模块",
prop: "operationModule", prop: "operaObject",
align: "left", align: "left",
overHidden: true, overHidden: true,
}, },
@ -46,35 +46,35 @@ export const tableOption = {
{ {
type: "input", type: "input",
label: "操作对象", label: "操作对象",
prop: "operationModule", prop: "operaModule",
align: "left",
overHidden: true,
},
{
type: "input",
label: "当前责任人",
prop: "currentResponsiblePerson",
align: "left", align: "left",
overHidden: true, overHidden: true,
}, },
// {
// type: "input",
// label: "当前责任人",
// prop: "currentResponsiblePerson",
// align: "left",
// overHidden: true,
// },
{ {
type: "input", type: "input",
label: "管理部门", label: "管理部门",
prop: "dept", prop: "deptName",
align: "left", align: "left",
overHidden: true, overHidden: true,
}, },
{ {
type: "input", type: "input",
label: "运维公司", label: "运维公司",
prop: "currentResponsiblePerson", prop: "maintenanceCompany",
align: "left", align: "left",
overHidden: true, overHidden: true,
}, },
{ {
type: "input", type: "input",
label: "发起人", label: "发起人",
prop: "sponsor", prop: "applyUser",
align: "left", align: "left",
overHidden: true, overHidden: true,
}, },
@ -91,7 +91,7 @@ export const tableOption = {
{ {
type: "input", type: "input",
label: "重复模式", label: "重复模式",
prop: "approvalStatus", prop: "repeatMode",
align: "left", align: "left",
overHidden: true, overHidden: true,
}, },

@ -11,14 +11,13 @@ export default {
listType: 'picture-img', listType: 'picture-img',
propsHttp: { propsHttp: {
res: 'data', res: 'data',
url: 'path', url: 'link',
name: 'name'
}, },
canvasOption: { canvasOption: {
text: ' ', text: ' ',
ratio: 0.1 ratio: 0.1
}, },
action: '/api/blade-workflow/database/upload', action: '/api/blade-resource/oss/endpoint/put-file',
tip: '只能上传jpg/png用户头像,且不超过500kb', tip: '只能上传jpg/png用户头像,且不超过500kb',
span: 12, span: 12,
row: true, row: true,

@ -342,15 +342,17 @@ export default {
const { comment, copyUser, assignee, attachment } = const { comment, copyUser, assignee, attachment } =
this.$refs.examineForm.examineForm; this.$refs.examineForm.examineForm;
// false隐藏 判断是否需要选择审批人 // false隐藏 判断是否需要选择审批人
let flag = this.$refs.examineForm.flag; if (pass) {
if (flag && assignee === undefined) { let flag = this.$refs.examineForm.flag;
this.$message.error("请指定审批人!"); if (flag && assignee === undefined) {
reject(); this.$message.error("请指定审批人!");
this.submitLoading = false; reject();
return; this.submitLoading = false;
return;
}
} }
if (!pass && !comment) { if (!pass && !comment) {
this.$message.error("请填写批复意见"); this.$message.error("请填写意见");
this.submitLoading = false; this.submitLoading = false;
reject(); reject();
return; return;

@ -13,13 +13,12 @@
<span v-if="['recall', 'reject'].includes(process.processIsFinished)">重新提交</span> <span v-if="['recall', 'reject'].includes(process.processIsFinished)">重新提交</span>
<span v-else>{{getButton('wf_pass').name}}</span> <span v-else>{{getButton('wf_pass').name}}</span>
</el-button> </el-button>
<el-button v-if="getButton('wf_effect')" <el-button v-if="getButton('wf_effect') && !['recall', 'reject'].includes(process.processIsFinished)"
type="success" type="success"
size="medium" size="medium"
v-loading="loading" v-loading="loading"
@click="$emit('examine', true)"> @click="$emit('examine', true)">
<span v-if="['recall', 'reject'].includes(process.processIsFinished)">重新提交</span> <span >{{getButton('wf_effect').name}}</span>
<span v-else>{{getButton('wf_effect').name}}</span>
</el-button> </el-button>
<el-button v-if="getButton('wf_reject')" <el-button v-if="getButton('wf_reject')"
type="danger" type="danger"

@ -24,14 +24,17 @@ export default {
process: { process: {
handler(val) { handler(val) {
if (!val) return if (!val) return
const { hideComment, hideAttachment, hideCopy, hideExamine, copyUser, copyUserName,taskName } = val const { hideComment, hideAttachment, hideCopy, hideExamine, copyUser, copyUserName,taskName,processIsFinished } = val
console.log(['运维公司执行任务'].includes(taskName))
if (hideComment) this.findObject(this.examineOption.column, 'comment').display = false // if (hideComment) this.findObject(this.examineOption.column, 'comment').display = false //
if (hideComment || hideAttachment) this.findObject(this.examineOption.column, 'attachment').display = false // if (hideComment || hideAttachment) this.findObject(this.examineOption.column, 'attachment').display = false //
if (hideCopy) this.findObject(this.examineOption.column, '$copyUser').display = false // if (hideCopy) this.findObject(this.examineOption.column, '$copyUser').display = false //
if (hideExamine ) this.findObject(this.examineOption.column, '$assignee').display = false // if (hideExamine ) this.findObject(this.examineOption.column, '$assignee').display = false //
if (copyUser) this.$set(this.examineForm, 'copyUser', val.copyUser) // if (copyUser) this.$set(this.examineForm, 'copyUser', val.copyUser) //
if (copyUserName) this.$set(this.examineForm, '$copyUser', val.copyUserName) // if (copyUserName) this.$set(this.examineForm, '$copyUser', val.copyUserName) //
if (taskName === "发起人" && ['reject','recall'.includes(processIsFinished)]) {
this.findObject(this.examineOption.column, 'attachment').display = false
this.findObject(this.examineOption.column, 'comment').display = false
}
}, },
deep: true, deep: true,
immediate: true immediate: true
@ -98,7 +101,7 @@ export default {
span: 24, span: 24,
event: { event: {
click: () => { click: () => {
this.$emit('user-select', { type: 'assignee', checkType: 'checkbox' }) this.$emit('user-select', { type: 'assignee'})
} }
}, },
rules: [{ required: true, message: "请指定审批人" }], rules: [{ required: true, message: "请指定审批人" }],

@ -26,14 +26,14 @@
v-if="comment.time">{{comment.time}}</p> v-if="comment.time">{{comment.time}}</p>
</template> </template>
</p> </p>
<template v-if="item.attachments && item.attachments.length > 0"> <!-- <template v-if="item.attachments && item.attachments.length > 0">
<p style="display: flex; align-items: baseline;">附件: <p style="display: flex; align-items: baseline;">附件:
<avue-upload :value="item.attachments" <avue-upload :value="item.attachments"
:props="{label: 'name', value: 'url'}" :props="{label: 'name', value: 'url'}"
:upload-preview="handleUploadPreview" :upload-preview="handleUploadPreview"
disabled></avue-upload> disabled></avue-upload>
</p> </p>
</template> </template> -->
</template> </template>
<p v-if="item.endTime">结束时间: [{{item.endTime}}]</p> <p v-if="item.endTime">结束时间: [{{item.endTime}}]</p>
</el-card> </el-card>

@ -200,7 +200,7 @@ export default {
"renwuzhonglei" "renwuzhonglei"
); );
for (let i in renwuzhonglei.dicData) { for (let i in renwuzhonglei.dicData) {
this.form.renwudengji = renwuzhonglei.dicData[i].taskLevel this.form.renwudengji = renwuzhonglei.dicData[i].taskLevel;
} }
} }
}, },
@ -297,7 +297,7 @@ export default {
"xitongmokuaishujubiao" "xitongmokuaishujubiao"
); );
xitongmokuaishujubiao.dicData = res.data.data; xitongmokuaishujubiao.dicData = res.data.data;
this.form.type = obj.type this.form.type = obj.type;
}); });
}, },
// //
@ -385,6 +385,7 @@ export default {
this.$confirm("是否恢复之前保存的草稿?", "提示", {}) this.$confirm("是否恢复之前保存的草稿?", "提示", {})
.then(() => { .then(() => {
this.form = JSON.parse(data); this.form = JSON.parse(data);
this.systemChange(this.form.xitongmingchengshujuku);
}) })
.catch(() => {}); .catch(() => {});
}); });

@ -10,9 +10,9 @@
> >
<el-option <el-option
v-for="item in taskParent" v-for="item in taskParent"
:key="item.dictValue" :key="item.id"
:label="item.dictValue" :label="item.dictValue"
:value="item.dictValue" :value="item.id"
> >
</el-option> </el-option>
</el-select> </el-select>
@ -24,65 +24,51 @@
> >
<el-option <el-option
v-for="item in taskInfos" v-for="item in taskInfos"
:key="item.taskTypeName" :key="item.id"
:label="item.taskTypeName" :label="item.taskTypeName"
:value="item.taskTypeName" :value="item.id"
> >
</el-option> </el-option>
</el-select> </el-select>
<el-select <el-select
v-model="searchForm.currentResponsiblePerson" v-model="searchForm.applyUser"
placeholder="当前责任人"
class="search-select"
clearable
>
<el-option
v-for="item in users"
:key="item.realName"
:label="item.realName"
:value="item.realName"
>
</el-option>
</el-select>
<el-select
v-model="searchForm.sponsor"
placeholder="发起人" placeholder="发起人"
class="search-select" class="search-select"
clearable clearable
> >
<el-option <el-option
v-for="item in users" v-for="item in users"
:key="item.realName" :key="item.id"
:label="item.realName" :label="item.realName"
:value="item.realName" :value="item.id"
> >
</el-option> </el-option>
</el-select> </el-select>
<el-select <el-select
v-model="searchForm.dept" v-model="searchForm.maintenanceCompany"
placeholder="运维公司" placeholder="运维公司"
class="search-select" class="search-select"
clearable clearable
> >
<el-option <el-option
v-for="item in depts" v-for="item in users"
:key="item.deptName" :key="item.id"
:label="item.deptName" :label="item.realName"
:value="item.deptName" :value="item.id"
> >
</el-option> </el-option>
</el-select> </el-select>
<el-select <el-select
v-model="searchForm.approvalStatus" v-model="searchForm.repeatMode"
placeholder="重复模式" placeholder="重复模式"
class="search-select" class="search-select"
clearable clearable
> >
<el-option <el-option
v-for="item in statusList" v-for="item in repeatModeList"
:key="item.value" :key="item.id"
:label="item.label" :label="item.dictValue"
:value="item.value" :value="item.id"
> >
</el-option> </el-option>
</el-select> </el-select>
@ -135,8 +121,10 @@
</template> </template>
<script> <script>
import { import {
todoList as getList, taskList as getList,
conditionalData, conditionalData,
taskRemove,
repeatMode
} from "@/api/plugin/workflow/workorder.js"; } from "@/api/plugin/workflow/workorder.js";
import { tableOption } from "@/const/workflow/crontab.js"; import { tableOption } from "@/const/workflow/crontab.js";
import { mapGetters } from "vuex"; import { mapGetters } from "vuex";
@ -159,20 +147,7 @@ export default {
taskInfos: [], taskInfos: [],
depts: [], depts: [],
users: [], users: [],
statusList: [ repeatModeList: [],
{
label: "审批中",
value: "审批中",
},
{
label: "进行中",
value: "进行中",
},
{
label: "已完成",
value: "已完成",
},
],
}; };
}, },
created() { created() {
@ -192,6 +167,9 @@ export default {
this.users = users; this.users = users;
this.taskLevel = taskLevel this.taskLevel = taskLevel
}); });
repeatMode().then(res => {
this.repeatModeList = res.data.data
})
}, },
// //
onLoad() { onLoad() {
@ -238,12 +216,10 @@ export default {
type: "warning", type: "warning",
}) })
.then(() => { .then(() => {
// remove(row.id).then((res) => { taskRemove(row.id).then((res) => {
// // this.$message.success("任务终止成功!");
// console.log(res); this.onLoad();
// this.$message.success("!"); });
// this.onLoad(this.page[0]);
// });
}) })
.catch(() => { .catch(() => {
// this.$message({ type: "info", message: "" }); // this.$message({ type: "info", message: "" });

@ -6,7 +6,7 @@
v-for="(item, index) in headerList" v-for="(item, index) in headerList"
:key="index" :key="index"
> >
<div class="header__item__box"> <div class="header__item__box" @click="goRouter(item)" :style="{cursor:[1,2].includes(item.id)?'pointer':'default'}">
<div> <div>
<span class="title">{{ item.title }}</span <span class="title">{{ item.title }}</span
><br /> ><br />
@ -37,7 +37,7 @@
<div id="pieItemOne" style="height: 310px"></div> <div id="pieItemOne" style="height: 310px"></div>
</div> </div>
<div class="footer__item2"> <div class="footer__item2">
<div id="pieItemTwo" style="height: 310px"></div> <div id="pieItemTwo" style="height: 310px;"></div>
</div> </div>
<div class="footer__item3"> <div class="footer__item3">
<div id="barChart" style="height: 310px"></div> <div id="barChart" style="height: 310px"></div>
@ -63,21 +63,25 @@ export default {
id: 1, id: 1,
title: "到期提醒", title: "到期提醒",
num: "", num: "",
link: "/plugin/workflow/process/workorder"
}, },
{ {
id: 2, id: 2,
title: "我的待办", title: "我的待办",
num: "", num: "",
link: "/plugin/workflow/process/todo"
}, },
{ {
id: 3, id: 3,
title: "今日新增", title: "今日新增",
num: "", num: "",
link: ""
}, },
{ {
id: 4, id: 4,
title: "今日完成", title: "今日完成",
num: "", num: "",
link: ""
}, },
], ],
}; };
@ -223,7 +227,7 @@ export default {
}, },
legend: { legend: {
top: "center", top: "center",
left: "76%", left: "68%",
orient: "vertical", orient: "vertical",
icon: "circle", icon: "circle",
itemWidth: 12, itemWidth: 12,
@ -301,7 +305,7 @@ export default {
data, data,
hoverAnimation: false, hoverAnimation: false,
minAngle: 15, // minAngle: 15, //
startAngle: 270, // startAngle: 0, //
label: { label: {
normal: { normal: {
color: "#000", color: "#000",
@ -470,6 +474,11 @@ export default {
this.barChart(data, YData); this.barChart(data, YData);
}); });
}, },
goRouter(item) {
if([1,2].includes(item.id)) {
this.$router.push(item.link)
}
}
}, },
}; };
</script> </script>

Loading…
Cancel
Save