Commit 914ae6d1a6c2441574e41ca4685383c0abcd0004

Authored by Aaron
1 parent 6b95167f
Exists in master and in 1 other branch legacy

修复Search显示数量,Scheme支持responseFilter

packages/scheme/index.vue
@@ -330,7 +330,6 @@ export default { @@ -330,7 +330,6 @@ export default {
330 this._formList = this.formList || []; 330 this._formList = this.formList || [];
331 this._tableList = this.tableList || []; 331 this._tableList = this.tableList || [];
332 } 332 }
333 - this.totalCount = this.tableData.length;  
334 // 传入axios标准的http库 333 // 传入axios标准的http库
335 if (this.option.$http) { 334 if (this.option.$http) {
336 _$http = this.option.$http; 335 _$http = this.option.$http;
@@ -339,7 +338,7 @@ export default { @@ -339,7 +338,7 @@ export default {
339 mounted() { 338 mounted() {
340 const defaultData = this.value; 339 const defaultData = this.value;
341 this.totalCount = defaultData.length; 340 this.totalCount = defaultData.length;
342 - this.tableDataStatic = defaultData.map(item => { return { ...item, id: item.id || getUUID() } }); 341 + this.tableDataStatic = defaultData.map(item => { return { ...item, $pk: item[this.option.primaryKey] || item['$pk'] || getUUID() } });
343 // 设置自动加载数据 342 // 设置自动加载数据
344 if (this.option.auto !== false) { 343 if (this.option.auto !== false) {
345 this.handleSearch(); 344 this.handleSearch();
@@ -384,17 +383,21 @@ export default { @@ -384,17 +383,21 @@ export default {
384 }, 383 },
385 watch: { 384 watch: {
386 value(val) { 385 value(val) {
387 - this.tableData = val;  
388 - },  
389 - tableData: {  
390 - handler(val) {  
391 - this.$emit("input", val);  
392 - this.$emit("change", val);  
393 - },  
394 - deep: true 386 + if (!(this.option.searchAPI || _$http && this.option.url)) {
  387 + const valueData = val.map(item => { return { ...item, $pk: item[this.option.primaryKey] || item['$pk'] || getUUID() } });
  388 + this.tableDataStatic = valueData;
  389 + this.tableData = valueData;
  390 + } else {
  391 + this.tableData = val;
  392 + }
395 }, 393 },
396 }, 394 },
397 methods: { 395 methods: {
  396 + // 向上反馈组件值
  397 + emit() {
  398 + this.$emit("input", this.tableData);
  399 + this.$emit("change", this.tableData);
  400 + },
398 // 动态改变表格列 401 // 动态改变表格列
399 dynamicChange() { 402 dynamicChange() {
400 this.$forceUpdate(); 403 this.$forceUpdate();
@@ -422,6 +425,7 @@ export default { @@ -422,6 +425,7 @@ export default {
422 const { result = [] } = response; 425 const { result = [] } = response;
423 this.tableData = result; 426 this.tableData = result;
424 this.totalCount = response[totalCountAlias] || 0; 427 this.totalCount = response[totalCountAlias] || 0;
  428 + this.emit();
425 } catch (error) { 429 } catch (error) {
426 console.error(error); 430 console.error(error);
427 } finally { 431 } finally {
@@ -431,10 +435,20 @@ export default { @@ -431,10 +435,20 @@ export default {
431 this.tableLoading = true; 435 this.tableLoading = true;
432 _$http.get(`${this.option.url.trim('/')}/${this.option.searchMethod || 'page'}?${stringify(param)}`) 436 _$http.get(`${this.option.url.trim('/')}/${this.option.searchMethod || 'page'}?${stringify(param)}`)
433 .then((response) => { 437 .then((response) => {
434 - const { result = {} } = response || {};  
435 - const { list = [] } = result || {};  
436 - this.tableData = list;  
437 - this.totalCount = result[totalCountAlias] || 0; 438 + // 预留 支持全局配置filter
  439 + const responseFilter = this.option.searchFilter || this.searchFilter;
  440 + if (responseFilter) {
  441 + responseFilter(response).then(({ list, total }) => {
  442 + this.tableData = list;
  443 + this.totalCount = total;
  444 + });
  445 + } else {
  446 + const { result = {} } = response || {};
  447 + const { list = [] } = result || {};
  448 + this.tableData = list;
  449 + this.totalCount = result[totalCountAlias] || 0;
  450 + }
  451 + this.emit();
438 }) 452 })
439 .finally(() => { 453 .finally(() => {
440 this.tableLoading = false; 454 this.tableLoading = false;
@@ -466,6 +480,7 @@ export default { @@ -466,6 +480,7 @@ export default {
466 this.tableData = resultData.slice(begin, end); 480 this.tableData = resultData.slice(begin, end);
467 this.totalCount = resultData.length; 481 this.totalCount = resultData.length;
468 this.tableLoading = false; 482 this.tableLoading = false;
  483 + this.emit();
469 }); 484 });
470 } 485 }
471 }, 486 },
@@ -499,8 +514,16 @@ export default { @@ -499,8 +514,16 @@ export default {
499 const detailMethodFormat = this.option.detailMethod ? `${this.option.detailMethod.trim('/')}/${param[detailPrimaryKey || primaryKey]}` : undefined; 514 const detailMethodFormat = this.option.detailMethod ? `${this.option.detailMethod.trim('/')}/${param[detailPrimaryKey || primaryKey]}` : undefined;
500 _$http.get(`${this.option.url.trim('/')}/${detailMethodFormat || defaultDetailMethod}`) 515 _$http.get(`${this.option.url.trim('/')}/${detailMethodFormat || defaultDetailMethod}`)
501 .then(response => { 516 .then(response => {
502 - const { result = {} } = response || {};  
503 - this.setFormModel(result); 517 + // 预留 支持全局配置filter
  518 + const responseFilter = this.option.detailFilter || this.detailFilter || this.option.resultFilter || this.resultFilter;
  519 + if (responseFilter) {
  520 + responseFilter(response).then((result = {}) => {
  521 + this.setFormModel(result);
  522 + });
  523 + } else {
  524 + const { result = {} } = response || {};
  525 + this.setFormModel(result);
  526 + }
504 }) 527 })
505 .finally(() => { 528 .finally(() => {
506 this.dialogLoading = false; 529 this.dialogLoading = false;
@@ -553,8 +576,16 @@ export default { @@ -553,8 +576,16 @@ export default {
553 const getMethodFormat = this.option.getMethod ? `${this.option.getMethod.trim('/')}/${param[getPrimaryKey || primaryKey]}` : undefined; 576 const getMethodFormat = this.option.getMethod ? `${this.option.getMethod.trim('/')}/${param[getPrimaryKey || primaryKey]}` : undefined;
554 _$http.get(`${this.option.url.trim('/')}/${getMethodFormat || defaultGetMethod}`) 577 _$http.get(`${this.option.url.trim('/')}/${getMethodFormat || defaultGetMethod}`)
555 .then(response => { 578 .then(response => {
556 - const { result = {} } = response || {};  
557 - this.setFormModel(result); 579 + // 预留 支持全局配置filter
  580 + const responseFilter = this.option.getFilter || this.getFilter || this.option.resultFilter || this.resultFilter;
  581 + if (responseFilter) {
  582 + responseFilter(response).then((result = {}) => {
  583 + this.setFormModel(result);
  584 + });
  585 + } else {
  586 + const { result = {} } = response || {};
  587 + this.setFormModel(result);
  588 + }
558 }) 589 })
559 .finally(() => { 590 .finally(() => {
560 this.dialogLoading = false; 591 this.dialogLoading = false;
@@ -606,19 +637,32 @@ export default { @@ -606,19 +637,32 @@ export default {
606 const postData = param; 637 const postData = param;
607 _$http.post(`${this.option.url.trim('/')}/${this.option.deleteMethod || 'delete'}`, postData) 638 _$http.post(`${this.option.url.trim('/')}/${this.option.deleteMethod || 'delete'}`, postData)
608 .then(response => { 639 .then(response => {
609 - const { code } = response || {};  
610 - if (`${code}` === '0') {  
611 - this.hideDialog();  
612 - this.handleSearch();  
613 - if (this.$message) { this.$message({ message: this.i18n('eagle.scheme.deleteSuccess') || '删除成功', type: 'success' }); } 640 + // 预留 支持全局配置filter
  641 + const responseFilter = this.option.deleteFilter || this.deleteFilter || this.option.successFilter || this.successFilter;
  642 + if (responseFilter) {
  643 + responseFilter(response).then((success) => {
  644 + if (success) {
  645 + this.hideDialog();
  646 + this.handleSearch();
  647 + if (this.$message) { this.$message({ message: this.i18n('eagle.scheme.submitSuccess') || '删除成功', type: 'success' }); }
  648 + }
  649 + });
  650 + } else {
  651 + const { code } = response || {};
  652 + if (`${code}` === '0') {
  653 + this.hideDialog();
  654 + this.handleSearch();
  655 + if (this.$message) { this.$message({ message: this.i18n('eagle.scheme.editSuccess') || '删除成功', type: 'success' }); }
  656 + }
614 } 657 }
615 }) 658 })
616 .finally(() => { 659 .finally(() => {
617 this.dialogLoading = false; 660 this.dialogLoading = false;
618 }); 661 });
619 } else { 662 } else {
  663 + console.log(selection, this.tableDataStatic)
620 selection.forEach(slt => { 664 selection.forEach(slt => {
621 - this.tableDataStatic = this.tableDataStatic.filter(item => item.id !== slt.id); 665 + this.tableDataStatic = this.tableDataStatic.filter(item => item['$pk'] !== slt['$pk']);
622 }); 666 });
623 this.hideDialog(); 667 this.hideDialog();
624 this.handleSearch(); 668 this.handleSearch();
@@ -689,18 +733,30 @@ export default { @@ -689,18 +733,30 @@ export default {
689 delete postData[formPrimaryKey || primaryKey]; 733 delete postData[formPrimaryKey || primaryKey];
690 _$http.post(`${this.option.url.trim('/')}/${this.option.newMethod || 'add'}`, postData) 734 _$http.post(`${this.option.url.trim('/')}/${this.option.newMethod || 'add'}`, postData)
691 .then(response => { 735 .then(response => {
692 - const { code } = response || {};  
693 - if (`${code}` === '0') {  
694 - this.hideDialog();  
695 - this.handleSearch();  
696 - if (this.$message) { this.$message({ message: this.i18n('eagle.scheme.submitSuccess') || '提交成功', type: 'success' }); } 736 + // 预留 支持全局配置filter
  737 + const responseFilter = this.option.newFilter || this.newFilter || this.option.successFilter || this.successFilter;
  738 + if (responseFilter) {
  739 + responseFilter(response).then((success) => {
  740 + if (success) {
  741 + this.hideDialog();
  742 + this.handleSearch();
  743 + if (this.$message) { this.$message({ message: this.i18n('eagle.scheme.submitSuccess') || '提交成功', type: 'success' }); }
  744 + }
  745 + });
  746 + } else {
  747 + const { code } = response || {};
  748 + if (`${code}` === '0') {
  749 + this.hideDialog();
  750 + this.handleSearch();
  751 + if (this.$message) { this.$message({ message: this.i18n('eagle.scheme.submitSuccess') || '提交成功', type: 'success' }); }
  752 + }
697 } 753 }
698 }) 754 })
699 .finally(() => { 755 .finally(() => {
700 this.dialogLoading = false; 756 this.dialogLoading = false;
701 }); 757 });
702 } else { 758 } else {
703 - this.tableDataStatic.unshift({ ...param, id: param.id || getUUID() }); 759 + this.tableDataStatic.unshift({ ...param, $pk: param.id || getUUID() });
704 this.totalCount = this.tableDataStatic.length; 760 this.totalCount = this.tableDataStatic.length;
705 this.hideDialog(); 761 this.hideDialog();
706 this.handleSearch(); 762 this.handleSearch();
@@ -726,18 +782,29 @@ export default { @@ -726,18 +782,29 @@ export default {
726 this.dialogLoading = true; 782 this.dialogLoading = true;
727 _$http.post(`${this.option.url.trim('/')}/${this.option.editMethod || 'update'}`, param) 783 _$http.post(`${this.option.url.trim('/')}/${this.option.editMethod || 'update'}`, param)
728 .then(response => { 784 .then(response => {
729 - const { code } = response || {};  
730 - if (`${code}` === '0') {  
731 - this.hideDialog();  
732 - this.handleSearch();  
733 - if (this.$message) { this.$message({ message: this.i18n('eagle.scheme.editSuccess') || '编辑成功', type: 'success' }); } 785 + const responseFilter = this.option.editFilter || this.editFilter || this.option.successFilter || this.successFilter;
  786 + if (responseFilter) {
  787 + responseFilter(response).then((success) => {
  788 + if (success) {
  789 + this.hideDialog();
  790 + this.handleSearch();
  791 + if (this.$message) { this.$message({ message: this.i18n('eagle.scheme.submitSuccess') || '编辑成功', type: 'success' }); }
  792 + }
  793 + });
  794 + } else {
  795 + const { code } = response || {};
  796 + if (`${code}` === '0') {
  797 + this.hideDialog();
  798 + this.handleSearch();
  799 + if (this.$message) { this.$message({ message: this.i18n('eagle.scheme.editSuccess') || '编辑成功', type: 'success' }); }
  800 + }
734 } 801 }
735 }) 802 })
736 .finally(() => { 803 .finally(() => {
737 this.dialogLoading = false; 804 this.dialogLoading = false;
738 }); 805 });
739 } else { 806 } else {
740 - this.$set(this.tableDataStatic, this.tableDataStatic.findIndex(item => item.id === param.id), { ...param, id: param.id || getUUID() }); 807 + this.$set(this.tableDataStatic, this.tableDataStatic.findIndex(item => item['$pk'] === param['$pk']), { ...param, $pk: param['$pk'] || getUUID() });
741 this.hideDialog(); 808 this.hideDialog();
742 this.handleSearch(); 809 this.handleSearch();
743 } 810 }
packages/search/index.vue
@@ -27,7 +27,7 @@ @@ -27,7 +27,7 @@
27 <el-button-group v-else> 27 <el-button-group v-else>
28 <el-button size="small" type="primary" :loading="searching" @click="handleSearch" icon="el-icon-search">{{ i18n('eagle.search.search') || '查询' }}</el-button> 28 <el-button size="small" type="primary" :loading="searching" @click="handleSearch" icon="el-icon-search">{{ i18n('eagle.search.search') || '查询' }}</el-button>
29 <el-button size="small" @click="handleReset">{{ i18n('eagle.search.reset') || '重置' }}</el-button> 29 <el-button size="small" @click="handleReset">{{ i18n('eagle.search.reset') || '重置' }}</el-button>
30 - <el-button size="small" v-if="list.length > visibleColNum" :icon="collapse ? 'ios-arrow-down' : 'ios-arrow-up'" @click="handleCollapse"> 30 + <el-button size="small" v-if="list.length > visibleColNum - 1" :icon="collapse ? 'ios-arrow-down' : 'ios-arrow-up'" @click="handleCollapse">
31 {{ collapse ? i18n('eagle.search.unfold') || '展开' : i18n('eagle.search.fold') || '收起' }} 31 {{ collapse ? i18n('eagle.search.unfold') || '展开' : i18n('eagle.search.fold') || '收起' }}
32 </el-button> 32 </el-button>
33 </el-button-group> 33 </el-button-group>