From 301466f4719b3689ffae02ee654dd26fb0889512 Mon Sep 17 00:00:00 2001 From: Minkyu0424 Date: Thu, 13 Feb 2025 12:02:30 +0900 Subject: [PATCH 1/7] =?UTF-8?q?:recycle:=20[fix]=20:=20=EC=9E=91=EC=97=85?= =?UTF-8?q?=20=EC=9A=94=EC=B2=AD=EC=8B=9C=20=EB=A1=9C=EB=94=A9=20=EC=83=81?= =?UTF-8?q?=ED=83=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/common/LoadingIcon.vue | 19 +++++++++++++++++++ src/components/common/ModalView.vue | 3 ++- src/components/request-task/RequestTask.vue | 18 ++++++++++++------ 3 files changed, 33 insertions(+), 7 deletions(-) create mode 100644 src/components/common/LoadingIcon.vue diff --git a/src/components/common/LoadingIcon.vue b/src/components/common/LoadingIcon.vue new file mode 100644 index 0000000..e0786b3 --- /dev/null +++ b/src/components/common/LoadingIcon.vue @@ -0,0 +1,19 @@ + diff --git a/src/components/common/ModalView.vue b/src/components/common/ModalView.vue index fc2a2f1..d12bb65 100644 --- a/src/components/common/ModalView.vue +++ b/src/components/common/ModalView.vue @@ -19,7 +19,7 @@ - +
@@ -84,6 +84,7 @@ import { failIcon, successIcon, warningIcon } from '@/constants/iconPath' import { preventEnter } from '@/utils/preventEnter' import { onUnmounted, ref, watch } from 'vue' import CommonIcons from './CommonIcons.vue' +import LoadingIcon from './LoadingIcon.vue' const { isOpen, type, modelValue } = defineProps<{ isOpen: boolean diff --git a/src/components/request-task/RequestTask.vue b/src/components/request-task/RequestTask.vue index 69cb504..5cd54e5 100644 --- a/src/components/request-task/RequestTask.vue +++ b/src/components/request-task/RequestTask.vue @@ -25,7 +25,9 @@ :is-invalidate="isInvalidate" :placeholderText="'부가 정보를 입력해주세요'" :limit-length="200" /> - + 작업이 요청되었습니다 - - + :isOpen="isModalVisible === 'loading'" + type="loadingType"> + +
@@ -66,9 +67,11 @@ const category2 = ref(null) const title = ref('') const description = ref('') const file = ref(null as File[] | null) + const isInvalidate = ref('') const isModalVisible = ref('') const isSubmitting = ref(false) +const isUploading = ref(false) const mainCategoryArr = ref([]) const subCategoryArr = ref([]) @@ -127,6 +130,8 @@ const handleSubmit = async () => { } isSubmitting.value = true + isUploading.value = true + isModalVisible.value = 'loading' const formData = new FormData() const taskInfo = { @@ -144,5 +149,6 @@ const handleSubmit = async () => { await postTaskRequest(formData) isModalVisible.value = 'success' isSubmitting.value = false + isUploading.value = false } From e5348f3cf28bbefb30d3a7e17ff3138d4fd22da8 Mon Sep 17 00:00:00 2001 From: Minkyu0424 Date: Thu, 13 Feb 2025 12:13:48 +0900 Subject: [PATCH 2/7] =?UTF-8?q?:recycle:=20[fix]=20:=20=EC=9A=94=EC=B2=AD?= =?UTF-8?q?=EC=B7=A8=EC=86=8C=20=EC=9A=94=EC=B2=AD=EC=9E=90=EB=A7=8C=20?= =?UTF-8?q?=EA=B0=80=EB=8A=A5=ED=95=98=EA=B2=8C=20=EB=B3=80=EA=B2=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/request-approve/RequestApprove.vue | 1 - src/components/task-detail/TaskDetailTopBar.vue | 3 +-- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/components/request-approve/RequestApprove.vue b/src/components/request-approve/RequestApprove.vue index 82cceb6..fa7bd00 100644 --- a/src/components/request-approve/RequestApprove.vue +++ b/src/components/request-approve/RequestApprove.vue @@ -157,7 +157,6 @@ const handleSubmit = async () => { isInvalidate.value = '' return } - console.log(isTimeFilled.value, isTimeComplete.value, isDueDateValid.value) const requestData = { categoryId: category2.value.subCategoryId, diff --git a/src/components/task-detail/TaskDetailTopBar.vue b/src/components/task-detail/TaskDetailTopBar.vue index 6efe6ea..3229fa3 100644 --- a/src/components/task-detail/TaskDetailTopBar.vue +++ b/src/components/task-detail/TaskDetailTopBar.vue @@ -24,7 +24,7 @@

요청 취소

@@ -99,7 +99,6 @@ const finishCancel = async () => { await queryClient.refetchQueries({ queryKey: ['myRequest'] }) - toggleModal('success') closeTaskDetail() } From ebef9a848ed3962d5634ff3c5fdc3632a5ea483a Mon Sep 17 00:00:00 2001 From: Minkyu0424 Date: Thu, 13 Feb 2025 12:27:18 +0900 Subject: [PATCH 3/7] =?UTF-8?q?:recycle:=20[fix]=20:=20=ED=8C=8C=EC=9D=BC?= =?UTF-8?q?=EC=9D=B4=EB=A6=84=20=EA=B8=B8=EC=9D=B4=EC=A0=9C=ED=95=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../request-task/RequestTaskFileInput.vue | 23 +++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/src/components/request-task/RequestTaskFileInput.vue b/src/components/request-task/RequestTaskFileInput.vue index 8b83e29..33d3308 100644 --- a/src/components/request-task/RequestTaskFileInput.vue +++ b/src/components/request-task/RequestTaskFileInput.vue @@ -10,6 +10,7 @@
() const emit = defineEmits(['update:modelValue']) @@ -61,10 +63,21 @@ const handleModal = () => { isModalVisible.value = !isModalVisible.value } +const truncateFilename = (name: string, maxLength: number) => { + return [...name].slice(0, maxLength).join('') +} + const handleFileUpload = (event: Event) => { const target = event.target as HTMLInputElement if (target.files && target.files.length > 0) { - const newFiles = Array.from(target.files).filter(file => file.size <= 5 * 1024 * 1024) + const newFiles = Array.from(target.files) + .map(file => { + const truncatedName = truncateFilename(file.name, 35) + const newFile = new File([file], truncatedName, { type: file.type }) + return newFile.size <= 5 * 1024 * 1024 ? newFile : null + }) + .filter(file => file !== null) as File[] + if (newFiles.length !== target.files.length) { handleModal() return @@ -83,7 +96,13 @@ const handleDrop = (event: DragEvent) => { isDragging.value = false const files = event.dataTransfer?.files if (files && files.length > 0) { - const newFiles = Array.from(files).filter(file => file.size <= 5 * 1024 * 1024) + const newFiles = Array.from(files) + .map(file => { + const truncatedName = truncateFilename(file.name, 35) + const newFile = new File([file], truncatedName, { type: file.type }) + return newFile.size <= 5 * 1024 * 1024 ? newFile : null + }) + .filter(file => file !== null) as File[] if (newFiles.length !== files.length) { handleModal() return From 79b1c06c9ea03c857e4f9f15b883937a0a4c8a11 Mon Sep 17 00:00:00 2001 From: Minkyu0424 Date: Thu, 13 Feb 2025 12:50:26 +0900 Subject: [PATCH 4/7] =?UTF-8?q?:recycle:=20[fix]=20:=20=ED=8C=8C=EC=9D=BC?= =?UTF-8?q?=20=EC=82=AC=EC=9D=B4=EC=A6=88=20=ED=8F=AC=EB=A7=A4=ED=8C=85=20?= =?UTF-8?q?=ED=95=9C=EB=B2=88=EB=A7=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/request-task/ReRequestTask.vue | 4 +++- src/components/request-task/RequestTaskFileInputAfter.vue | 4 ++-- src/types/user.ts | 1 + 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/components/request-task/ReRequestTask.vue b/src/components/request-task/ReRequestTask.vue index f6b16c7..979abd8 100644 --- a/src/components/request-task/ReRequestTask.vue +++ b/src/components/request-task/ReRequestTask.vue @@ -25,7 +25,9 @@ :is-invalidate="isInvalidate" :placeholderText="'부가 정보를 입력해주세요'" :limit-length="200" /> - +

{{ file.name }}

-

{{ formatFileSize(file.size) }}

+

{{ isEdit ? file.size : formatFileSize(file.size) }}

{{ new Date().toLocaleString() }}

() +const { files, removeFile, isEdit } = defineProps() diff --git a/src/types/user.ts b/src/types/user.ts index c68ad16..ff25da4 100644 --- a/src/types/user.ts +++ b/src/types/user.ts @@ -38,6 +38,7 @@ export interface RequestTaskInputProps { export interface RequestTaskFileInputProps { files: File[] | null removeFile: (index: number) => void + isEdit?: boolean } export interface RequestTaskTextAreaProps { From fff168f85e7e302880dc3485deef1dcc480533ab Mon Sep 17 00:00:00 2001 From: Minkyu0424 Date: Thu, 13 Feb 2025 13:11:39 +0900 Subject: [PATCH 5/7] =?UTF-8?q?:recycle:=20[fix]=20:=20=ED=9A=8C=EC=9B=90?= =?UTF-8?q?=EC=A0=95=EB=B3=B4=20=EC=88=98=EC=A0=95=20=EC=A0=95=EC=83=81?= =?UTF-8?q?=ED=99=94(=EC=9C=A0=ED=9A=A8=EC=84=B1=20=EA=B2=80=EC=A6=9D)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/admin.ts | 2 +- src/components/user-manage/UserUpdate.vue | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/api/admin.ts b/src/api/admin.ts index df2edbf..7ef09fd 100644 --- a/src/api/admin.ts +++ b/src/api/admin.ts @@ -46,6 +46,6 @@ export const getMemberDetailAdmin = async (id: string) => { } export const updateMemberAdmin = async (id: string, data: UserUpdateValue) => { - const response = await axiosInstance.post(`api/managements/members/${id}`, data) + const response = await axiosInstance.patch(`api/managements/members/${id}`, data) return response.data } diff --git a/src/components/user-manage/UserUpdate.vue b/src/components/user-manage/UserUpdate.vue index f4ca1c8..db997b5 100644 --- a/src/components/user-manage/UserUpdate.vue +++ b/src/components/user-manage/UserUpdate.vue @@ -8,6 +8,7 @@ { router.back() } +const usernameRegex = /^[a-z]{3,10}\.[a-z]{1,5}$/ +const emailRegex = /^@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)+$/ + const handleSubmit = async () => { try { + if (!userRegistrationForm.value.name) { + isInvalidate.value = 'nameEmpty' + return + } + if (!usernameRegex.test(userRegistrationForm.value.nickname)) { + isInvalidate.value = 'wrongNickname' + return + } + if (!emailRegex.test(userRegistrationForm.value.email)) { + isInvalidate.value = 'wrongEmail' + return + } if (typeof userId.value === 'string') { const userData = { role: RoleTypeMapping[userRegistrationForm.value.role], @@ -123,6 +139,7 @@ const handleSubmit = async () => { departmentId: userRegistrationForm.value.departmentId, departmentRole: userRegistrationForm.value.departmentRole } + await updateMemberAdmin(userId.value, userData) isModalVisible.value = true } From 7139fe960c536447d7a39f5b03ddaafda0f4c026 Mon Sep 17 00:00:00 2001 From: Minkyu0424 Date: Thu, 13 Feb 2025 13:23:57 +0900 Subject: [PATCH 6/7] =?UTF-8?q?:recycle:=20[fix]=20:=20=ED=9E=88=EC=8A=A4?= =?UTF-8?q?=ED=86=A0=EB=A6=AC=20=EC=B1=97=20=EC=A4=84=EB=B0=94=EA=BF=88=20?= =?UTF-8?q?=EB=B0=8F=20=EC=B5=9C=EB=8C=80=EA=B8=B8=EC=9D=B4=20=ED=91=9C?= =?UTF-8?q?=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/task-detail/TaskDetailHistory.vue | 1 + src/components/task-detail/TaskDetailHistoryChat.vue | 2 +- src/components/task-detail/TaskDetailHistoryInput.vue | 2 ++ 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/components/task-detail/TaskDetailHistory.vue b/src/components/task-detail/TaskDetailHistory.vue index cc3ca58..842095f 100644 --- a/src/components/task-detail/TaskDetailHistory.vue +++ b/src/components/task-detail/TaskDetailHistory.vue @@ -5,6 +5,7 @@ :history="historyData" :taskId="taskId" :requestor-name="requestorName" /> +

{{ history.details.commentDetails?.comment || history.details.taskDetails?.value }} diff --git a/src/components/task-detail/TaskDetailHistoryInput.vue b/src/components/task-detail/TaskDetailHistoryInput.vue index 87bdbcf..2dcc29a 100644 --- a/src/components/task-detail/TaskDetailHistoryInput.vue +++ b/src/components/task-detail/TaskDetailHistoryInput.vue @@ -34,6 +34,7 @@ @click="sendMessage" />

+

({{ inputLength }}/{{ 254 }})

isPossible.value && messageText.value.trim() !== '') +const inputLength = computed(() => messageText.value.length) const placeHolderText = computed(() => { if (history.length === 0) { From 2a68f1a90a9635e213359f8a0461ef894fd98a22 Mon Sep 17 00:00:00 2001 From: Minkyu0424 Date: Thu, 13 Feb 2025 13:25:27 +0900 Subject: [PATCH 7/7] =?UTF-8?q?:recycle:=20[fix]=20:=20=EB=B6=88=ED=95=84?= =?UTF-8?q?=EC=9A=94=20=EA=B4=84=ED=98=B8=EC=82=AD=E3=85=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/task-detail/TaskDetailTopBar.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/task-detail/TaskDetailTopBar.vue b/src/components/task-detail/TaskDetailTopBar.vue index 3229fa3..73fa368 100644 --- a/src/components/task-detail/TaskDetailTopBar.vue +++ b/src/components/task-detail/TaskDetailTopBar.vue @@ -24,7 +24,7 @@

요청 취소