index.vue 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. <script setup lang="ts">
  2. import { ref } from "vue";
  3. import { list } from "./list";
  4. defineOptions({
  5. name: "SchemaForm"
  6. });
  7. const selected = ref(0);
  8. function tabClick({ index }) {
  9. selected.value = index;
  10. }
  11. </script>
  12. <template>
  13. <el-card shadow="never" :body-style="{ height: 'calc(100vh - 260px)' }">
  14. <template #header>
  15. <div class="card-header">
  16. <span class="font-medium">
  17. JSON 格式配置表单,采用优秀开源的
  18. <el-link
  19. href="https://plus-pro-components.com/components/form.html"
  20. target="_blank"
  21. style="margin: 0 4px 5px; font-size: 16px"
  22. >
  23. PlusProComponents
  24. </el-link>
  25. ,维护整体表单只需操作 columns 配置即可
  26. </span>
  27. </div>
  28. <el-link
  29. class="mt-2"
  30. href="https://github.com/pure-admin/vue-pure-admin/blob/main/src/views/schema-form"
  31. target="_blank"
  32. >
  33. 代码位置 src/views/schema-form
  34. </el-link>
  35. </template>
  36. <el-tabs @tab-click="tabClick">
  37. <template v-for="(item, index) of list" :key="item.key">
  38. <el-tab-pane :lazy="true">
  39. <template #label>
  40. <span
  41. v-tippy="{
  42. maxWidth: 'none',
  43. content: `(第 ${index + 1} 个示例)${item.content}`
  44. }"
  45. >
  46. {{ item.title }}
  47. </span>
  48. </template>
  49. <component :is="item.component" v-if="selected == index" />
  50. </el-tab-pane>
  51. </template>
  52. </el-tabs>
  53. </el-card>
  54. </template>
  55. <style scoped>
  56. :deep(.el-tabs__nav-wrap)::after {
  57. height: 1px;
  58. }
  59. :deep(.el-tabs__nav-next),
  60. :deep(.el-tabs__nav-prev) {
  61. font-size: 16px;
  62. color: var(--el-text-color-primary);
  63. }
  64. :deep(.el-tabs__nav-next.is-disabled),
  65. :deep(.el-tabs__nav-prev.is-disabled) {
  66. opacity: 0.5;
  67. }
  68. </style>