Explorar el Código

Merge branch 'feature/workflowShow'

lanceJiang hace 1 año
padre
commit
456f7075e0

+ 14 - 6
src/components/scWorkflow/index.vue

@@ -298,7 +298,7 @@ export default {
 			}
 		}
 
-		// 已执行
+		/*// 已执行
 		&--success {
 			.auto-judge:after {
 				border: 1px solid var(--el-color-success) !important;
@@ -312,19 +312,19 @@ export default {
 			.auto-judge:after {
 				border: 1px solid var(--el-color-error) !important;
 			}
-			/*      .title {
+			!*      .title {
         background: var(--el-color-error) !important;
-      }*/
+      }*!
 		}
 		// 未执行
 		&--info {
 			.auto-judge:after {
 				border: 1px solid var(--el-color-info) !important;
 			}
-			/*.title {
+			!*.title {
         background: var(--el-color-info) !important;
-      }*/
-		}
+      }*!
+		}*/
 	}
 	.branch-box-wrap {
 		display: flex;
@@ -401,6 +401,14 @@ export default {
 		padding: 15px 15px;
 		cursor: pointer;
 		box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.1);
+		// 已执行
+		&--success:after {
+			border: 1px solid var(--el-color-success) !important;
+		}
+		// 未执行
+		&--info:after {
+			border: 1px solid var(--el-color-info) !important;
+		}
 	}
 	.auto-judge::before {
 		content: '';

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

@@ -1,6 +1,6 @@
 <template>
 	<div class="node-wrap">
-		<div class="node-wrap-box" :class="{ 'node-wrap-box--disabled': disabled }">
+		<div class="node-wrap-box" :class="[disabled ? 'node-wrap-box--disabled' : '', `node-wrap-box--${nodeConfig.local_status}`]">
 			<div class="title" style="background: var(--el-color-warning)">
 				<el-icon class="icon"><user-filled /></el-icon>
 				<span v-show="!isEditTitle" class="title_label" @click="editTitle('box_nodeTitle')"

+ 3 - 2
src/components/scWorkflow/nodes/branch.vue

@@ -1,12 +1,13 @@
 <template>
-	<div class="branch-wrap" :class="{ 'branch-wrap--disabled': disabled }">
+	<!--  `branch-wrap--${nodeConfig.local_status}`-->
+	<div class="branch-wrap" :class="[disabled ? 'branch-wrap--disabled' : '']">
 		<div class="branch-box-wrap">
 			<div class="branch-box">
 				<el-button class="add-branch" type="success" plain round @click="addTerm"> 添加条件 </el-button>
 				<div v-for="(item, index) in nodeConfig.conditionNodes" :key="index" class="col-box">
 					<div class="condition-node">
 						<div class="condition-node-box">
-							<div class="auto-judge" @click="show(index)">
+							<div :class="['auto-judge', `auto-judge--${item.local_status}`]" @click="show(index)">
 								<!-- 不是第一个 也不是 最后一个-->
 								<div v-if="index != 0 && index != nodeConfig.conditionNodes.length - 1" class="sort-left" @click.stop="arrTransfer(index, -1)">
 									<el-icon><ArrowLeft /></el-icon>

+ 1 - 1
src/components/scWorkflow/nodes/promoter.vue

@@ -1,6 +1,6 @@
 <template>
 	<div class="node-wrap">
-		<div class="node-wrap-box start-node" :class="{ 'node-wrap-box--disabled': disabled }">
+		<div class="node-wrap-box start-node" :class="[disabled ? 'node-wrap-box--disabled' : '', `node-wrap-box--${nodeConfig.local_status}`]">
 			<div class="title" style="background: var(--el-color-info)">
 				<el-icon class="icon"><user-filled /></el-icon>
 				<span class="title_label">{{ nodeConfig.nodeName }}</span>

+ 1 - 1
src/components/scWorkflow/nodes/send.vue

@@ -1,6 +1,6 @@
 <template>
 	<div class="node-wrap">
-		<div class="node-wrap-box" :class="{ 'node-wrap-box--disabled': disabled }">
+		<div class="node-wrap-box" :class="[disabled ? 'node-wrap-box--disabled' : '', `node-wrap-box--${nodeConfig.local_status}`]">
 			<div class="title" style="background: var(--el-color-primary)">
 				<el-icon class="icon"><promotion /></el-icon>
 				<span v-show="!isEditTitle" class="title_label" @click="editTitle('box_nodeTitle')"

+ 1 - 0
src/styles/project_normal.scss

@@ -71,4 +71,5 @@ body {
 .warp-right {
 	flex: 1; /*这里设置为占比1,填充满剩余空间*/
 	height: 100%;
+	overflow: hidden;
 }

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 90 - 6
src/views/approve/components/approvedContent.vue


+ 119 - 0
src/views/approve/components/config.ts

@@ -0,0 +1,119 @@
+type ModelContentConfig = {
+	nodeName: string
+	type: number
+	local_status?: string // 填充自定义状态
+	p_nodeNames?: string[] // 填充自定义状态
+	childNode: ModelContentConfig | null
+	conditionNodes?: {
+		nodeName: string
+		local_status?: string // 填充自定义状态
+		conditionList: any[]
+		childNode: ModelContentConfig
+	}[]
+}
+type RenderNodes = {
+	[key: string]: 0 | 1 // 0已执行 1执行中
+}
+export const package_modelContentConfig = (data: ModelContentConfig, renderNodes: RenderNodes) => {
+	/**local_status: 0: 已执行(success) 1:执行中(error) // 默认未执行(info)*/
+	// 通过nodeName 作为唯一值 记录 每个key(nodeName) 对应的childNode 信息
+	const nodeNameObj: { [nodeName: string]: ModelContentConfig } = {}
+	const fn = (data: ModelContentConfig, p_nodeNames = []) => {
+		// console.error(data, p_nodeNames, 'data, p_nodeNames')
+		if (!data) return
+		data.p_nodeNames = p_nodeNames
+		// 记录
+		nodeNameObj[data.nodeName] = data
+		// const _p_nodeNames = [...p_nodeNames, data.nodeName]
+		const _p_nodeNames = [...p_nodeNames, data.nodeName]
+		// let has_conditionNodes = false
+		if (data.conditionNodes && Array.isArray(data.conditionNodes)) {
+			// has_conditionNodes = true
+			// 条件分支节点
+			data.conditionNodes.forEach(v => {
+				fn(v.childNode, _p_nodeNames)
+				// fn(v.childNode, [...p_nodeNames])
+			})
+		}
+		if (data.childNode) {
+			// _p_nodeNames.push(data.nodeName)
+			// const _p_nodeNames = [...p_nodeNames, data.nodeName]
+			// if (!has_conditionNodes) {
+			// 	_p_nodeNames.push(data.nodeName)
+			// }
+			// 正常子节点
+			fn(data.childNode, _p_nodeNames)
+		}
+	}
+	fn(data)
+	/*Object.keys(nodeNameObj).forEach(k => {
+		const _o = nodeNameObj[k]
+		_o.local_status = 'info'
+	})
+	// 给需要修改状态的*/
+	console.log(nodeNameObj, 'nodeNameObj')
+	const local_status_obj = {
+		0: 'success', // 已执行
+		1: 'error' // 执行中
+	}
+	let cur_nodeName = ''
+	/**local_status: 0: 已执行(success) 1:执行中(error) // 默认未执行(info)*/
+	Object.keys(renderNodes).forEach(nodeName => {
+		// console.log(nodeName, 'nodeName')
+		const local_status = local_status_obj[renderNodes[nodeName]] || ''
+		const node = nodeNameObj[nodeName]
+		if (node) {
+			node.local_status = local_status
+		}
+		// 执行中的key 提取出来
+		if (node.local_status === 'error') {
+			cur_nodeName = nodeName
+		}
+	})
+
+	const cur_actionKey = Object.keys(nodeNameObj).find(nodeName => {
+		const node = nodeNameObj[nodeName]
+		// 执行中的key 提取出来
+		if (node.local_status === 'error') {
+			return true
+		}
+	})
+	const curNode = nodeNameObj[cur_nodeName] as ModelContentConfig
+	console.warn(cur_actionKey, '当前标红 cur_actionKey curNode', curNode)
+
+	// 如果有执行中的 node 给父级做状态渲染
+	if (curNode) {
+		const p_nodeNames = curNode.p_nodeNames || []
+		if (p_nodeNames.length) {
+			p_nodeNames.forEach(nodeName => {
+				const p_node = nodeNameObj[nodeName]
+				// 父级node 设置为 已执行
+				// if (!p_node.local_status) {
+				if (p_node) {
+					// 如果是条件节点
+					if (p_node.conditionNodes && Array.isArray(p_node.conditionNodes)) {
+						const idx = p_node.conditionNodes.findIndex(v => v.childNode?.nodeName === curNode.nodeName)
+						p_node.conditionNodes.forEach((v, i) => {
+							if (i === idx) {
+								v.local_status = 'success'
+							} else {
+								v.local_status = 'info'
+							}
+						})
+					} else {
+						// 普通节点
+						p_node.local_status = 'success'
+					}
+				}
+			})
+		}
+	}
+
+	// 给没有标记 local_status 的 默认填充 未处理
+	Object.keys(nodeNameObj).forEach(nodeName => {
+		const node = nodeNameObj[nodeName]
+		if (!node.local_status) {
+			node.local_status = 'info'
+		}
+	})
+}

Algunos archivos no se mostraron porque demasiados archivos cambiaron en este cambio