This is an automated email from the ASF dual-hosted git repository. xxyu pushed a commit to branch kylin5 in repository https://gitbox.apache.org/repos/asf/kylin.git
commit beec59208ded73c4d346013be09a306a0ee3cfb0 Author: Qian Xia <lauraxiaq...@gmail.com> AuthorDate: Wed Apr 12 17:33:03 2023 +0800 KYLIN-5509 add the select all option when export models --- .../common/ModelsExportModal/ModelsExportModal.vue | 43 +++++++++++----------- .../components/common/ModelsExportModal/locales.js | 3 +- 2 files changed, 24 insertions(+), 22 deletions(-) diff --git a/kystudio/src/components/common/ModelsExportModal/ModelsExportModal.vue b/kystudio/src/components/common/ModelsExportModal/ModelsExportModal.vue index 197fb87320..9c2b38d3c6 100644 --- a/kystudio/src/components/common/ModelsExportModal/ModelsExportModal.vue +++ b/kystudio/src/components/common/ModelsExportModal/ModelsExportModal.vue @@ -23,24 +23,9 @@ </div> </div> <p class="export-tips">{{$t('exportOneModelTip')}}</p> - <!-- <p v-if="choosedModelsArr.length > 0" class="choosed-block">{{choosedModelsArr.join(', ')}}</p> --> - <!-- <el-tree - highlight-current - v-if="type === 'all'" - check-strictly - class="model-tree" - ref="tree" - node-key="id" - v-show="!isTreeEmpty" - :data="models" - :props="{ label: 'name', isLeaf: true }" - :show-checkbox="getIsNodeShowCheckbox" - :render-content="renderContent" - :filter-node-method="handleFilterNode" - @check="handleSelectModels" - /> --> <div class="export-model-list" v-if="type === 'all'"> <el-checkbox-group v-model="selectedModals" @change="handleSelectModels"> + <el-checkbox label="all" :disabled="allModelItems.status === 'BROKEN'" v-if="type === 'all'"><span>{{$t(allModelItems.name)}}</span></el-checkbox> <el-checkbox v-for="item in exportModal.list" :disabled="item.status === 'BROKEN'" :label="item.id" :key="item.id"> <el-tooltip :content="$t('exportBrokenModelCheckboxTip')" effect="dark" placement="top" :disabled="item.status !== 'BROKEN'"> <span>{{item.name}}</span> @@ -82,6 +67,7 @@ import vuex, { actionTypes } from '../../../store' import locales from './locales' import store from './store' import OverflowTextTooltip from '../OverflowTextTooltip/OverflowTextTooltip.vue' +import { objectClone } from '../../../util' vuex.registerModule(['modals', 'ModelsExportModal'], store) @@ -148,15 +134,26 @@ export default class ModelsExportModal extends Vue { newVal && !oldVal && (this.exportModalList = this.models) } + get allModelItems () { + return { + has_multiple_partition_values: this.models.filter(it => it.has_multiple_partition_values).length > 0, + has_override_props: this.models.filter(it => it.has_override_props).length > 0, + has_recommendations: this.models.filter(it => it.has_recommendations).length > 0, + name: 'selectAll', + id: 'all', + status: this.models.filter(it => it.status === 'BROKEN').length === this.models.length ? 'BROKEN' : 'ONLINE' + } + } + getIsNodeShowCheckbox (data) { return data.nodeType === 'model' } changeCheckboxType (type) { if (type === 'ops') { - return this.models.filter(it => this.selectedModals.includes(it.id) && !it.has_override_props).length + return (this.type === 'all' ? [...this.models, this.allModelItems] : this.models).filter(it => this.selectedModals.includes(it.id) && !it.has_override_props).length } else if (type === 'mult-partition') { - return this.models.filter(it => this.selectedModals.includes(it.id) && !it.has_multiple_partition_values).length + return (this.type === 'all' ? [...this.models, this.allModelItems] : this.models).filter(it => this.selectedModals.includes(it.id) && !it.has_multiple_partition_values).length } } @@ -206,8 +203,8 @@ export default class ModelsExportModal extends Vue { } handleSelectModels (data) { - const hasOverrideProps = this.models.filter(it => data.includes(it.id) && it.has_override_props) - const hasMultPartitions = this.models.filter(it => data.includes(it.id) && it.has_multiple_partition_values) + const hasOverrideProps = (this.type === 'all' ? [...this.models, this.allModelItems] : this.models).filter(it => data.includes(it.id) && it.has_override_props) + const hasMultPartitions = (this.type === 'all' ? [...this.models, this.allModelItems] : this.models).filter(it => data.includes(it.id) && it.has_multiple_partition_values) this.setModalForm({ ids: data, exportOverProps: !hasOverrideProps.length && this.form.exportOverProps ? false : this.form.exportOverProps, @@ -251,9 +248,13 @@ export default class ModelsExportModal extends Vue { async handleSubmit () { const { project, form } = this this.isSubmiting = true + const formData = objectClone(form) + if (formData.ids.includes('all')) { + formData.ids = this.models.map(it => it.uuid) + } try { // if (this.type !== 'all') { - await this.downloadModelsMetadata({ project, form }) + await this.downloadModelsMetadata({ project, form: formData }) // } else {} this.handleClose(true) this.$message.success(this.$t('exportSuccess')) diff --git a/kystudio/src/components/common/ModelsExportModal/locales.js b/kystudio/src/components/common/ModelsExportModal/locales.js index fac6fc0ea2..483b3fa9c3 100644 --- a/kystudio/src/components/common/ModelsExportModal/locales.js +++ b/kystudio/src/components/common/ModelsExportModal/locales.js @@ -18,6 +18,7 @@ export default { disabledOverrideTip: 'No overrides for the selected model(s)', exportBrokenModelCheckboxTip: 'Can\'t export model file at the moment as the model is BROKEN', subPartitionValues: 'Sub partition values', - disabledMultPartitionTip: 'No subpartitions included in the selected model(s)' + disabledMultPartitionTip: 'No subpartitions included in the selected model(s)', + selectAll: 'Select All' } }