-
-
-
멤버 초대
-
- {{ repo?.name }} 프로젝트에 멤버를 추가합니다.
-
-
-
-
-
-
-
+
+
+
+
+
+ 이미 가입된 사용자만 초대할 수 있습니다.
+
+
+
+
@@ -800,15 +765,6 @@ onUnmounted(() => window.removeEventListener('keydown', onKeydown))
}
/* 로딩/빈 상태 메시지 */
-.state-msg {
- padding: 2.5rem 1.125rem;
- text-align: center;
- font-size: 0.844rem;
- color: var(--text-3);
- border: 1px solid var(--border);
- border-radius: var(--radius);
- background: #fff;
-}
/* 역할 변경 드롭다운 */
/* 전역 .list 의 overflow:hidden 이 드롭다운을 잘라내므로, 이 화면에서는 보이도록 해제.
@@ -867,73 +823,17 @@ onUnmounted(() => window.removeEventListener('keydown', onKeydown))
diff --git a/frontend/src/pages/relay/TaskDetailPage.vue b/frontend/src/pages/relay/TaskDetailPage.vue
index 8899b43..5554123 100644
--- a/frontend/src/pages/relay/TaskDetailPage.vue
+++ b/frontend/src/pages/relay/TaskDetailPage.vue
@@ -31,6 +31,10 @@ import { useDialog } from '@/composables/useDialog'
import UserAvatar from '@/components/UserAvatar.vue'
import StatusSelect from '@/components/StatusSelect.vue'
import { attachmentKindOf, fileBadge } from '@/shared/utils/format'
+import {
+ WORK_STATUS_META,
+ WORK_STATUS_ORDER,
+} from '@/shared/constants/workStatus'
const route = useRoute()
const router = useRouter()
@@ -302,16 +306,7 @@ const isAssignee = computed(
/* ============================================================
* 중간 점검(체크포인트) — 작업자가 점검일 당일에 보고서로 전송, 지시자는 기록 열람
* ============================================================ */
-const WORK_STATUS_ORDER: ChecklistWorkStatus[] = ['todo', 'doing', 'done']
-// 진행 상태 표시 메타(라벨/색/약색)
-const WORK_STATUS_META: Record<
- ChecklistWorkStatus,
- { label: string; color: string; weak: string }
-> = {
- todo: { label: '대기', color: '#9298a3', weak: '#eef0f2' },
- doing: { label: '진행 중', color: '#2563eb', weak: '#e9f0fd' },
- done: { label: '완료', color: '#1f9d57', weak: '#e7f5ed' },
-}
+// 진행 상태 메타/순서는 공용 SSOT(shared/constants/workStatus) 사용
// 카테고리 색(탭/그룹 dot)
const CAT_COLOR: Record
= {
필수: '#2563eb',
diff --git a/frontend/src/shared/constants/workStatus.ts b/frontend/src/shared/constants/workStatus.ts
new file mode 100644
index 0000000..e6419f1
--- /dev/null
+++ b/frontend/src/shared/constants/workStatus.ts
@@ -0,0 +1,18 @@
+import type { ChecklistWorkStatus } from '@/mock/relay.mock'
+
+// 작업자 진행상태(대기/진행 중/완료) 라벨·색 — 단일 진실 공급원(SSOT).
+// StatusSelect(드롭다운)·업무 상세(보고서)에서 공통 사용한다.
+export interface WorkStatusMeta {
+ label: string
+ color: string
+ weak: string
+}
+
+export const WORK_STATUS_META: Record = {
+ todo: { label: '대기', color: '#9298a3', weak: '#eef0f2' },
+ doing: { label: '진행 중', color: '#2563eb', weak: '#e9f0fd' },
+ done: { label: '완료', color: '#1f9d57', weak: '#e7f5ed' },
+}
+
+// 표시 순서(대기 → 진행 중 → 완료)
+export const WORK_STATUS_ORDER: ChecklistWorkStatus[] = ['todo', 'doing', 'done']
diff --git a/frontend/src/shared/utils/format.ts b/frontend/src/shared/utils/format.ts
index e744e95..323c0d8 100644
--- a/frontend/src/shared/utils/format.ts
+++ b/frontend/src/shared/utils/format.ts
@@ -101,7 +101,7 @@ const WEEKDAYS_KO = ['일', '월', '화', '수', '목', '금', '토']
/** 업무 상태 → 한국어 라벨 */
const TASK_STATUS_LABEL: Record = {
- todo: '할 일',
+ todo: '대기',
prog: '진행 중',
review: '승인 대기',
done: '완료',