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