userlist 로직 변경

This commit is contained in:
yoon 2025-02-17 10:35:15 +09:00
parent 3047011de8
commit d6789656ce

View File

@ -4,23 +4,22 @@
v-for="(user, index) in userList" v-for="(user, index) in userList"
:key="index" :key="index"
class="avatar pull-up" class="avatar pull-up"
:class="{ 'opacity-100': user.disabled }" :class="{ 'opacity-100': isUserDisabled(user) }"
@click="toggleDisable(index)" @click="toggleDisable(index)"
data-bs-toggle="tooltip" data-bs-toggle="tooltip"
data-popup="tooltip-custom" data-popup="tooltip-custom"
data-bs-placement="top" data-bs-placement="top"
:aria-label="user.MEMBERSEQ" :aria-label="user.MEMBERSEQ"
:data-bs-original-title="getTooltipTitle(user)" :data-bs-original-title="getTooltipTitle(user)"
> >
<img <img
class="rounded-circle user-avatar border border-3" class="rounded-circle user-avatar border border-3"
:class="{ 'grayscaleImg': user.disabled }" :class="{ 'grayscaleImg': isUserDisabled(user) }"
:src="`${baseUrl}upload/img/profile/${user.MEMBERPRF}`" :src="`${baseUrl}upload/img/profile/${user.MEMBERPRF}`"
:style="`border-color: ${user.usercolor} !important;`" :style="`border-color: ${user.usercolor} !important;`"
alt="user" alt="user"
/> />
</li> </li>
</ul> </ul>
</template> </template>
@ -29,38 +28,83 @@ import { onMounted, ref, nextTick } from 'vue';
import { useUserStore } from '@s/userList'; import { useUserStore } from '@s/userList';
import $api from '@api'; import $api from '@api';
const emit = defineEmits(); const emit = defineEmits(['user-list-update']);
const userStore = useUserStore(); const userStore = useUserStore();
const userList = ref([]); const userList = ref([]);
const baseUrl = $api.defaults.baseURL.replace(/api\/$/, ''); const baseUrl = $api.defaults.baseURL.replace(/api\/$/, '');
const props = defineProps({
projctSeq: {
type: Number,
required: false,
}
});
//
const fetchProjectParticipation = async () => {
if (props.projctSeq) {
const response = await $api.get(`project/members/${props.projctSeq}`);
if (response.status === 200) {
const projectMembers = response.data.data;
userList.value = userList.value.map(user => ({
...user,
PROJCTYON: projectMembers.find(pm => pm.MEMBERSEQ === user.MEMBERSEQ)?.PROJCTYON ?? '1'
}));
}
}
};
// //
onMounted(async () => { onMounted(async () => {
await userStore.fetchUserList(); await userStore.fetchUserList();
userList.value = userStore.userList; userList.value = userStore.userList;
if (props.projctSeq) {
await fetchProjectParticipation();
}
nextTick(() => { nextTick(() => {
const tooltips = document.querySelectorAll('[data-bs-toggle="tooltip"]'); const tooltips = document.querySelectorAll('[data-bs-toggle="tooltip"]');
tooltips.forEach((tooltip) => { tooltips.forEach((tooltip) => {
new bootstrap.Tooltip(tooltip); new bootstrap.Tooltip(tooltip);
}); });
}); });
}); });
// / //
const toggleDisable = (index) => { const isUserDisabled = (user) => {
return props.projctSeq ? user.PROJCTYON === '0' : user.disabled;
};
// / DB
const toggleDisable = async (index) => {
const user = userList.value[index]; const user = userList.value[index];
if (user) { if (user) {
user.disabled = !user.disabled; const newParticipationStatus = props.projctSeq
emitUserListUpdate(); ? user.PROJCTYON === '1'
: !user.disabled;
if (props.projctSeq) {
const response = await $api.patch('project/updateYon', {
memberSeq: user.MEMBERSEQ,
projctSeq: props.projctSeq,
projctYon: newParticipationStatus ? '0' : '1'
});
if (response.status === 200) {
user.PROJCTYON = newParticipationStatus ? '0' : '1';
}
} else {
user.disabled = newParticipationStatus;
emitUserListUpdate();
}
} }
}; };
// emit // emit
const emitUserListUpdate = () => { const emitUserListUpdate = () => {
const activeUsers = userList.value.filter((user) => !user.disabled); const activeUsers = userList.value.filter(user => !isUserDisabled(user));
const disabledUsers = userList.value.filter((user) => user.disabled); const disabledUsers = userList.value.filter(user => isUserDisabled(user));
emit('user-list-update', { activeUsers, disabledUsers }); emit('user-list-update', { activeUsers, disabledUsers });
}; };
@ -68,6 +112,3 @@ const getTooltipTitle = (user) => {
return user.MEMBERSEQ === userStore.userInfo.id ? '나' : user.MEMBERNAM; return user.MEMBERSEQ === userStore.userInfo.id ? '나' : user.MEMBERNAM;
}; };
</script> </script>
<style scoped>
</style>