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"
/>
<!-- 댓글 비밀번호 입력창 (익명일 경우) -->
<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">
<input
type="password"
class="form-control"
:value="password"
autocomplete="new-password"
placeholder="비밀번호 입력"
@input="filterInput"
/>
@ -122,9 +123,9 @@
'update:password',
]);
const filterInput = (event) => {
event.target.value = event.target.value.replace(/\s/g, ""); //
emit("update:password", event.target.value);
const filterInput = event => {
event.target.value = event.target.value.replace(/\s/g, ''); //
emit('update:password', event.target.value);
};
const localEditedContent = ref(props.comment.content);

View File

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

View File

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

View File

@ -1,39 +1,40 @@
<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>
</button>
</template>
<script setup>
import { ref, watch, defineProps } from 'vue';
import { ref, watch, defineProps } from 'vue';
const props = defineProps({
isToggleEnabled: {
type: Boolean,
default: false,
},
isActive: {
type: Boolean,
required: false,
},
});
const props = defineProps({
isToggleEnabled: {
type: Boolean,
default: false,
},
isActive: {
type: Boolean,
required: false,
},
});
const buttonClass = ref("bx bx-edit-alt");
const buttonClass = ref('bx bx-edit-alt');
watch(() => props.isActive, (newVal) => {
buttonClass.value = newVal ? "bx bx-x" : "bx bx-edit-alt";
});
watch(
() => props.isActive,
newVal => {
buttonClass.value = newVal ? 'bx bx-x' : 'bx bx-edit-alt';
},
);
const toggleText = () => {
if (props.isToggleEnabled) {
buttonClass.value = buttonClass.value === "bx bx-edit-alt" ? "bx bx-x" : "bx bx-edit-alt";
}
};
const resetButton = () => {
buttonClass.value = "bx bx-edit-alt";
};
defineExpose({ resetButton });
const toggleText = () => {
if (props.isToggleEnabled) {
buttonClass.value = buttonClass.value === 'bx bx-edit-alt' ? 'bx bx-x' : 'bx bx-edit-alt';
}
};
const resetButton = () => {
buttonClass.value = 'bx bx-edit-alt';
};
defineExpose({ resetButton });
</script>

View File

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

View File

@ -10,7 +10,8 @@
@change="handleChange"
>
{{ 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 }}
</a>
</label>
@ -54,5 +55,10 @@ const handleChange = (event) => {
</script>
<style>
a {
max-width: 500px; /* 원하는 너비로 조정 */
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
</style>

View File

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

View File

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

View File

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

View File

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