mirror of
https://github.com/hwanny1128/HGZero.git
synced 2025-12-06 10:16:24 +00:00
Merge branch 'wip/design-yabo': 용어 통일 (참석자/참석 → 참여자/참여)
UI/UX 설계서 및 유저스토리 용어 일관성 개선 (v1.5.9) 주요 변경사항: - 화면설계서: 100개 인스턴스 변경 - 유저스토리: 132개 인스턴스 변경 - 프로토타입: 34개 인스턴스 변경 - 총 266개 인스턴스 용어 통일 사용자 역할 용어 체계 완전 통일 (생성자/참여자) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
commit
419e3a7661
@ -715,13 +715,22 @@
|
||||
const meetingId = card.dataset.id;
|
||||
const meetingStatus = card.dataset.status;
|
||||
|
||||
// 회의 정보 조회
|
||||
const meeting = SAMPLE_MEETINGS.find(m => m.id == meetingId);
|
||||
const isCreator = meeting.participants.some(p => p.id === currentUser.id && p.role === 'creator');
|
||||
|
||||
// 상태에 따른 이동 처리
|
||||
if (meetingStatus === 'ongoing') {
|
||||
navigateTo('05-회의진행.html');
|
||||
} else if (meetingStatus === 'draft' || meetingStatus === 'complete' || meetingStatus === 'completed') {
|
||||
navigateTo('10-회의록상세조회.html');
|
||||
} else if (meetingStatus === 'scheduled') {
|
||||
// 생성자: 회의예약 화면(수정), 참여자: 시스템 알럿
|
||||
if (isCreator) {
|
||||
navigateTo('03-회의예약.html');
|
||||
} else {
|
||||
alert('아직 회의 시간이 되지 않아 참여하실 수 없습니다');
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
@ -782,7 +791,7 @@
|
||||
// 예정된 회의 개수 (예정 + 진행중)
|
||||
const scheduled = SAMPLE_MEETINGS.filter(m => m.status === 'scheduled' || m.status === 'ongoing').length;
|
||||
|
||||
// 작성중 회의록 개수 (내가 참석한 회의 중 '작성중' 상태)
|
||||
// 작성중 회의록 개수 (내가 참여한 회의 중 '작성중' 상태)
|
||||
const drafts = SAMPLE_MINUTES.filter(m =>
|
||||
m.status === 'draft' &&
|
||||
m.participants.some(p => p.id === currentUser.id)
|
||||
|
||||
@ -226,7 +226,7 @@
|
||||
transform: translateX(22px);
|
||||
}
|
||||
|
||||
/* 참석자 */
|
||||
/* 참여자 */
|
||||
.participants-chips {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
@ -420,18 +420,18 @@
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- 참석자 -->
|
||||
<!-- 참여자 -->
|
||||
<section class="form-section">
|
||||
<h2 class="section-title">참석자 *</h2>
|
||||
<h2 class="section-title">참여자 *</h2>
|
||||
|
||||
<!-- 참석자 칩 -->
|
||||
<!-- 참여자 칩 -->
|
||||
<div class="participants-chips" id="participants-chips">
|
||||
<!-- 동적으로 생성 -->
|
||||
</div>
|
||||
|
||||
<!-- 참석자 추가 버튼 -->
|
||||
<!-- 참여자 추가 버튼 -->
|
||||
<button type="button" class="add-participant-btn" id="add-participant-btn">
|
||||
➕ 참석자 추가
|
||||
➕ 참여자 추가
|
||||
</button>
|
||||
</section>
|
||||
|
||||
@ -459,11 +459,11 @@
|
||||
<button type="submit" form="meeting-form" class="btn btn-primary">예약 완료</button>
|
||||
</div>
|
||||
|
||||
<!-- 참석자 추가 모달 -->
|
||||
<!-- 참여자 추가 모달 -->
|
||||
<div class="modal-overlay" id="add-participant-modal">
|
||||
<div class="modal">
|
||||
<div class="modal-header">
|
||||
<h3 class="modal-title">참석자 추가</h3>
|
||||
<h3 class="modal-title">참여자 추가</h3>
|
||||
<button class="modal-close">✕</button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
@ -504,7 +504,7 @@
|
||||
avatarColor: storedUser.avatarColor || CURRENT_USER.avatarColor
|
||||
} : CURRENT_USER;
|
||||
|
||||
// 참석자 목록 (현재 사용자는 기본 포함)
|
||||
// 참여자 목록 (현재 사용자는 기본 포함)
|
||||
let participants = [currentUser];
|
||||
|
||||
// 폼 요소
|
||||
@ -670,7 +670,7 @@
|
||||
}
|
||||
|
||||
/**
|
||||
* 참석자 칩 렌더링
|
||||
* 참여자 칩 렌더링
|
||||
*/
|
||||
function renderParticipantChips() {
|
||||
participantsChipsContainer.innerHTML = participants.map(p => `
|
||||
@ -693,10 +693,10 @@
|
||||
}
|
||||
|
||||
/**
|
||||
* 참석자 검색 결과 렌더링
|
||||
* 참여자 검색 결과 렌더링
|
||||
*/
|
||||
function renderSearchResults(query) {
|
||||
// 샘플 사용자 목록에서 이미 추가된 참석자 제외
|
||||
// 샘플 사용자 목록에서 이미 추가된 참여자 제외
|
||||
const availableUsers = SAMPLE_USERS.filter(u =>
|
||||
!participants.some(participant => participant.id === u.id)
|
||||
);
|
||||
@ -761,7 +761,7 @@
|
||||
}
|
||||
|
||||
if (participants.length === 0) {
|
||||
showToast('최소 1명의 참석자를 추가해주세요', 'error');
|
||||
showToast('최소 1명의 참여자를 추가해주세요', 'error');
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -855,13 +855,13 @@
|
||||
showToast('회의 링크가 생성되었습니다', 'success');
|
||||
});
|
||||
|
||||
// 참석자 추가
|
||||
// 참여자 추가
|
||||
addParticipantBtn.addEventListener('click', () => {
|
||||
openModal('add-participant-modal');
|
||||
renderSearchResults('');
|
||||
});
|
||||
|
||||
// 참석자 검색
|
||||
// 참여자 검색
|
||||
participantSearch.addEventListener('input', () => {
|
||||
renderSearchResults(participantSearch.value);
|
||||
});
|
||||
|
||||
@ -294,7 +294,7 @@
|
||||
overflow-wrap: break-word;
|
||||
}
|
||||
|
||||
/* 참석자 탭 */
|
||||
/* 참여자 탭 */
|
||||
.participant-section-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
@ -679,7 +679,7 @@
|
||||
<div class="tabs-container">
|
||||
<div class="tabs-header">
|
||||
<button class="tab-button active" onclick="switchTab('participants')">
|
||||
참석자
|
||||
참여자
|
||||
</button>
|
||||
<button class="tab-button" onclick="switchTab('ai-suggestions')">
|
||||
AI 메모
|
||||
@ -692,10 +692,10 @@
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<!-- 참석자 탭 -->
|
||||
<!-- 참여자 탭 -->
|
||||
<div class="tab-content active" id="tab-participants">
|
||||
<div class="participant-section-header">
|
||||
<h3 class="participant-section-title">참석자 관리</h3>
|
||||
<h3 class="participant-section-title">참여자 관리</h3>
|
||||
<span class="participant-count">총 4명</span>
|
||||
</div>
|
||||
|
||||
@ -1043,7 +1043,7 @@
|
||||
document.getElementById(`tab-${tabName}`).classList.add('active');
|
||||
}
|
||||
|
||||
// 참석자 초대
|
||||
// 참여자 초대
|
||||
function inviteParticipant() {
|
||||
const emailInput = document.getElementById('inviteEmail');
|
||||
const email = emailInput.value.trim();
|
||||
|
||||
@ -272,7 +272,7 @@
|
||||
<div class="stats-grid">
|
||||
<div class="stat-item">
|
||||
<div class="stat-value" id="participantsValue">4명</div>
|
||||
<div class="stat-label">참석자</div>
|
||||
<div class="stat-label">참여자</div>
|
||||
</div>
|
||||
<div class="stat-item">
|
||||
<div class="stat-value" id="durationValue">90분</div>
|
||||
@ -571,7 +571,7 @@
|
||||
|
||||
// 바로 최종 확정
|
||||
function confirmMeetingDirectly() {
|
||||
if (confirm('AI가 정리한 내용 그대로 최종 확정하시겠습니까?\n\n모든 안건이 자동으로 검증 완료 처리되며, 참석자에게 확정 알림이 발송됩니다.')) {
|
||||
if (confirm('AI가 정리한 내용 그대로 최종 확정하시겠습니까?\n\n모든 안건이 자동으로 검증 완료 처리되며, 참여자에게 확정 알림이 발송됩니다.')) {
|
||||
showToast('회의록이 최종 확정되었습니다', 'success');
|
||||
setTimeout(() => {
|
||||
navigateTo('02-대시보드.html');
|
||||
|
||||
@ -1083,7 +1083,7 @@
|
||||
<div class="stats-grid">
|
||||
<div class="stat-item">
|
||||
<div class="stat-value">4명</div>
|
||||
<div class="stat-label">참석자</div>
|
||||
<div class="stat-label">참여자</div>
|
||||
</div>
|
||||
<div class="stat-item">
|
||||
<div class="stat-value">90분</div>
|
||||
|
||||
@ -246,7 +246,7 @@
|
||||
}
|
||||
|
||||
.agenda-verification:not([data-is-creator="true"]) .creator-only {
|
||||
display: none; /* 참석자 환경에서는 숨김 */
|
||||
display: none; /* 참여자 환경에서는 숨김 */
|
||||
}
|
||||
|
||||
.agenda-verification:not(.verified) .creator-only {
|
||||
@ -339,11 +339,11 @@
|
||||
10-회의록상세조회.html → 하단 액션 바 "수정" 버튼 클릭
|
||||
|
||||
[권한 제어]
|
||||
- 검증완료 전 (작성중/초안 상태): 모든 참석자가 수정 가능
|
||||
- 검증완료 후: 회의 생성자만 수정 가능 (참석자는 "수정" 버튼 비활성화)
|
||||
- 참석자 관리: 회의 생성자만 추가/삭제 가능
|
||||
- 검증완료 전 (작성중/초안 상태): 모든 참여자가 수정 가능
|
||||
- 검증완료 후: 회의 생성자만 수정 가능 (참여자는 "수정" 버튼 비활성화)
|
||||
- 참여자 관리: 회의 생성자만 추가/삭제 가능
|
||||
- 회의 일시/장소: 읽기 전용 (회의 예약 화면에서만 변경 가능)
|
||||
- 안건별 검증: 회의 생성자는 잠금 해제 후 수정 가능, 참석자는 읽기 전용
|
||||
- 안건별 검증: 회의 생성자는 잠금 해제 후 수정 가능, 참여자는 읽기 전용
|
||||
- AI 한줄 요약: 모든 사용자에게 읽기 전용 (UFR-AI-036)
|
||||
-->
|
||||
|
||||
@ -469,7 +469,7 @@
|
||||
</div>
|
||||
|
||||
<!-- 안건별 검증 (UFR-COLLAB-030) -->
|
||||
<!-- 참석자: 체크박스만 표시 (검증완료 시 읽기 전용) -->
|
||||
<!-- 참여자: 체크박스만 표시 (검증완료 시 읽기 전용) -->
|
||||
<!-- 생성자: 검증완료 시 "잠금 해제" 버튼 표시 -->
|
||||
<div class="agenda-verification verified" id="verify-agenda-1" data-is-creator="true">
|
||||
<input type="checkbox" class="checkbox" id="verify-1" checked disabled>
|
||||
@ -546,7 +546,7 @@
|
||||
</div>
|
||||
|
||||
<!-- 안건별 검증 (UFR-COLLAB-030) -->
|
||||
<!-- 참석자: 체크박스만 표시 (검증완료 시 읽기 전용) -->
|
||||
<!-- 참여자: 체크박스만 표시 (검증완료 시 읽기 전용) -->
|
||||
<!-- 생성자: 검증완료 시 "잠금 해제" 버튼 표시 -->
|
||||
<div class="agenda-verification verified" id="verify-agenda-2" data-is-creator="true">
|
||||
<input type="checkbox" class="checkbox" id="verify-2" checked disabled>
|
||||
|
||||
@ -513,7 +513,7 @@
|
||||
<!-- 참여 유형 탭 (다중 선택 가능) -->
|
||||
<div class="participation-tabs">
|
||||
<button class="participation-tab" data-type="attended" onclick="toggleParticipationType('attended')">
|
||||
참석한 회의
|
||||
참여한 회의
|
||||
</button>
|
||||
<button class="participation-tab" data-type="created" onclick="toggleParticipationType('created')">
|
||||
생성한 회의
|
||||
@ -527,7 +527,7 @@
|
||||
<input
|
||||
type="text"
|
||||
class="search-input"
|
||||
placeholder="회의 제목, 참석자, 키워드 검색"
|
||||
placeholder="회의 제목, 참여자, 키워드 검색"
|
||||
id="searchInput"
|
||||
oninput="applyFilters()"
|
||||
onkeypress="if(event.key==='Enter') handleSearch()"
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
1557
design/userstory.md
1557
design/userstory.md
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user