From 0aa72b320033625d6db0be60168fa8e9a4b1bd34 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Tue, 24 Jan 2023 09:20:30 +0800 Subject: [PATCH] =?UTF-8?q?bpm=EF=BC=9A=E6=B5=81=E7=A8=8B=E8=AF=A6?= =?UTF-8?q?=E6=83=85=E7=9A=84=E6=97=B6=E9=97=B4=E8=BD=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- yudao-ui-admin-vue3/src/utils/formatTime.ts | 27 +++ .../src/views/bpm/processInstance/detail.vue | 139 ++++++++++- .../src/views/bpm/processInstance/detail2.vue | 226 +----------------- .../src/views/bpm/processInstance/detail.vue | 17 -- 4 files changed, 167 insertions(+), 242 deletions(-) diff --git a/yudao-ui-admin-vue3/src/utils/formatTime.ts b/yudao-ui-admin-vue3/src/utils/formatTime.ts index 3b799139d..9b0e4465c 100644 --- a/yudao-ui-admin-vue3/src/utils/formatTime.ts +++ b/yudao-ui-admin-vue3/src/utils/formatTime.ts @@ -147,3 +147,30 @@ export function formatAxis(param: Date): string { else if (hour < 22) return '晚上好' else return '夜里好' } + +/** + * 将毫秒,转换成时间字符串。例如说,xx 分钟 + * + * @param ms 毫秒 + * @returns {string} 字符串 + */ +export function formatPast2(ms) { + const day = Math.floor(ms / (24 * 60 * 60 * 1000)) + const hour = Math.floor(ms / (60 * 60 * 1000) - day * 24) + const minute = Math.floor(ms / (60 * 1000) - day * 24 * 60 - hour * 60) + const second = Math.floor(ms / 1000 - day * 24 * 60 * 60 - hour * 60 * 60 - minute * 60) + if (day > 0) { + return day + '天' + hour + '小时' + minute + '分钟' + } + if (hour > 0) { + return hour + '小时' + minute + '分钟' + } + if (minute > 0) { + return minute + '分钟' + } + if (second > 0) { + return second + '秒' + } else { + return 0 + '秒' + } +} diff --git a/yudao-ui-admin-vue3/src/views/bpm/processInstance/detail.vue b/yudao-ui-admin-vue3/src/views/bpm/processInstance/detail.vue index 555920b95..65fc0b5bd 100644 --- a/yudao-ui-admin-vue3/src/views/bpm/processInstance/detail.vue +++ b/yudao-ui-admin-vue3/src/views/bpm/processInstance/detail.vue @@ -25,14 +25,63 @@ processInstance.businessKey " > - 点击查看 + + + + + + +
+ + +

任务:{{ item.name }}

+ + + + + + + + +

+ {{ item.reason }} +

+
+
+
+
+
+
diff --git a/yudao-ui-admin-vue3/src/views/bpm/processInstance/detail2.vue b/yudao-ui-admin-vue3/src/views/bpm/processInstance/detail2.vue index d89f1b3d4..961206bc8 100644 --- a/yudao-ui-admin-vue3/src/views/bpm/processInstance/detail2.vue +++ b/yudao-ui-admin-vue3/src/views/bpm/processInstance/detail2.vue @@ -71,86 +71,8 @@ - - -
- 申请信息【{{ processInstance.name }}】 -
- -
- -
-
-
- - 点击查看 - -
-
- - -
- 审批记录 -
- -
- - -

任务:{{ item.name }}

- - - - - - - - -

- {{ item.reason }} -

-
-
-
-
-
-
+ @@ -209,21 +131,9 @@ import { getActivityList } from "@/api/bpm/activity" // 流程实例的详情页,可用于审批 export default { name: "ProcessInstanceDetail", - components: { - Parser - }, data () { return { - // 流程实例 - id: undefined, // 流程实例的编号 - processInstance: {}, - - // 流程表单详情 - detailForm: { - fields: [] - }, - // BPMN 数据 bpmnXML: null, bpmnControlForm: { @@ -231,17 +141,6 @@ export default { }, activityList: [], - // 审批记录 - tasksLoad: true, - tasks: [], - - // 审批表单 - runningTasks: [], - auditForms: [], - auditRule: { - reason: [{ required: true, message: "审批建议不能为空", trigger: "blur" }], - }, - // 转派审批人 userOptions: [], updateAssignee: { @@ -278,142 +177,23 @@ export default { // 获得流程实例相关 this.processInstanceLoading = true getProcessInstanceApi(this.id).then(response => { - if (!response.data) { - this.$message.error('查询不到流程信息!') - return - } - // 设置流程信息 - this.processInstance = response.data - - // 设置表单信息 - if (this.processInstance.processDefinition.formType === 10) { - this.detailForm = { - ...JSON.parse(this.processInstance.processDefinition.formConf), - disabled: true, // 表单禁用 - formBtns: false, // 按钮隐藏 - fields: decodeFields(this.processInstance.processDefinition.formFields) - } - // 设置表单的值 - this.detailForm.fields.forEach(item => { - const val = this.processInstance.formVariables[item.__vModel__] - if (val) { - item.__config__.defaultValue = val - } - }) - } - // 加载流程图 getProcessDefinitionBpmnXML(this.processInstance.processDefinition.id).then(response => { this.bpmnXML = response.data }) + // 加载活动列表 getActivityList({ processInstanceId: this.processInstance.id }).then(response => { this.activityList = response.data }) - - // 取消加载中 - this.processInstanceLoading = false }) - - // 获得流程任务列表(审批记录) - this.tasksLoad = true - this.runningTasks = [] - this.auditForms = [] - getTaskListByProcessInstanceId(this.id).then(response => { - // 审批记录 - this.tasks = [] - // 移除已取消的审批 - response.data.forEach(task => { - if (task.result !== 4) { - this.tasks.push(task) - } - }) - // 排序,将未完成的排在前面,已完成的排在后面; - this.tasks.sort((a, b) => { - // 有已完成的情况,按照完成时间倒序 - if (a.endTime && b.endTime) { - return b.endTime - a.endTime - } else if (a.endTime) { - return 1 - } else if (b.endTime) { - return -1 - // 都是未完成,按照创建时间倒序 - } else { - return b.createTime - a.createTime - } - }) - - // 需要审核的记录 - const userId = store.getters.userId - this.tasks.forEach(task => { - if (task.result !== 1) { // 只有待处理才需要 - return - } - if (!task.assigneeUser || task.assigneeUser.id !== userId) { // 自己不是处理人 - return - } - this.runningTasks.push({ ...task }) - this.auditForms.push({ - reason: '' - }) - }) - - // 取消加载中 - this.tasksLoad = false - }) - }, - /** 处理选择流程的按钮操作 **/ - handleSelect (row) { - // 设置选择的流程 - this.selectProcessInstance = row - - // 流程表单 - if (row.formId) { - // 设置对应的表单 - this.detailForm = { - ...JSON.parse(row.formConf), - fields: decodeFields(row.formFields) - } - } else if (row.formCustomCreatePath) { - this.$router.push({ path: row.formCustomCreatePath }) - // 这里暂时无需加载流程图,因为跳出到另外个 Tab; - } }, getDateStar (ms) { return getDate(ms) }, - getTimelineItemIcon (item) { - if (item.result === 1) { - return 'el-icon-time' - } - if (item.result === 2) { - return 'el-icon-check' - } - if (item.result === 3) { - return 'el-icon-close' - } - if (item.result === 4) { - return 'el-icon-remove-outline' - } - return '' - }, - getTimelineItemType (item) { - if (item.result === 1) { - return 'primary' - } - if (item.result === 2) { - return 'success' - } - if (item.result === 3) { - return 'danger' - } - if (item.result === 4) { - return 'info' - } - return '' - }, + /** 处理审批通过和不通过的操作 */ handleAudit (task, pass) { const index = this.runningTasks.indexOf(task) diff --git a/yudao-ui-admin/src/views/bpm/processInstance/detail.vue b/yudao-ui-admin/src/views/bpm/processInstance/detail.vue index 57ff762bf..8fefa630f 100644 --- a/yudao-ui-admin/src/views/bpm/processInstance/detail.vue +++ b/yudao-ui-admin/src/views/bpm/processInstance/detail.vue @@ -275,23 +275,6 @@ export default { this.tasksLoad = false; }); }, - /** 处理选择流程的按钮操作 **/ - handleSelect(row) { - // 设置选择的流程 - this.selectProcessInstance = row; - - // 流程表单 - if (row.formId) { - // 设置对应的表单 - this.detailForm = { - ...JSON.parse(row.formConf), - fields: decodeFields(row.formFields) - } - } else if (row.formCustomCreatePath) { - this.$router.push({ path: row.formCustomCreatePath}); - // 这里暂时无需加载流程图,因为跳出到另外个 Tab; - } - }, getDateStar(ms) { return getDate(ms); },