This is an automated email from the ASF dual-hosted git repository.

liyang pushed a commit to branch kylin5
in repository https://gitbox.apache.org/repos/asf/kylin.git


The following commit(s) were added to refs/heads/kylin5 by this push:
     new 458bddf09f KYLIN-5826,fix table index select all issue and fix load 
user or usergroup list filter issue
458bddf09f is described below

commit 458bddf09f85989bcac1874d3beea6d3791d3129
Author: huangchunyan <qingyanxiaon...@163.com>
AuthorDate: Sat Apr 6 15:07:20 2024 +0800

    KYLIN-5826,fix table index select all issue and fix load user or usergroup 
list filter issue
---
 kystudio/src/components/admin/Group/index.vue      |   6 +-
 kystudio/src/components/admin/User/index.vue       |  10 +-
 .../common/CustomTransferData/TransferData.vue     | 335 +++++++++++----------
 3 files changed, 177 insertions(+), 174 deletions(-)

diff --git a/kystudio/src/components/admin/Group/index.vue 
b/kystudio/src/components/admin/Group/index.vue
index 36cc253bf3..72b49f8d9e 100644
--- a/kystudio/src/components/admin/Group/index.vue
+++ b/kystudio/src/components/admin/Group/index.vue
@@ -135,7 +135,7 @@ export default class SecurityGroup extends Vue {
   inputFilter (value) {
     this.pagination.page_offset = 0
     this.filterName = value
-    this.loadGroupUsers(value)
+    this.loadGroupUsers()
   }
 
   get emptyText () {
@@ -163,11 +163,11 @@ export default class SecurityGroup extends Vue {
     }
   }
 
-  loadGroupUsers (filterGroupName) {
+  loadGroupUsers () {
     this.isLoadingUserGroups = true
     this.loadGroupUsersList({
       ...this.pagination,
-      user_group_name: filterGroupName
+      user_group_name: this.filterName
     }).then(() => {
       this.isLoadingUserGroups = false
     }, (res) => {
diff --git a/kystudio/src/components/admin/User/index.vue 
b/kystudio/src/components/admin/User/index.vue
index eb323de881..83a89cf888 100644
--- a/kystudio/src/components/admin/User/index.vue
+++ b/kystudio/src/components/admin/User/index.vue
@@ -211,7 +211,7 @@ export default class SecurityUser extends Vue {
   inputFilter (value) {
     this.pagination.page_offset = 0
     this.filterName = value
-    this.loadUsers(value)
+    this.loadUsers()
   }
 
   get emptyText () {
@@ -221,16 +221,16 @@ export default class SecurityUser extends Vue {
   handleCurrentChange (pager, pageSize) {
     this.pagination.page_offset = pager
     this.pagination.page_size = pageSize
-    this.loadUsers(this.filterName)
+    this.loadUsers()
   }
 
-  async loadUsers (name) {
+  async loadUsers () {
     this.isLoadingUsers = true
     try {
       const parameter = {
         ...this.pagination,
         // project: this.currentSelectedProject, // 处理资源组时,发现这个接口不用传 project 参数
-        name: name || '',
+        name: this.filterName,
         group_uuid: this.currentGroup && this.currentGroup.uuid
       }
       const res = !this.currentGroup
@@ -254,7 +254,7 @@ export default class SecurityUser extends Vue {
   async editUser (editType, userDetail) {
     if (!this.isTestingSecurityProfile) return
     const isSubmit = await this.callUserEditModal({ editType, userDetail })
-    isSubmit && this.loadUsers(this.filterName)
+    isSubmit && this.loadUsers()
   }
 
   async editUserDataPermission (row) {
diff --git a/kystudio/src/components/common/CustomTransferData/TransferData.vue 
b/kystudio/src/components/common/CustomTransferData/TransferData.vue
index 848658f500..2305331ba8 100644
--- a/kystudio/src/components/common/CustomTransferData/TransferData.vue
+++ b/kystudio/src/components/common/CustomTransferData/TransferData.vue
@@ -1,186 +1,186 @@
 <template>
-    <div class="sec-index-container">
-      <el-alert v-for="(it, index) in alertItems" :key="index" 
:title="it.text" :type="it.type" show-icon class="ksd-mb-8" 
:closable="false"></el-alert>
-      <div class="transfer-container">
-        <div class="left_layout" :style="leftStyle">
-          <div class="search_layout">
-            <el-input size="small" 
:placeholder="$t('kylinLang.common.search')" v-model.trim="searchVar" 
prefix-icon="el-ksd-n-icon-search-outlined"></el-input>
-          </div>
-          <div class="sec-index-content">
-            <div class="dropdowns">
-              <template v-if="filterModelColumns.length">
-                <el-checkbox class="select-all" v-if="isAllSelect"  
:value="isSelectAll" :indeterminate="filterTypeOptionSelectedColumns.length !== 
0 && filterModelColumns.length > filterTypeOptionSelectedColumns.length" 
@change="selectAll">
-                  <span>{{$t('kylinLang.common.selectAll')}}</span>
-                </el-checkbox>
-                <span v-if="searchVar" class="disable-block">
-                  <el-tooltip placement="top" class="sort-colum-dropdown" 
:content="$t('disableSortFilterTips')">
-                    <el-tag is-light :type="!columnSort ? 'info' : ''"><i 
class="el-ksd-n-icon-table-rank-filled 
ksd-mr-2"></i><span>{{$t('column')}}{{columnSort ? `: ${$t(columnSort)}` : 
''}}</span></el-tag>
-                  </el-tooltip>
-                  <el-tooltip placement="top" class="column-type-dropdown" 
:content="$t('disableSortFilterTips')">
-                    <el-tag is-light :type="!typeOptions.length ? 'info' : 
''"><i class="el-ksd-n-icon-filter-outlined 
ksd-mr-2"></i><span>{{$t('type')}}{{typeOptions.length ? `: 
${typeOptions.length}` : ''}}</span></el-tag>
-                  </el-tooltip>
-                </span>
-                <span v-else>
-                  <el-dropdown class="sort-colum-dropdown" 
placement="bottom-start" @command="handleSortCommand" trigger="click">
-                    <el-tag is-light :type="!columnSort ? 'info' : ''"><i 
class="el-ksd-n-icon-table-rank-filled 
ksd-mr-2"></i><span>{{$t('column')}}{{columnSort ? `: ${$t(columnSort)}` : 
''}}</span></el-tag>
-                    <el-dropdown-menu slot="dropdown" :append-to-body="false">
-                      <el-dropdown-item :class="{'is-active': columnSort === 
'ascending'}" command="ascending">{{$t('ascending')}}</el-dropdown-item>
-                      <el-dropdown-item :class="{'is-active': columnSort === 
'descending'}" command="descending">{{$t('descending')}}</el-dropdown-item>
-                    </el-dropdown-menu>
-                  </el-dropdown>
-                  <el-dropdown class="column-type-dropdown" 
placement="bottom-start" :hide-on-click="false" trigger="click">
-                    <el-tag is-light :type="!typeOptions.length ? 'info' : 
''"><i class="el-ksd-n-icon-filter-outlined 
ksd-mr-2"></i><span>{{$t('type')}}{{typeOptions.length ? `: 
${typeOptions.length}` : ''}}</span></el-tag>
-                    <el-dropdown-menu slot="dropdown" :append-to-body="false">
-                      <el-checkbox-group v-model="typeOptions">
-                        <el-dropdown-item v-for="(item, index) in columnTypes" 
:key="index"><el-checkbox :label="item" 
size="small">{{item}}</el-checkbox></el-dropdown-item>
-                      </el-checkbox-group>
-                    </el-dropdown-menu>
-                  </el-dropdown>
-                </span>
-                <template v-if="isTextRecognition">
-                  <span class="dive ksd-ml-4 ksd-mr-6">|</span>
-                  <el-tooltip placement="top" 
:content="$t('textRecognitionTips')">
-                    <el-button size="small" nobg-text 
icon="el-ksd-n-icon-view-outlined" @click="handleTableIndexRecognize">{{ 
$t('textRecognition') }}</el-button>
-                  </el-tooltip>
-                </template>
-              </template>
-              
-            </div>
-            <div class="result-content" :class="{'is-no-footer': 
!hasLeftFooter}">
-              <div v-for="item in pagedModelColumns" :key="item.id" 
class="result-content_item">
-                <div class="checkbox-list">
-                  <el-checkbox v-model="item.selected" 
:disabled="item.disabled" @change="handleIndexColumnChange(item)">
-                    <el-tooltip :content="$t('excludedTableIconTip')" 
effect="dark" placement="top"><i class="excluded_table-icon 
el-icon-ksd-exclude" v-if="item.excluded"></i></el-tooltip>
-                    <span :style="{'max-width': dragData.width - 140 + 'px', 
width: 'auto'}" :title="item.label" class="ksd-nobr-text">{{item.label}}</span>
-                  </el-checkbox>
-                </div>
-                <div class="item-type">{{item.type}}</div>
-                <div class="hover-icons">
-                  <el-tooltip placement="top">
-                    <div slot="content" style="word-break: break-all">
-                      <div v-if="item.name">{{ 
$t('kylinLang.dataSource.dimensionName') }}: {{ item.name }}</div>
-                      <div>{{ $t('kylinLang.model.columnName') }}: {{ 
item.label }}</div>
-                      <div v-if="item.cardinality">{{ $t('cardinality') }}: {{ 
item.cardinality }}</div>
-                      <div v-if="item.comment">{{ 
$t('kylinLang.dataSource.comment') }}: {{ item.comment }}</div>
-                    </div>
-                    <i class="el-ksd-n-icon-info-circle-outlined"></i>
-                  </el-tooltip>
-                </div>
-              </div>
-              <!-- <div class="load-more-layout" v-if="showLoadMore('left')" 
@click="addPagination('left')">{{$t('kylinLang.common.loadMore')}}</div> -->
-            </div>
-            <empty-data size="small" 
:image="require('../../../assets/img/empty/empty_state_not_found.svg')" 
:content="$t('kylinLang.common.noData')" v-if="!pagedModelColumns.length" />
-            <div class="transfer-footer" v-if="hasLeftFooter">
-              <slot name="left-footer"></slot>
-            </div>
-          </div>
-        </div>
-        <div class="drag-line" unselectable="on" 
v-drag:change.width="dragData">
-          <div class="ky-drag-layout-line"></div>
+  <div class="sec-index-container">
+    <el-alert v-for="(it, index) in alertItems" :key="index" :title="it.text" 
:type="it.type" show-icon class="ksd-mb-8" :closable="false"></el-alert>
+    <div class="transfer-container">
+      <div class="left_layout" :style="leftStyle">
+        <div class="search_layout">
+          <el-input size="small" :placeholder="$t('kylinLang.common.search')" 
v-model.trim="searchVar" prefix-icon="el-ksd-n-icon-search-outlined"></el-input>
         </div>
-        <div class="right_layout">
-          <div class="title-layout">
-            <p class="title">{{rightTitle}}</p>
-            <slot name="help"></slot>
-          </div>
-          <div class="search_layout" v-if="showRightSearch">
-            <el-input size="small" 
:placeholder="$t('kylinLang.common.search')" v-model.trim="searchUsedContent" 
prefix-icon="el-ksd-n-icon-search-outlined"></el-input>
-          </div>
-          <div v-show="searchVar&&pagedSelectedColumns.length" 
class="search-num">{{ filterSelectedColumns.length }}{{ $t('searchResultes') 
}}</div>
-          <div :class="['selected-results', {'over-limit': showOverLimit && 
selectedColumns.length > limitLen}]">
-            <div class="dropdowns" v-show="pagedSelectedColumns.length && 
isSortAble">
-              <span v-if="searchVar || !selectedData.length || 
!isAnyCardinalityCol" class="disable-block">
-                <el-tooltip placement="top" :disabled="!selectedData.length" 
class="sort-colum-dropdown">
-                  <div slot="content" v-if="searchVar">{{ 
$t('disableSortFilterTips') }}</div>
-                  <div slot="content" v-else>{{ $t('disabledSortTips') }} <a 
class="ky-a-like" @click="goToDataSource">{{ $t('goToDataSource') }}</a></div>
-                  <el-tag is-light :type="!selectedColumnSortByCardinality ? 
'info' : ''">
-                    <i class="el-ksd-n-icon-table-rank-filled 
ksd-mr-2"></i><span>{{$t('cardinality')}}{{selectedColumnSortByCardinality ? `: 
${$t(selectedColumnSortByCardinality)}` : ''}}</span>
-                    <el-tooltip placement="top" v-if="isPartCardinalityCol" 
:content="$t('isPartCardinalityCol')">
-                      <i class="el-ksd-n-icon-warning-filled ksd-fs-12"></i>
-                    </el-tooltip>
-                  </el-tag>
+        <div class="sec-index-content">
+          <div class="dropdowns">
+            <template v-if="filterModelColumns.length">
+              <el-checkbox class="select-all" v-if="isAllSelect"  
:value="isSelectAll" :indeterminate="filterTypeOptionSelectedColumns.length !== 
0 && filterModelColumns.length > filterTypeOptionSelectedColumns.length" 
@change="selectAll">
+                <span>{{$t('kylinLang.common.selectAll')}}</span>
+              </el-checkbox>
+              <span v-if="searchVar" class="disable-block">
+                <el-tooltip placement="top" class="sort-colum-dropdown" 
:content="$t('disableSortFilterTips')">
+                  <el-tag is-light :type="!columnSort ? 'info' : ''"><i 
class="el-ksd-n-icon-table-rank-filled 
ksd-mr-2"></i><span>{{$t('column')}}{{columnSort ? `: ${$t(columnSort)}` : 
''}}</span></el-tag>
+                </el-tooltip>
+                <el-tooltip placement="top" class="column-type-dropdown" 
:content="$t('disableSortFilterTips')">
+                  <el-tag is-light :type="!typeOptions.length ? 'info' : 
''"><i class="el-ksd-n-icon-filter-outlined 
ksd-mr-2"></i><span>{{$t('type')}}{{typeOptions.length ? `: 
${typeOptions.length}` : ''}}</span></el-tag>
                 </el-tooltip>
               </span>
               <span v-else>
-                <el-dropdown class="sort-colum-dropdown" 
placement="bottom-start" @command="handleSortCardinality" trigger="click">
-                  <el-tag is-light :type="!selectedColumnSortByCardinality ? 
'info' : ''">
-                    <i class="el-ksd-n-icon-table-rank-filled 
ksd-mr-2"></i><span>{{$t('cardinality')}}{{selectedColumnSortByCardinality ? `: 
${$t(selectedColumnSortByCardinality)}` : ''}}</span>
-                    <el-tooltip placement="top" v-if="isPartCardinalityCol" 
:content="$t('isPartCardinalityCol')">
-                      <i class="el-ksd-n-icon-warning-filled ksd-fs-12"></i>
-                    </el-tooltip>
-                  </el-tag>
+                <el-dropdown class="sort-colum-dropdown" 
placement="bottom-start" @command="handleSortCommand" trigger="click">
+                  <el-tag is-light :type="!columnSort ? 'info' : ''"><i 
class="el-ksd-n-icon-table-rank-filled 
ksd-mr-2"></i><span>{{$t('column')}}{{columnSort ? `: ${$t(columnSort)}` : 
''}}</span></el-tag>
                   <el-dropdown-menu slot="dropdown" :append-to-body="false">
-                    <el-dropdown-item :class="{'is-active': 
selectedColumnSortByCardinality === 'ascending'}" 
command="ascending">{{$t('ascending')}}</el-dropdown-item>
-                    <el-dropdown-item :class="{'is-active': 
selectedColumnSortByCardinality === 'descending'}" 
command="descending">{{$t('descending')}}</el-dropdown-item>
+                    <el-dropdown-item :class="{'is-active': columnSort === 
'ascending'}" command="ascending">{{$t('ascending')}}</el-dropdown-item>
+                    <el-dropdown-item :class="{'is-active': columnSort === 
'descending'}" command="descending">{{$t('descending')}}</el-dropdown-item>
                   </el-dropdown-menu>
                 </el-dropdown>
-              </span>
-              <span v-if="searchVar || !selectedData.length" 
class="disable-block">
-                <el-tooltip placement="top" class="sort-colum-dropdown" 
:disabled="!selectedData.length" :content="$t('disableSortFilterTips')">
-                  <el-tag is-light :type="!selectedColumnSort ? 'info' : 
''"><i class="el-ksd-n-icon-table-rank-filled 
ksd-mr-2"></i><span>{{$t('column')}}{{selectedColumnSort ? `: 
${$t(selectedColumnSort)}` : ''}}</span></el-tag>
-                </el-tooltip>
-              </span>
-              <span v-else>
-                <el-dropdown class="sort-colum-dropdown" 
placement="bottom-start"  @command="handleSortSelectedCommand" trigger="click">
-                  <el-tag is-light :type="!selectedColumnSort ? 'info' : 
''"><i class="el-ksd-n-icon-table-rank-filled 
ksd-mr-2"></i><span>{{$t('column')}}{{selectedColumnSort ? `: 
${$t(selectedColumnSort)}` : ''}}</span></el-tag>
+                <el-dropdown class="column-type-dropdown" 
placement="bottom-start" :hide-on-click="false" trigger="click">
+                  <el-tag is-light :type="!typeOptions.length ? 'info' : 
''"><i class="el-ksd-n-icon-filter-outlined 
ksd-mr-2"></i><span>{{$t('type')}}{{typeOptions.length ? `: 
${typeOptions.length}` : ''}}</span></el-tag>
                   <el-dropdown-menu slot="dropdown" :append-to-body="false">
-                    <el-dropdown-item :class="{'is-active': selectedColumnSort 
=== 'ascending'}" command="ascending">{{$t('ascending')}}</el-dropdown-item>
-                    <el-dropdown-item :class="{'is-active': selectedColumnSort 
=== 'descending'}" command="descending">{{$t('descending')}}</el-dropdown-item>
+                    <el-checkbox-group v-model="typeOptions">
+                      <el-dropdown-item v-for="(item, index) in columnTypes" 
:key="index"><el-checkbox :label="item" 
size="small">{{item}}</el-checkbox></el-dropdown-item>
+                    </el-checkbox-group>
                   </el-dropdown-menu>
                 </el-dropdown>
               </span>
+              <template v-if="isTextRecognition">
+                <span class="dive ksd-ml-4 ksd-mr-6">|</span>
+                <el-tooltip placement="top" 
:content="$t('textRecognitionTips')">
+                  <el-button size="small" nobg-text 
icon="el-ksd-n-icon-view-outlined" @click="handleTableIndexRecognize">{{ 
$t('textRecognition') }}</el-button>
+                </el-tooltip>
+              </template>
+            </template>
+            
+          </div>
+          <div class="result-content" :class="{'is-no-footer': 
!hasLeftFooter}">
+            <div v-for="item in pagedModelColumns" :key="item.id" 
class="result-content_item">
+              <div class="checkbox-list">
+                <el-checkbox v-model="item.selected" :disabled="item.disabled" 
@change="handleIndexColumnChange(item)">
+                  <el-tooltip :content="$t('excludedTableIconTip')" 
effect="dark" placement="top"><i class="excluded_table-icon 
el-icon-ksd-exclude" v-if="item.excluded"></i></el-tooltip>
+                  <span :style="{'max-width': dragData.width - 140 + 'px', 
width: 'auto'}" :title="item.label" class="ksd-nobr-text">{{item.label}}</span>
+                </el-checkbox>
+              </div>
+              <div class="item-type">{{item.type}}</div>
+              <div class="hover-icons">
+                <el-tooltip placement="top">
+                  <div slot="content" style="word-break: break-all">
+                    <div v-if="item.name">{{ 
$t('kylinLang.dataSource.dimensionName') }}: {{ item.name }}</div>
+                    <div>{{ $t('kylinLang.model.columnName') }}: {{ item.label 
}}</div>
+                    <div v-if="item.cardinality">{{ $t('cardinality') }}: {{ 
item.cardinality }}</div>
+                    <div v-if="item.comment">{{ 
$t('kylinLang.dataSource.comment') }}: {{ item.comment }}</div>
+                  </div>
+                  <i class="el-ksd-n-icon-info-circle-outlined"></i>
+                </el-tooltip>
+              </div>
             </div>
-            <div class="selected-results_layout" :class="{'is-no-footer': 
!(showOverLimit && selectedColumns.length > limitLen) && !(draggable && 
searchVar), 'is-search-mode': searchVar}">
-              <div :class="['selected-results_item', {'drag-item': 
draggable&&!searchVar, 'is-shared-col': it.isShared}]" v-for="it in 
pagedSelectedColumns" :key="it.key" :id="it.key">
-                <p class="label">
-                  <span class="num" :class="{'is-alive': isShowNum, 
'is-disable-drag': isShowNum&&draggable&&searchVar}" :style="{'scale': 
((getIndex(it.key) + 1) + '').length > 2 ? 1 - 0.2 * (((getIndex(it.key) + 1) + 
'').length - 2) : 1}" v-if="isShowNum">{{ getIndex(it.key) + 1 }}</span>
-                  <el-tooltip placement="top" :content="$t('dragToMove')" 
v-show="draggable&&!searchVar">
-                    <i class="el-ksd-n-icon-grab-dots-outlined" 
:class="{'is-alive': draggable&&!searchVar}"></i>
-                  </el-tooltip><el-tooltip 
:content="$t('excludedTableIconTip')" effect="dark" placement="top"><i 
class="excluded_table-icon el-icon-ksd-exclude" 
v-if="it.excluded"></i></el-tooltip>
-                  <el-button type="primary" size="mini" class="shardby 
is-shardby" v-if="it.isShared" text 
icon="el-ksd-n-icon-symbol-s-circle-filled"></el-button>
-                  <span class="top-icon ignore-drag" 
v-if="topColAble"><el-button type="primary" size="mini" v-if="getIndex(it.key) 
!== 0" text @click.native="topColumn($event, it.key)" 
icon="el-ksd-n-icon-top-filled"></el-button></span>
-                  <span class="ksd-nobr-text">{{it.label}}</span>
-                </p>
-                <div class="right-actions">
-                  <el-tooltip placement="top" :content="$t('cardinality')">
-                    <span class="cardinality ksd-nobr-text" 
@mouseenter.stop>{{it.cardinality}}</span>
-                  </el-tooltip>
-                </div>
-                <div class="hover-icons ignore-drag">
-                  <el-tooltip placement="top">
-                    <div slot="content" style="word-break: break-all">
-                      <div v-if="it.name">{{ 
$t('kylinLang.dataSource.dimensionName') }}: {{ it.name }}</div>
-                      <div>{{ $t('kylinLang.model.columnName') }}: {{ it.label 
}}</div>
-                      <div v-if="it.cardinality">{{ $t('cardinality') }}: {{ 
it.cardinality }}</div>
-                      <div v-if="it.comment">{{ 
$t('kylinLang.dataSource.comment') }}: {{ it.comment }}</div>
-                    </div>
-                    <i class="el-ksd-n-icon-info-circle-outlined ksd-ml-5"></i>
+            <!-- <div class="load-more-layout" v-if="showLoadMore('left')" 
@click="addPagination('left')">{{$t('kylinLang.common.loadMore')}}</div> -->
+          </div>
+          <empty-data size="small" 
:image="require('../../../assets/img/empty/empty_state_not_found.svg')" 
:content="$t('kylinLang.common.noData')" v-if="!pagedModelColumns.length" />
+          <div class="transfer-footer" v-if="hasLeftFooter">
+            <slot name="left-footer"></slot>
+          </div>
+        </div>
+      </div>
+      <div class="drag-line" unselectable="on" v-drag:change.width="dragData">
+        <div class="ky-drag-layout-line"></div>
+      </div>
+      <div class="right_layout">
+        <div class="title-layout">
+          <p class="title">{{rightTitle}}</p>
+          <slot name="help"></slot>
+        </div>
+        <div class="search_layout" v-if="showRightSearch">
+          <el-input size="small" :placeholder="$t('kylinLang.common.search')" 
v-model.trim="searchUsedContent" 
prefix-icon="el-ksd-n-icon-search-outlined"></el-input>
+        </div>
+        <div v-show="searchVar&&pagedSelectedColumns.length" 
class="search-num">{{ filterSelectedColumns.length }}{{ $t('searchResultes') 
}}</div>
+        <div :class="['selected-results', {'over-limit': showOverLimit && 
selectedColumns.length > limitLen}]">
+          <div class="dropdowns" v-show="pagedSelectedColumns.length && 
isSortAble">
+            <span v-if="searchVar || !selectedData.length || 
!isAnyCardinalityCol" class="disable-block">
+              <el-tooltip placement="top" :disabled="!selectedData.length" 
class="sort-colum-dropdown">
+                <div slot="content" v-if="searchVar">{{ 
$t('disableSortFilterTips') }}</div>
+                <div slot="content" v-else>{{ $t('disabledSortTips') }} <a 
class="ky-a-like" @click="goToDataSource">{{ $t('goToDataSource') }}</a></div>
+                <el-tag is-light :type="!selectedColumnSortByCardinality ? 
'info' : ''">
+                  <i class="el-ksd-n-icon-table-rank-filled 
ksd-mr-2"></i><span>{{$t('cardinality')}}{{selectedColumnSortByCardinality ? `: 
${$t(selectedColumnSortByCardinality)}` : ''}}</span>
+                  <el-tooltip placement="top" v-if="isPartCardinalityCol" 
:content="$t('isPartCardinalityCol')">
+                    <i class="el-ksd-n-icon-warning-filled ksd-fs-12"></i>
                   </el-tooltip>
-                  <el-tooltip placement="top" v-if="!it.isShared&sharedByAble" 
:content="shardByIndex !== -1 ? $t('replaceShardBy') : $t('setShardBy')">
-                    <el-button type="primary" size="mini" class="shardby"  
@click.stop="setShardBy(it.key)" text 
icon="el-ksd-n-icon-symbol-s-circle-filled"></el-button>
-                  </el-tooltip><el-tooltip placement="top" 
v-if="it.isShared&sharedByAble"  :content="$t('removeShardBy')">
-                    <el-button type="primary" size="mini" class="shardby 
is-shardby" text @click.stop="unSetSharyBy(it.key)" 
icon="el-ksd-n-icon-symbol-s-circle-filled"></el-button>
-                  </el-tooltip><el-tooltip placement="top" 
:content="$t('remove')">
-                    <i class="el-ksd-n-icon-close-outlined close-btn" 
@click.stop="removeColumn(it)"></i>
+                </el-tag>
+              </el-tooltip>
+            </span>
+            <span v-else>
+              <el-dropdown class="sort-colum-dropdown" 
placement="bottom-start" @command="handleSortCardinality" trigger="click">
+                <el-tag is-light :type="!selectedColumnSortByCardinality ? 
'info' : ''">
+                  <i class="el-ksd-n-icon-table-rank-filled 
ksd-mr-2"></i><span>{{$t('cardinality')}}{{selectedColumnSortByCardinality ? `: 
${$t(selectedColumnSortByCardinality)}` : ''}}</span>
+                  <el-tooltip placement="top" v-if="isPartCardinalityCol" 
:content="$t('isPartCardinalityCol')">
+                    <i class="el-ksd-n-icon-warning-filled ksd-fs-12"></i>
                   </el-tooltip>
-                </div>
+                </el-tag>
+                <el-dropdown-menu slot="dropdown" :append-to-body="false">
+                  <el-dropdown-item :class="{'is-active': 
selectedColumnSortByCardinality === 'ascending'}" 
command="ascending">{{$t('ascending')}}</el-dropdown-item>
+                  <el-dropdown-item :class="{'is-active': 
selectedColumnSortByCardinality === 'descending'}" 
command="descending">{{$t('descending')}}</el-dropdown-item>
+                </el-dropdown-menu>
+              </el-dropdown>
+            </span>
+            <span v-if="searchVar || !selectedData.length" 
class="disable-block">
+              <el-tooltip placement="top" class="sort-colum-dropdown" 
:disabled="!selectedData.length" :content="$t('disableSortFilterTips')">
+                <el-tag is-light :type="!selectedColumnSort ? 'info' : ''"><i 
class="el-ksd-n-icon-table-rank-filled 
ksd-mr-2"></i><span>{{$t('column')}}{{selectedColumnSort ? `: 
${$t(selectedColumnSort)}` : ''}}</span></el-tag>
+              </el-tooltip>
+            </span>
+            <span v-else>
+              <el-dropdown class="sort-colum-dropdown" 
placement="bottom-start"  @command="handleSortSelectedCommand" trigger="click">
+                <el-tag is-light :type="!selectedColumnSort ? 'info' : ''"><i 
class="el-ksd-n-icon-table-rank-filled 
ksd-mr-2"></i><span>{{$t('column')}}{{selectedColumnSort ? `: 
${$t(selectedColumnSort)}` : ''}}</span></el-tag>
+                <el-dropdown-menu slot="dropdown" :append-to-body="false">
+                  <el-dropdown-item :class="{'is-active': selectedColumnSort 
=== 'ascending'}" command="ascending">{{$t('ascending')}}</el-dropdown-item>
+                  <el-dropdown-item :class="{'is-active': selectedColumnSort 
=== 'descending'}" command="descending">{{$t('descending')}}</el-dropdown-item>
+                </el-dropdown-menu>
+              </el-dropdown>
+            </span>
+          </div>
+          <div class="selected-results_layout" :class="{'is-no-footer': 
!(showOverLimit && selectedColumns.length > limitLen) && !(draggable && 
searchVar), 'is-search-mode': searchVar}">
+            <div :class="['selected-results_item', {'drag-item': 
draggable&&!searchVar, 'is-shared-col': it.isShared}]" v-for="it in 
pagedSelectedColumns" :key="it.key" :id="it.key">
+              <p class="label">
+                <span class="num" :class="{'is-alive': isShowNum, 
'is-disable-drag': isShowNum&&draggable&&searchVar}" :style="{'scale': 
((getIndex(it.key) + 1) + '').length > 2 ? 1 - 0.2 * (((getIndex(it.key) + 1) + 
'').length - 2) : 1}" v-if="isShowNum">{{ getIndex(it.key) + 1 }}</span>
+                <el-tooltip placement="top" :content="$t('dragToMove')" 
v-show="draggable&&!searchVar">
+                  <i class="el-ksd-n-icon-grab-dots-outlined" 
:class="{'is-alive': draggable&&!searchVar}"></i>
+                </el-tooltip><el-tooltip :content="$t('excludedTableIconTip')" 
effect="dark" placement="top"><i class="excluded_table-icon 
el-icon-ksd-exclude" v-if="it.excluded"></i></el-tooltip>
+                <el-button type="primary" size="mini" class="shardby 
is-shardby" v-if="it.isShared" text 
icon="el-ksd-n-icon-symbol-s-circle-filled"></el-button>
+                <span class="top-icon ignore-drag" 
v-if="topColAble"><el-button type="primary" size="mini" v-if="getIndex(it.key) 
!== 0" text @click.native="topColumn($event, it.key)" 
icon="el-ksd-n-icon-top-filled"></el-button></span>
+                <span class="ksd-nobr-text">{{it.label}}</span>
+              </p>
+              <div class="right-actions">
+                <el-tooltip placement="top" :content="$t('cardinality')">
+                  <span class="cardinality ksd-nobr-text" 
@mouseenter.stop>{{it.cardinality}}</span>
+                </el-tooltip>
+              </div>
+              <div class="hover-icons ignore-drag">
+                <el-tooltip placement="top">
+                  <div slot="content" style="word-break: break-all">
+                    <div v-if="it.name">{{ 
$t('kylinLang.dataSource.dimensionName') }}: {{ it.name }}</div>
+                    <div>{{ $t('kylinLang.model.columnName') }}: {{ it.label 
}}</div>
+                    <div v-if="it.cardinality">{{ $t('cardinality') }}: {{ 
it.cardinality }}</div>
+                    <div v-if="it.comment">{{ 
$t('kylinLang.dataSource.comment') }}: {{ it.comment }}</div>
+                  </div>
+                  <i class="el-ksd-n-icon-info-circle-outlined ksd-ml-5"></i>
+                </el-tooltip>
+                <el-tooltip placement="top" v-if="!it.isShared&sharedByAble" 
:content="shardByIndex !== -1 ? $t('replaceShardBy') : $t('setShardBy')">
+                  <el-button type="primary" size="mini" class="shardby"  
@click.stop="setShardBy(it.key)" text 
icon="el-ksd-n-icon-symbol-s-circle-filled"></el-button>
+                </el-tooltip><el-tooltip placement="top" 
v-if="it.isShared&sharedByAble"  :content="$t('removeShardBy')">
+                  <el-button type="primary" size="mini" class="shardby 
is-shardby" text @click.stop="unSetSharyBy(it.key)" 
icon="el-ksd-n-icon-symbol-s-circle-filled"></el-button>
+                </el-tooltip><el-tooltip placement="top" 
:content="$t('remove')">
+                  <i class="el-ksd-n-icon-close-outlined close-btn" 
@click.stop="removeColumn(it)"></i>
+                </el-tooltip>
               </div>
-              <!-- <div class="load-more-layout" v-if="showLoadMore('right')" 
@click="addPagination('right')">{{$t('kylinLang.common.loadMore')}}</div> -->
             </div>
-            <empty-data size="small" 
:image="require('../../../assets/img/empty/empty_state_not_found.svg')" 
:content="searchVar ? $t('kylinLang.common.noData') : rightTitleTip" 
v-if="!pagedSelectedColumns.length" />
+            <!-- <div class="load-more-layout" v-if="showLoadMore('right')" 
@click="addPagination('right')">{{$t('kylinLang.common.loadMore')}}</div> -->
           </div>
-          <div class="over-limit-tips" v-if="showOverLimit && 
selectedColumns.length > limitLen"><el-tooltip placement="top" 
:content="$t('limitTooltip')"><span class="text"><el-icon class="ksd-mr-4" 
name="el-ksd-n-icon-warning-color-filled" 
type="mult"></el-icon>{{$t('overLimitTips')}}</span></el-tooltip><div 
class="line"></div></div>
-          <div class="over-limit-tips" v-if="draggable && searchVar"><span 
class="text"><el-icon class="ksd-mr-4" 
name="el-ksd-n-icon-warning-color-filled" 
type="mult"></el-icon>{{$t('disableDragtips')}}</span><div 
class="line"></div></div>
+          <empty-data size="small" 
:image="require('../../../assets/img/empty/empty_state_not_found.svg')" 
:content="searchVar ? $t('kylinLang.common.noData') : rightTitleTip" 
v-if="!pagedSelectedColumns.length" />
         </div>
-      </div>
-      <div class="search-results_layout">
-        <p class="search-results_item">{{$t('selectedNum', {num: 
selectedData.length})}}</p>
-        <span class="dive ksd-ml-12 ksd-mr-12">|</span>
-        <p class="search-results_item">{{$t('allResultNum', {num: 
unSelectedData.length})}}</p>
+        <div class="over-limit-tips" v-if="showOverLimit && 
selectedColumns.length > limitLen"><el-tooltip placement="top" 
:content="$t('limitTooltip')"><span class="text"><el-icon class="ksd-mr-4" 
name="el-ksd-n-icon-warning-color-filled" 
type="mult"></el-icon>{{$t('overLimitTips')}}</span></el-tooltip><div 
class="line"></div></div>
+        <div class="over-limit-tips" v-if="draggable && searchVar"><span 
class="text"><el-icon class="ksd-mr-4" 
name="el-ksd-n-icon-warning-color-filled" 
type="mult"></el-icon>{{$t('disableDragtips')}}</span><div 
class="line"></div></div>
       </div>
     </div>
-  </template>
-  <script>
+    <div class="search-results_layout">
+      <p class="search-results_item">{{$t('selectedNum', {num: 
selectedData.length})}}</p>
+      <span class="dive ksd-ml-12 ksd-mr-12">|</span>
+      <p class="search-results_item">{{$t('allResultNum', {num: 
unSelectedData.length})}}</p>
+    </div>
+  </div>
+</template>
+<script>
   import { Component, Vue } from 'vue-property-decorator'
   import { objectClone, indexOfObjWithSomeKey, kylinConfirm } from 'util'
   import Sortable, { AutoScroll } from 
'sortablejs/modular/sortable.core.esm.js'
@@ -565,7 +565,7 @@
     selectAll () {
       let selectedList = objectClone(this.selectedColumns)
       // 除去disabled的列,
-      this.isSelectAll = this.filterModelColumns.filter(c => 
!c.disabled).length > this.filterSelectedColumns.length
+      this.isSelectAll = this.filterModelColumns.filter(c => 
!c.disabled).length > this.filterTypeOptionSelectedColumns.length
       this.filterModelColumns.forEach((c) => {
         !c.disabled && (c.selected = this.isSelectAll)
         if (this.isSelectAll) {
@@ -700,8 +700,8 @@
       this.$message({ type: 'success', message: this.$t('unSetShardBySuccess') 
})
     }
   }
-  </script>
-  <style lang="less">
+</script>
+<style lang="less">
   @import '../../../assets/styles/variables.less';
   .sec-index-container {
     width: 100%;
@@ -822,6 +822,9 @@
         height: 28px;
         padding: 8px 0;
         border-top: 1px solid @ke-border-divider-color;
+        .exclude-checkbox {
+          margin: 6px 8px;
+        }
       }
     }
     .right_layout {
@@ -1193,4 +1196,4 @@
       }
     }
   }
-  </style>
+</style>


Reply via email to