Browse Source

feat: 发起审批支持选择角色

xlsea 1 năm trước cách đây
mục cha
commit
1e609ec15d

+ 1 - 0
src/assets/icons/flow/group-add.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1711331925684" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1663" width="64" height="64" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M717.7 593.2c-34.2-28.2-72.6-50.2-114.1-65.4-8-2.9-16.2-5.6-24.4-8 22.1-11.3 42.6-26.2 60.6-44.2 45.5-45.5 70.6-106.1 70.6-170.4s-25.1-124.9-70.6-170.4C594.3 89.1 533.8 64 469.4 64s-124.9 25.1-170.5 70.6c-45.5 45.5-70.6 106.1-70.6 170.4s25.1 124.9 70.6 170.4c18.1 18.1 38.5 32.9 60.6 44.2-14.3 4.2-28.3 9.2-42.1 15-46.5 19.7-88.2 47.8-124.1 83.6-35.8 35.8-64 77.6-83.7 124.1C89.3 790.6 79 841.7 79 894.4c0 17.7 14.3 32 32 32s32-14.3 32-32c0-180 146.4-326.4 326.4-326.4 75.6 0 149.3 26.5 207.6 74.5 13.6 11.2 33.8 9.3 45-4.3 11.3-13.6 9.4-33.8-4.3-45zM292.3 305c0-97.6 79.4-177 177.1-177 97.6 0 177.1 79.4 177.1 177s-79.4 177-177.1 177c-97.6 0.1-177.1-79.3-177.1-177z" fill="#727272" p-id="1664"></path><path d="M956.7 533.5c-36.9-30.5-79.1-53.8-124.2-69 38.4-39.6 57.2-92.2 57.2-159.5 0-109.7-74.1-205.6-180.1-233.3-17.1-4.5-34.6 5.8-39 22.9-4.5 17.1 5.8 34.6 22.9 39C771.3 154 825.7 224.4 825.7 305c0 66.8-21.7 109.9-70.5 139.5-11.4 7-16.9 19.9-15 32.4-2.7 17.2 8.8 33.4 26 36.5 54.8 9.8 106.6 33.8 149.8 69.4 6 4.9 13.2 7.3 20.4 7.3 9.2 0 18.4-4 24.7-11.6 11.1-13.6 9.2-33.8-4.4-45z" fill="#727272" p-id="1665"></path><path d="M847 768V640h-64v128H655v64h128v128h64V832h128v-64z" fill="#669E8B" p-id="1666"></path></svg>

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
src/assets/icons/flow/group.svg


+ 1 - 0
src/assets/icons/flow/user-add.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1711331911781" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1471" width="64" height="64" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M739.7 609.5c-36.2-29.8-76.8-53.1-120.7-69.2-3.5-1.3-7-2.5-10.5-3.7 17.7-10.6 34.3-23.5 49.3-38.5 48.1-48 74.6-111.9 74.6-179.8 0-68-26.5-131.8-74.6-179.9-48.1-48-112-74.5-180.1-74.5s-132 26.5-180.1 74.5S223 250.3 223 318.3c0 67.9 26.5 131.8 74.6 179.8 14.9 14.8 31.2 27.6 48.7 38.2-10.2 3.4-20.2 7.2-30.2 11.4-49.2 20.8-93.4 50.5-131.3 88.4-37.9 37.9-67.7 82-88.5 131.1-21.4 51-32.3 105-32.3 160.7 0 17.7 14.3 32 32 32s32-14.3 32-32c0-192.2 156.6-348.6 349-348.6 80.8 0 159.7 28.3 222 79.6 13.6 11.2 33.8 9.3 45.1-4.3 11.2-13.7 9.3-33.8-4.4-45.1zM287.1 318.4c0-105 85.5-190.4 190.6-190.4s190.6 85.4 190.6 190.4-85.5 190.4-190.6 190.4-190.6-85.5-190.6-190.4z" fill="#727272" p-id="1472"></path><path d="M831.9 768.1V640.2h-64v127.9H639.8v64h128.1V960h64V832.1H960v-64z" fill="#669E8B" p-id="1473"></path></svg>

+ 7 - 3
src/components/Flow/FlowNodeAvatar.vue

@@ -1,20 +1,24 @@
 <template>
 	<div class="avatar" :style="AvatarStyle">
-		<el-avatar v-if="user && user.avatar" :size="size" class="icon" :src="user.avatar" />
+		<el-avatar v-if="avatar && !useSlots().avatar" :size="size" class="icon" :src="avatar" />
+		<!-- <el-avatar v-if="user && user.avatar" :size="size" class="icon" :src="user.avatar" /> -->
 		<!-- <el-avatar v-else :size="size" class="icon" :icon="UserFilled" /> -->
-		<el-avatar v-else :size="size" class="icon">
+		<el-avatar v-if="!avatar && !useSlots().avatar" :size="size" class="icon">
 			<template v-if="name">
 				{{ name.charAt(0) }}
 			</template>
 			<UserFilled v-else />
 		</el-avatar>
+		<el-avatar v-if="useSlots().avatar" :size="size" class="icon" style="background-color: #2a5eff">
+			<slot name="avatar"></slot>
+		</el-avatar>
 		<!-- <div v-if="showName && user && user.name" class="name" :style="NameStyle">{{ user.name }}</div> -->
 		<div v-if="showName" class="name" :style="NameStyle">{{ name }}</div>
 	</div>
 </template>
 
 <script setup>
-import { computed, ref, watch, onBeforeMount } from 'vue'
+import { computed, ref, watch, onBeforeMount, useSlots } from 'vue'
 // import { UserFilled } from '@element-plus/icons-vue'
 
 const user = ref({})

+ 29 - 10
src/views/approve/launch/ItemDrawer.vue

@@ -1,7 +1,12 @@
 <template>
 	<el-drawer
 		:close-on-click-modal="false"
-		class="local-launch_drawer-wrap" :title="record.processName" :model-value="modelValue" size="760px" @update:model-value="updateModelValue">
+		class="local-launch_drawer-wrap"
+		:title="record.processName"
+		:model-value="modelValue"
+		size="760px"
+		@update:model-value="updateModelValue"
+	>
 		<div class="info-wrap">
 			<el-divider content-position="left">{{ record.processName }}表单</el-divider>
 			<FormCreate class="form-wrap" :option="formOption" :rule="formRule" />
@@ -15,28 +20,42 @@
 					</template>
 					<template v-else>
 						<div style="padding-bottom: 6px">{{ v.name }}</div>
-						<div v-if="v.type !== 0" style="display: flex; align-items: center; gap: 6px">
-							<el-button :icon="Plus" style="width: 32px" @click="selectHandler(v.name)" />
+						<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>
 					</template>
 				</el-timeline-item>
 			</el-timeline>
 			<el-divider></el-divider>
 		</div>
 
-		<template #footer>
-		123
-		</template>
+		<template #footer> 123 </template>
 	</el-drawer>
 	<use-select ref="useSelectRef"></use-select>
 </template>
 <script setup lang="ts">
+import SvgIcon from '@/components/SvgIcon/index.vue'
 import model from '@/api/flow/process'
 import viewForm from '@/utils/form'
 import { ref, shallowRef, computed, reactive } from 'vue'
 import { ElMessage } from 'element-plus'
-import { Plus } from '@element-plus/icons-vue'
 import UseSelect from '@/components/scWorkflow/select.vue'
 import FlowNodeAvatar from '@/components/Flow/FlowNodeAvatar.vue'
 type Props = {
@@ -51,11 +70,11 @@ const emit = defineEmits<{
 const updateModelValue = (bool: boolean) => emit('update:modelValue', bool)
 const userMap = ref(new Map())
 const useSelectRef = ref()
-const selectHandler = (name: string) => {
+const selectHandler = (name: string, type: number) => {
 	if (!userMap.value.get(name)) {
-		userMap.value.set(name, { assignees: [], type: 1 })
+		userMap.value.set(name, { assignees: [], type })
 	}
-	useSelectRef.value.open(1, userMap.value.get(name).assignees)
+	useSelectRef.value.open(type, userMap.value.get(name).assignees)
 }
 const FormCreate = viewForm.$form()
 const formOption = ref({

Một số tệp đã không được hiển thị bởi vì quá nhiều tập tin thay đổi trong này khác