¶Ô±ÈÐÂÎļþ |
| | |
| | | <script> |
| | | import BasePage from './BasePage' |
| | | import { isFunction } from 'element-ui' |
| | | |
| | | 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: { |
| | | /** |
| | | * é
ç½® |
| | | * |
| | | * @param extParams é
ç½®åæ° |
| | | */ |
| | | 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\'.') |
| | | } |
| | | 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() |
| | | }, |
| | | refresh () { |
| | | window.location.reload() |
| | | }, |
| | | /** |
| | | * 页容éåæ´å¤çï¼åæ¢é¡µå®¹éæ¶è§¦åï¼ |
| | | * |
| | | * @param pageSize 页容é |
| | | */ |
| | | handleSizeChange (pageSize) { |
| | | this.tableData.pagination.pageSize = pageSize |
| | | this.search() |
| | | }, |
| | | /** |
| | | * è¡éä¸å¤çï¼ç¹å»éä¸åæ¶è§¦åï¼ |
| | | * |
| | | * @param selectedRows å·²éä¸çè¡æ°ç» |
| | | */ |
| | | handleSelectionChange (selectedRows) { |
| | | this.tableData.selectedRows = selectedRows |
| | | }, |
| | | /** |
| | | * æåºï¼ç¹å»å头æåºæ¶è§¦åï¼ |
| | | * |
| | | * @param sortData æåºåæ° |
| | | */ |
| | | 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() |
| | | }, |
| | | /** |
| | | * 页ç åæ´å¤çï¼å页æ¶è§¦åï¼ |
| | | * |
| | | * @param pageIndex æ°é¡µç |
| | | */ |
| | | 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 |
| | | }) |
| | | }, |
| | | /** |
| | | * å é¤ï¼ç¹å»è¡æä½/å 餿¶è§¦åï¼ |
| | | * |
| | | * @param row è¡å¯¹è±¡ |
| | | * @param childConfirm å é¤åèç¹æ¶æ¯å¦è¿è¡äºæ¬¡ç¡®è®¤ |
| | | */ |
| | | deleteById (row, childConfirm = true, call) { |
| | | this.__checkApi() |
| | | let message = `确认å é¤${this.module}å?` |
| | | if (childConfirm && row.children != null && row.children.length > 0) { |
| | | message = `确认å é¤${this.module}ã${row[this.configData['field.main']]}ãåå
¶å${this.module}å?` |
| | | } |
| | | this.$dialog.deleteConfirm(message) |
| | | .then(() => { |
| | | this.isWorking.delete = true |
| | | this.api.deleteById(row[this.configData['field.id']]) |
| | | .then(() => { |
| | | this.__afterDelete() |
| | | if (call) { |
| | | call() |
| | | } |
| | | }) |
| | | .catch(e => { |
| | | this.$tip.apiFailed(e) |
| | | }) |
| | | .finally(() => { |
| | | this.isWorking.delete = false |
| | | }) |
| | | }) |
| | | .catch(() => {}) |
| | | }, |
| | | /** |
| | | * æ¹éå é¤ï¼ç¹å»æ¹éå 餿¶è§¦åï¼ |
| | | * |
| | | * @param childConfirm å é¤åèç¹æ¶æ¯å¦è¿è¡äºæ¬¡ç¡®è®¤ |
| | | */ |
| | | deleteByIdInBatch (childConfirm = true, call) { |
| | | 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.module}ã${containChildrenRows.join('ã')}ãåå
¶å${this.module}è®°å½ï¼ç¡®è®¤å é¤åï¼` |
| | | } |
| | | } |
| | | this.$dialog.deleteConfirm(message) |
| | | .then(() => { |
| | | this.isWorking.delete = true |
| | | this.api.deleteByIdInBatch(this.tableData.selectedRows.map(row => row[this.configData['field.id']]).join(',')) |
| | | .then(() => { |
| | | this.__afterDelete(this.tableData.selectedRows.length) |
| | | if (call) { |
| | | call() |
| | | } |
| | | }) |
| | | .catch(e => { |
| | | this.$tip.apiFailed(e) |
| | | }) |
| | | .finally(() => { |
| | | this.isWorking.delete = false |
| | | }) |
| | | }) |
| | | .catch(() => {}) |
| | | }, |
| | | /** |
| | | * å é¤åå¤çï¼å¨åè¡å 餿å¤è¡å é¤åè°ç¨ |
| | | * |
| | | * @param deleteCount å 餿°é |
| | | * @private |
| | | */ |
| | | __afterDelete (deleteCount = 1) { |
| | | this.$tip.apiSuccess('å 餿å') |
| | | // å é¤å½å页æå䏿¡è®°å½æ¶æ¥è¯¢ä¸ä¸é¡µæ°æ® |
| | | 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) |
| | | } |
| | | }, |
| | | /** |
| | | * æ£æ¥æ¥å£æ¯å¦é
ç½®ï¼å¨è°ç¨æ¥å£æ¶è°ç¨ |
| | | * |
| | | * @private |
| | | */ |
| | | __checkApi () { |
| | | if (this.api == null) { |
| | | throw new Error('The page is not initialized, you can use method \'this.config\' to initialize this page.') |
| | | } |
| | | } |
| | | } |
| | | } |
| | | </script> |