tabs.vue 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. <template>
  2. <div class="container">
  3. <el-tabs v-model="message">
  4. <el-tab-pane :label="`未读消息(${state.unread.length})`" name="first">
  5. <el-table :data="state.unread" :show-header="false" style="width: 100%">
  6. <el-table-column>
  7. <template #default="scope">
  8. <span class="message-title">{{ scope.row.title }}</span>
  9. </template>
  10. </el-table-column>
  11. <el-table-column prop="date" width="180"></el-table-column>
  12. <el-table-column width="120">
  13. <template #default="scope">
  14. <el-button size="small" @click="handleRead(scope.$index)">标为已读</el-button>
  15. </template>
  16. </el-table-column>
  17. </el-table>
  18. <div class="handle-row">
  19. <el-button type="primary">全部标为已读</el-button>
  20. </div>
  21. </el-tab-pane>
  22. <el-tab-pane :label="`已读消息(${state.read.length})`" name="second">
  23. <template v-if="message === 'second'">
  24. <el-table :data="state.read" :show-header="false" style="width: 100%">
  25. <el-table-column>
  26. <template #default="scope">
  27. <span class="message-title">{{ scope.row.title }}</span>
  28. </template>
  29. </el-table-column>
  30. <el-table-column prop="date" width="180"></el-table-column>
  31. <el-table-column width="120">
  32. <template #default="scope">
  33. <el-button type="danger" size="small" @click="handleDel(scope.$index)">删除</el-button>
  34. </template>
  35. </el-table-column>
  36. </el-table>
  37. <div class="handle-row">
  38. <el-button type="danger">删除全部</el-button>
  39. </div>
  40. </template>
  41. </el-tab-pane>
  42. <el-tab-pane :label="`回收站(${state.recycle.length})`" name="third">
  43. <template v-if="message === 'third'">
  44. <el-table :data="state.recycle" :show-header="false" style="width: 100%">
  45. <el-table-column>
  46. <template #default="scope">
  47. <span class="message-title">{{ scope.row.title }}</span>
  48. </template>
  49. </el-table-column>
  50. <el-table-column prop="date" width="180"></el-table-column>
  51. <el-table-column width="120">
  52. <template #default="scope">
  53. <el-button size="small" @click="handleRestore(scope.$index)">还原</el-button>
  54. </template>
  55. </el-table-column>
  56. </el-table>
  57. <div class="handle-row">
  58. <el-button type="danger">清空回收站</el-button>
  59. </div>
  60. </template>
  61. </el-tab-pane>
  62. </el-tabs>
  63. </div>
  64. </template>
  65. <script setup lang="ts" name="tabs">
  66. import { ref, reactive } from 'vue';
  67. const message = ref('first');
  68. const state = reactive({
  69. unread: [
  70. {
  71. date: '2018-04-19 20:00:00',
  72. title: '【系统通知】该系统将于今晚凌晨2点到5点进行升级维护'
  73. },
  74. {
  75. date: '2018-04-19 21:00:00',
  76. title: '今晚12点整发大红包,先到先得'
  77. }
  78. ],
  79. read: [
  80. {
  81. date: '2018-04-19 20:00:00',
  82. title: '【系统通知】该系统将于今晚凌晨2点到5点进行升级维护'
  83. }
  84. ],
  85. recycle: [
  86. {
  87. date: '2018-04-19 20:00:00',
  88. title: '【系统通知】该系统将于今晚凌晨2点到5点进行升级维护'
  89. }
  90. ]
  91. });
  92. const handleRead = (index: number) => {
  93. const item = state.unread.splice(index, 1);
  94. state.read = item.concat(state.read);
  95. };
  96. const handleDel = (index: number) => {
  97. const item = state.read.splice(index, 1);
  98. state.recycle = item.concat(state.recycle);
  99. };
  100. const handleRestore = (index: number) => {
  101. const item = state.recycle.splice(index, 1);
  102. state.read = item.concat(state.read);
  103. };
  104. </script>
  105. <style>
  106. .message-title {
  107. cursor: pointer;
  108. }
  109. .handle-row {
  110. margin-top: 30px;
  111. }
  112. </style>