기능구현중
This commit is contained in:
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user