Explorar o código

Merge branch 'master' of gitee.com:xiaopubao/aizuda-web-vue3

xlsea hai 1 ano
pai
achega
9a54137241

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 0 - 3
src/assets/images/flw02.svg


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 0 - 3
src/assets/images/flw03.svg


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 7 - 0
src/assets/images/flw05.svg


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 7 - 0
src/assets/images/flw06.svg


+ 6 - 4
src/components/Flow/FlowStatusStamp.vue

@@ -1,9 +1,11 @@
 <template>
 	<div class="flow-stamp-container">
-		<img v-if="status == FlowStatusEnum.APPROVED" :style="style" src="@/assets/images/flw03.svg" />
-		<img v-else-if="status == FlowStatusEnum.REJECTED" :style="style" src="@/assets/images/flw04.svg" />
-		<img v-else-if="status == FlowStatusEnum.UNDERWAY" :style="style" src="@/assets/images/flw01.svg" />
-		<img v-else-if="status == FlowStatusEnum.CANCELLED" :style="style" src="@/assets/images/flw02.svg" />
+		<img v-if="status == FlowStatusEnum.ACTIVE" :style="style" src="@/assets/images/flw01.svg" />
+		<img v-else-if="status == FlowStatusEnum.COMPLETE" :style="style" src="@/assets/images/flw03.svg" />
+		<img v-else-if="status == FlowStatusEnum.REJECT" :style="style" src="@/assets/images/flw04.svg" />
+		<img v-else-if="status == FlowStatusEnum.REVOKE" :style="style" src="@/assets/images/flw02.svg" />
+		<img v-else-if="status == FlowStatusEnum.TIMEOUT" :style="style" src="@/assets/images/flw05.svg" />
+		<img v-else-if="status == FlowStatusEnum.TERMINATE" :style="style" src="@/assets/images/flw06.svg" />
 	</div>
 </template>
 

+ 6 - 4
src/components/Flow/FlowStatusTag.vue

@@ -1,9 +1,11 @@
 <template>
 	<div class="status">
-		<el-tag v-if="status == FlowStatusEnum.APPROVED" type="success">已通过</el-tag>
-		<el-tag v-else-if="status == FlowStatusEnum.REJECTED" type="danger">不通过</el-tag>
-		<el-tag v-else-if="status == FlowStatusEnum.UNDERWAY">审批中</el-tag>
-		<el-tag v-else-if="status == FlowStatusEnum.CANCELLED" type="warning">已撤销</el-tag>
+		<el-tag v-if="status == FlowStatusEnum.COMPLETE" type="success">已通过</el-tag>
+		<el-tag v-else-if="status == FlowStatusEnum.REJECT" type="danger">不通过</el-tag>
+		<el-tag v-else-if="status == FlowStatusEnum.ACTIVE">审批中</el-tag>
+		<el-tag v-else-if="status == FlowStatusEnum.REVOKE" type="warning">已撤销</el-tag>
+		<el-tag v-else-if="status == FlowStatusEnum.TIMEOUT" type="danger">超时结束</el-tag>
+		<el-tag v-else-if="status == FlowStatusEnum.TERMINATE" type="danger">强制终止</el-tag>
 	</div>
 </template>
 

+ 11 - 7
src/components/Flow/enums.ts

@@ -1,13 +1,17 @@
 /** 流程状态 */
 export const enum FlowStatusEnum {
 	/** 审批中 */
-	UNDERWAY,
-	/** 已通过 */
-	APPROVED,
-	/** 不通过 */
-	REJECTED,
-	/** 已撤销 */
-	CANCELLED
+	ACTIVE,
+	/** 审批通过 */
+	COMPLETE,
+	/** 审批拒绝 */
+	REJECT,
+	/** 撤销审批 */
+	REVOKE,
+	/** 超时结束 */
+	TIMEOUT,
+	/** 强制终止 */
+	TERMINATE
 }
 
 /** 任务类型 */

+ 1 - 1
src/components/SvgIcon/index.vue

@@ -6,7 +6,7 @@
 	</svg>
 </template>
 
-<script setup>
+<script setup name="SvgIcon">
 import { computed } from 'vue'
 
 const props = defineProps({

+ 10 - 1
src/components/scWorkflow/nodes/approver.vue

@@ -235,7 +235,16 @@ export default {
 			this.$emit('update:modelValue', data)
 		},
 		save() {
-			this.emit(this.form)
+			const _form = this.form
+			if (_form.setType === 1) {
+				// 选择成员
+				if (!_form.nodeUserList || !_form.nodeUserList.length) return this.$message.warning('请选择成员')
+			} else if (_form.setType === 3) {
+				// 选择角色
+				if (!_form.nodeRoleList || !_form.nodeRoleList.length) return this.$message.warning('请选择角色')
+			}
+
+			this.emit(_form)
 			this.drawer = false
 		},
 		delNode() {

+ 1 - 1
src/store/modules/taskProcess.ts

@@ -16,7 +16,7 @@ export const useTaskProcessStore = defineStore({
 			this.storeInfoName = title || '审批流程'
 		},
 		setCurrentTaskRow(row: any) {
-			this.currentTaskRow = row
+			this.currentTaskRow = row // 当前左侧选中的值
 		}
 	},
 	persist: true

+ 23 - 17
src/views/approve/components/approvedContent.vue

@@ -11,12 +11,12 @@
 				<!-- 1、头部信息 -->
 				<div class="flow-status-stamp">
 					<div class="flow-stamp-container">
-						<FlowStatusStamp :status="0" />
+						<FlowStatusStamp :status="currentTaskRow.instanceState" />
 					</div>
 				</div>
 
 				<div class="flow-header-box">
-					<div class="flow-no">编号:{{ currentTaskRow.taskId }}</div>
+					<div class="flow-no">编号:{{ currentTaskRow.instanceId }}</div>
 					<div class="action-area">
 						<div class="action-item"></div>
 					</div>
@@ -79,14 +79,14 @@
 					</div>
 				</div>
 
-				<!-- 3、底部操作按钮 -->
+				<!-- 3、底部操作按钮  审批拒绝 强制终止不展示操作按钮-->
 				<!--
             1、已审批的任务不显示操作按钮
             2、我的申请显示撤回按钮
             3、认领任务显示认领按钮
             4、我收到的任务显示评论
             -->
-				<div class="flow-actions">
+				<div v-if="currentTaskRow.instanceState === 0" class="flow-actions">
 					<el-button :icon="ChatLineSquare" @click="openComment('reviewVisible', 'review')">评论</el-button>
 					<template v-if="currentTaskType !== 'myReceived' || currentTaskType !== 'approved'">
 						<el-button
@@ -191,7 +191,7 @@ import RollbackDialog from './rollbackDialog'
 import viewForm from '@/utils/form'
 import { storeToRefs } from 'pinia'
 
-const props = defineProps({
+defineProps({
 	/**
 	 * pendingApproval 待审批
 	 * myApplication 我的申请
@@ -236,16 +236,6 @@ const validateForm = ref({
 	loading: false
 })
 
-/**
- * 拿到当前关闭详情弹窗
- */
-const closeDetailEv = () => {
-	// 存储表单 todo.....
-	// 如果这里有表单,是否要把所有表单的内容进行存储,存储完毕后,才能关闭这个详情,刷新左侧的列表 todo
-	taskProcessInfo.refresh = true
-	taskProcessInfo.setCurrentTaskRow({})
-}
-
 /**
  * 详情按钮各个操作弹窗
  * @param visibleType 评论 拒绝 同意等
@@ -305,7 +295,8 @@ const getTaskDetail = () => {
 	validateForm.value.loading = true
 	processTaskApprovalInfo({
 		taskId: cur.taskId,
-		instanceId: cur.instanceId
+		instanceId: cur.instanceId,
+		instanceState: cur.instanceState
 	})
 		.then(data => {
 			activeData.value = data.processApprovals
@@ -365,6 +356,21 @@ const claimTaskEv = async () => {
 	console.log(res, 'res====')
 }
 
+/**
+ * 详情页面操作按钮回调
+ */
+const closeDetailEv = () => {
+	// 存储表单 todo.....
+	// 如果这里有表单,是否要把所有表单的内容进行存储,存储完毕后,才能关闭这个详情,刷新左侧的列表 todo
+	if (currentType.value === 'review') {
+		// 评论按钮,不要刷新左侧的列表,只更新右侧的详情即可
+		getTaskDetail()
+		return
+	}
+	taskProcessInfo.refresh = true
+	taskProcessInfo.setCurrentTaskRow({})
+}
+
 /**
  * 监听同级子组件的instanceId的值变化 这里可能也有实例Id
  * 1、监听instanceId的值变化,如果值有变化,则重新获取审批详情
@@ -401,7 +407,7 @@ watch(
 		position: absolute;
 		right: 10px;
 		top: 10px;
-		z-index: 999;
+		z-index: 99;
 	}
 
 	// 头部

+ 6 - 5
src/views/approve/components/approvedItem.vue

@@ -16,9 +16,9 @@
 				</el-tooltip>
 			</div>
 			<div class="search-segment">
-				<EditPopover v-model:visible="searchMoreVisible" placement="right" :width="320" :show-footer="false">
+				<EditPopover :visible="searchMoreVisible" placement="right" :width="320" :show-footer="false">
 					<template #reference>
-						<el-button icon="Filter" />
+						<el-button icon="Filter" @click="searchMoreVisible = true" />
 					</template>
 					<div class="title">高级筛选</div>
 					<el-scrollbar max-height="400px">
@@ -84,7 +84,7 @@
 								<el-tag v-if="i.instanceState === 0">审批中</el-tag>
 								<el-tag v-if="i.instanceState === 1" type="success">审批通过</el-tag>
 								<el-tag v-if="i.instanceState === 2" type="danger">审批拒绝</el-tag>
-								<el-tag v-if="i.instanceState === 3">撤销审批</el-tag>
+								<el-tag v-if="i.instanceState === 3" type="warning">撤销审批</el-tag>
 								<el-tag v-if="i.instanceState === 4" type="danger">超时结束</el-tag>
 								<el-tag v-if="i.instanceState === 5" type="danger">强制终止</el-tag>
 							</template>
@@ -99,11 +99,11 @@
 							</div>
 							<div v-if="i.duration" class="summary-item">
 								<div class="label">处理耗时:</div>
-								<div class="value">{{ i.duration }}</div>
+								<div class="value">{{ format_milliseconds(i.duration) }}</div>
 							</div>
 						</template>
 
-						<div class="summary-item">
+						<div v-if="i.currentNode !== 'complete'" class="summary-item">
 							<div class="label">当前所在节点:</div>
 							<div class="value">{{ i.currentNode }}</div>
 						</div>
@@ -131,6 +131,7 @@ import FlowNodeAvatar from '@/components/Flow/FlowNodeAvatar.vue'
 // import { Search, Filter, Refresh } from '@element-plus/icons-vue'
 import EditPopover from '@/components/EditPopover.vue'
 import { computed, onMounted, reactive, ref, watch } from 'vue'
+import { format_milliseconds } from '@/utils'
 import {
 	processTaskPagePendingApprovalApi,
 	processTaskPageMyApplicationApi,

+ 21 - 19
src/views/approve/launch/ItemDrawer.vue

@@ -20,25 +20,27 @@
 					</template>
 					<template v-else>
 						<div style="padding-bottom: 6px">{{ v.name }}</div>
-						<div v-if="v.type === 1" style="display: flex; align-items: center; gap: 6px">
-							<el-tooltip content="添加用户" placement="left">
-								<el-button style="width: 32px" @click="selectHandler(v.name, 1)">
-									<svg-icon style="font-size: 18px" icon-class="flow-user-add" />
-								</el-button>
-							</el-tooltip>
-							<FlowNodeAvatar v-for="(item, index) in userMap.get(v.name).assignees" :key="index" :name="item.name" style="margin-top: 5px" />
-						</div>
-						<div v-if="v.type === 2" style="display: flex; align-items: center; gap: 6px">
-							<el-tooltip content="添加角色" placement="left">
-								<el-button style="width: 32px" @click="selectHandler(v.name, 2)">
-									<svg-icon style="font-size: 18px" icon-class="flow-group-add" />
-								</el-button>
-							</el-tooltip>
-							<FlowNodeAvatar v-for="(item, index) in userMap.get(v.name).assignees" :key="index" :name="item.name" style="margin-top: 5px">
-								<template #avatar>
-									<svg-icon icon-class="flow-group" color="#fff" />
-								</template>
-							</FlowNodeAvatar>
+						<div v-if="v.type !== 0">
+							<div v-if="userMap.get(v.name).type === 1" style="display: flex; align-items: center; gap: 6px">
+								<el-tooltip content="添加用户" placement="left">
+									<el-button style="width: 32px" @click="selectHandler(v.name, 1)">
+										<svg-icon style="font-size: 18px" icon-class="flow-user-add" />
+									</el-button>
+								</el-tooltip>
+								<FlowNodeAvatar v-for="(item, index) in userMap.get(v.name).assignees" :key="index" :name="item.name" style="margin-top: 5px" />
+							</div>
+							<div v-else style="display: flex; align-items: center; gap: 6px">
+								<el-tooltip content="添加角色" placement="left">
+									<el-button style="width: 32px" @click="selectHandler(v.name, 2)">
+										<svg-icon style="font-size: 18px" icon-class="flow-group-add" />
+									</el-button>
+								</el-tooltip>
+								<FlowNodeAvatar v-for="(item, index) in userMap.get(v.name).assignees" :key="index" :name="item.name" style="margin-top: 5px">
+									<template #avatar>
+										<svg-icon icon-class="flow-group" color="#fff" />
+									</template>
+								</FlowNodeAvatar>
+							</div>
 						</div>
 					</template>
 				</el-timeline-item>

Algúns arquivos non se mostraron porque demasiados arquivos cambiaron neste cambio