Skip to content

Commit 88d69ce

Browse files
committed
🔀 [fix] : conflict resolved merge
2 parents e18c5de + 182ce9e commit 88d69ce

File tree

74 files changed

+355
-309
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

74 files changed

+355
-309
lines changed

.github/workflows/CD.yml

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,8 @@ jobs:
4141
- name: Docker build & push
4242
run: |
4343
docker login clap.kr-central-2.kcr.dev -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }}
44-
docker build -t ${{ secrets.DOCKER_FRONT_REPO }} .
45-
docker push ${{ secrets.DOCKER_FRONT_REPO }}
46-
44+
docker build -t ${{ secrets.DOCKER_REPO }}:${{ steps.version.outputs.VERSION }} .
45+
docker push ${{ secrets.DOCKER_REPO }}:${{ steps.version.outputs.VERSION }}
4746
## deploy
4847
- name: Deploy
4948
uses: appleboy/ssh-action@master

index.html

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,19 @@
1-
<!DOCTYPE html>
1+
<!doctype html>
22
<html lang="">
33
<head>
4-
<meta charset="UTF-8">
5-
<link rel="icon" href="/favicon.ico">
6-
<meta name="viewport" content="width=device-width, initial-scale=1.0">
7-
<title>TaskFlow</title>
4+
<meta charset="UTF-8" />
5+
<link
6+
rel="icon"
7+
href="/favicon.ico" />
8+
<meta
9+
name="viewport"
10+
content="width=device-width, initial-scale=1.0" />
11+
<title>TaskFlow - 스마트한 업무 관리</title>
812
</head>
913
<body>
1014
<div id="app"></div>
11-
<script type="module" src="/src/main.ts"></script>
15+
<script
16+
type="module"
17+
src="/src/main.ts"></script>
1218
</body>
1319
</html>

src/api/common.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ export const getNotification = async (pageNum: number, sizeNum: number) => {
1212
}
1313

1414
export const patchNotificationRead = async (notificationId: number) => {
15-
const response = await axiosInstance.patch(`/api/notification/${notificationId}`)
15+
const response = await axiosInstance.patch(`/api/notifications/${notificationId}`)
1616
return response.data
1717
}
1818

610 KB
Binary file not shown.

src/assets/styles.css

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,12 @@
44

55
@font-face {
66
font-family: 'SUIT-Variable';
7-
src: url('@/assets/fonts/SUIT-Variable.ttf') format('truetype');
8-
font-weight: normal;
7+
src:
8+
url('@/assets/fonts/SUIT-Variable.woff2') format('woff2'),
9+
url('@/assets/fonts/SUIT-Variable.ttf') format('truetype');
10+
font-weight: 100 900;
911
font-style: normal;
12+
font-display: swap;
1013
}
1114

1215
body {
@@ -108,10 +111,10 @@ body {
108111
}
109112

110113
.request-task-dropdown {
111-
@apply flex w-full h-11 items-center rounded p-4 bg-white border border-border-1 cursor-pointer text-black;
114+
@apply flex w-full h-11 items-center rounded p-4 bg-white border border-border-1 cursor-pointer;
112115
}
113116
.request-task-dropdown-option-list {
114-
@apply absolute w-full h-40 overflow-y-auto top-[52px] flex flex-col gap-2 p-2 bg-white rounded z-10 shadow-custom text-black;
117+
@apply absolute w-full h-40 overflow-y-auto top-[52px] flex flex-col gap-2 p-2 bg-white rounded z-10 shadow-custom;
115118
}
116119
.request-task-dropdown-option {
117120
@apply w-full flex items-center h-11 p-2 rounded hover:bg-background-2 cursor-pointer;
@@ -140,7 +143,7 @@ body {
140143
@apply w-full flex items-center h-10 p-2 rounded hover:bg-background-2 cursor-pointer;
141144
}
142145
.task-detail-manager-dropdown {
143-
@apply flex w-full h-10 items-center rounded p-4 bg-white border border-border-1 cursor-pointer text-black;
146+
@apply flex w-full h-10 items-center rounded p-4 bg-white border border-border-1 cursor-pointer;
144147
}
145148

146149
.modal-enter-active,

src/components/api-logs/ApiLogsList.vue

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import { useQuery } from '@tanstack/vue-query'
3131
import type { ApiLogsResponse } from '@/types/admin'
3232
import { computed } from 'vue'
3333
import { useMemberStore } from '@/stores/member'
34+
import { storeToRefs } from 'pinia'
3435
3536
const { params } = useLogsParamsStore()
3637
const onPageChange = (value: number) => {
@@ -47,7 +48,8 @@ const fetchApiLogsList = async () => {
4748
return response.data
4849
}
4950
50-
const { isLogined } = useMemberStore()
51+
const memberStore = useMemberStore()
52+
const { isLogined } = storeToRefs(memberStore)
5153
const { data } = useQuery<ApiLogsResponse>({
5254
queryKey: ['apiLogs', params],
5355
queryFn: fetchApiLogsList,

src/components/common/EditInformation.vue

Lines changed: 30 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,16 @@
44
:isOpen="isModalVisible"
55
:type="'successType'"
66
@close="handleCancel">
7-
<template #header> 정보가 수정되었습니다 </template>
7+
<template #header>정보가 수정되었습니다</template>
88
</ModalView>
99

1010
<ModalView
1111
:isOpen="isWarnningModalVisible"
1212
:type="'warningType'"
1313
@click="changePw"
1414
@close="warningModalToggle">
15-
<template #header> 정보가 저장되지 않았습니다 </template>
16-
<template #body> 수정 사항을 삭제하고 이동하시겠습니까? </template>
15+
<template #header>정보가 저장되지 않았습니다</template>
16+
<template #body>수정 사항을 삭제하고 이동하시겠습니까?</template>
1717
</ModalView>
1818

1919
<div class="profile">
@@ -51,45 +51,48 @@
5151
<span class="absolute top-1 right-2 text-xs text-gray-500"> {{ name.length }} / 10 </span>
5252
<input
5353
:class="[
54-
'block w-full px-4 py-4 border rounded focus:outline-none h-11 mt-2 text-black',
55-
isInvalid ? 'border-red-1' : 'border-border-1'
54+
'block w-full px-4 py-4 border rounded focus:outline-none h-11 mt-2',
55+
isInvalid || isFull ? 'border-red-1' : 'border-border-1'
5656
]"
5757
placeholder="이름을 입력해주세요"
5858
v-model="name"
5959
maxlength="10"
6060
ref="nameInput"
6161
@blur="validateName" />
62-
<span
63-
v-show="isInvalid"
64-
class="text-red-1 text-xs font-bold mt-1"
65-
>이름에는 특수문자가 포함될 수 없습니다.</span
66-
>
62+
<div class="mb-1">
63+
<span
64+
v-show="isInvalid"
65+
class="absolute text-red-1 text-xs font-bold mt-1"
66+
>이름에는 특수문자가 포함될 수 없습니다.</span
67+
>
68+
<span
69+
v-show="isFull"
70+
class="absolute text-red-1 text-xs font-bold mt-1"
71+
>이름은 1글자 이상, 10글자이하만 가능합니다.</span
72+
>
73+
</div>
6774
</div>
6875
<div class="flex flex-col">
6976
<p class="text-body text-xs font-bold">아이디</p>
70-
<p class="mt-2 text-black">{{ info.nickname }}</p>
77+
<p class="mt-2">{{ info.nickname }}</p>
7178
</div>
7279
<div class="flex flex-col">
7380
<p class="text-body text-xs font-bold">이메일</p>
74-
<p class="mt-2 text-black">{{ info.email }}</p>
81+
<p class="mt-2">{{ info.email }}</p>
7582
</div>
7683
<div class="flex flex-col">
7784
<p class="text-body text-xs font-bold">부서</p>
78-
<p class="mt-2 text-black">{{ info.departmentName }}</p>
85+
<p class="mt-2">{{ info.departmentName }}</p>
7986
</div>
8087
<div
8188
v-if="info.departmentRole"
8289
class="flex flex-col">
8390
<p class="text-body text-xs font-bold">직무</p>
84-
<p class="mt-2 text-black">{{ info.departmentRole }}</p>
91+
<p class="mt-2">{{ info.departmentRole }}</p>
8592
</div>
8693
<div>
8794
<p class="text-body text-xs font-bold">알림 수신 여부</p>
8895
<div class="flex flex-col mt-2 gap-2">
89-
<FormCheckbox
90-
v-model="agitCheck"
91-
:checkButtonName="'아지트'"
92-
:isChecked="agitCheck" />
9396
<FormCheckbox
9497
v-model="kakaoWorkCheck"
9598
:checkButtonName="'카카오워크'"
@@ -134,7 +137,6 @@ const memberStore = useMemberStore()
134137
const { info } = storeToRefs(memberStore)
135138
136139
const name = ref(info.value.name)
137-
const agitCheck = ref(info.value.notificationSettingInfo.agit)
138140
const emailCheck = ref(info.value.notificationSettingInfo.email)
139141
const kakaoWorkCheck = ref(info.value.notificationSettingInfo.kakaoWork)
140142
const imageDelete = ref(info.value.profileImageUrl == null ? true : false)
@@ -143,6 +145,7 @@ const selectedFile = ref<File | null>(null)
143145
const previewUrl = ref<string | null>(null)
144146
145147
const isInvalid = ref(false)
148+
const isFull = ref(false)
146149
const nameInput = ref<HTMLInputElement | null>(null)
147150
148151
const isModalVisible = ref(false)
@@ -151,7 +154,6 @@ const isWarnningModalVisible = ref(false)
151154
watchEffect(() => {
152155
if (info.value) {
153156
name.value = info.value.name
154-
agitCheck.value = info.value.notificationSettingInfo.agit
155157
emailCheck.value = info.value.notificationSettingInfo.email
156158
kakaoWorkCheck.value = info.value.notificationSettingInfo.kakaoWork
157159
}
@@ -160,8 +162,13 @@ watchEffect(() => {
160162
const validateName = () => {
161163
const regex = /[!@#$%^&*(),.?":{}|<>]/g
162164
isInvalid.value = regex.test(name.value)
165+
if (name.value.length > 10 || name.value.length < 1) {
166+
isFull.value = true
167+
} else {
168+
isFull.value = false
169+
}
163170
164-
if (isInvalid.value) {
171+
if (isInvalid.value || isFull.value) {
165172
nextTick(() => {
166173
nameInput.value?.focus()
167174
})
@@ -175,7 +182,6 @@ const handlePwChange = () => {
175182
if (
176183
selectedFile.value ||
177184
info.value.name != name.value ||
178-
info.value.notificationSettingInfo.agit != agitCheck.value ||
179185
info.value.notificationSettingInfo.kakaoWork != kakaoWorkCheck.value ||
180186
info.value.notificationSettingInfo.email != emailCheck.value
181187
) {
@@ -186,7 +192,7 @@ const handlePwChange = () => {
186192
}
187193
188194
const changePw = () => {
189-
router.push('/pw-check')
195+
router.replace('/pw-check')
190196
}
191197
192198
const warningModalToggle = () => {
@@ -209,12 +215,11 @@ const handleFileDelete = () => {
209215
}
210216
211217
const handleSubmit = async () => {
212-
if (isInvalid.value == false) {
218+
if (isInvalid.value == false && isFull.value == false) {
213219
const formData = new FormData()
214220
const memberInfo = {
215221
name: name.value,
216222
isProfileImageDeleted: imageDelete.value,
217-
agitNotification: agitCheck.value,
218223
emailNotification: emailCheck.value,
219224
kakaoWorkNotification: kakaoWorkCheck.value
220225
}

src/components/common/FormCheckbox.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
{ 'bg-primary1 text-white': isChecked, 'border border-disabled': !isChecked }
1515
]"
1616
:style="isChecked ? { fill: 'white' } : {}" />
17-
<p class="text-black">{{ checkButtonName }}</p>
17+
<p>{{ checkButtonName }}</p>
1818
</div>
1919
</div>
2020
</template>

src/components/common/ModalView.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,13 @@
2020
v-if="type == 'warningType'"
2121
:name="warningIcon" />
2222

23-
<div class="flex text-2xl font-bold justify-center text-black">
23+
<div class="flex text-2xl font-bold justify-center">
2424
<slot name="header"></slot>
2525
</div>
2626

2727
<div
2828
v-if="type != 'inputType'"
29-
class="flex text-sm font-bold text-body justify-center">
29+
class="flex text-sm font-bold text-body justify-center whitespace-pre-line text-center">
3030
<slot name="body"></slot>
3131
</div>
3232
</div>

src/components/common/TaskCard.vue

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<template>
22
<div
3-
class="w-full max-w-80 border-l-8 bg-white py-4 pl-6 pr-4 flex flex-col gap-6 rounded-lg shadow-custom hover:bg-background-2 cursor-pointer"
3+
class="w-full max-w-80 border-l-8 bg-white p-4 flex flex-col gap-6 rounded-lg shadow-custom hover:bg-background-2 cursor-pointer"
44
:class="borderLeft"
55
@click="handleModal(data.taskId)">
66
<div class="flex flex-col gap-1">
@@ -10,9 +10,7 @@
1010
v-if="data.labelInfo"
1111
:color="data.labelInfo.labelColor"
1212
:content="data.labelInfo.labelName" />
13-
<span class="text-black text-ellipsis overflow-hidden whitespace-nowrap">{{
14-
data.title
15-
}}</span>
13+
<span class="line-clamp-2">{{ data.title }}</span>
1614
</div>
1715
<CommonIcons
1816
v-if="draggable"
@@ -21,25 +19,25 @@
2119
<span class="text-xs text-body">{{ data.mainCategoryName }} - {{ data.categoryName }}</span>
2220
</div>
2321
<div class="flex justify-between items-end">
24-
<span class="text-xs font-bold text-black whitespace-nowrap overflow-hidden text-ellipsis">{{
25-
data.taskCode
26-
}}</span>
22+
<span class="text-xs font-bold whitespace-nowrap overflow-hidden text-ellipsis">
23+
{{ data.taskCode }}
24+
</span>
2725
<div class="flex flex-col gap-1 items-end">
2826
<span class="text-xs font-bold text-body">{{ data.requesterDepartment }}</span>
2927
<div class="flex items-center gap-1.5">
3028
<ImageContainer
3129
:url="data.requesterImageUrl"
3230
:size="16" />
33-
<span class="text-xs font-bold text-black">{{ data.requesterNickname }}</span>
31+
<span class="text-xs font-bold">{{ data.requesterNickname }}</span>
3432
</div>
3533
</div>
3634
</div>
37-
<TaskDetail
38-
v-if="selectedID"
39-
:is-approved="data.taskStatus !== 'REQUESTED'"
40-
:selected-id="selectedID"
41-
:close-task-detail="() => handleModal(null)" />
4235
</div>
36+
<TaskDetail
37+
v-if="selectedID"
38+
:selected-id="selectedID"
39+
:close-task-detail="() => handleModal(null)"
40+
click.stop />
4341
</template>
4442

4543
<script setup lang="ts">
@@ -54,15 +52,17 @@ import ImageContainer from './ImageContainer.vue'
5452
import TaskDetail from '../task-detail/TaskDetail.vue'
5553
5654
const { data } = defineProps<{ data: TaskCardProps; draggable?: boolean }>()
55+
const emit = defineEmits(['toggleModal'])
5756
const selectedID = ref<number | null>(null)
5857
5958
const borderLeft = computed(() => {
6059
return `border-${statusAsColor(data.taskStatus as Status)}-1`
6160
})
6261
6362
const handleModal = (id: number | null) => {
64-
if (data.taskId) document.body.style.overflow = 'hidden'
63+
if (id) document.body.style.overflow = 'hidden'
6564
else document.body.style.overflow = ''
65+
emit('toggleModal')
6666
selectedID.value = id
6767
}
6868
</script>

0 commit comments

Comments
 (0)