Refactor components to use ModalDialog and StatusMessage; update styles and remove unused files
Some checks failed
Gitea Actions Demo / build-and-push (push) Failing after 9s

- Replaced inline modal dialogs in ParentView with a reusable ModalDialog component.
- Introduced StatusMessage component for loading and error states in ParentView.
- Updated styles to use new colors.css and styles.css for consistent theming.
- Removed ChildRewardList.vue and ChildTaskList.vue components as they were no longer needed.
- Adjusted RewardAssignView and TaskAssignView to use new styles and shared button styles.
- Cleaned up imports across components to reflect the new styles and removed unused CSS files.
This commit is contained in:
2026-01-22 16:37:53 -05:00
parent a0a059472b
commit 63769fbe32
20 changed files with 438 additions and 674 deletions

View File

@@ -1,13 +1,28 @@
<template>
<div class="modal-backdrop">
<div class="modal-dialog">
<div class="modal-heading">
<img v-if="imageUrl" :src="imageUrl" alt="Dialog Image" class="modal-image" />
<div class="modal-details">
<div class="modal-title">{{ title }}</div>
<div class="modal-subtitle">{{ subtitle }}</div>
</div>
</div>
<slot />
</div>
</div>
</template>
<script setup lang="ts">
// No script content needed unless you want to add props or logic
import '@/assets/colors.css'
defineProps<{
imageUrl?: string | null | undefined
title?: string
subtitle?: string | null | undefined
}>()
</script>
<style scoped>
.modal-backdrop {
position: fixed;
@@ -22,11 +37,74 @@
z-index: 1000;
}
.modal-dialog {
background: #fff;
background: var(--modal-bg, #fff);
padding: 2rem;
border-radius: 12px;
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.18);
max-width: 340px;
text-align: center;
}
.modal-image {
width: 72px;
height: 72px;
object-fit: cover;
border-radius: 8px;
background: var(--info-image-bg);
}
.modal-heading {
display: flex;
align-items: center;
gap: 1rem;
margin-bottom: 1rem;
}
.modal-details {
display: flex;
flex-direction: column;
align-items: center;
margin: auto;
}
.modal-title {
font-weight: 600;
font-size: 1.1rem;
}
.modal-subtitle {
color: var(--info-points);
font-weight: 500;
font-size: 1rem;
}
/* Encapsulated slot content styles */
.modal-message {
margin-bottom: 1.2rem;
font-size: 1rem;
color: var(--modal-message-color, #333);
}
:deep(.modal-actions) {
display: flex;
gap: 3rem;
justify-content: center;
margin-top: 0.5rem;
}
:deep(.modal-actions button) {
padding: 1rem 2.2rem;
border-radius: 12px;
border: 0;
cursor: pointer;
font-weight: 700;
font-size: 1.25rem;
transition: background 0.18s;
min-width: 120px;
}
@media (max-width: 480px) {
:deep(.modal-actions) {
gap: 1.2rem;
}
:deep(.modal-actions button) {
padding: 0.8rem 1.2rem;
font-size: 1.05rem;
min-width: 90px;
}
}
</style>