| <script> | 
| import BasePage from './BasePage' | 
| export default { | 
|   name: 'BaseTable', | 
|   extends: BasePage, | 
|   data () { | 
|     return { | 
|       // 接口 | 
|       api: null, | 
|       // 模块名称 | 
|       module: '数据', | 
|       // 配置数据 | 
|       configData: { | 
|         // id字段 | 
|         'field.id': 'id', | 
|         // 主字段 | 
|         'field.main': 'name' | 
|       }, | 
|       // 是否正在执行 | 
|       isWorking: { | 
|         // 搜索中 | 
|         search: false, | 
|         // 删除中 | 
|         delete: false, | 
|         // 导出中 | 
|         export: false | 
|       }, | 
|       // 表格数据 | 
|       tableData: { | 
|         // 已选中的数据 | 
|         selectedRows: [], | 
|         // 排序的字段 | 
|         sorts: [], | 
|         // 当前页数据 | 
|         list: [], | 
|         // 分页 | 
|         pagination: { | 
|           pageIndex: 1, | 
|           pageSize: 10, | 
|           total: 0 | 
|         } | 
|       } | 
|     } | 
|   }, | 
|   methods: { | 
|     // 配置 | 
|     config (extParams) { | 
|       if (extParams == null) { | 
|         throw new Error('Parameter can not be null of method \'config\' .') | 
|       } | 
|       if (extParams.api == null) { | 
|         throw new Error('Missing config option \'api\'.') | 
|       } | 
|   | 
|       if(extParams.api.indexOf('@/',0) === 0){ | 
|         this.api = require(extParams.api) | 
|       }else { | 
|         this.api = require('@/api' + extParams.api) | 
|       } | 
|       // this.api = require('@/api' + extParams.api) | 
|       extParams.module && (this.module = extParams.module) | 
|       extParams['field.id'] && (this.configData['field.id'] = extParams['field.id']) | 
|       extParams['field.main'] && (this.configData['field.main'] = extParams['field.main']) | 
|       this.tableData.sorts = extParams.sorts | 
|     }, | 
|     // 搜索 | 
|     search () { | 
|       this.handlePageChange(1) | 
|     }, | 
|     // 导出Excel | 
|     exportExcel () { | 
|       this.__checkApi() | 
|       this.$dialog.exportConfirm('确认导出吗?') | 
|         .then(() => { | 
|           this.isWorking.export = true | 
|           this.api.exportExcel({ | 
|             page: this.tableData.pagination.pageIndex, | 
|             capacity: 1000000, | 
|             model: this.searchForm, | 
|             sorts: this.tableData.sorts | 
|           }) | 
|             .then(response => { | 
|               this.download(response) | 
|             }) | 
|             .catch(e => { | 
|               this.$tip.apiFailed(e) | 
|             }) | 
|             .finally(() => { | 
|               this.isWorking.export = false | 
|             }) | 
|         }) | 
|         .catch(() => {}) | 
|     }, | 
|     // 搜索框重置 | 
|     reset () { | 
|       this.$refs.searchForm.resetFields() | 
|       this.search() | 
|     }, | 
|     // 每页显示数量变更处理 | 
|     handleSizeChange (pageSize) { | 
|       this.tableData.pagination.pageSize = pageSize | 
|       this.search() | 
|     }, | 
|     // 行选中处理 | 
|     handleSelectionChange (selectedRows) { | 
|       this.tableData.selectedRows = selectedRows | 
|     }, | 
|     // 排序 | 
|     handleSortChange (sortData) { | 
|       this.tableData.sorts = [] | 
|       if (sortData.order != null) { | 
|         this.tableData.sorts.push({ | 
|           property: sortData.column.sortBy, | 
|           direction: sortData.order === 'descending' ? 'DESC' : 'ASC' | 
|         }) | 
|       } | 
|       this.handlePageChange() | 
|     }, | 
|     // 页码变更处理 | 
|     handlePageChange (pageIndex) { | 
|       this.__checkApi() | 
|       this.tableData.pagination.pageIndex = pageIndex || this.tableData.pagination.pageIndex | 
|       this.isWorking.search = true | 
|       this.api.fetchList({ | 
|         page: this.tableData.pagination.pageIndex, | 
|         capacity: this.tableData.pagination.pageSize, | 
|         model: this.searchForm, | 
|         sorts: this.tableData.sorts | 
|       }) | 
|         .then(data => { | 
|           this.tableData.list = data.records | 
|           this.tableData.pagination.total = data.total | 
|         }) | 
|         .catch(e => { | 
|           // this.$tip.apiFailed(e) | 
|         }) | 
|         .finally(() => { | 
|           this.isWorking.search = false | 
|         }) | 
|     }, | 
|     // 删除 | 
|     deleteById (row, childConfirm = true) { | 
|       this.__checkApi() | 
|       // let message = `确认删除${this.module}【${row[this.configData['field.main']]}】吗?` | 
|       let message = `确认删除该记录吗?` | 
|       if (childConfirm && row.children != null && row.children.length > 0) { | 
|         // message = `确认删除${this.module}【${row[this.configData['field.main']]}】及其子${this.module}吗?` | 
|         message = `确认删除该记录及其子数据吗?` | 
|       } | 
|       this.$dialog.deleteConfirm(message) | 
|         .then(() => { | 
|           this.isWorking.delete = true | 
|           this.api.deleteById(row[this.configData['field.id']]) | 
|             .then(() => { | 
|               this.$tip.apiSuccess('删除成功') | 
|               this.__afterDelete() | 
|             }) | 
|             .catch(e => { | 
|               // this.$tip.apiFailed(e) | 
|             }) | 
|             .finally(() => { | 
|               this.isWorking.delete = false | 
|             }) | 
|         }) | 
|         .catch(() => {}) | 
|     }, | 
|     /** | 
|      * 批量删除 | 
|      * @treeMode 是否添加子节点删除确认 | 
|      */ | 
|     deleteByIdInBatch (childConfirm = true) { | 
|       this.__checkApi() | 
|       if (this.tableData.selectedRows.length === 0) { | 
|         this.$tip.warning('请至少选择一条数据') | 
|         return | 
|       } | 
|       let message = `确认删除已选中的 ${this.tableData.selectedRows.length} 条${this.module}记录吗?` | 
|       if (childConfirm) { | 
|         const containChildrenRows = [] | 
|         for (const row of this.tableData.selectedRows) { | 
|           if (row.children != null && row.children.length > 0) { | 
|             containChildrenRows.push(row[this.configData['field.main']]) | 
|           } | 
|         } | 
|         if (containChildrenRows.length > 0) { | 
|           message = '本次将删除该数据及其子数据,确认删除吗?' | 
|         } | 
|       } | 
|       this.$dialog.deleteConfirm(message) | 
|         .then(() => { | 
|           this.isWorking.delete = true | 
|           this.api.deleteByIdInBatch(this.tableData.selectedRows.map(row => row.id).join(',')) | 
|             .then(() => { | 
|               this.$tip.apiSuccess('删除成功') | 
|               this.__afterDelete(this.tableData.selectedRows.length) | 
|             }) | 
|             .catch(e => { | 
|               // this.$tip.apiFailed(e) | 
|             }) | 
|             .finally(() => { | 
|               this.isWorking.delete = false | 
|             }) | 
|         }) | 
|         .catch(() => {}) | 
|     }, | 
|     // 删除处理 | 
|     __afterDelete (deleteCount = 1) { | 
|       // 删除当前页最后一条记录时查询上一页数据 | 
|       if (this.tableData.list.length - deleteCount === 0) { | 
|         this.handlePageChange(this.tableData.pagination.pageIndex - 1 === 0 ? 1 : this.tableData.pagination.pageIndex - 1) | 
|       } else { | 
|         this.handlePageChange(this.tableData.pagination.pageIndex) | 
|       } | 
|     }, | 
|     // 检查接口是否配置 | 
|     __checkApi () { | 
|       if (this.api == null) { | 
|         throw new Error('The page is not initialized, you can use method \'this.config\' to initialize this page.') | 
|       } | 
|     } | 
|   } | 
| } | 
| </script> |