기능구현중

This commit is contained in:
2026-01-11 14:49:27 +09:00
parent 17852cc5dc
commit 8e0f1f30cf
3 changed files with 108 additions and 10 deletions

View File

@@ -51,6 +51,9 @@
<span v-if="isDeleting" class="spinner-border spinner-border-sm me-1"></span>
<i v-else class="bi bi-trash me-1"></i>삭제
</button>
<button class="btn btn-outline-info" @click="showShareModal = true" title="그룹에 공유">
<i class="bi bi-share me-1"></i>공유
</button>
</div>
</div>
@@ -684,6 +687,41 @@
</div>
</div>
<div class="modal-backdrop fade show" v-if="showAiModal" @click="closeAiModal"></div>
<!-- 그룹 공유 모달 -->
<div class="modal fade" :class="{ show: showShareModal }" :style="{ display: showShareModal ? 'block' : 'none' }">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title"><i class="bi bi-share me-2"></i>그룹에 공유</h5>
<button type="button" class="btn-close" @click="showShareModal = false"></button>
</div>
<div class="modal-body">
<p class="text-muted small mb-3">선택한 그룹에 이메일로 주간보고 내용을 공유합니다.</p>
<div v-if="shareGroups.length === 0" class="text-center text-muted py-3">
등록된 그룹이 없습니다.
</div>
<div v-else class="list-group">
<label v-for="g in shareGroups" :key="g.groupId" class="list-group-item list-group-item-action d-flex align-items-center">
<input type="checkbox" class="form-check-input me-3" :value="g.groupId" v-model="selectedGroupIds" />
<div>
<strong>{{ g.groupName }}</strong>
<div class="small text-muted">{{ g.groupEmail }}</div>
</div>
</label>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" @click="showShareModal = false">취소</button>
<button type="button" class="btn btn-primary" @click="handleShare" :disabled="isSharing || selectedGroupIds.length === 0">
<span v-if="isSharing" class="spinner-border spinner-border-sm me-1"></span>
공유하기
</button>
</div>
</div>
</div>
</div>
<div class="modal-backdrop fade show" v-if="showShareModal"></div>
</div>
</template>
@@ -711,6 +749,12 @@ const isReviewing = ref(false)
const showProjectModal = ref(false)
const showAiReviewConfirmModal = ref(false)
// 그룹 공유
const showShareModal = ref(false)
const shareGroups = ref<any[]>([])
const selectedGroupIds = ref<number[]>([])
const isSharing = ref(false)
// AI 자동채우기 모달
const showAiModal = ref(false)
const aiStep = ref<'input' | 'matching'>('input')
@@ -1334,6 +1378,37 @@ function applyAiResult() {
closeAiModal()
}
// 그룹 공유
watch(showShareModal, async (val) => {
if (val && shareGroups.value.length === 0) {
try {
const res = await $fetch<any>('/api/google-group/list')
shareGroups.value = res.groups || []
} catch (e) { console.error(e) }
}
})
async function handleShare() {
if (selectedGroupIds.value.length === 0) {
alert('공유할 그룹을 선택하세요.')
return
}
isSharing.value = true
try {
const res = await $fetch<any>(`/api/report/weekly/${reportId}/share`, {
method: 'POST',
body: { groupIds: selectedGroupIds.value }
})
alert(res.message)
showShareModal.value = false
selectedGroupIds.value = []
} catch (e: any) {
alert(e.data?.message || '공유에 실패했습니다.')
} finally {
isSharing.value = false
}
}
</script>
<style scoped>