feat: Implement scheduled tasks management and budget archiving functionality
Some checks failed
Docker Build & Deploy / Build Docker Image (push) Failing after 6s
Docker Build & Deploy / Deploy to Production (push) Has been skipped
Docker Build & Deploy / Cleanup Dangling Images (push) Successful in 2s
Docker Build & Deploy / WeChat Notification (push) Successful in 2s
Some checks failed
Docker Build & Deploy / Build Docker Image (push) Failing after 6s
Docker Build & Deploy / Deploy to Production (push) Has been skipped
Docker Build & Deploy / Cleanup Dangling Images (push) Successful in 2s
Docker Build & Deploy / WeChat Notification (push) Successful in 2s
- Added BudgetArchiveJob for monthly budget archiving. - Created BudgetArchive entity and BudgetArchiveRepository for managing archived budgets. - Introduced JobController for handling job execution, pausing, and resuming. - Developed ScheduledTasksView for displaying and managing scheduled tasks in the frontend. - Updated PeriodicBillJob to improve scope handling. - Enhanced OpenAiService with increased HTTP timeout. - Added archiveBudgets API endpoint for archiving budgets by year and month. - Refactored BudgetController to utilize new repository patterns and improved error handling. - Introduced rich-content styles for better rendering of HTML content in Vue components. - Updated various Vue components to support rich HTML content display.
This commit is contained in:
@@ -70,7 +70,7 @@
|
||||
|
||||
<van-collapse-transition>
|
||||
<div v-if="budget.description && showDescription" class="budget-description">
|
||||
<div class="description-content" v-html="budget.description"></div>
|
||||
<div class="description-content rich-html-content" v-html="budget.description"></div>
|
||||
</div>
|
||||
</van-collapse-transition>
|
||||
</div>
|
||||
@@ -312,78 +312,6 @@ const timePercentage = computed(() => {
|
||||
line-height: 1.4;
|
||||
}
|
||||
|
||||
.description-content :deep(h3) {
|
||||
margin: 12px 0 6px;
|
||||
font-size: 13px;
|
||||
color: #323233;
|
||||
border-left: 3px solid #1989fa;
|
||||
padding-left: 8px;
|
||||
}
|
||||
|
||||
.description-content :deep(table) {
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
margin: 8px 0;
|
||||
background: #fff;
|
||||
border-radius: 4px;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.description-content :deep(th),
|
||||
.description-content :deep(td) {
|
||||
text-align: left;
|
||||
padding: 6px 4px;
|
||||
border-bottom: 1px solid #f2f3f5;
|
||||
}
|
||||
|
||||
.description-content :deep(th) {
|
||||
background-color: #f7f8fa;
|
||||
color: #969799;
|
||||
font-weight: normal;
|
||||
font-size: 10px;
|
||||
}
|
||||
|
||||
.description-content :deep(p) {
|
||||
margin: 4px 0;
|
||||
}
|
||||
|
||||
.description-content :deep(.income-value) {
|
||||
color: #07c160;
|
||||
}
|
||||
|
||||
.description-content :deep(.expense-value) {
|
||||
color: #ee0a24;
|
||||
}
|
||||
|
||||
.description-content :deep(.highlight) {
|
||||
background-color: #fffbe6;
|
||||
color: #ed6a0c;
|
||||
padding: 2px 6px;
|
||||
border-radius: 4px;
|
||||
font-weight: bold;
|
||||
border: 1px solid #ffe58f;
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
.description-content :deep(h3) {
|
||||
color: #f5f5f5;
|
||||
}
|
||||
.description-content :deep(table) {
|
||||
background: #1a1a1a;
|
||||
}
|
||||
.description-content :deep(th) {
|
||||
background-color: #242424;
|
||||
}
|
||||
.description-content :deep(td) {
|
||||
border-bottom-color: #2c2c2c;
|
||||
}
|
||||
.description-content :deep(.highlight) {
|
||||
background-color: #3e371a;
|
||||
color: #ff976a;
|
||||
border-color: #594a1a;
|
||||
}
|
||||
}
|
||||
|
||||
.card-footer {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
|
||||
Reference in New Issue
Block a user