index.vue 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. <script setup lang="ts">
  2. import { ref } from "vue";
  3. import { list } from "./base/list";
  4. defineOptions({
  5. name: "PureTable"
  6. });
  7. const selected = ref(0);
  8. function tabClick({ index }) {
  9. selected.value = index;
  10. }
  11. </script>
  12. <template>
  13. <el-card shadow="never">
  14. <template #header>
  15. <div class="card-header">
  16. <span class="font-medium">
  17. 二次封装 Element Plus 的
  18. <el-link
  19. href="https://element-plus.org/zh-CN/component/table.html"
  20. target="_blank"
  21. style="margin: 0 4px 5px; font-size: 16px"
  22. >
  23. el-table
  24. </el-link>
  25. 完全兼容 api 并提供灵活的配置项以及完善的类型提示,不用将代码都写在
  26. template 里了
  27. <el-link
  28. href="https://github.com/pure-admin/pure-admin-table"
  29. target="_blank"
  30. style="margin: 0 4px 5px; font-size: 16px"
  31. >
  32. @pureadmin/table 源码
  33. </el-link>
  34. </span>
  35. </div>
  36. <el-link
  37. class="mt-2"
  38. href="https://github.com/pure-admin/vue-pure-admin/blob/main/src/views/table/base"
  39. target="_blank"
  40. >
  41. 代码位置 src/views/table/base
  42. </el-link>
  43. </template>
  44. <el-alert
  45. title="基础用法中大部分表格都没设置 row-key ,不过最好都设置一下,后端需返回唯一值的字段,比如id。作用:1. 用来优化 Table
  46. 的渲染,尤其当字段在深层结构中;2. 防止某些操作导致表格组件内部混乱"
  47. type="info"
  48. :closable="false"
  49. />
  50. <el-tabs @tab-click="tabClick">
  51. <template v-for="(item, index) of list" :key="item.key">
  52. <el-tab-pane :lazy="true">
  53. <template #label>
  54. <span
  55. v-tippy="{
  56. maxWidth: 'none',
  57. content: `(第 ${index + 1} 个示例)${item.content}`
  58. }"
  59. >
  60. {{ item.title }}
  61. </span>
  62. </template>
  63. <component :is="item.component" v-if="selected == index" />
  64. </el-tab-pane>
  65. </template>
  66. </el-tabs>
  67. </el-card>
  68. </template>
  69. <style scoped>
  70. :deep(.el-tabs__nav-wrap)::after {
  71. height: 1px;
  72. }
  73. :deep(.el-tabs__header) {
  74. margin-top: 10px;
  75. }
  76. :deep(.el-alert__title) {
  77. font-size: 15px;
  78. }
  79. :deep(.el-tabs__nav-next),
  80. :deep(.el-tabs__nav-prev) {
  81. font-size: 16px;
  82. color: var(--el-text-color-primary);
  83. }
  84. :deep(.el-tabs__nav-next.is-disabled),
  85. :deep(.el-tabs__nav-prev.is-disabled) {
  86. opacity: 0.5;
  87. }
  88. </style>