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

wuzhiguo pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/bigtop-manager.git


The following commit(s) were added to refs/heads/main by this push:
     new 4a4d8a15 BIGTOP-4380: Display key filename after uploaded when adding 
host (#187)
4a4d8a15 is described below

commit 4a4d8a154d32e1ec6290dd05dd362a9dddc9b26c
Author: Fdefined <[email protected]>
AuthorDate: Mon Mar 3 00:14:45 2025 +0800

    BIGTOP-4380: Display key filename after uploaded when adding host (#187)
---
 bigtop-manager-ui/src/layouts/index.vue            |  2 +-
 bigtop-manager-ui/src/layouts/sider.vue            | 21 ++++++++---
 .../src/pages/cluster-manage/hosts/create.vue      | 43 ++++++----------------
 3 files changed, 29 insertions(+), 37 deletions(-)

diff --git a/bigtop-manager-ui/src/layouts/index.vue 
b/bigtop-manager-ui/src/layouts/index.vue
index c48ab595..f36aca0a 100644
--- a/bigtop-manager-ui/src/layouts/index.vue
+++ b/bigtop-manager-ui/src/layouts/index.vue
@@ -55,7 +55,7 @@
         @on-sider-click="menuStore.onSiderClick"
       />
       <a-layout class="layout-inner">
-        <router-view />
+        <router-view :key="$route.fullPath" />
         <layout-footer />
       </a-layout>
     </a-layout>
diff --git a/bigtop-manager-ui/src/layouts/sider.vue 
b/bigtop-manager-ui/src/layouts/sider.vue
index bdb988b0..ba88658d 100644
--- a/bigtop-manager-ui/src/layouts/sider.vue
+++ b/bigtop-manager-ui/src/layouts/sider.vue
@@ -18,7 +18,7 @@
 -->
 
 <script setup lang="ts">
-  import { toRefs, ref } from 'vue'
+  import { toRefs, ref, watch } from 'vue'
   import { useRouter } from 'vue-router'
   import { RouteExceptions } from '@/enums'
   import { useMenuStore } from '@/store/menu'
@@ -31,13 +31,13 @@
   }
 
   const props = withDefaults(defineProps<Props>(), {
-    siderMenuSelectedKey: '',
-    siderMenus: () => []
+    siderMenuSelectedKey: ''
   })
 
-  const { siderMenuSelectedKey, siderMenus } = toRefs(props)
+  const { siderMenuSelectedKey } = toRefs(props)
   const router = useRouter()
   const menuStore = useMenuStore()
+  const menus = ref<MenuItem[]>([])
   const emits = defineEmits(['onSiderClick'])
   const clusterStatus = ref<Record<ClusterStatusType, string>>({
     1: 'success',
@@ -45,6 +45,17 @@
     3: 'warning'
   })
 
+  watch(
+    () => props.siderMenus,
+    (val) => {
+      menus.value = []
+      menus.value = val
+    },
+    {
+      deep: true
+    }
+  )
+
   const toggleActivatedIcon = (menuItem: MenuItem) => {
     const { key, icon } = menuItem
     if (menuStore.isDynamicRouteMatched) {
@@ -66,7 +77,7 @@
 <template>
   <a-layout-sider class="sider">
     <a-menu :selected-keys="[siderMenuSelectedKey]" mode="inline" 
@select="onSiderClick">
-      <template v-for="menuItem in siderMenus" :key="menuItem.key">
+      <template v-for="menuItem in menus" :key="menuItem.key">
         <a-sub-menu
           v-if="menuItem.children && menuItem.name === 
RouteExceptions.SPECIAL_ROUTE_NAME"
           :key="menuItem.key"
diff --git a/bigtop-manager-ui/src/pages/cluster-manage/hosts/create.vue 
b/bigtop-manager-ui/src/pages/cluster-manage/hosts/create.vue
index 8a946e3b..5354a8ae 100644
--- a/bigtop-manager-ui/src/pages/cluster-manage/hosts/create.vue
+++ b/bigtop-manager-ui/src/pages/cluster-manage/hosts/create.vue
@@ -49,6 +49,7 @@
   const hiddenItems = ref<string[]>([])
   const autoFormRef = ref<Comp.AutoFormInstance | null>(null)
   const formValue = ref<HostReq & { hostname?: string }>({})
+  const fileName = ref('')
   const { locale } = storeToRefs(localeStore)
   const isEdit = computed(() => mode.value === 'EDIT')
 
@@ -163,7 +164,7 @@
       }
     },
     {
-      type: 'input',
+      type: 'inputPassword',
       field: 'sshKeyPassword',
       formItemProps: {
         name: 'sshKeyPassword',
@@ -174,7 +175,7 @@
       }
     },
     {
-      type: 'textarea',
+      type: 'inputPassword',
       field: 'sshKeyPasswordAgain',
       formItemProps: {
         name: 'sshKeyPasswordAgain',
@@ -428,6 +429,7 @@
       authType: '1',
       inputType: '1'
     }
+    fileName.value = ''
     open.value = false
   }
 
@@ -452,16 +454,16 @@
       formData.append('file', file)
       const data = await uploadFile(formData)
       formValue.value!.sshKeyFilename = data
+      fileName.value = file.name
       onSuccess(data, file)
       message.success(t('common.upload_success'))
     } catch (error) {
       onError(error)
       message.error(t('common.upload_failed'))
+      fileName.value = ''
     }
   }
 
-  const fileList = ref()
-
   defineExpose({
     handleOpen
   })
@@ -492,7 +494,7 @@
         <template #sshKeyFilenameSlot="{ item }">
           <a-form-item v-bind="item.formItemProps">
             <a-upload
-              :file-list="fileList"
+              accept="text/plain"
               :before-upload="beforeUpload"
               :custom-request="customRequest"
               :show-upload-list="false"
@@ -502,34 +504,9 @@
                 {{ $t('common.upload_file') }}
               </a-button>
             </a-upload>
+            <span class="filename">{{ fileName }}</span>
           </a-form-item>
         </template>
-        <!-- <template #agentDirSlot="{ item, state }">
-          <a-form-item>
-            <template #label>
-              <div class="question">
-                <span>
-                  {{ item.formItemProps?.label }}
-                </span>
-                <svg-icon style="padding: 1px 0 0 0" name="question" />
-              </div>
-            </template>
-            <a-input v-bind="item.controlProps" 
v-model:value="state[item.field]" />
-          </a-form-item>
-        </template> -->
-        <!-- <template #grpcPortSlot="{ item, state }">
-          <a-form-item>
-            <template #label>
-              <div class="question">
-                <span>
-                  {{ item.formItemProps?.label }}
-                </span>
-                <svg-icon style="padding: 1px 0 0 0" name="question" />
-              </div>
-            </template>
-            <a-input v-bind="item.controlProps" 
v-model:value="state[item.field]" />
-          </a-form-item>
-        </template> -->
       </auto-form>
       <template #footer>
         <footer>
@@ -551,6 +528,10 @@
   .question {
     cursor: pointer;
   }
+  .filename {
+    color: $color-primary;
+    padding-inline: $space-sm;
+  }
   footer {
     width: 100%;
     @include flexbox($justify: flex-end);

Reply via email to