TodoPanel.vue 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. <template>
  2. <view class="todo-panel panel" style="padding: 0; overflow: hidden">
  3. <view class="panel-hd" style="padding: 28rpx 24rpx 0">
  4. <text class="panel-title">待办摘要</text>
  5. <view class="hint" @click="$emit('more')">查看全部 ›</view>
  6. </view>
  7. <view style="padding: 24rpx">
  8. <view class="todo-stats">
  9. <view class="todo-stat tone-warn" @click="$emit('stat-click', 'approve')">
  10. <view class="stat-icon"><VanIcon name="passed" /></view>
  11. <text class="num">{{ stats.approve }}</text>
  12. <text class="label">待审批</text>
  13. </view>
  14. <view class="todo-stat tone-pay" @click="$emit('stat-click', 'pay')">
  15. <view class="stat-icon"><VanIcon name="balance-list-o" /></view>
  16. <text class="num">{{ stats.pay }}</text>
  17. <text class="label">待确认缴费</text>
  18. </view>
  19. <view class="todo-stat tone-danger" @click="$emit('stat-click', 'alert')">
  20. <view class="stat-icon"><VanIcon name="warning-o" /></view>
  21. <text class="num">{{ stats.alert }}</text>
  22. <text class="label">异常提醒</text>
  23. </view>
  24. </view>
  25. <view class="todo-list">
  26. <view
  27. v-for="t in items"
  28. :key="t.id"
  29. class="todo-item"
  30. @click="$emit('item-click', t)"
  31. >
  32. <view class="ti-icon" :class="t.iconClass">
  33. <VanIcon :name="t.icon" />
  34. </view>
  35. <view class="ti-body">
  36. <view class="ti-title">{{ t.title }}</view>
  37. <view class="ti-desc">{{ t.desc }}</view>
  38. </view>
  39. <view class="ti-right">
  40. <VanTag :type="t.tagType" plain>{{ t.tag }}</VanTag>
  41. <text class="ti-time">{{ t.time }}</text>
  42. </view>
  43. </view>
  44. </view>
  45. </view>
  46. </view>
  47. </template>
  48. <script>
  49. import VanIcon from './van-icon/van-icon.vue'
  50. import VanTag from './van-tag/van-tag.vue'
  51. export default {
  52. name: 'TodoPanel',
  53. components: { VanIcon, VanTag },
  54. props: {
  55. stats: {
  56. type: Object,
  57. default: () => ({ approve: 0, pay: 0, alert: 0 })
  58. },
  59. items: { type: Array, default: () => [] }
  60. },
  61. emits: ['stat-click', 'item-click', 'more']
  62. }
  63. </script>