TaskReminder.vue 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. <template>
  2. <view class="reminder-card" v-if="hasReminders">
  3. <view class="reminder-header">
  4. <text class="reminder-title">{{ title }}</text>
  5. <text class="reminder-count">{{ count }}项</text>
  6. </view>
  7. <view class="reminder-list">
  8. <view class="reminder-item" v-for="task in tasks" :key="task.id" @click="goToTask(task)">
  9. <text class="task-name">{{ task.title }}</text>
  10. <text class="task-deadline">截止: {{ formatTime(task.deadline) }}</text>
  11. </view>
  12. </view>
  13. </view>
  14. </template>
  15. <script>
  16. export default {
  17. props: {
  18. title: { type: String, default: '待提醒任务' },
  19. tasks: { type: Array, default: () => [] }
  20. },
  21. computed: {
  22. hasReminders() {
  23. return this.tasks && this.tasks.length > 0
  24. },
  25. count() {
  26. return this.tasks ? this.tasks.length : 0
  27. }
  28. },
  29. methods: {
  30. formatTime(dateStr) {
  31. if (!dateStr) return ''
  32. const d = new Date(dateStr)
  33. const h = d.getHours().toString().padStart(2, '0')
  34. const m = d.getMinutes().toString().padStart(2, '0')
  35. return h + ':' + m
  36. },
  37. goToTask(task) {
  38. uni.navigateTo({ url: '/pages/tasks/tasks?highlight=' + task.id })
  39. }
  40. }
  41. }
  42. </script>
  43. <style scoped>
  44. .reminder-card {
  45. background: linear-gradient(135deg, #fef3c7, #fde68a);
  46. border-radius: 16rpx;
  47. padding: 20rpx 24rpx;
  48. margin-bottom: 16rpx;
  49. }
  50. .reminder-header {
  51. display: flex;
  52. justify-content: space-between;
  53. align-items: center;
  54. margin-bottom: 12rpx;
  55. }
  56. .reminder-title {
  57. font-size: 26rpx;
  58. font-weight: bold;
  59. color: #92400e;
  60. }
  61. .reminder-count {
  62. font-size: 22rpx;
  63. color: #92400e;
  64. background: rgba(255,255,255,0.5);
  65. padding: 4rpx 16rpx;
  66. border-radius: 20rpx;
  67. }
  68. .reminder-list {
  69. display: flex;
  70. flex-direction: column;
  71. gap: 8rpx;
  72. }
  73. .reminder-item {
  74. display: flex;
  75. justify-content: space-between;
  76. align-items: center;
  77. background: rgba(255,255,255,0.6);
  78. border-radius: 10rpx;
  79. padding: 12rpx 16rpx;
  80. }
  81. .task-name {
  82. font-size: 24rpx;
  83. color: #333;
  84. flex: 1;
  85. }
  86. .task-deadline {
  87. font-size: 20rpx;
  88. color: #b45309;
  89. }
  90. </style>