index.vue 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. <template>
  2. <doc-alert title="地区 & IP" url="https://doc.iocoder.cn/area-and-ip/" />
  3. <!-- 操作栏 -->
  4. <ContentWrap>
  5. <el-button type="primary" plain @click="openForm()">
  6. <Icon icon="ep:plus" class="mr-5px" /> IP 查询
  7. </el-button>
  8. </ContentWrap>
  9. <!-- 列表 -->
  10. <ContentWrap>
  11. <div style="width: 100%; height: 700px">
  12. <!-- AutoResizer 自动调节大小 -->
  13. <el-auto-resizer>
  14. <template #default="{ height, width }">
  15. <!-- Virtualized Table 虚拟化表格:高性能,解决表格在大数据量下的卡顿问题 -->
  16. <el-table-v2
  17. v-loading="loading"
  18. :columns="columns"
  19. :data="list"
  20. :width="width"
  21. :height="height"
  22. expand-column-key="id"
  23. />
  24. </template>
  25. </el-auto-resizer>
  26. </div>
  27. </ContentWrap>
  28. <!-- 表单弹窗:添加/修改 -->
  29. <AreaForm ref="formRef" />
  30. </template>
  31. <script setup lang="tsx">
  32. import { Column } from 'element-plus'
  33. import AreaForm from './AreaForm.vue'
  34. import * as AreaApi from '@/api/system/area'
  35. defineOptions({ name: 'SystemArea' })
  36. // 表格的 column 字段
  37. const columns: Column[] = [
  38. {
  39. dataKey: 'id', // 需要渲染当前列的数据字段
  40. title: '编号', // 显示在单元格表头的文本
  41. width: 400, // 当前列的宽度,必须设置
  42. fixed: true, // 是否固定列
  43. key: 'id' // 树形展开对应的 key
  44. },
  45. {
  46. dataKey: 'name',
  47. title: '地名',
  48. width: 200
  49. }
  50. ]
  51. const loading = ref(true) // 列表的加载中
  52. const list = ref([]) // 表格的数据
  53. /** 获得数据列表 */
  54. const getList = async () => {
  55. loading.value = true
  56. try {
  57. list.value = await AreaApi.getAreaTree()
  58. } finally {
  59. loading.value = false
  60. }
  61. }
  62. /** 添加/修改操作 */
  63. const formRef = ref()
  64. const openForm = () => {
  65. formRef.value.open()
  66. }
  67. /** 初始化 **/
  68. onMounted(() => {
  69. getList()
  70. })
  71. </script>