UNPKG

cloud-ui.vusion

Version:
874 lines (751 loc) 164 kB
基础示例中展示了如何初步地在表格视图组件中配置数据、修饰样式,以及如何处理数据过多的情况。 ### 基本用法 以列的视角对数据进行配置,`title`为列的标题,`field`是数据中作为唯一识别的字段名。 使用`width`设置列宽,支持数值和百分比两种格式。列宽的最终效果是这样的: - 先以配置了`width`的列为准,没有配置`width`的列会根据剩余宽度平均分配; - 如果所有列都配置了`width`,会产生横向滚动,不会进行宽度缩放。 使用`data-source`属性添加数据,有两种方式: #### data-source 数组 直接向`data-source`属性中传入`Array<Item>`格式的数组,每个`Item`为这样格式的对象`{ text: string, value: any, disabled: boolean, ... }`。 ``` html <u-table-view :data-source="[ { name: '张三', phone: '18612917895', email: 'zhangsan@163.com', address: '浙江省杭州市滨江区网商路599号网易大厦', createdTime: 1464421931000, loginTime: 1527515531000 }, { name: '小明', phone: '13727160283', email: 'xiaoming@163.com', address: '浙江省杭州市滨江区江虹路459号英飞特科技园', createdTime: 1520864676000, loginTime: 1552400676000 }, { name: '李四', phone: '18897127809', email: 'lisi@163.com', address: '浙江省杭州市滨江区秋溢路606号西可科技园', createdTime: 1494488730000, loginTime: 1558165530000 }, { name: '李华', phone: '18749261214', email: 'lihua@163.com', address: '浙江省杭州市滨江区长河路590号东忠科技园', createdTime: 1476073921000, loginTime: 1544428081000 }, { name: '王五', phone: '13579340020', email: 'wangwu@163.com', address: '浙江省杭州市滨江区网商路599号网易大厦二期', createdTime: 1468614726000, loginTime: 1531675926000 }, ]"> <u-table-view-column title="用户名" field="name" width="20%"></u-table-view-column> <u-table-view-column title="手机号码" field="phone" width="20%"></u-table-view-column> <u-table-view-column title="地址" field="address"></u-table-view-column> <u-table-view-column title="最近登录时间" field="loginTime" formatter="placeholder | date" width="20%"></u-table-view-column> </u-table-view> ``` #### data-source 函数 向`data-source`属性中传入一个加载函数,这种方式会自带 loading 加载、error 错误等效果,并且在下文中后端分页、过滤(筛选)等功能均需要采用这种传入数据的方式。 加载函数的格式是这样的 ``` ts (params) => Promise<Array<Item> | { data: Array<Item>, total: number } | { data: Array<Item>, last: boolean }> ``` 组件会给加载函数提供过滤(筛选)、分页、加载更多等参数,要求返回一个如上的 Promise。 ``` vue <template> <u-table-view :data-source="load"> <u-table-view-column title="用户名" field="name" width="20%"></u-table-view-column> <u-table-view-column title="手机号码" field="phone" width="20%"></u-table-view-column> <u-table-view-column title="地址" field="address"></u-table-view-column> <u-table-view-column title="最近登录时间" field="loginTime" formatter="placeholder | date" width="20%"></u-table-view-column> </u-table-view> </template> <script> // 模拟后端请求 const mockRequest = (data, timeout = 300) => new Promise((res, rej) => setTimeout(() => res(data), timeout)); // 模拟数据服务 const mockService = { load() { return [ { name: '张三', phone: '18612917895', email: 'zhangsan@163.com', address: '浙江省杭州市滨江区网商路599号网易大厦', createdTime: 1464421931000, loginTime: 1527515531000 }, { name: '小明', phone: '13727160283', email: 'xiaoming@163.com', address: '浙江省杭州市滨江区江虹路459号英飞特科技园', createdTime: 1520864676000, loginTime: 1552400676000 }, { name: '李四', phone: '18897127809', email: 'lisi@163.com', address: '浙江省杭州市滨江区秋溢路606号西可科技园', createdTime: 1494488730000, loginTime: 1558165530000 }, { name: '李华', phone: '18749261214', email: 'lihua@163.com', address: '浙江省杭州市滨江区长河路590号东忠科技园', createdTime: 1476073921000, loginTime: 1544428081000 }, { name: '王五', phone: '13579340020', email: 'wangwu@163.com', address: '浙江省杭州市滨江区网商路599号网易大厦二期', createdTime: 1468614726000, loginTime: 1531675926000 }, ]; }, }; export default { methods: { load() { return mockService.load(); }, }, }; </script> ``` ### 格式器 如果列中的数据不是直接想展示的内容,可以对该列配置`formatter`属性对数据进行格式化处理,书写方式类似于 Vue 的 filter。 在下面的示例中,对最近登录时间字段做了格式化处理: ``` html <u-table-view :data-source="[ { name: '张三', phone: '18612917895', email: 'zhangsan@163.com', address: '浙江省杭州市滨江区网商路599号网易大厦', createdTime: 1464421931000, loginTime: 1527515531000 }, { name: '小明', phone: '13727160283', email: 'xiaoming@163.com', address: '浙江省杭州市滨江区江虹路459号英飞特科技园', createdTime: 1520864676000, loginTime: 1552400676000 }, { name: '李四', phone: '18897127809', email: 'lisi@163.com', address: '浙江省杭州市滨江区秋溢路606号西可科技园', createdTime: 1494488730000, loginTime: 1558165530000 }, { name: '李华', phone: '18749261214', email: 'lihua@163.com', address: '浙江省杭州市滨江区长河路590号东忠科技园', createdTime: 1476073921000, loginTime: 1544428081000 }, { name: '王五', phone: '13579340020', email: 'wangwu@163.com', address: '浙江省杭州市滨江区网商路599号网易大厦二期', createdTime: 1468614726000, loginTime: 1531675926000 }, ]"> <u-table-view-column title="用户名" field="name" width="20%"></u-table-view-column> <u-table-view-column title="手机号码" field="phone" width="20%"></u-table-view-column> <u-table-view-column title="地址" field="address"></u-table-view-column> <u-table-view-column title="最近登录时间" field="loginTime" formatter="placeholder | date" width="20%"></u-table-view-column> </u-table-view> ``` 也支持传入一个函数。在下面的示例中,对地址字段做了处理: ``` vue <template> <u-table-view :data-source="[ { name: '张三', phone: '18612917895', email: 'zhangsan@163.com', address: '浙江省杭州市滨江区网商路599号网易大厦', createdTime: 1464421931000, loginTime: 1527515531000 }, { name: '小明', phone: '13727160283', email: 'xiaoming@163.com', address: '浙江省杭州市滨江区江虹路459号英飞特科技园', createdTime: 1520864676000, loginTime: 1552400676000 }, { name: '李四', phone: '18897127809', email: 'lisi@163.com', address: '浙江省杭州市滨江区秋溢路606号西可科技园', createdTime: 1494488730000, loginTime: 1558165530000 }, { name: '李华', phone: '18749261214', email: 'lihua@163.com', address: '浙江省杭州市滨江区长河路590号东忠科技园', createdTime: 1476073921000, loginTime: 1544428081000 }, { name: '王五', phone: '13579340020', email: 'wangwu@163.com', address: '浙江省杭州市滨江区网商路599号网易大厦二期', createdTime: 1468614726000, loginTime: 1531675926000 }, ]"> <u-table-view-column title="用户名" field="name" width="20%"></u-table-view-column> <u-table-view-column title="手机号码" field="phone" width="20%"></u-table-view-column> <u-table-view-column title="地址" field="address" :formatter="addressFormatter"></u-table-view-column> <u-table-view-column title="最近登录时间" field="loginTime" formatter="placeholder | date" width="20%"></u-table-view-column> </u-table-view> </template> <script> export default { methods: { addressFormatter(value) { return value.replace('浙江省杭州市', ''); }, }, }; </script> ``` ### 列插槽 如果对数据需要更加自定义的展示,可以使用列的`cell`插槽,定制想要的格式。 这个插槽为一个作用域插槽,会传入5个参数: - `item`为当前行的对象 - `value`是在`item`中根据`field`字段获取的值 ,即`item[this.field]` - `columnVM`为该列组件实例 - `rowIndex`为该行的索引 - `columnIndex`为该列的索引 最常用的是`item`和`value`两个字段。 在下面的示例中,把名称变成了链接: ``` html <u-table-view :data-source="[ { name: '张三', phone: '18612917895', email: 'zhangsan@163.com', address: '浙江省杭州市滨江区网商路599号网易大厦', createdTime: 1464421931000, loginTime: 1527515531000 }, { name: '小明', phone: '13727160283', email: 'xiaoming@163.com', address: '浙江省杭州市滨江区江虹路459号英飞特科技园', createdTime: 1520864676000, loginTime: 1552400676000 }, { name: '李四', phone: '18897127809', email: 'lisi@163.com', address: '浙江省杭州市滨江区秋溢路606号西可科技园', createdTime: 1494488730000, loginTime: 1558165530000 }, { name: '李华', phone: '18749261214', email: 'lihua@163.com', address: '浙江省杭州市滨江区长河路590号东忠科技园', createdTime: 1476073921000, loginTime: 1544428081000 }, { name: '王五', phone: '13579340020', email: 'wangwu@163.com', address: '浙江省杭州市滨江区网商路599号网易大厦二期', createdTime: 1468614726000, loginTime: 1531675926000 }, ]"> <u-table-view-column title="用户名" field="name" width="20%"> <template slot="cell" slot-scope="{ value }"> <u-link>{{ value }}</u-link> </template> </u-table-view-column> <u-table-view-column title="手机号码" field="phone" width="20%"></u-table-view-column> <u-table-view-column title="地址" field="address"></u-table-view-column> <u-table-view-column title="最近登录时间" field="loginTime" formatter="placeholder | date" width="20%"></u-table-view-column> </u-table-view> ``` ### 表格样式 #### 表格线条 设置`line`,可以给单元格上下左右都加上边框。 ``` html <u-table-view line :data-source="[ { name: '张三', phone: '18612917895', email: 'zhangsan@163.com', address: '浙江省杭州市滨江区网商路599号网易大厦', createdTime: 1464421931000, loginTime: 1527515531000 }, { name: '小明', phone: '13727160283', email: 'xiaoming@163.com', address: '浙江省杭州市滨江区江虹路459号英飞特科技园', createdTime: 1520864676000, loginTime: 1552400676000 }, { name: '李四', phone: '18897127809', email: 'lisi@163.com', address: '浙江省杭州市滨江区秋溢路606号西可科技园', createdTime: 1494488730000, loginTime: 1558165530000 }, { name: '李华', phone: '18749261214', email: 'lihua@163.com', address: '浙江省杭州市滨江区长河路590号东忠科技园', createdTime: 1476073921000, loginTime: 1544428081000 }, { name: '王五', phone: '13579340020', email: 'wangwu@163.com', address: '浙江省杭州市滨江区网商路599号网易大厦二期', createdTime: 1468614726000, loginTime: 1531675926000 }, ]"> <u-table-view-column title="用户名" field="name" width="20%"></u-table-view-column> <u-table-view-column title="手机号码" field="phone" width="20%"></u-table-view-column> <u-table-view-column title="地址" field="address"></u-table-view-column> <u-table-view-column title="最近登录时间" field="loginTime" formatter="placeholder | date" width="20%"></u-table-view-column> </u-table-view> ``` #### 条纹展示 使用`striped`属性给表格行添加间隔条纹。 ``` html <u-table-view striped :data-source="[ { name: '张三', phone: '18612917895', email: 'zhangsan@163.com', address: '浙江省杭州市滨江区网商路599号网易大厦', createdTime: 1464421931000, loginTime: 1527515531000 }, { name: '小明', phone: '13727160283', email: 'xiaoming@163.com', address: '浙江省杭州市滨江区江虹路459号英飞特科技园', createdTime: 1520864676000, loginTime: 1552400676000 }, { name: '李四', phone: '18897127809', email: 'lisi@163.com', address: '浙江省杭州市滨江区秋溢路606号西可科技园', createdTime: 1494488730000, loginTime: 1558165530000 }, { name: '李华', phone: '18749261214', email: 'lihua@163.com', address: '浙江省杭州市滨江区长河路590号东忠科技园', createdTime: 1476073921000, loginTime: 1544428081000 }, { name: '王五', phone: '13579340020', email: 'wangwu@163.com', address: '浙江省杭州市滨江区网商路599号网易大厦二期', createdTime: 1468614726000, loginTime: 1531675926000 }, ]"> <u-table-view-column title="用户名" field="name" width="20%"></u-table-view-column> <u-table-view-column title="手机号码" field="phone" width="20%"></u-table-view-column> <u-table-view-column title="地址" field="address"></u-table-view-column> <u-table-view-column title="最近登录时间" field="loginTime" formatter="placeholder | date" width="20%"></u-table-view-column> </u-table-view> ``` #### 表格颜色 设置`color="light"`,可以将表格改为浅色风格。 ``` html <u-table-view color="light" :data-source="[ { name: '张三', phone: '18612917895', email: 'zhangsan@163.com', address: '浙江省杭州市滨江区网商路599号网易大厦', createdTime: 1464421931000, loginTime: 1527515531000 }, { name: '小明', phone: '13727160283', email: 'xiaoming@163.com', address: '浙江省杭州市滨江区江虹路459号英飞特科技园', createdTime: 1520864676000, loginTime: 1552400676000 }, { name: '李四', phone: '18897127809', email: 'lisi@163.com', address: '浙江省杭州市滨江区秋溢路606号西可科技园', createdTime: 1494488730000, loginTime: 1558165530000 }, { name: '李华', phone: '18749261214', email: 'lihua@163.com', address: '浙江省杭州市滨江区长河路590号东忠科技园', createdTime: 1476073921000, loginTime: 1544428081000 }, { name: '王五', phone: '13579340020', email: 'wangwu@163.com', address: '浙江省杭州市滨江区网商路599号网易大厦二期', createdTime: 1468614726000, loginTime: 1531675926000 }, ]"> <u-table-view-column title="用户名" field="name" width="20%"></u-table-view-column> <u-table-view-column title="手机号码" field="phone" width="20%"></u-table-view-column> <u-table-view-column title="地址" field="address"></u-table-view-column> <u-table-view-column title="最近登录时间" field="loginTime" formatter="placeholder | date" width="20%"></u-table-view-column> </u-table-view> ``` #### 单行颜色 使用`rowColor`字段,可以单独给某一行添加颜色。 ``` html <u-table-view :data-source="[ { name: '张三', rowColor: 'light', phone: '18612917895', email: 'zhangsan@163.com', address: '浙江省杭州市滨江区网商路599号网易大厦', createdTime: 1464421931000, loginTime: 1527515531000 }, { name: '小明', rowColor: 'normal', phone: '13727160283', email: 'xiaoming@163.com', address: '浙江省杭州市滨江区江虹路459号英飞特科技园', createdTime: 1520864676000, loginTime: 1552400676000 }, { name: '李四', rowColor: 'dark', phone: '18897127809', email: 'lisi@163.com', address: '浙江省杭州市滨江区秋溢路606号西可科技园', createdTime: 1494488730000, loginTime: 1558165530000 }, { name: '李华', rowColor: 'primary', phone: '18749261214', email: 'lihua@163.com', address: '浙江省杭州市滨江区长河路590号东忠科技园', createdTime: 1476073921000, loginTime: 1544428081000 }, { name: '王五', rowColor: 'error', phone: '13579340020', email: 'wangwu@163.com', address: '浙江省杭州市滨江区网商路599号网易大厦二期', createdTime: 1468614726000, loginTime: 1531675926000 }, ]"> <u-table-view-column title="用户名" field="name" width="20%"></u-table-view-column> <u-table-view-column title="手机号码" field="phone" width="20%"></u-table-view-column> <u-table-view-column title="地址" field="address"></u-table-view-column> <u-table-view-column title="最近登录时间" field="loginTime" formatter="placeholder | date" width="20%"></u-table-view-column> </u-table-view> ``` #### 隐藏头部 将`show-head`属性设置为`false`,可以隐藏头部。 ``` html <u-table-view :show-head="false" :data-source="[ { name: '张三', phone: '18612917895', email: 'zhangsan@163.com', address: '浙江省杭州市滨江区网商路599号网易大厦', createdTime: 1464421931000, loginTime: 1527515531000 }, { name: '小明', phone: '13727160283', email: 'xiaoming@163.com', address: '浙江省杭州市滨江区江虹路459号英飞特科技园', createdTime: 1520864676000, loginTime: 1552400676000 }, { name: '李四', phone: '18897127809', email: 'lisi@163.com', address: '浙江省杭州市滨江区秋溢路606号西可科技园', createdTime: 1494488730000, loginTime: 1558165530000 }, { name: '李华', phone: '18749261214', email: 'lihua@163.com', address: '浙江省杭州市滨江区长河路590号东忠科技园', createdTime: 1476073921000, loginTime: 1544428081000 }, { name: '王五', phone: '13579340020', email: 'wangwu@163.com', address: '浙江省杭州市滨江区网商路599号网易大厦二期', createdTime: 1468614726000, loginTime: 1531675926000 }, ]"> <u-table-view-column title="用户名" field="name" width="20%"></u-table-view-column> <u-table-view-column title="手机号码" field="phone" width="20%"></u-table-view-column> <u-table-view-column title="地址" field="address"></u-table-view-column> <u-table-view-column title="最近登录时间" field="loginTime" formatter="placeholder | date" width="20%"></u-table-view-column> </u-table-view> ``` ### 表格状态 表格除了加载完成的正常列表状态,还有其它几种状态,可以通过属性或插槽设置。 > 控制表格状态是给`data-source`为数组的情况提供,如果`data-source`为函数,不需要自行设置。 #### 加载中 当`data-source`没传,或设置`loading`属性为`true`时,显示为加载中的状态。 ``` html <u-table-view> <u-table-view-column title="用户名" field="name" width="20%"></u-table-view-column> <u-table-view-column title="手机号码" field="phone" width="20%"></u-table-view-column> <u-table-view-column title="地址" field="address"></u-table-view-column> <u-table-view-column title="最近登录时间" field="loginTime" formatter="placeholder | date" width="20%"></u-table-view-column> </u-table-view> ``` 可以通过`loading-text`或 loading 插槽自定义加载中信息。 ``` html <u-table-view :loading="true" loading-text="Loading..."> <u-table-view-column title="用户名" field="name" width="20%"></u-table-view-column> <u-table-view-column title="手机号码" field="phone" width="20%"></u-table-view-column> <u-table-view-column title="地址" field="address"></u-table-view-column> <u-table-view-column title="最近登录时间" field="loginTime" formatter="placeholder | date" width="20%"></u-table-view-column> </u-table-view> ``` #### 加载错误 当`data-source`为`null`,或设置`error`属性为`true`时,显示为加载错误的状态。 ``` html <u-table-view :data-source="null"> <u-table-view-column title="用户名" field="name" width="20%"></u-table-view-column> <u-table-view-column title="手机号码" field="phone" width="20%"></u-table-view-column> <u-table-view-column title="地址" field="address"></u-table-view-column> <u-table-view-column title="最近登录时间" field="loginTime" formatter="placeholder | date" width="20%"></u-table-view-column> </u-table-view> ``` 可以通过`error-text`或 error 插槽自定义加载错误信息。 ``` html <u-table-view :error="true" error-text="加载出现异常" error-image="https://static-vusion.163yun.com/assets/cloud-ui/1.jpg"> <u-table-view-column title="用户名" field="name" width="20%"></u-table-view-column> <u-table-view-column title="手机号码" field="phone" width="20%"></u-table-view-column> <u-table-view-column title="地址" field="address"></u-table-view-column> <u-table-view-column title="最近登录时间" field="loginTime" formatter="placeholder | date" width="20%"></u-table-view-column> </u-table-view> ``` #### 没有数据 当`data-source`为空数组时,显示为没有数据的状态。 ``` html <u-table-view :data-source="[]"> <u-table-view-column title="用户名" field="name" width="20%"></u-table-view-column> <u-table-view-column title="手机号码" field="phone" width="20%"></u-table-view-column> <u-table-view-column title="地址" field="address"></u-table-view-column> <u-table-view-column title="最近登录时间" field="loginTime" formatter="placeholder | date" width="20%"></u-table-view-column> </u-table-view> ``` ### 表头固定 通过给`<u-table-view>`的样式设置`height`或`max-height`属性,可以限制表格高度。在数据较多的情况下,会自动固定表头。 ``` html <u-table-view :data-source="[ { name: '张三', phone: '18612917895', email: 'zhangsan@163.com', address: '浙江省杭州市滨江区网商路599号网易大厦', createdTime: 1464421931000, loginTime: 1527515531000 }, { name: '小明', phone: '13727160283', email: 'xiaoming@163.com', address: '浙江省杭州市滨江区江虹路459号英飞特科技园', createdTime: 1520864676000, loginTime: 1552400676000 }, { name: '李四', phone: '18897127809', email: 'lisi@163.com', address: '浙江省杭州市滨江区秋溢路606号西可科技园', createdTime: 1494488730000, loginTime: 1558165530000 }, { name: '李华', phone: '18749261214', email: 'lihua@163.com', address: '浙江省杭州市滨江区长河路590号东忠科技园', createdTime: 1476073921000, loginTime: 1544428081000 }, { name: '王五', phone: '13579340020', email: 'wangwu@163.com', address: '浙江省杭州市滨江区网商路599号网易大厦二期', createdTime: 1468614726000, loginTime: 1531675926000 }, { name: '张三', phone: '18612917895', email: 'zhangsan@163.com', address: '浙江省杭州市滨江区网商路599号网易大厦', createdTime: 1464421931000, loginTime: 1527515531000 }, { name: '小明', phone: '13727160283', email: 'xiaoming@163.com', address: '浙江省杭州市滨江区江虹路459号英飞特科技园', createdTime: 1520864676000, loginTime: 1552400676000 }, { name: '李四', phone: '18897127809', email: 'lisi@163.com', address: '浙江省杭州市滨江区秋溢路606号西可科技园', createdTime: 1494488730000, loginTime: 1558165530000 }, { name: '李华', phone: '18749261214', email: 'lihua@163.com', address: '浙江省杭州市滨江区长河路590号东忠科技园', createdTime: 1476073921000, loginTime: 1544428081000 }, { name: '王五', phone: '13579340020', email: 'wangwu@163.com', address: '浙江省杭州市滨江区网商路599号网易大厦二期', createdTime: 1468614726000, loginTime: 1531675926000 }, ]" style="max-height: 300px;"> <u-table-view-column title="用户名" field="name" width="20%"></u-table-view-column> <u-table-view-column title="手机号码" field="phone" width="20%"></u-table-view-column> <u-table-view-column title="地址" field="address"></u-table-view-column> <u-table-view-column title="最近登录时间" field="loginTime" formatter="placeholder | date" width="20%"></u-table-view-column> </u-table-view> ``` ### 表头吸顶 通过设置`stick-head`属性,可以开启表头吸顶功能。通过设置`stick-head-offset`可以调节距离父级滚动元素的偏移位置。 ``` html <u-table-view stick-head :stick-head-offset="60" :data-source="[ { name: '张三', phone: '18612917895', email: 'zhangsan@163.com', address: '浙江省杭州市滨江区网商路599号网易大厦', createdTime: 1464421931000, loginTime: 1527515531000 }, { name: '小明', phone: '13727160283', email: 'xiaoming@163.com', address: '浙江省杭州市滨江区江虹路459号英飞特科技园', createdTime: 1520864676000, loginTime: 1552400676000 }, { name: '李四', phone: '18897127809', email: 'lisi@163.com', address: '浙江省杭州市滨江区秋溢路606号西可科技园', createdTime: 1494488730000, loginTime: 1558165530000 }, { name: '李华', phone: '18749261214', email: 'lihua@163.com', address: '浙江省杭州市滨江区长河路590号东忠科技园', createdTime: 1476073921000, loginTime: 1544428081000 }, { name: '王五', phone: '13579340020', email: 'wangwu@163.com', address: '浙江省杭州市滨江区网商路599号网易大厦二期', createdTime: 1468614726000, loginTime: 1531675926000 }, { name: '张三', phone: '18612917895', email: 'zhangsan@163.com', address: '浙江省杭州市滨江区网商路599号网易大厦', createdTime: 1464421931000, loginTime: 1527515531000 }, { name: '小明', phone: '13727160283', email: 'xiaoming@163.com', address: '浙江省杭州市滨江区江虹路459号英飞特科技园', createdTime: 1520864676000, loginTime: 1552400676000 }, { name: '李四', phone: '18897127809', email: 'lisi@163.com', address: '浙江省杭州市滨江区秋溢路606号西可科技园', createdTime: 1494488730000, loginTime: 1558165530000 }, { name: '李华', phone: '18749261214', email: 'lihua@163.com', address: '浙江省杭州市滨江区长河路590号东忠科技园', createdTime: 1476073921000, loginTime: 1544428081000 }, { name: '王五', phone: '13579340020', email: 'wangwu@163.com', address: '浙江省杭州市滨江区网商路599号网易大厦二期', createdTime: 1468614726000, loginTime: 1531675926000 }, ]"> <u-table-view-column title="用户名" field="name" width="20%"></u-table-view-column> <u-table-view-column title="手机号码" field="phone" width="20%"></u-table-view-column> <u-table-view-column title="地址" field="address"></u-table-view-column> <u-table-view-column title="最近登录时间" field="loginTime" formatter="placeholder | date" width="20%"></u-table-view-column> </u-table-view> ``` #### 默认多行显示 某些情况下,我们会遇到文字过长的问题,默认会进行多行显示。 ``` html <u-table-view line striped :data-source="[ { name: '这是一个很长很长很长很长很长很长很长很长的名字', phone: '18612917895', email: 'zhangsan@163.com', address: '浙江省杭州市滨江区网商路599号网易大厦', createdTime: 1464421931000, loginTime: 1527515531000 }, { name: '小明', phone: '13727160283', email: 'xiaoming@163.com', address: '浙江省杭州市滨江区江虹路459号英飞特科技园浙江省杭州市滨江区江虹路459号英飞特科技园浙江省杭州市滨江区江虹路459号英飞特科技园', createdTime: 1520864676000, loginTime: 1552400676000 }, { name: '名字就是起得这么这么这么这么这么这么长', phone: '18897127809', email: 'lisi@163.com', address: '浙江省杭州市滨江区秋溢路606号西可科技园', createdTime: 1494488730000, loginTime: 1558165530000 }, { name: '李华', phone: '18749261214', email: 'lihua@163.com', address: '浙江省杭州市滨江区长河路590号东忠科技园', createdTime: 1476073921000, loginTime: 1544428081000 }, { name: '王五', phone: '13579340020', email: 'wangwu@163.com', address: '浙江省杭州市滨江区网商路599号网易大厦二期', createdTime: 1468614726000, loginTime: 1531675926000 }, ]"> <u-table-view-column title="用户名" field="name" width="30%"></u-table-view-column> <u-table-view-column title="手机号码" field="phone" width="20%"></u-table-view-column> <u-table-view-column title="地址" field="address"></u-table-view-column> <u-table-view-column title="最近登录时间" field="loginTime" formatter="placeholder | date" width="20%"></u-table-view-column> </u-table-view> ``` ### 单行省略显示 可以对整个表格设置`ellipsis`属性,或单独对列设置`ellipsis`属性,使文本单行省略,鼠标悬浮时会有工具提示。 ``` html <u-table-view line striped :data-source="[ { name: '这是一个很长很长很长很长很长很长很长很长的名字', phone: '18612917895', email: 'zhangsan@163.com', address: '浙江省杭州市滨江区网商路599号网易大厦', createdTime: 1464421931000, loginTime: 1527515531000 }, { name: '小明', phone: '13727160283', email: 'xiaoming@163.com', address: '浙江省杭州市滨江区江虹路459号英飞特科技园浙江省杭州市滨江区江虹路459号英飞特科技园浙江省杭州市滨江区江虹路459号英飞特科技园', createdTime: 1520864676000, loginTime: 1552400676000 }, { name: '名字就是起得这么这么这么这么这么这么长', phone: '18897127809', email: 'lisi@163.com', address: '浙江省杭州市滨江区秋溢路606号西可科技园', createdTime: 1494488730000, loginTime: 1558165530000 }, { name: '李华', phone: '18749261214', email: 'lihua@163.com', address: '浙江省杭州市滨江区长河路590号东忠科技园', createdTime: 1476073921000, loginTime: 1544428081000 }, { name: '王五', phone: '13579340020', email: 'wangwu@163.com', address: '浙江省杭州市滨江区网商路599号网易大厦二期', createdTime: 1468614726000, loginTime: 1531675926000 }, ]"> <u-table-view-column title="用户名" ellipsis field="name" width="30%"></u-table-view-column> <u-table-view-column title="手机号码" field="phone" width="20%"></u-table-view-column> <u-table-view-column title="地址" ellipsis field="address"></u-table-view-column> <u-table-view-column title="最近登录时间" field="loginTime" formatter="placeholder | date" width="20%"></u-table-view-column> </u-table-view> ``` ### 表头文字省略显示 可以对整个表格设置`thEllipsis`属性,或单独对列设置`thEllipsis`属性,使表头文本单行省略,鼠标悬浮时会有工具提示。 ``` html <u-table-view line striped :data-source="[ { name: '这是一个很长很长很长很长很长很长很长很长的名字', phone: '18612917895', email: 'zhangsan@163.com', address: '浙江省杭州市滨江区网商路599号网易大厦', createdTime: 1464421931000, loginTime: 1527515531000 }, { name: '小明', phone: '13727160283', email: 'xiaoming@163.com', address: '浙江省杭州市滨江区江虹路459号英飞特科技园浙江省杭州市滨江区江虹路459号英飞特科技园浙江省杭州市滨江区江虹路459号英飞特科技园', createdTime: 1520864676000, loginTime: 1552400676000 }, { name: '名字就是起得这么这么这么这么这么这么长', phone: '18897127809', email: 'lisi@163.com', address: '浙江省杭州市滨江区秋溢路606号西可科技园', createdTime: 1494488730000, loginTime: 1558165530000 }, { name: '李华', phone: '18749261214', email: 'lihua@163.com', address: '浙江省杭州市滨江区长河路590号东忠科技园', createdTime: 1476073921000, loginTime: 1544428081000 }, { name: '王五', phone: '13579340020', email: 'wangwu@163.com', address: '浙江省杭州市滨江区网商路599号网易大厦二期', createdTime: 1468614726000, loginTime: 1531675926000 }, ]" thEllipsis> <u-table-view-column title="这是个很长很长很长很长很长的用户名" field="name" width="30%"></u-table-view-column> <u-table-view-column title="手机号码" field="phone" width="20%"></u-table-view-column> <u-table-view-column title="地址" field="address"></u-table-view-column> <u-table-view-column title="最近登录时间" field="loginTime" formatter="placeholder | date" width="20%"></u-table-view-column> </u-table-view> ``` ### 横向滚动 有时省略文字并不直观,可以考虑对所有列设置较长的宽度。产生横向滚动。 ``` html <u-table-view :data-source="[ { name: '张三', phone: '18612917895', email: 'zhangsan@163.com', address: '浙江省杭州市滨江区网商路599号网易大厦', createdTime: 1464421931000, loginTime: 1527515531000 }, { name: '小明', phone: '13727160283', email: 'xiaoming@163.com', address: '浙江省杭州市滨江区江虹路459号英飞特科技园', createdTime: 1520864676000, loginTime: 1552400676000 }, { name: '李四', phone: '18897127809', email: 'lisi@163.com', address: '浙江省杭州市滨江区秋溢路606号西可科技园', createdTime: 1494488730000, loginTime: 1558165530000 }, { name: '李华', phone: '18749261214', email: 'lihua@163.com', address: '浙江省杭州市滨江区长河路590号东忠科技园', createdTime: 1476073921000, loginTime: 1544428081000 }, { name: '王五', phone: '13579340020', email: 'wangwu@163.com', address: '浙江省杭州市滨江区网商路599号网易大厦二期', createdTime: 1468614726000, loginTime: 1531675926000 }, { name: '张三', phone: '18612917895', email: 'zhangsan@163.com', address: '浙江省杭州市滨江区网商路599号网易大厦', createdTime: 1464421931000, loginTime: 1527515531000 }, { name: '小明', phone: '13727160283', email: 'xiaoming@163.com', address: '浙江省杭州市滨江区江虹路459号英飞特科技园', createdTime: 1520864676000, loginTime: 1552400676000 }, { name: '李四', phone: '18897127809', email: 'lisi@163.com', address: '浙江省杭州市滨江区秋溢路606号西可科技园', createdTime: 1494488730000, loginTime: 1558165530000 }, { name: '李华', phone: '18749261214', email: 'lihua@163.com', address: '浙江省杭州市滨江区长河路590号东忠科技园', createdTime: 1476073921000, loginTime: 1544428081000 }, { name: '王五', phone: '13579340020', email: 'wangwu@163.com', address: '浙江省杭州市滨江区网商路599号网易大厦二期', createdTime: 1468614726000, loginTime: 1531675926000 }, ]" style="max-height: 300px;"> <u-table-view-column title="序号" type="index" width="50"></u-table-view-column> <u-table-view-column title="用户名" field="name" width="70"></u-table-view-column> <u-table-view-column title="手机号码" field="phone" width="160"></u-table-view-column> <u-table-view-column title="电子邮箱" field="email" width="200"></u-table-view-column> <u-table-view-column title="地址" field="address" width="400"></u-table-view-column> <u-table-view-column title="创建时间" field="createdTime" formatter="placeholder | date" width="20%"></u-table-view-column> <u-table-view-column title="最近登录时间" field="loginTime" formatter="placeholder | date" width="20%"></u-table-view-column> <u-table-view-column title="操作" width="120"> <template slot="cell"> <u-link>详情</u-link>&nbsp; <u-link>设置</u-link> </template> </u-table-view-column> </u-table-view> ``` ### 固定列 也可以对左右边缘重要的列进行固定 ``` html <u-linear-layout direction="vertical"> <u-table-view :data-source="[ { name: '张三', phone: '18612917895', email: 'zhangsan@163.com', address: '浙江省杭州市滨江区网商路599号网易大厦', createdTime: 1464421931000, loginTime: 1527515531000 }, { name: '小明', phone: '13727160283', email: 'xiaoming@163.com', address: '浙江省杭州市滨江区江虹路459号英飞特科技园', createdTime: 1520864676000, loginTime: 1552400676000 }, { name: '李四', phone: '18897127809', email: 'lisi@163.com', address: '浙江省杭州市滨江区秋溢路606号西可科技园', createdTime: 1494488730000, loginTime: 1558165530000 }, { name: '李华', phone: '18749261214', email: 'lihua@163.com', address: '浙江省杭州市滨江区长河路590号东忠科技园', createdTime: 1476073921000, loginTime: 1544428081000 }, { name: '王五', phone: '13579340020', email: 'wangwu@163.com', address: '浙江省杭州市滨江区网商路599号网易大厦二期', createdTime: 1468614726000, loginTime: 1531675926000 }, { name: '张三', phone: '18612917895', email: 'zhangsan@163.com', address: '浙江省杭州市滨江区网商路599号网易大厦', createdTime: 1464421931000, loginTime: 1527515531000 }, { name: '小明', phone: '13727160283', email: 'xiaoming@163.com', address: '浙江省杭州市滨江区江虹路459号英飞特科技园', createdTime: 1520864676000, loginTime: 1552400676000 }, { name: '李四', phone: '18897127809', email: 'lisi@163.com', address: '浙江省杭州市滨江区秋溢路606号西可科技园', createdTime: 1494488730000, loginTime: 1558165530000 }, { name: '李华', phone: '18749261214', email: 'lihua@163.com', address: '浙江省杭州市滨江区长河路590号东忠科技园', createdTime: 1476073921000, loginTime: 1544428081000 }, { name: '王五', phone: '13579340020', email: 'wangwu@163.com', address: '浙江省杭州市滨江区网商路599号网易大厦二期', createdTime: 1468614726000, loginTime: 1531675926000 }, ]" style="max-height: 300px;"> <u-table-view-column fixed title="序号" type="index" width="50"></u-table-view-column> <u-table-view-column fixed title="用户名" field="name" width="70"></u-table-view-column> <u-table-view-column title="手机号码" field="phone" width="160"></u-table-view-column> <u-table-view-column title="电子邮箱" field="email" width="200"></u-table-view-column> <u-table-view-column title="地址" field="address" width="400"></u-table-view-column> <u-table-view-column fixed title="创建时间" field="createdTime" formatter="placeholder | date" width="20%"></u-table-view-column> <u-table-view-column fixed title="最近登录时间" field="loginTime" formatter="placeholder | date" width="20%"></u-table-view-column> <u-table-view-column fixed title="操作" width="120"> <template slot="cell"> <u-link>详情</u-link>&nbsp; <u-link>设置</u-link> </template> </u-table-view-column> </u-table-view> <u-table-view :line="true" :data-source="[ { name: '张三', phone: '18612917895', email: 'zhangsan@163.com', address: '浙江省杭州市滨江区网商路599号网易大厦', createdTime: 1464421931000, loginTime: 1527515531000 }, { name: '小明', phone: '13727160283', email: 'xiaoming@163.com', address: '浙江省杭州市滨江区江虹路459号英飞特科技园', createdTime: 1520864676000, loginTime: 1552400676000 }, { name: '李四', phone: '18897127809', email: 'lisi@163.com', address: '浙江省杭州市滨江区秋溢路606号西可科技园', createdTime: 1494488730000, loginTime: 1558165530000 }, { name: '李华', phone: '18749261214', email: 'lihua@163.com', address: '浙江省杭州市滨江区长河路590号东忠科技园', createdTime: 1476073921000, loginTime: 1544428081000 }, { name: '王五', phone: '13579340020', email: 'wangwu@163.com', address: '浙江省杭州市滨江区网商路599号网易大厦二期', createdTime: 1468614726000, loginTime: 1531675926000 }, { name: '张三', phone: '18612917895', email: 'zhangsan@163.com', address: '浙江省杭州市滨江区网商路599号网易大厦', createdTime: 1464421931000, loginTime: 1527515531000 }, { name: '小明', phone: '13727160283', email: 'xiaoming@163.com', address: '浙江省杭州市滨江区江虹路459号英飞特科技园', createdTime: 1520864676000, loginTime: 1552400676000 }, { name: '李四', phone: '18897127809', email: 'lisi@163.com', address: '浙江省杭州市滨江区秋溢路606号西可科技园', createdTime: 1494488730000, loginTime: 1558165530000 }, { name: '李华', phone: '18749261214', email: 'lihua@163.com', address: '浙江省杭州市滨江区长河路590号东忠科技园', createdTime: 1476073921000, loginTime: 1544428081000 }, { name: '王五', phone: '13579340020', email: 'wangwu@163.com', address: '浙江省杭州市滨江区网商路599号网易大厦二期', createdTime: 1468614726000, loginTime: 1531675926000 }, ]" style="max-height: 300px;"> <u-table-view-column fixed title="序号" type="index" width="50"></u-table-view-column> <u-table-view-column fixed title="用户名" field="name" width="70"></u-table-view-column> <u-table-view-column title="手机号码" field="phone" width="160"></u-table-view-column> <u-table-view-column title="电子邮箱" field="email" width="200"></u-table-view-column> <u-table-view-column title="地址" field="address" width="400"></u-table-view-column> <u-table-view-column fixed title="创建时间" field="createdTime" formatter="placeholder | date" width="20%"></u-table-view-column> <u-table-view-column fixed title="最近登录时间" field="loginTime" formatter="placeholder | date" width="20%"></u-table-view-column> <u-table-view-column fixed title="操作" width="120"> <template slot="cell"> <u-link>详情</u-link>&nbsp; <u-link>设置</u-link> </template> </u-table-view-column> </u-table-view> </u-linear-layout> ``` ### 隐藏部分列 ``` vue <template> <u-linear-layout direction="vertical"> <u-linear-layout display="block"> <u-checkbox v-model="columnsVisible[0]">序号</u-checkbox> <u-checkbox v-model="columnsVisible[1]">用户名</u-checkbox> <u-checkbox v-model="columnsVisible[2]">手机号码</u-checkbox> <u-checkbox v-model="columnsVisible[3]">电子邮箱</u-checkbox> <u-checkbox v-model="columnsVisible[4]">地址</u-checkbox> <u-checkbox v-model="columnsVisible[5]">创建时间</u-checkbox> <u-checkbox v-model="columnsVisible[6]">最近登录时间</u-checkbox> <u-checkbox v-model="columnsVisible[7]">操作</u-checkbox> </u-linear-layout> <u-table-view :data-source="[ { name: '张三', phone: '18612917895', email: 'zhangsan@163.com', address: '浙江省杭州市滨江区网商路599号网易大厦', createdTime: 1464421931000, loginTime: 1527515531000 }, { name: '小明', phone: '13727160283', email: 'xiaoming@163.com', address: '浙江省杭州市滨江区江虹路459号英飞特科技园', createdTime: 1520864676000, loginTime: 1552400676000 }, { name: '李四', phone: '18897127809', email: 'lisi@163.com', address: '浙江省杭州市滨江区秋溢路606号西可科技园', createdTime: 1494488730000, loginTime: 1558165530000 }, { name: '李华', phone: '18749261214', email: 'lihua@163.com', address: '浙江省杭州市滨江区长河路590号东忠科技园', createdTime: 1476073921000, loginTime: 1544428081000 }, { name: '王五', phone: '13579340020', email: 'wangwu@163.com', address: '浙江省杭州市滨江区网商路599号网易大厦二期', createdTime: 1468614726000, loginTime: 1531675926000 }, { name: '张三', phone: '18612917895', email: 'zhangsan@163.com', address: '浙江省杭州市滨江区网商路599号网易大厦', createdTime: 1464421931000, loginTime: 1527515531000 }, { name: '小明', phone: '13727160283', email: 'xiaoming@163.com', address: '浙江省杭州市滨江区江虹路459号英飞特科技园', createdTime: 1520864676000, loginTime: 1552400676000 }, { name: '李四', phone: '18897127809', email: 'lisi@163.com', address: '浙江省杭州市滨江区秋溢路606号西可科技园', createdTime: 1494488730000, loginTime: 1558165530000 }, { name: '李华', phone: '18749261214', email: 'lihua@163.com', address: '浙江省杭州市滨江区长河路590号东忠科技园', createdTime: 1476073921000, loginTime: 1544428081000 }, { name: '王五', phone: '13579340020', email: 'wangwu@163.com', address: '浙江省杭州市滨江区网商路599号网易大厦二期', createdTime: 1468614726000, loginTime: 1531675926000 }, ]" style="max-height: 300px;"> <u-table-view-column :hidden="!columnsVisible[0]" title="序号" type="index" width="50"></u-table-view-column> <u-table-view-column :hidden="!columnsVisible[1]" title="用户名" field="name" width="70"></u-table-view-column> <u-table-view-column :hidden="!columnsVisible[2]" title="手机号码" field="phone" width="160"></u-table-view-column> <u-table-view-column :hidden="!columnsVisible[3]" title="电子邮箱" field="email" width="200"></u-table-view-column> <u-table-view-column :hidden="!columnsVisible[4]" title="地址" field="address" width="400"></u-table-view-column> <u-table-view-column :hidden="!columnsVisible[5]" title="创建时间" field="createdTime" formatter="placeholder | date" width="20%"></u-table-view-column> <u-table-view-column :hidden="!columnsVisible[6]" title="最近登录时间" field="loginTime" formatter="placeholder | date" width="20%"></u-table-view-column> <u-table-view-column :hidden="!columnsVisible[7]" title="操作" width="120"> <template slot="cell"> <u-link>详情</u-link>&nbsp; <u-link>设置</u-link> </template> </u-table-view-column> </u-table-view> </u-linear-layout> </template> <script> export default { data() { return { columnsVisible: [true, true, true, false, true, false, true, true], }; }, }; </script> ``` ### 缩放列宽 开启`resizable`属性,可以调整列宽。 根据`resize-remaining`属性,调整列宽有三种效果。`average`表示保持总宽不变,后面所有列平均弥补宽度;`sequence`表示保持总宽不变,优先后一列弥补宽度;`none`表示不做任何处理,表格宽度变化。 #### average ``` html <u-table-view resizable line striped :data-source="[ { name: '这是一个很长很长很长很长很长很长很长很长的名字', phone: '18612917895', email: 'zhangsan@163.com', address: '浙江省杭州市滨江区网商路599号网易大厦', createdTime: 1464421931000, loginTime: 1527515531000 }, { name: '小明', phone: '13727160283', email: 'xiaoming@163.com', address: '浙江省杭州市滨江区江虹路459号英飞特科技园浙江省杭州市滨江区江虹路459号英飞特科技园浙江省杭州市滨江区江虹路459号英飞特科技园', createdTime: 1520864676000, loginTime: 1552400676000 }, { name: '名字就是起得这么这么这么这么这么这么长', phone: '18897127809', email: 'lisi@163.com', address: '浙江省杭州市滨江区秋溢路606号西可科技园', createdTime: 1494488730000, loginTime: 1558165530000 }, { name: '李华', phone: '18749261214', email: 'lihua@163.com', address: '浙江省杭州市滨江区长河路590号东忠科技园', createdTime: 1476073921000, loginTime: 1544428081000 }, { name: '王五', phone: '13579340020', email: 'wangwu@163.com', address: '浙江省杭州市滨江区网商路599号网易大厦二期', createdTime: 1468614726000, loginTime: 1531675926000 }, ]"> <u-table-view-column title="用户名" ellipsis field="name" width="20%"></u-table-view-column> <u-table-view-column title="手机号码" field="phone" width="20%"></u-table-view-column> <u-table-view-column title="地址" ellipsis field="address"></u-table-view-column> <u-table-view-column title="最近登录时间" field="loginTime" formatter="placeholder | date" width="20%"></u-table-view-column> </u-table-view> ``` #### sequence ``` html <u-table-view resizable resize-remaining="sequence" line striped :data-source="[ { name: '这是一个很长很长很长很长很长很长很长很长的名字', phone: '18612917895', email: 'zhangsan@163.com', address: '浙江省杭州市滨江区网商路599号网易大厦', createdTime: 1464421931000, loginTime: 1527515531000 }, { name: '小明', phone: '13727160283', email: 'xiaoming@163.com', address: '浙江省杭州市滨江区江虹路459号英飞特科技园浙江省杭州市滨江区江虹路459号英飞特科技园浙江省杭州市滨江区江虹路459号英飞特科技园', createdTime: 1520864676000, loginTime: 1552400676000 }, { name: '名字就是起得这么这么这么这么这么这么长', phone: '18897127809', email: 'lisi@163.com', address: '浙江省杭州市滨江区秋溢路606号西可科技园', createdTime: 1494488730000, loginTime: 1558165530000 }, { name: '李华', phone: '18749261214', email: 'lihua@163.com', address: '浙江省杭州市滨江区长河路590号东忠科技园', createdTime: 1476073921000, loginTime: 1544428081000 }, { name: '王五', phone: '13579340020', email: 'wangwu@163.com', address: '浙江省杭州市滨江区网商路599号网易大厦二期', createdTime: 1468614726000, loginTime: 1531675926000 }, ]"> <u-table-view-column title="用户名" ellipsis field="name" width="20%"></u-table-view-column> <u-table-view-column title="手机号码" field="phone" width="20%"></u-table-view-column> <u-table-view-column title="地址" ellipsis field="address"></u-table-view-column> <u-table-view-column title="最近登录时间" field="loginTime" formatter="placeholder | date" width="20%"></u-table-view-column> </u-table-view> ``` #### none ``` html <u-table-view resizable resize-remaining="none" line striped :data-source="[ { name: '这是一个很长很长很长很长很长很长很长很长的名字', phone: '18612917895', email: 'zhangsan@163.com', address: '浙江省杭州市滨江区网商路599号网易大厦', createdTime: 1464421931000, loginTime: 1527515531000 }, { name: '小明', phone: '13727160283', email: 'xiaoming@163.com', address: '浙江省杭州市滨江区江虹路459号英飞特科技园浙江省杭州市滨江区江虹路459号英飞特科技园浙江省杭州市滨江区江虹路459号英飞特科技园', createdTime: 1520864676000, loginTime: 1552400676000 }, { name: '名字就是起得这么这么这么这么这么这么长', phone: '18897127809', email: 'lisi@163.com', address: '浙江省杭州市滨江区秋溢路606号西可科技园', createdTime: 1494488730000, loginTime: 1558165530000 }, { name: '李华', phone: '18749261214', email: 'lihua@163.com', address: '浙江省杭州市滨江区长河路590号东忠科技园', createdTime: 1476073921000, loginTime: 1544428081000 }, { name: '王五', phone: '13579340020', email: 'wangwu@163.com', address: '浙江省杭州市滨江区网商路599号网易大厦二期', createdTime: 1468614726000, loginTime: 1531675926000 }, ]"> <u-table-view-column title="用户名" ellipsis field="name" width="20%"></u-table-view-column> <u-table-view-column title="手机号码" field="phone" width="20%"></u-table-view-column> <u-table-view-column title="地址" ellipsis field="address"></u-table-view-column> <u-table-view-column title="最近登录时间" field="loginTime" formatter="placeholder | date" width="20%"></u-table-view-column> </u-table-view> ``` ### 分页与加载更多 #### 前端分页 如果数据源本身为前端数据或是从后端一次性拿过来的,设置`pageable`或`pageable="pagination"`即可开启分页功能,用`page-size`属性修改分页大小。 ``` vue <template> <u-table-view :data-source="load" pageable :page-size="10"> <u-table-view-column title="用户名" field="name" width="15%"></u-table-view-column> <u-table-view-column title="手机号码" field="phone" width="20%"></u-table-view-column> <u-table-view-column title="地址" field="address"></u-table-view-column> <u-table-view-column title="最近登录时间" field="loginTime" formatter="placeholder | date" width="20%"></u-table-view-column> </u-table-view> </template> <script> // 模拟后端请求 const mockRequest = (data, timeout = 300) => new Promise((res, rej) => setTimeout(() => res(data), timeout)); // 模拟构造 75 条后端数据 const mockData = (() => { const baseData = [ { name: '张三', phone: '18612917895', email: 'zhangsan@163.com', address: '浙江省杭州市滨江区网商路599号网易大厦', createdTime: 1464421931000, loginTime: 1527515531000 }, { name: '小明', phone: '13727160283', email: 'xiaoming@163.com', address: '浙江省杭州市滨江区江虹路459号英飞特科技园', createdTime: 1520864676000, loginTime: 1552400676000 }, { name: '李四', phone: '18897127809', email: 'lisi@163.com', address: '浙江省杭州市滨江区秋溢路606号西可科技园', createdTime: 1494488730000, loginTime: 1558165530000 }, { name: '李华', phone: '18749261214', email: 'lihua@163.com', address: '浙江省杭州市滨江区长河路590号东忠科技园', createdTime: 1476073921000, loginTime: 1544428081000 }, { name: '王五', phone: '13579340020', email: 'wangwu@163.com', address: '浙江省杭州市滨江区网商路599号网易大厦二期', createdTime: 1468614726000, loginTime: 1531675926000 }, ]; const result = []; for (let i = 0; i < 75; i++) { const item = Object.assign({}, baseData[i % 5]); item.name += '-' + (Math.random() * 20 >> 0); item.phone = String(+item.phone + (Math.random() * 10 >> 0) * Math.pow(10, Math.random() * 8 >> 0)); item.createdTime += i * 1000 * 3600 * 24; item.loginTime += i * 1000 * 3600 * 24; result.push(item); } return result; })(); // 模拟数据服务 const mockService = { loadList() { // 在这里模拟了一个从后端一次性获取数据的请求 return mockRequest(mockData); }, }; export default { methods: { load() { return mockService.loadList(); }, }, }; </script> ``` #### 后端分页 如果需要通过后端接口进行分页或加载更多,在开启`pageable`属性的基础上,还要开启`remote-paging`属性。 需要用最前面提到的 data-source 函数的方式传入数据。 加载函数的格式是这样的: ``` ts ({ paging: { size: number, // 每页大小 number: number, // 页数。从1开始计 offset: number, // 偏移量:(number - 1) * size limit: number, // 同 size } }) => Promise<{ data: Array<Item>, // 当前页数据 total: number, // 数据总量 }> ``` 组件会给加载函数提供分页器或加载位置的参数,要求返回如上的一个 Promise。Promise 的结果中需要有 total 字段,用于计算页面总数。 可以看下面的示例,在数据栏中`result`为最新一次模拟请求的返回数据。 ``` vue <template> <u-table-view :data-source="load" pageable :page-size="10" remote-paging> <u-table-view-column title="用户名" field="name" width="15%"></u-table-view-column> <u-table-view-column title="手机号码" field="phone" width="20%"></u-table-view-column> <u-table-view-column title="地址" field="address"></u-table-view-column> <u-table-view-column title="最近登录时间" field="loginTime" formatter="placeholder | date" width="20%"></u-table-view-column> </u-table-view> </template> <script> // 模拟后端请求 const mockRequest = (data, timeout = 300) => new Promise((res, rej) => setTimeout(() => res(data), timeout)); // 模拟构造 75 条后端数据 const mockData = (() => { const baseData = [ { name: '张三', phone: '18612917895', email: 'zhangsan@163.com', address: '浙江省杭州市滨江区网商路599号网易大厦', createdTime: 1464421931000, loginTime: 1527515531000 }, { name: '小明', phone: '13727160283', email: 'xiaoming@163.com', address: '浙江省杭州市滨江区江虹路459号英飞特科技园', createdTime: 1520864676000, loginTime: 1552400676000 }, { name: '李四', phone: '18897127809', email: 'lisi@163.com', address: '浙江省杭州市滨江区秋溢路606号西可科技园', createdTime: 1494488730000, loginTime: 1558165530000 }, { name: '李华', phone: '18749261214', email: 'lihua@163.com', address: '浙江省杭州市滨江区长河路590号东忠科技园', createdTime: 1476073921000, loginTime: 1544428081000 }, { name: '王五', phone: '13579340020', email: 'wangwu@163.com', address: '浙江省杭州市滨江区网商路599号网易大厦二期', createdTime: 1468614726000, loginTime: 1531675926000 }, ]; const result = []; for (let i = 0; i < 75; i++) { const item = Object.assign({}, baseData[i % 5]); item.name += '-' + (Math.random() * 20 >> 0); item.phone = String(+item.phone + (Math.random() * 10 >> 0) * Math.pow(10, Math.random() * 8 >> 0)); item.createdTime += i * 1000 * 3600 * 24; item.loginTime += i * 1000 * 3600 * 24; result.push(item); } return result; })(); // 模拟数据服务 const mockService = { loadList(offset, limit) { // 在这里模拟了一个后端分页的请求 return mockRequest({ total: mockData.length, data: mockData.slice(offset, offset + limit), }); }, }; export default { data() { return { result: undefined, }; }, methods: { load({ paging }) { return mockService.loadList(paging.offset, paging.limit) .then((result) => this.result = result); // 这句只是在 Demo 中打印一下数据,方便查看 }, }, }; </script> ``` #### 翻页器功能 使用`show-total`、`show-sizer`、`show-jumper`这几个属性,可以对应开启翻译器的显示总页数、切换每页大小、页面跳转功能。 ``` vue <template> <u-table-view :data-source="load" pageable :page-size="10" remote-paging show-total show-sizer> <u-table-view-column title="用户名" field="name" width="15%"></u-table-view-column> <u-table-view-column title="手机号码" field="phone" width="20%"></u-table-view-column> <u-table-view-column title="地址" field="address"></u-table-view-column> <u-table-view-column title="最近登录时间" field="loginTime" formatter="placeholder | date" width="20%"></u-table-view-column> </u-table-view> </template> <script> // 模拟后端请求 const mockRequest = (data, timeout = 300) => new Promise((res, rej) => setTimeout(() => res(data), timeout)); // 模拟构造 75 条后端数据 const mockData = (() => { const baseData = [ { name: '张三', phone: '18612917895', email: 'zhangsan@163.com', address: '浙江省杭州市滨江区网商路599号网易大厦', createdTime: 1464421931000, loginTime: 1527515531000 }, { name: '小明', phone: '13727160283', email: 'xiaoming@163.com', address: '浙江省杭州市滨江区江虹路459号英飞特科技园', createdTime: 1520864676000, loginTime: 1552400676000 }, { name: '李四', phone: '18897127809', email: 'lisi@163.com', address: '浙江省杭州市滨江区秋溢路606号西可科技园', createdTime: 1494488730000, loginTime: 1558165530000 }, { name: '李华', phone: '18749261214', email: 'lihua@163.com', address: '浙江省杭州市滨江区长河路590号东忠科技园', createdTime: 1476073921000, loginTime: 1544428081000 }, { name: '王五', phone: '13579340020', email: 'wangwu@163.com', address: '浙江省杭州市滨江区网商路599号网易大厦二期', createdTime: 1468614726000, loginTime: 1531675926000 }, ]; const result = []; for (let i = 0; i < 75; i++) { const item = Object.assign({}, baseData[i % 5]); item.name += '-' + (Math.random() * 20 >> 0); item.phone = String(+item.phone + (Math.random() * 10 >> 0) * Math.pow(10, Math.random() * 8 >> 0)); item.createdTime += i * 1000 * 3600 * 24; item.loginTime += i * 1000 * 3600 * 24; result.push(item); } return result; })(); // 模拟数据服务 const mockService = { loadList(offset, limit) { // 在这里模拟了一个后端分页的请求 return mockRequest({ total: mockData.length, data: mockData.slice(offset, offset + limit), }); }, }; export default { data() { return { result: undefined, }; }, methods: { load({ paging }) { return mockService.loadList(paging.offset, paging.limit) .then((result) => this.result = result); // 这句只是在 Demo 中打印一下数据,方便查看 }, }, }; </script> ``` #### 滚动加载更多 通过设置`pageable="auto-more"`,可以用滚动加载更多代替翻页器。 data-source 加载函数的格式是这样的: ``` ts ({ paging: { size: number, // 每页大小 number: number, // 页数。从1开始计 offset: number, // 偏移量:(number - 1) * size limit: number, // 同 size } }) => Promise<Array<Item> | { data: Array<Item>, total: number } | { data: Array<Item>, last: boolean }> ``` 组件会给加载函数提供加载位置的参数,要求返回如上的一个 Promise。翻页是否到底,如果 Promise 的结果为: - `{ data: Array<Item>, total: number }`,根据 total 数值判断是否翻到最底部 - `{ data: Array<Item>, last: boolean }`,根据 last 布尔值判断是否为最后一次 - `Array<Item>`,则根据数组为空判断为最后一次 可以看下面的示例,在数据栏中`result`为最新一次模拟请求的返回数据。 ``` vue <template> <u-table-view :data-source="load" pageable="auto-more" :page-size="10" remote-paging style="height: 300px;"> <u-table-view-column title="用户名" field="name" width="15%"></u-table-view-column> <u-table-view-column title="手机号码" field="phone" width="20%"></u-table-view-column> <u-table-view-column title="地址" field="address"></u-table-view-column> <u-table-view-column tit