userNews.vue 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. <template>
  2. <div class="layout-navbars-breadcrumb-user-news">
  3. <div class="head-box">
  4. <div class="head-box-title">{{ $t('message.user.newTitle') }}</div>
  5. <div class="head-box-btn" v-if="newsList.length > 0" @click="onAllReadClick">{{ $t('message.user.newBtn') }}</div>
  6. </div>
  7. <div class="content-box">
  8. <template v-if="newsList.length > 0">
  9. <div class="content-box-item" v-for="(v, k) in newsList" :key="k">
  10. <div>{{ v.label }}</div>
  11. <div class="content-box-msg">
  12. {{ v.value }}
  13. </div>
  14. <div class="content-box-time">{{ v.time }}</div>
  15. </div>
  16. </template>
  17. <el-empty :description="$t('message.user.newDesc')" v-else></el-empty>
  18. </div>
  19. <div class="foot-box" @click="onGoToGiteeClick" v-if="newsList.length > 0">{{ $t('message.user.newGo') }}</div>
  20. </div>
  21. </template>
  22. <script lang="ts">
  23. import { reactive, toRefs, defineComponent } from 'vue';
  24. export default defineComponent({
  25. name: 'layoutBreadcrumbUserNews',
  26. setup() {
  27. const state = reactive({
  28. newsList: [
  29. {
  30. label: '关于版本发布的通知',
  31. value: 'vue-next-admin,基于 vue3 + CompositionAPI + typescript + vite + element plus,正式发布时间:2021年02月28日!',
  32. time: '2020-12-08',
  33. },
  34. {
  35. label: '关于学习交流的通知',
  36. value: 'QQ群号码 665452019,欢迎小伙伴入群学习交流探讨!',
  37. time: '2020-12-08',
  38. },
  39. ],
  40. });
  41. // 全部已读点击
  42. const onAllReadClick = () => {
  43. state.newsList = [];
  44. };
  45. // 前往通知中心点击
  46. const onGoToGiteeClick = () => {
  47. window.open('https://gitee.com/lyt-top/vue-next-admin');
  48. };
  49. return {
  50. onAllReadClick,
  51. onGoToGiteeClick,
  52. ...toRefs(state),
  53. };
  54. },
  55. });
  56. </script>
  57. <style scoped lang="scss">
  58. .layout-navbars-breadcrumb-user-news {
  59. .head-box {
  60. display: flex;
  61. border-bottom: 1px solid var(--el-border-color-lighter);
  62. box-sizing: border-box;
  63. color: var(--el-text-color-primary);
  64. justify-content: space-between;
  65. height: 35px;
  66. align-items: center;
  67. .head-box-btn {
  68. color: var(--el-color-primary);
  69. font-size: 13px;
  70. cursor: pointer;
  71. opacity: 0.8;
  72. &:hover {
  73. opacity: 1;
  74. }
  75. }
  76. }
  77. .content-box {
  78. font-size: 13px;
  79. .content-box-item {
  80. padding-top: 12px;
  81. &:last-of-type {
  82. padding-bottom: 12px;
  83. }
  84. .content-box-msg {
  85. color: var(--el-text-color-secondary);
  86. margin-top: 5px;
  87. margin-bottom: 5px;
  88. }
  89. .content-box-time {
  90. color: var(--el-text-color-secondary);
  91. }
  92. }
  93. }
  94. .foot-box {
  95. height: 35px;
  96. color: var(--el-color-primary);
  97. font-size: 13px;
  98. cursor: pointer;
  99. opacity: 0.8;
  100. display: flex;
  101. align-items: center;
  102. justify-content: center;
  103. border-top: 1px solid var(--el-border-color-lighter);
  104. &:hover {
  105. opacity: 1;
  106. }
  107. }
  108. ::v-deep(.el-empty__description p) {
  109. font-size: 13px;
  110. }
  111. }
  112. </style>