@@ -51,7 +51,9 @@ const templateRequestDraftDescription = ref('')
const templateRequestSaveToMyTierList = ref ( true )
const isDeleteModalOpen = ref ( false )
const isGroupDeleteModalOpen = ref ( false )
const isColumnDeleteModalOpen = ref ( false )
const pendingRemoveGroupId = ref ( '' )
const pendingRemoveColumnIndex = ref ( - 1 )
const ownerId = ref ( '' )
const authorName = ref ( '' )
const authorAccountName = ref ( '' )
@@ -384,6 +386,24 @@ async function removeColumn(columnIndex) {
await syncSortables ( )
}
function openColumnDeleteModal ( columnIndex ) {
if ( ! canEdit . value || columns . value . length <= 1 ) return
pendingRemoveColumnIndex . value = columnIndex
isColumnDeleteModalOpen . value = true
}
function closeColumnDeleteModal ( ) {
isColumnDeleteModalOpen . value = false
pendingRemoveColumnIndex . value = - 1
}
async function confirmRemoveColumn ( ) {
const columnIndex = pendingRemoveColumnIndex . value
closeColumnDeleteModal ( )
if ( columnIndex < 0 ) return
await removeColumn ( columnIndex )
}
async function performRemoveGroup ( groupId ) {
if ( groups . value . length <= 1 ) return
const target = groups . value . find ( ( group ) => group . id === groupId )
@@ -1018,6 +1038,19 @@ onUnmounted(() => {
< / div >
< / div >
< div v-if = "isColumnDeleteModalOpen" class="modalOverlay" @click.self="closeColumnDeleteModal" >
< div class = "modalCard" role = "dialog" aria -modal = " true " aria -labelledby = " deleteColumnTitle " >
< div id = "deleteColumnTitle" class = "modalCard__title" > 티어 열 삭제 < / div >
< div class = "modalCard__desc" >
이 열을 삭제하면 현재 들어 있는 아이템은 모두 첫 번째 열로 이동합니다 . 삭제 후에도 아이템 자체는 유지돼요 .
< / div >
< div class = "modalCard__actions" >
< button class = "btn btn--ghost" @click ="closeColumnDeleteModal" > 취소 < / button >
< button class = "btn btn--danger" @click ="confirmRemoveColumn" > 열 삭제 < / button >
< / div >
< / div >
< / div >
< section class = "layout" : style = "{ '--thumb-size': `${iconSize}px` }" >
< div class = "editorMain" >
< section class = "head" >
@@ -1077,7 +1110,7 @@ onUnmounted(() => {
< template v-else >
< div class = "columnHeader" >
< input v-model = "column.name" class="columnName" maxlength="16" placeholder="열 이름" / >
< button class = "columnRemoveText" type = "button" : disabled = "columns.length <= 1" @click ="removeColumn (columnIndex)" > 열 삭제 < / button >
< button class = "columnRemoveText" type = "button" title = "열 삭제" aria -label = " 열 삭제 " : disabled = "columns.length <= 1" @click ="openColumnDeleteModal (columnIndex)" > × < / button >
< / div >
< / template >
< / div >
@@ -1097,10 +1130,11 @@ onUnmounted(() => {
class = "rowRemoveText"
type = "button"
title = "행 삭제"
aria -label = " 행 삭제 "
: disabled = "groups.length <= 1"
@click ="openGroupDeleteModal(g.id)"
>
행 삭제
×
< / button >
< / template >
< / div >
@@ -1731,11 +1765,17 @@ onUnmounted(() => {
}
. boardColumnsHeader _ _cell {
min - width : 0 ;
position : relative ;
}
. boardColumnsHeader _ _name {
padd ing : 4 px 0 8 px ;
m in- height : 3 8px ;
display : flex ;
align - items : center ;
justify - content : center ;
padding : 0 12 px ;
text - align : center ;
font - size : 12 px ;
line - height : 1.2 ;
font - weight : 800 ;
opacity : 0.74 ;
}
@@ -1817,7 +1857,7 @@ onUnmounted(() => {
display : flex ;
align - items : center ;
justify - content : center ;
padding : 14 px 12 px 30 px ;
padding : 14 px 28 px ;
font - weight : 900 ;
overflow : hidden ;
}
@@ -1832,11 +1872,11 @@ onUnmounted(() => {
min - width : 0 ;
}
. columnHeader {
position : relative ;
display : flex ;
align - items : center ;
gap : 8 px ;
min - height : 38 px ;
padding : 0 2 px ;
padding : 0 28 px ;
}
. columnName {
width : 100 % ;
@@ -1847,6 +1887,7 @@ onUnmounted(() => {
padding : 4 px 0 ;
text - align : center ;
font - size : 12 px ;
line - height : 1.2 ;
font - weight : 800 ;
outline : none ;
}
@@ -1854,14 +1895,28 @@ onUnmounted(() => {
color : rgba ( 255 , 255 , 255 , 0.34 ) ;
}
. columnRemoveText {
position : absolute ;
top : 50 % ;
right : 0 ;
transform : translateY ( - 50 % ) ;
width : 20 px ;
height : 20 px ;
display : grid ;
place - items : center ;
padding : 0 ;
border : 0 ;
border - radius : 999 px ;
background : transparent ;
color : rgba ( 255 , 255 , 255 , 0.56 ) ;
font - size : 11 px ;
font - size : 16 px ;
line - height : 1 ;
font - weight : 800 ;
cursor : pointer ;
}
. columnRemoveText : hover {
color : rgba ( 255 , 255 , 255 , 0.92 ) ;
background : rgba ( 255 , 255 , 255 , 0.06 ) ;
}
. columnRemoveText : disabled {
opacity : 0.32 ;
cursor : not - allowed ;
@@ -1895,19 +1950,25 @@ onUnmounted(() => {
}
. rowRemoveText {
position : absolute ;
right : 12 px ;
bottom : 10 px ;
top : 10 px ;
right : 10 px ;
width : 20 px ;
height : 20 px ;
display : grid ;
place - items : center ;
padding : 0 ;
border : 0 ;
border - radius : 999 px ;
background : transparent ;
color : rgba ( 255 , 255 , 255 , 0.6 ) ;
cursor : pointer ;
font - size : 11 px ;
font - size : 16 px ;
line - height : 1 ;
font - weight : 800 ;
}
. rowRemoveText : hover {
color : rgba ( 255 , 255 , 255 , 0.9 ) ;
color : rgba ( 255 , 255 , 255 , 0.92 ) ;
background : rgba ( 255 , 255 , 255 , 0.06 ) ;
}
. rowRemoveText : disabled {
opacity : 0.32 ;