Merge branch 'main' into commuters
All checks were successful
LocalNet_front/pipeline/head This commit looks good

This commit is contained in:
yoon 2025-03-13 12:15:29 +09:00
commit 062742c602
10 changed files with 70 additions and 59 deletions

View File

@ -17,12 +17,13 @@
@updateReaction="handleUpdateReaction" @updateReaction="handleUpdateReaction"
/> />
<!-- 댓글 비밀번호 입력창 (익명일 경우) --> <!-- 댓글 비밀번호 입력창 (익명일 경우) -->
<div v-if="currentPasswordCommentId === comment.commentId && unknown && comment.author == '익명'" class="mt-3 w-25 ms-auto"> <div v-if="currentPasswordCommentId === comment.commentId && unknown && comment.author == '익명'" class="mt-3 w-20 ms-auto">
<div class="input-group"> <div class="input-group">
<input <input
type="password" type="password"
class="form-control" class="form-control"
:value="password" :value="password"
autocomplete="new-password"
placeholder="비밀번호 입력" placeholder="비밀번호 입력"
@input="filterInput" @input="filterInput"
/> />
@ -122,9 +123,9 @@
'update:password', 'update:password',
]); ]);
const filterInput = (event) => { const filterInput = event => {
event.target.value = event.target.value.replace(/\s/g, ""); // event.target.value = event.target.value.replace(/\s/g, ''); //
emit("update:password", event.target.value); emit('update:password', event.target.value);
}; };
const localEditedContent = ref(props.comment.content); const localEditedContent = ref(props.comment.content);

View File

@ -41,6 +41,7 @@
type="password" type="password"
id="basic-default-password" id="basic-default-password"
class="form-control flex-grow-1" class="form-control flex-grow-1"
autocomplete="new-password"
v-model="password" v-model="password"
placeholder="비밀번호 입력" placeholder="비밀번호 입력"
@input="passwordAlertTextHandler" @input="passwordAlertTextHandler"
@ -103,8 +104,8 @@
textAlert.value = ''; textAlert.value = '';
}; };
const passwordAlertTextHandler = (event) => { const passwordAlertTextHandler = event => {
event.target.value = event.target.value.replace(/\s/g, ""); event.target.value = event.target.value.replace(/\s/g, '');
passwordAlert2.value = ''; passwordAlert2.value = '';
}; };

View File

@ -20,8 +20,10 @@
<div class="ms-auto text-end"> <div class="ms-auto text-end">
<!-- 수정, 삭제 버튼 --> <!-- 수정, 삭제 버튼 -->
<template v-if="!isDeletedComment && (unknown || isCommentAuthor || isAuthor)"> <template v-if="!isDeletedComment && (unknown || isCommentAuthor || isAuthor)">
<EditButton @click.stop="editClick" /> <div class="float-end ms-1">
<DeleteButton @click.stop="deleteClick" /> <EditButton @click.stop="editClick" />
<DeleteButton :class="'ms-1'" @click.stop="deleteClick" />
</div>
</template> </template>
<!-- 좋아요, 싫어요 버튼 (댓글에서만 표시) --> <!-- 좋아요, 싫어요 버튼 (댓글에서만 표시) -->

View File

@ -1,39 +1,40 @@
<template> <template>
<button class="btn btn-label-primary btn-icon float-end" @click="toggleText"> <button class="btn btn-label-primary btn-icon" @click="toggleText">
<i :class="buttonClass"></i> <i :class="buttonClass"></i>
</button> </button>
</template> </template>
<script setup> <script setup>
import { ref, watch, defineProps } from 'vue'; import { ref, watch, defineProps } from 'vue';
const props = defineProps({ const props = defineProps({
isToggleEnabled: { isToggleEnabled: {
type: Boolean, type: Boolean,
default: false, default: false,
}, },
isActive: { isActive: {
type: Boolean, type: Boolean,
required: false, required: false,
}, },
}); });
const buttonClass = ref("bx bx-edit-alt"); const buttonClass = ref('bx bx-edit-alt');
watch(() => props.isActive, (newVal) => { watch(
buttonClass.value = newVal ? "bx bx-x" : "bx bx-edit-alt"; () => props.isActive,
}); newVal => {
buttonClass.value = newVal ? 'bx bx-x' : 'bx bx-edit-alt';
},
);
const toggleText = () => { const toggleText = () => {
if (props.isToggleEnabled) { if (props.isToggleEnabled) {
buttonClass.value = buttonClass.value === "bx bx-edit-alt" ? "bx bx-x" : "bx bx-edit-alt"; buttonClass.value = buttonClass.value === 'bx bx-edit-alt' ? 'bx bx-x' : 'bx bx-edit-alt';
} }
}; };
const resetButton = () => { const resetButton = () => {
buttonClass.value = "bx bx-edit-alt"; buttonClass.value = 'bx bx-edit-alt';
}; };
defineExpose({ resetButton });
defineExpose({ resetButton });
</script> </script>

View File

@ -74,16 +74,13 @@ nextTick(() => {
const sortedUserList = computed(() => { const sortedUserList = computed(() => {
if (!employeeId.value) return []; if (!employeeId.value) return [];
// // ( )
const nonAdminUsers = userList.value.filter(user => user.MEMBERROL !== "ROLE_ADMIN"); const myProfile = userList.value.find(user => user.MEMBERSEQ === employeeId.value);
const otherUsers = userList.value.filter(user => user.MEMBERSEQ !== employeeId.value);
const myProfile = nonAdminUsers.find(user => user.MEMBERSEQ === employeeId.value);
const otherUsers = nonAdminUsers.filter(user => user.MEMBERSEQ !== employeeId.value);
return myProfile ? [myProfile, ...otherUsers] : otherUsers; return myProfile ? [myProfile, ...otherUsers] : otherUsers;
}); });
const getUserProfileImage = (profilePath) => const getUserProfileImage = (profilePath) =>
profilePath && profilePath.trim() ? `${baseUrl}upload/img/profile/${profilePath}` : defaultProfile; profilePath && profilePath.trim() ? `${baseUrl}upload/img/profile/${profilePath}` : defaultProfile;

View File

@ -10,7 +10,8 @@
@change="handleChange" @change="handleChange"
> >
{{ data.LOCVOTCON }} {{ data.LOCVOTCON }}
<a v-if="data.LOCVOTLIK" :href="data.LOCVOTLIK.startsWith('http') ? data.LOCVOTLIK : 'http://' + data.LOCVOTLIK" target="_blank"> <div></div>
<a v-if="data.LOCVOTLIK" :href="data.LOCVOTLIK.startsWith('http') ? data.LOCVOTLIK : 'http://' + data.LOCVOTLIK" class="d-inline-block text-truncate" target="_blank" rel="noopener noreferrer">
{{ data.LOCVOTLIK }} {{ data.LOCVOTLIK }}
</a> </a>
</label> </label>
@ -54,5 +55,10 @@ const handleChange = (event) => {
</script> </script>
<style> <style>
a {
max-width: 500px; /* 원하는 너비로 조정 */
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
</style> </style>

View File

@ -6,21 +6,22 @@
<!-- 링크 입력창 (옆으로 나오게) --> <!-- 링크 입력창 (옆으로 나오게) -->
<div <div
v-if="isPopoverVisible" v-if="isPopoverVisible"
class="popover-container d-flex align-items-center" class="d-flex"
> >
<input <input
v-model="link" v-model="link"
placeholder="URL을 입력해주세요" placeholder="URL을 입력해주세요"
class="form-control me-2" class="form-control"
style="min-width: 200px;" style="min-width: 500px;"
/> />
<save-btn class="btn-sm" @click="saveLink"/> <save-btn class="btn-sm" @click="saveLink"/>
</div> </div>
<!-- 등록된 링크, 입력창이 보이지 않고 등록된 링크만 보일 --> <!-- 등록된 링크, 입력창이 보이지 않고 등록된 링크만 보일 -->
<span v-if="isLinkSaved && !isPopoverVisible" class="ms-2"> <span v-if="isLinkSaved && !isPopoverVisible" class="ms-2">
<a :href="formattedLink" target="_blank" rel="noopener noreferrer">{{ link }}</a> <a :href="formattedLink" class="d-inline-block text-truncate" target="_blank" rel="noopener noreferrer">
{{ link }}
</a>
</span> </span>
</div> </div>
</template> </template>
@ -60,4 +61,10 @@ display: flex;
align-items: center; align-items: center;
gap: 8px; /* 아이콘과 입력창 간격 조정 */ gap: 8px; /* 아이콘과 입력창 간격 조정 */
} }
a {
max-width: 500px; /* 원하는 너비로 조정 */
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
</style> </style>

View File

@ -26,7 +26,7 @@
<input <input
type="password" type="password"
class="form-control" class="form-control"
autocomplete="off" autocomplete="new-password"
v-model="password" v-model="password"
placeholder="비밀번호 입력" placeholder="비밀번호 입력"
@input=" @input="
@ -799,8 +799,8 @@
}); });
</script> </script>
<style> <style>
.board-content img { .board-content img {
max-width: 100%; max-width: 100%;
height: auto; height: auto;
} }
</style> </style>

View File

@ -269,11 +269,7 @@ const fetchUserList = async () => {
try { try {
await userListStore.fetchUserList(); await userListStore.fetchUserList();
// "ROLE_ADMIN" userList.value = [...userListStore.userList];
const filteredUsers = userListStore.userList.filter(user => user.MEMBERROL !== "ROLE_ADMIN");
// userList
userList.value = [...filteredUsers];
if (!userList.value.length) { if (!userList.value.length) {
console.warn("📌 사용자 목록이 비어 있음!"); console.warn("📌 사용자 목록이 비어 있음!");

View File

@ -15,7 +15,7 @@
</div> </div>
<!-- 투표리스트 --> <!-- 투표리스트 -->
<div v-if="!voteListCardData" class="mt66"> 등록된 투표가 없습니다.</div> <div v-if="voteListCardData.length == 0 " class="mt66">등록된 투표가 없습니다.</div>
<vote-list <vote-list
:data="voteListCardData" :data="voteListCardData"
@addContents="addContents" @addContents="addContents"