UNPKG

@repackel/repack-plus

Version:

A repackage of element-plus to help you build pages faster.

319 lines (281 loc) 9.3 kB
## **Table** 表格文档 ### 引入 - 全局引入 ```javascript // 入口 main.js import { createApp } from 'vue' import ElementPlus from 'element-plus'; import RepackPlus from "@repackel/repack-plus"; // 传入分页配置 const rpcfg = { pageAlias: { current: "currentPage", //当前页码的键名 size: "pageSize" //每页大小的键名 } } // 全局安装 const app = createApp(App).use(ElementPlus).use(RepackPlus,rpcfg) app.mount('#app') ``` ```html <rp-table :cfg="cfg" ref="staffTable" @getSelection="getSelection"></rp-table> ``` - 组件内引入 ```javascript import { Table } from "@repackel/repack-plus"; ``` ```javascript components: { [Table.name]: Table, }, ``` ```html <rp-table :cfg="cfg" ref="staffTable" @getSelection="getSelection"></rp-table> ``` **插槽:* | 名称 | 插槽 | 示例 | | --- | --- | --- | | pageBegin | 位于页面开始 | `slot="pageBegin"` | | beforeTable | `Table` 标签之前 | `slot="beforeTable"` | | searchBegin | 位于 searchList 开始 | `slot="searchBegin"` | | searchbox | searchList 之间,由 `type='slot'` 控制 | `slot="searchbox"` | | customTable | 自定义表格,当 `cfg.customTable` 为 `true` 时生效 | `slot="customTable"` | ### 配置 - 1 `cfg` 配置 > 最简配置 ```javascript { searchFn: this.getList, tableList:[], } ``` > 完整配置 ```javascript { pageAlias: {// 定义分页配置,全局安装时可通过 rpcfg.pageAlias 传入 current: "currentPage", //当前页码的键名 size: "pageSize" //每页大小的键名 }, actionList:[], // 操作按钮列表,可选 actionAlign: "right", // 操作按钮对齐,默认 `"right"` searchList:[], // 搜索列表 searchFn: this.getList, // 搜索方法 `Function` fetchConditionFn: this.fetchConditionList, // 异步获取搜索条件列表的方法 `Function` tableSelection: true, // 表格是否可勾选,默认 `false` customTable: true, // 自定义表格,默认 `false` tableList:[], // 表格表头,自定义表格时不需要 tableCellFallbackText: '-', // 表格单元备用文本,可选。当表格的值为空时显示,对整个表格生效。无默认 hideSearchForm: true, // 隐藏搜索条件和搜索按钮,默认显示 hidePagination: true, // 隐藏分页组件,默认显示 } ``` - 1-1 `searchFn` 配置 搜索接口通过异步函数传入,最终由组件内部调用,组件外完成数据的拼装 组件内在 `mounted()` 时调用 搜索,组件外无需再次调用 示例: ```javascript getList(p, reset) { // `p` 为组件内传入的搜索条件 // `reset` 为重置搜索开关,当使用到了外部条件时,这里要清除 // 最后 `resolve` 的包含 `table` 数据和分页 let { ...pr } = p; if (!reset) { // 搜索时,带上外部的省市区数据 const divList = this.divList; switch (divList.length) { case 1: pr.provinceCode = this._last(divList); break; case 2: pr.cityCode = this._last(divList); break; case 3: pr.areaCode = this._last(divList); break; default: break; } } else { // 重置时清空外部的省市区数组 this.divList = []; } // 同时可以带上其他必传条件 pr.buildingType = 1; return new Promise((resolve, reject) => { this.$req("/community/building/list", { method: "GET", params: pr }).then(res => { resolve({ list: res.rows, total: res.total }); }); }); }, ``` - 1-2 `fetchConditionFn` 配置 异步获取搜索条件列表的方法,`return` 一个 `Promise`,最后 `resolve` 一个对象 每一个键名为 `searchList` 某项的 `key` ,键值为其对应的下拉框选项 `list` 在 `mounted()` 时调用 示例: ```javascript fetchConditionList() { return new Promise(async (resolve, reject) => { const childType = await this.$req("/getList"); // const subChildType = await this.$req("/getChildType"); resolve({ childType: childType, // subChildType: subChildType }); }); }, ``` - 1-3 `searchList` 配置 > 格式: ```javascript searchList: [ { name: "姓名", type: "input", key: "name" }, { name: "性别", type: "select", key: "sex", list: "XB" }, { name: "时间范围", type: "date", key1: "beginDate", key2: "endDate" } ] ``` > 属性说明: | 键名 || 类型 | 默认值 | 示例 | | --- | --- | --- |--- | --- | | name | 中文名 | `String` | 必传 | `"姓名"` | | type | 见下表 | `String` | 必传 | `"select"` | | key | 表单的键 | `String` | 必传 | `"name"` | | list | 下拉类型的列表 | `Array` | 必传 | `[{name:'男',val:'1'}]` | | useLabel | 使用下拉框的 `label` 传值 | `Boolean` | | `true` | | key1 | `type="date"` 的开始时间 | `String` | | `"beginDate"` | | key2 | `type="date"` 的结束时间 | `String` | | `"endDate"` | | hidden | 隐藏该搜索项 | `Boolean` | - | `true` | | width | item content 宽度,单位为 px | `String` | - | `"220px"` | | class | item content 类名 | `String` | - | `"w250"` | | itemClassName | item 类名 | `String` | - | `"block"` | | - | 以下同 element-ui |||| | size | - | `String` | `"small"` | `"small"` | | filterable | - | `Boolean` | - | `true` | | clearable | - | `Boolean` | `true` | `true` | | multiple | - | `Boolean` | - | `true` | | readonly | - | `Boolean` | - | `true` | | disabled | - | `Boolean` | - | `true` | | maxlength | - | `Number` | `25` | `20` | | rows | - | `Boolean` | `"3"` | `"5"` | | resize | - | `Boolean` | `"none"` | `"none"` | | placeholder | - | `String` | - | `"请选择"` | | startPlaceholder | start-placeholder | `String` | - | `"请选择开始时间"` | | endPlaceholder | end-placeholder | `String` | - | `"请选择结束时间"` | | valueFormat | value-format | `String` | - | `"yyyy-MM-dd HH:mm:ss"` | > `type` 类型 | 传值 | 含义 | | -- | -- | | `input` | 输入框 | | `select`| 下拉框 | | `date`| 日期范围 | | `datetime` | 日期时间范围 | | `date1`| 单个日期 | | `slot` | 插槽 | **注:当 `type="slot"` 的时候,可以使用 `name="searchbox"` 的具名插槽,配置更加灵活的内容。* **下拉框列表数据的必须设为以下格式,键名 `name`, 键值 `val`* ```javascript list: [{ val: "1", name: "住宅" }, { val: "2", name: "公共设施用房" }, { val: "3", name: "商业用房" }] ``` - 1-4 `tableList` 配置 > 格式: ```javascript tableList: [ { label: "姓名", prop: "name", width: 80 }, { label: "性别", transform: row => ["","男", "女"][row.sex], width: 120 } ] ``` > 属性说明: | 键名 || 类型 | 默认值 | 示例 | | --- | --- | --- |--- | --- | | label | 表头 | `String` | 必传 |`"姓名"` | | prop | 表单循环的 key | `String` | 必传 |`"name"` | | hidden | 隐藏该列 | `Boolean` | `false` |`true` | | viewImg | 取 prop 字段显示看图 | `Boolean` | | `true` | | width | 宽度 ,同 element-ui | `Number` | | `80` | | minWidth | 最小宽度 ,同 element-ui | `Number` | | `120` | | align | 列表对齐 ,同 element-ui | `String` | | `'right'` | | overflow | showOverflowTooltip ,同 element-ui | `Boolean` | | `true` | | fixed | 列表固定 ,同 element-ui | `Boolean` `String` | `false` | `'right'` | | transform | 处理显示文字的函数,传入`row` ,显示返回结果 | `Function` | | `row => row.num + 'kg'` | | class | 类名 | `String` `Function` | | `row => ["", "green", "red"][row.state]` | | style | 内联样式 | `String` `Function` | | `row => ({ color: ["", "green", "red"][row.state]})` | | fn | 点击事件,传入 `(row,index)` | `Function` | | `(row,index) => this.alert(row,index)` | | buttonList | 操作按钮的列表 | `Array` | | 见下表 | - 1-5-1 `buttonList` 配置: > 格式: ```javascript buttonList:[ { text: "编辑", fn: () => this.$info("编辑") } ] ``` > 属性说明: | 键名 || 类型 | 默认值 | 示例 | | --- | --- | --- |--- | --- | | icon | 按钮图标 | `String` | | `"el-icon-edit"` | | type | 按钮类型,同 element-ui | `String` | `'text'` | `"primary"` | | size | 按钮大小,同 element-ui | `String` | `'default'` | `"mini"` | | disabled | 禁用 | `Boolean` `Function` | | `true` | | class | 类名 | `String` `Function` | | `row => ["", "green", "red"][row.state]` | | style | 内联样式 | `String` `Function` | | `row => ({ color: ["", "green", "red"][row.state]})` | | text | 按钮文字 | `String` `Function` | | `row => ["", "查看", "编辑"][row.state]` | | fn | 点击事件,传入 `(row,index)` | `Function` | | `(row,index) => this.alert(row,index)` | ### 方法 用法: ```javascript this.$refs[ ref名 ].[ 方法名 ] // this.$refs.staffTable.getList() ``` > 方法列表: | 方法名 | 说明 | | --- | --- | | `searchButton()` | 搜索按钮 | | `getList()` | 搜索函数 | | `resetQuery()` | 重置函数 | | `handleSizeChange()` | 分页大小改变 | | `handleCurrentChange()` | 分页索引改变 | ### 事件 用法: ```javascript @getSelection="myGetSelectionMethod" // 即为 element 的 `selection-change` 方法 ```