admin-vben5/apps/web-antd/src/views/workflow/components/copy-component.vue

86 lines
2.1 KiB
Vue
Raw Normal View History

<!--抄送组件-->
2024-12-18 09:32:53 +08:00
<script setup lang="ts">
2024-12-19 11:16:07 +08:00
import type { User } from '#/api/system/user/model';
import { computed, type PropType } from 'vue';
2024-12-18 09:32:53 +08:00
import { useVbenModal, VbenAvatar } from '@vben/common-ui';
2024-12-19 14:54:39 +08:00
import { Avatar, AvatarGroup, Tooltip } from 'ant-design-vue';
2024-12-18 09:32:53 +08:00
import { userSelectModal } from '.';
defineOptions({
name: 'CopyComponent',
inheritAttrs: false,
});
const props = withDefaults(defineProps<{ ellipseNumber?: number }>(), {
/**
* 最大显示的头像数量 超过显示为省略号头像
*/
ellipseNumber: 3,
});
2024-12-19 11:16:07 +08:00
const emit = defineEmits<{ finish: [User[]] }>();
2024-12-18 09:32:53 +08:00
const [UserSelectModal, modalApi] = useVbenModal({
connectedComponent: userSelectModal,
});
const userListModel = defineModel('userList', {
type: Array as PropType<User[]>,
default: () => [],
});
function handleOpen() {
modalApi.setData({ userList: userListModel.value });
modalApi.open();
}
function handleFinish(userList: User[]) {
// 清空 直接赋值[]会丢失响应性
userListModel.value.splice(0, userListModel.value.length);
userListModel.value.push(...userList);
2024-12-19 11:16:07 +08:00
emit('finish', userList);
2024-12-18 09:32:53 +08:00
}
const displayedList = computed(() => {
return userListModel.value.slice(0, props.ellipseNumber);
});
2024-12-18 09:32:53 +08:00
</script>
<template>
<div class="flex items-center gap-2">
<AvatarGroup v-if="userListModel.length > 0">
2024-12-18 09:32:53 +08:00
<Tooltip
v-for="user in displayedList"
2024-12-18 09:32:53 +08:00
:key="user.userId"
:title="user.nickName"
placement="top"
>
<div>
<VbenAvatar
:alt="user.nickName"
class="bg-primary size-[36px] cursor-pointer rounded-full border text-white"
2024-12-18 09:32:53 +08:00
src=""
/>
</div>
</Tooltip>
<Tooltip
:title="`等${userListModel.length - props.ellipseNumber}人`"
placement="top"
>
<Avatar
v-if="userListModel.length > ellipseNumber"
2024-12-19 14:54:39 +08:00
class="bg-primary size-[36px] cursor-pointer rounded-full border text-white"
>
...
</Avatar>
</Tooltip>
2024-12-18 09:32:53 +08:00
</AvatarGroup>
<a-button size="small" @click="handleOpen">选择人员</a-button>
<UserSelectModal @finish="handleFinish" />
</div>
</template>