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 3cb5e8df BIGTOP-4468: Separate repository into service and dependency 
(#245)
3cb5e8df is described below

commit 3cb5e8dfb57d131b03e7b80e08b47ee1963bb7d6
Author: Fdefined <[email protected]>
AuthorDate: Thu Jul 17 21:28:18 2025 +0800

    BIGTOP-4468: Separate repository into service and dependency (#245)
---
 bigtop-manager-ui/src/api/repo/types.ts            |   3 +
 .../create-cluster/components/component-info.vue   |   2 +-
 .../create-cluster/components/host-manage.vue      |   2 +-
 .../create-cluster/components/set-source.vue       | 150 -----------
 .../create-cluster/{create.vue => index.vue}       |   0
 .../create-host/{create.vue => index.vue}          |   0
 .../create-host/install-dependencies.vue           |   2 +-
 .../create-service/{create.vue => index.vue}       |   1 +
 .../src/components/job-modal/index.vue             |   1 +
 bigtop-manager-ui/src/components/job/index.vue     |   1 +
 .../src/components/set-source/index.vue            | 281 +++++++++++++++++++++
 .../src/components/set-source/update-address.vue   |  93 +++++++
 bigtop-manager-ui/src/locales/en_US/common.ts      |   2 -
 .../repo/types.ts => locales/en_US/component.ts}   |  19 +-
 bigtop-manager-ui/src/locales/en_US/index.ts       |   4 +-
 bigtop-manager-ui/src/locales/zh_CN/common.ts      |   2 -
 .../repo/types.ts => locales/zh_CN/component.ts}   |  19 +-
 bigtop-manager-ui/src/locales/zh_CN/index.ts       |   4 +-
 .../src/pages/cluster-manage/cluster/host.vue      |   2 +-
 .../src/pages/cluster-manage/cluster/service.vue   |   2 -
 .../src/pages/cluster-manage/components/index.vue  |   2 +-
 .../src/pages/cluster-manage/hosts/index.vue       |   2 +-
 .../cluster-manage/infrastructures/service.vue     |   1 +
 .../src/router/routes/modules/clusters.ts          |  12 +-
 24 files changed, 413 insertions(+), 194 deletions(-)

diff --git a/bigtop-manager-ui/src/api/repo/types.ts 
b/bigtop-manager-ui/src/api/repo/types.ts
index 597adce4..1c38eb85 100644
--- a/bigtop-manager-ui/src/api/repo/types.ts
+++ b/bigtop-manager-ui/src/api/repo/types.ts
@@ -17,10 +17,13 @@
  * under the License.
  */
 export interface RepoVO {
+  type: number
   arch?: string
   baseUrl?: string
   id?: number
   name?: string
+  pkgName?: string
+  checksum?: string
   [property: string]: any
 }
 
diff --git 
a/bigtop-manager-ui/src/components/create-cluster/components/component-info.vue 
b/bigtop-manager-ui/src/components/create-cluster/components/component-info.vue
index 3e6cd684..725a7457 100644
--- 
a/bigtop-manager-ui/src/components/create-cluster/components/component-info.vue
+++ 
b/bigtop-manager-ui/src/components/create-cluster/components/component-info.vue
@@ -24,7 +24,7 @@
   import { ServiceVO } from '@/api/service/types'
   import { useI18n } from 'vue-i18n'
   import useBaseTable from '@/composables/use-base-table'
-  import SetSource from './set-source.vue'
+  import SetSource from '@/components/set-source/index.vue'
   import type { TableColumnType } from 'ant-design-vue'
 
   const { t } = useI18n()
diff --git 
a/bigtop-manager-ui/src/components/create-cluster/components/host-manage.vue 
b/bigtop-manager-ui/src/components/create-cluster/components/host-manage.vue
index 9886e430..b0c7f277 100644
--- a/bigtop-manager-ui/src/components/create-cluster/components/host-manage.vue
+++ b/bigtop-manager-ui/src/components/create-cluster/components/host-manage.vue
@@ -24,7 +24,7 @@
   import { useI18n } from 'vue-i18n'
 
   import useBaseTable from '@/composables/use-base-table'
-  import HostCreate from '@/components/create-host/create.vue'
+  import HostCreate from '@/components/create-host/index.vue'
 
   import type { FilterConfirmProps, FilterResetProps } from 
'ant-design-vue/es/table/interface'
   import type { GroupItem } from '@/components/common/button-group/types'
diff --git 
a/bigtop-manager-ui/src/components/create-cluster/components/set-source.vue 
b/bigtop-manager-ui/src/components/create-cluster/components/set-source.vue
deleted file mode 100644
index b2449ee0..00000000
--- a/bigtop-manager-ui/src/components/create-cluster/components/set-source.vue
+++ /dev/null
@@ -1,150 +0,0 @@
-<!--
-  ~ Licensed to the Apache Software Foundation (ASF) under one
-  ~ or more contributor license agreements.  See the NOTICE file
-  ~ distributed with this work for additional information
-  ~ regarding copyright ownership.  The ASF licenses this file
-  ~ to you under the Apache License, Version 2.0 (the
-  ~ "License"); you may not use this file except in compliance
-  ~ with the License.  You may obtain a copy of the License at
-  ~
-  ~   http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing,
-  ~ software distributed under the License is distributed on an
-  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  ~ KIND, either express or implied.  See the License for the
-  ~ specific language governing permissions and limitations
-  ~ under the License.
--->
-
-<script setup lang="ts">
-  import { computed, reactive, ref, toRefs } from 'vue'
-  import { getRepoList, updateRepo } from '@/api/repo'
-  import { type FormInstance, message, type TableColumnType } from 
'ant-design-vue'
-  import { useI18n } from 'vue-i18n'
-  import type { RepoVO } from '@/api/repo/types'
-
-  const { t } = useI18n()
-  const open = ref(false)
-  const loading = ref(false)
-  const formRef = ref<FormInstance>()
-  const form = reactive({
-    list: [] as RepoVO[]
-  })
-  const { list } = toRefs(form)
-
-  const columns = computed((): TableColumnType[] => [
-    {
-      title: t('common.name'),
-      dataIndex: 'name',
-      key: 'name',
-      ellipsis: true
-    },
-    {
-      title: t('common.arch'),
-      dataIndex: 'arch',
-      key: 'arch',
-      ellipsis: true
-    },
-    {
-      title: t('common.base_url'),
-      dataIndex: 'baseUrl',
-      key: 'baseUrl',
-      ellipsis: true
-    }
-  ])
-
-  const handleOpen = () => {
-    open.value = true
-    getSource()
-  }
-
-  const getSource = async () => {
-    loading.value = true
-    try {
-      list.value = await getRepoList()
-    } catch (error) {
-      console.log('error :>> ', error)
-    } finally {
-      loading.value = false
-    }
-  }
-
-  const updateSourceUrl = async () => {
-    try {
-      const params = list.value.map(({ id, baseUrl }) => ({ id, baseUrl }))
-      await updateRepo(params)
-      formRef.value?.resetFields()
-      message.success(t('common.update_success'))
-      open.value = false
-    } catch (error) {
-      message.error(t('common.update_fail'))
-      console.log('error :>> ', error)
-    }
-  }
-
-  const handleOk = () => {
-    formRef.value
-      ?.validateFields()
-      .then(() => {
-        updateSourceUrl()
-      })
-      .catch((info) => {
-        console.log('Validate Failed:', info)
-      })
-  }
-
-  const handleCancel = () => {
-    open.value = false
-  }
-
-  defineExpose({
-    handleOpen
-  })
-</script>
-
-<template>
-  <div class="set-source">
-    <a-modal
-      v-model:open="open"
-      width="50%"
-      :centered="true"
-      :mask="false"
-      :title="$t('cluster.source')"
-      :mask-closable="false"
-      :destroy-on-close="true"
-      @ok="handleOk"
-      @cancel="handleCancel"
-    >
-      <a-form ref="formRef" :model="form">
-        <a-table :loading="loading" :scroll="{ y: 340 }" :data-source="list" 
:columns="columns" :pagination="false">
-          <template #bodyCell="{ index, column, record }">
-            <template v-if="column.dataIndex == 'baseUrl'">
-              <a-form-item
-                label=" "
-                :colon="false"
-                :name="['list', index, 'baseUrl']"
-                :rules="[{ required: true, message: $t('common.enter_error'), 
trigger: 'blur' }]"
-              >
-                <a-input v-model:value="record[column.key]" />
-              </a-form-item>
-            </template>
-          </template>
-        </a-table>
-      </a-form>
-      <a-typography-text class="set-source-tip" type="danger">{{ 
`*${$t('common.note')}` }}</a-typography-text>
-    </a-modal>
-  </div>
-</template>
-
-<style lang="scss" scoped>
-  .set-source {
-    &-tip {
-      margin-top: $space-sm;
-      font-size: 12px;
-    }
-  }
-  :deep(.ant-form-item) {
-    margin-bottom: 0;
-  }
-</style>
diff --git a/bigtop-manager-ui/src/components/create-cluster/create.vue 
b/bigtop-manager-ui/src/components/create-cluster/index.vue
similarity index 100%
rename from bigtop-manager-ui/src/components/create-cluster/create.vue
rename to bigtop-manager-ui/src/components/create-cluster/index.vue
diff --git a/bigtop-manager-ui/src/components/create-host/create.vue 
b/bigtop-manager-ui/src/components/create-host/index.vue
similarity index 100%
rename from bigtop-manager-ui/src/components/create-host/create.vue
rename to bigtop-manager-ui/src/components/create-host/index.vue
diff --git 
a/bigtop-manager-ui/src/components/create-host/install-dependencies.vue 
b/bigtop-manager-ui/src/components/create-host/install-dependencies.vue
index 820d3c2b..1646dbea 100644
--- a/bigtop-manager-ui/src/components/create-host/install-dependencies.vue
+++ b/bigtop-manager-ui/src/components/create-host/install-dependencies.vue
@@ -27,7 +27,7 @@
   import { generateRandomId } from '@/utils/tools'
   import { execCommand } from '@/api/command'
 
-  import HostCreate from './create.vue'
+  import HostCreate from './index.vue'
   import useBaseTable from '@/composables/use-base-table'
 
   import { type InstalledStatusVO, Status } from '@/api/hosts/types'
diff --git a/bigtop-manager-ui/src/components/create-service/create.vue 
b/bigtop-manager-ui/src/components/create-service/index.vue
similarity index 99%
rename from bigtop-manager-ui/src/components/create-service/create.vue
rename to bigtop-manager-ui/src/components/create-service/index.vue
index 596327b0..2a3c2177 100644
--- a/bigtop-manager-ui/src/components/create-service/create.vue
+++ b/bigtop-manager-ui/src/components/create-service/index.vue
@@ -24,6 +24,7 @@
   import { storeToRefs } from 'pinia'
   import { onBeforeRouteLeave, useRoute } from 'vue-router'
   import { StepContext, useCreateServiceStore } from '@/store/create-service'
+
   import ServiceSelector from './components/service-selector.vue'
   import ComponentAssigner from './components/component-assigner.vue'
   import ServiceConfigurator from './components/service-configurator.vue'
diff --git a/bigtop-manager-ui/src/components/job-modal/index.vue 
b/bigtop-manager-ui/src/components/job-modal/index.vue
index 1452077c..3fe48bfd 100644
--- a/bigtop-manager-ui/src/components/job-modal/index.vue
+++ b/bigtop-manager-ui/src/components/job-modal/index.vue
@@ -24,6 +24,7 @@
   import useBaseTable from '@/composables/use-base-table'
   import LogsView, { type LogViewProps } from '@/components/log-view/index.vue'
   import CustomProgress from '@/components/job/custom-progress.vue'
+
   import type { JobVO, StageVO, StateType, TaskListParams, TaskVO } from 
'@/api/job/types'
   import type { CommandRes, JobStageProgressItem } from '@/store/job-progress'
 
diff --git a/bigtop-manager-ui/src/components/job/index.vue 
b/bigtop-manager-ui/src/components/job/index.vue
index 842145b8..7b6f5c41 100644
--- a/bigtop-manager-ui/src/components/job/index.vue
+++ b/bigtop-manager-ui/src/components/job/index.vue
@@ -25,6 +25,7 @@
   import useBaseTable from '@/composables/use-base-table'
   import LogsView, { type LogViewProps } from '@/components/log-view/index.vue'
   import CustomProgress from './custom-progress.vue'
+
   import type { JobVO, StageVO, StateType, TaskListParams, TaskVO } from 
'@/api/job/types'
   import type { ClusterVO } from '@/api/cluster/types'
   import type { ListParams } from '@/api/types'
diff --git a/bigtop-manager-ui/src/components/set-source/index.vue 
b/bigtop-manager-ui/src/components/set-source/index.vue
new file mode 100644
index 00000000..401a592c
--- /dev/null
+++ b/bigtop-manager-ui/src/components/set-source/index.vue
@@ -0,0 +1,281 @@
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one
+  ~ or more contributor license agreements.  See the NOTICE file
+  ~ distributed with this work for additional information
+  ~ regarding copyright ownership.  The ASF licenses this file
+  ~ to you under the Apache License, Version 2.0 (the
+  ~ "License"); you may not use this file except in compliance
+  ~ with the License.  You may obtain a copy of the License at
+  ~
+  ~   http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing,
+  ~ software distributed under the License is distributed on an
+  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  ~ KIND, either express or implied.  See the License for the
+  ~ specific language governing permissions and limitations
+  ~ under the License.
+-->
+
+<script setup lang="ts">
+  import { computed, nextTick, reactive, ref, shallowRef, toRefs } from 'vue'
+  import { getRepoList, updateRepo } from '@/api/repo'
+  import { useI18n } from 'vue-i18n'
+  import UpdateAddress from './update-address.vue'
+
+  import { type FormInstance, message, type TableColumnType } from 
'ant-design-vue'
+  import type { RepoVO } from '@/api/repo/types'
+
+  const { t } = useI18n()
+  const open = ref(false)
+  const loading = ref(false)
+  const formRef = ref<FormInstance>()
+  const type = ref<number>(1)
+  const list = ref<RepoVO[]>([])
+  const updateAddressRef = ref<InstanceType<typeof UpdateAddress> | null>(null)
+  const listTypeMap = shallowRef(['', 'serviceList', 'dependencyList'])
+
+  const form = reactive<Record<string, RepoVO[]>>({
+    serviceList: [],
+    dependencyList: []
+  })
+
+  const { serviceList, dependencyList } = toRefs(form)
+
+  const sourceTypeTabs = computed(() => [t('common.service'), 
t('component.dependency')])
+  const columns = computed((): TableColumnType[] => [
+    {
+      title: t('common.name'),
+      dataIndex: 'name',
+      key: 'name',
+      ellipsis: true
+    },
+    {
+      title: t('common.arch'),
+      dataIndex: 'arch',
+      key: 'arch',
+      ellipsis: true
+    },
+    {
+      title: t('component.base_url'),
+      dataIndex: 'baseUrl',
+      key: 'baseUrl',
+      ellipsis: true
+    },
+    {
+      title: t('component.pkg_name'),
+      dataIndex: 'pkgName',
+      key: 'pkgName',
+      ellipsis: true
+    }
+  ])
+
+  const handleOpen = () => {
+    open.value = true
+    getSource()
+  }
+
+  const getSource = async () => {
+    loading.value = true
+    try {
+      list.value = await getRepoList()
+      onTabsChange({ target: { value: type.value } })
+    } catch (error) {
+      console.log('error :>> ', error)
+    } finally {
+      loading.value = false
+    }
+  }
+
+  const updateSourceUrl = async () => {
+    try {
+      const params = list.value.map(({ id, baseUrl }) => ({ id, baseUrl }))
+      await updateRepo(params)
+      formRef.value?.resetFields()
+      message.success(t('common.update_success'))
+      open.value = false
+    } catch (error) {
+      message.error(t('common.update_fail'))
+      console.log('error :>> ', error)
+    }
+  }
+
+  const handleOk = async () => {
+    const pass = await checkAllRules()
+    if (!pass) return
+    updateSourceUrl()
+  }
+
+  const handleCancel = () => {
+    open.value = false
+    type.value = 1
+    Object.assign(form, { serviceList: [], dependencyList: [] })
+  }
+
+  const checkAllRules = async () => {
+    const errorMap = list.value.reduce(
+      (pre, val) => {
+        if (val.baseUrl === '') {
+          if (!pre[val.type]) {
+            pre[val.type] = []
+          }
+          pre[val.type].push(Number(val.id))
+        }
+        return pre
+      },
+      {} as Record<string, number[]>
+    )
+
+    const types = Object.keys(errorMap)
+
+    if (types.length > 0) {
+      onTabsChange({ target: { value: Number(types[0]) } })
+      await nextTick() // wait tab rendered
+
+      const idx = form[listTypeMap.value[type.value]].findIndex((v) => v.id 
=== errorMap[type.value][0])
+      const pathName = [listTypeMap.value[type.value], idx, 'baseUrl']
+
+      if (idx != -1) {
+        await nextTick() // wait dom rendered
+        formRef.value?.scrollToField(pathName)
+        await formRef.value?.validateFields([pathName]).catch((error) => 
console.log('error', error))
+      } else {
+        formRef.value?.clearValidate()
+      }
+    }
+
+    return types.length === 0
+  }
+
+  const onTabsChange = ({ target }) => {
+    formRef.value?.clearValidate()
+    type.value = Number(target.value)
+    form[listTypeMap.value[type.value]] = list.value.filter((v) => v.type === 
type.value)
+  }
+
+  const setNewAddress = () => {
+    updateAddressRef.value?.show()
+  }
+
+  const handleSetAddress = (newAddress: string) => {
+    list.value.forEach((v) => (v.baseUrl = newAddress))
+    message.success(t('common.update_success'))
+  }
+
+  defineExpose({
+    handleOpen
+  })
+</script>
+
+<template>
+  <div class="set-source">
+    <a-modal
+      v-model:open="open"
+      width="60%"
+      :centered="true"
+      :mask="false"
+      :title="$t('cluster.source')"
+      :mask-closable="false"
+      :destroy-on-close="true"
+      :after-close="handleCancel"
+    >
+      <div class="set-source-operate">
+        <a-radio-group v-model:value="type" button-style="solid" 
@change="onTabsChange">
+          <a-radio-button v-for="(label, index) in sourceTypeTabs" :key="index 
+ 1" :value="index + 1">
+            {{ label }}
+          </a-radio-button>
+        </a-radio-group>
+        <a-button type="primary" @click="setNewAddress">{{ 
$t('component.update_all') }}</a-button>
+      </div>
+      <a-form ref="formRef" :model="form">
+        <a-table
+          v-show="type === 1"
+          :loading="loading"
+          :scroll="{ y: 350 }"
+          :data-source="[...serviceList]"
+          :columns="columns"
+          :pagination="false"
+        >
+          <template #bodyCell="{ index, column, record }">
+            <template v-if="column.key == 'baseUrl'">
+              <a-form-item
+                label=" "
+                :colon="false"
+                :name="[`serviceList`, index, 'baseUrl']"
+                :rules="[
+                  {
+                    required: true,
+                    message: t('common.enter_error', 
[`${t('component.base_url')}`.toLowerCase()]),
+                    trigger: ['change', 'blur']
+                  }
+                ]"
+              >
+                <a-input v-model:value="record[column.key]" />
+              </a-form-item>
+            </template>
+            <template v-if="column.key == 'pkgName'">
+              <span>{{ record[column.key] || '-' }}</span>
+            </template>
+          </template>
+        </a-table>
+        <a-table
+          v-show="type === 2"
+          :loading="loading"
+          :scroll="{ y: 350 }"
+          :data-source="dependencyList"
+          :columns="columns"
+          :pagination="false"
+        >
+          <template #bodyCell="{ index, column, record }">
+            <template v-if="column.key == 'baseUrl'">
+              <a-form-item
+                label=" "
+                :colon="false"
+                :name="[`dependencyList`, index, 'baseUrl']"
+                :rules="[{ required: true, message: t('common.enter_error'), 
trigger: ['change', 'blur'] }]"
+              >
+                <a-input v-model:value="record[column.key]" />
+              </a-form-item>
+            </template>
+            <template v-if="column.key == 'pkgName'">
+              <span>{{ record[column.key] || '-' }}</span>
+            </template>
+          </template>
+        </a-table>
+      </a-form>
+      <template #footer>
+        <div class="set-source-footer">
+          <a-typography-text class="set-source-tip" type="danger">{{ 
`*${$t('component.note')}` }}</a-typography-text>
+          <a-space>
+            <a-button @click="handleCancel">{{ $t('common.cancel') 
}}</a-button>
+            <a-button type="primary" @click="handleOk">{{ $t('common.confirm') 
}}</a-button>
+          </a-space>
+        </div>
+      </template>
+    </a-modal>
+    <update-address ref="updateAddressRef" @on-ok="handleSetAddress" />
+  </div>
+</template>
+
+<style lang="scss" scoped>
+  .set-source {
+    min-width: 400px;
+    &-tip {
+      font-size: 12px;
+    }
+    &-operate {
+      display: flex;
+      justify-content: space-between;
+      margin: 16px 0;
+    }
+    &-footer {
+      text-align: start;
+      display: flex;
+      justify-content: space-between;
+      gap: 16px;
+    }
+  }
+  :deep(.ant-form-item) {
+    margin-bottom: 0;
+  }
+</style>
diff --git a/bigtop-manager-ui/src/components/set-source/update-address.vue 
b/bigtop-manager-ui/src/components/set-source/update-address.vue
new file mode 100644
index 00000000..3c65ae58
--- /dev/null
+++ b/bigtop-manager-ui/src/components/set-source/update-address.vue
@@ -0,0 +1,93 @@
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one
+  ~ or more contributor license agreements.  See the NOTICE file
+  ~ distributed with this work for additional information
+  ~ regarding copyright ownership.  The ASF licenses this file
+  ~ to you under the Apache License, Version 2.0 (the
+  ~ "License"); you may not use this file except in compliance
+  ~ with the License.  You may obtain a copy of the License at
+  ~
+  ~   http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing,
+  ~ software distributed under the License is distributed on an
+  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  ~ KIND, either express or implied.  See the License for the
+  ~ specific language governing permissions and limitations
+  ~ under the License.
+  -->
+<script setup lang="ts">
+  import { computed, ref } from 'vue'
+  import { useI18n } from 'vue-i18n'
+  import { FormItemState } from '@/components/common/auto-form/types'
+
+  interface Emits {
+    (event: 'onOk', value: string): void
+  }
+
+  const emits = defineEmits<Emits>()
+
+  const { t } = useI18n()
+  const visible = ref(false)
+  const autoFormRef = ref<Comp.AutoFormInstance | null>(null)
+  const formValue = ref({ newAddress: '' })
+
+  const formItems = computed((): FormItemState[] => [
+    {
+      type: 'input',
+      field: 'newAddress',
+      formItemProps: {
+        name: 'newAddress',
+        label: t('component.new_base_url'),
+        rules: [
+          {
+            required: true,
+            message: t('common.enter_error', 
[`${t('component.new_base_url')}`.toLowerCase()]),
+            trigger: 'blur'
+          }
+        ]
+      },
+      controlProps: {
+        placeholder: t('common.enter_error', 
[`${t('component.new_base_url')}`.toLowerCase()])
+      }
+    }
+  ])
+
+  const onSubmit = async () => {
+    try {
+      const validate = await autoFormRef.value?.getFormValidation()
+      if (!validate) return
+      emits('onOk', formValue.value.newAddress)
+      onCancel()
+    } catch (e) {
+      console.log('Validation failed', e)
+    }
+  }
+
+  const onCancel = () => {
+    visible.value = false
+    formValue.value.newAddress = ''
+    autoFormRef.value?.resetForm()
+  }
+
+  const show = () => {
+    visible.value = true
+  }
+
+  defineExpose({ show })
+</script>
+
+<template>
+  <a-modal
+    v-model:open="visible"
+    :centered="true"
+    :destroy-on-close="true"
+    :title="t('component.base_url')"
+    @ok="onSubmit"
+    @cancel="onCancel"
+  >
+    <auto-form ref="autoFormRef" v-model:form-value="formValue" 
:form-items="formItems" :show-button="false" />
+  </a-modal>
+</template>
+
+<style lang="scss" scoped></style>
diff --git a/bigtop-manager-ui/src/locales/en_US/common.ts 
b/bigtop-manager-ui/src/locales/en_US/common.ts
index e6a46d18..47a75ad4 100644
--- a/bigtop-manager-ui/src/locales/en_US/common.ts
+++ b/bigtop-manager-ui/src/locales/en_US/common.ts
@@ -55,7 +55,6 @@ export default {
   desc: 'Description',
   os: 'OS',
   arch: 'Arch',
-  base_url: 'Address',
   cluster: 'Cluster',
   host: 'Host',
   service: 'Service',
@@ -101,7 +100,6 @@ export default {
   restore_msg: 'Are you sure you want to restore this?',
   delete_empty: 'Please select the records you want to delete.',
   total: 'Total {0} items',
-  note: 'Note: Changes to the source address will take effect for all 
clusters.',
   upload_file: 'Upload file',
   file_type_error: 'Only text files are allowed!',
   file_size_error: 'File size cannot exceed 10KB!',
diff --git a/bigtop-manager-ui/src/api/repo/types.ts 
b/bigtop-manager-ui/src/locales/en_US/component.ts
similarity index 77%
copy from bigtop-manager-ui/src/api/repo/types.ts
copy to bigtop-manager-ui/src/locales/en_US/component.ts
index 597adce4..442487b7 100644
--- a/bigtop-manager-ui/src/api/repo/types.ts
+++ b/bigtop-manager-ui/src/locales/en_US/component.ts
@@ -16,16 +16,11 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-export interface RepoVO {
-  arch?: string
-  baseUrl?: string
-  id?: number
-  name?: string
-  [property: string]: any
-}
-
-export interface RepoUpdate {
-  baseUrl?: string
-  id?: number
-  [property: string]: any
+export default {
+  pkg_name: 'Package',
+  base_url: 'Address',
+  new_base_url: 'New Address',
+  note: 'Note: Changes to the source address will take effect for all 
clusters.',
+  dependency: 'Dependency',
+  update_all: 'Update All'
 }
diff --git a/bigtop-manager-ui/src/locales/en_US/index.ts 
b/bigtop-manager-ui/src/locales/en_US/index.ts
index e91a5f9f..063ecee7 100644
--- a/bigtop-manager-ui/src/locales/en_US/index.ts
+++ b/bigtop-manager-ui/src/locales/en_US/index.ts
@@ -29,6 +29,7 @@ import job from '@/locales/en_US/job.ts'
 import overview from '@/locales/en_US/overview'
 import service from '@/locales/en_US/service'
 import infra from '@/locales/en_US/infra.ts'
+import component from '@/locales/en_US/component'
 
 export default {
   common,
@@ -42,5 +43,6 @@ export default {
   job,
   overview,
   service,
-  infra
+  infra,
+  component
 }
diff --git a/bigtop-manager-ui/src/locales/zh_CN/common.ts 
b/bigtop-manager-ui/src/locales/zh_CN/common.ts
index ac593b7b..196d5dc9 100644
--- a/bigtop-manager-ui/src/locales/zh_CN/common.ts
+++ b/bigtop-manager-ui/src/locales/zh_CN/common.ts
@@ -55,7 +55,6 @@ export default {
   desc: '描述',
   os: '系统',
   arch: '架构',
-  base_url: '地址',
   cluster: '集群',
   host: '主机',
   service: '服务',
@@ -100,7 +99,6 @@ export default {
   delete_msgs: '确认要删除这些记录吗?',
   delete_empty: '请选择需要删除的记录',
   total: '共{0}条数据',
-  note: '注: 源地址的改动对所有集群生效。',
   upload_file: '上传文件',
   file_type_error: '只能上传文本文件!',
   file_size_error: '文件大小不能超过 10KB!',
diff --git a/bigtop-manager-ui/src/api/repo/types.ts 
b/bigtop-manager-ui/src/locales/zh_CN/component.ts
similarity index 79%
copy from bigtop-manager-ui/src/api/repo/types.ts
copy to bigtop-manager-ui/src/locales/zh_CN/component.ts
index 597adce4..47e193cc 100644
--- a/bigtop-manager-ui/src/api/repo/types.ts
+++ b/bigtop-manager-ui/src/locales/zh_CN/component.ts
@@ -16,16 +16,11 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-export interface RepoVO {
-  arch?: string
-  baseUrl?: string
-  id?: number
-  name?: string
-  [property: string]: any
-}
-
-export interface RepoUpdate {
-  baseUrl?: string
-  id?: number
-  [property: string]: any
+export default {
+  pkg_name: '包名',
+  base_url: '地址',
+  new_base_url: '新地址',
+  note: '注: 源地址的改动对所有集群生效。',
+  dependency: '依赖',
+  update_all: '更新全部'
 }
diff --git a/bigtop-manager-ui/src/locales/zh_CN/index.ts 
b/bigtop-manager-ui/src/locales/zh_CN/index.ts
index c2104cc2..e18ecd76 100644
--- a/bigtop-manager-ui/src/locales/zh_CN/index.ts
+++ b/bigtop-manager-ui/src/locales/zh_CN/index.ts
@@ -29,6 +29,7 @@ import job from '@/locales/zh_CN/job.ts'
 import overview from '@/locales/zh_CN/overview.ts'
 import service from '@/locales/zh_CN/service.ts'
 import infra from '@/locales/zh_CN/infra.ts'
+import component from '@/locales/zh_CN/component'
 
 export default {
   common,
@@ -42,5 +43,6 @@ export default {
   job,
   overview,
   service,
-  infra
+  infra,
+  component
 }
diff --git a/bigtop-manager-ui/src/pages/cluster-manage/cluster/host.vue 
b/bigtop-manager-ui/src/pages/cluster-manage/cluster/host.vue
index bafe924b..a26a874f 100644
--- a/bigtop-manager-ui/src/pages/cluster-manage/cluster/host.vue
+++ b/bigtop-manager-ui/src/pages/cluster-manage/cluster/host.vue
@@ -26,7 +26,7 @@
   import { useRouter } from 'vue-router'
 
   import useBaseTable from '@/composables/use-base-table'
-  import HostCreate from '@/components/create-host/create.vue'
+  import HostCreate from '@/components/create-host/index.vue'
   import InstallDependencies from 
'@/components/create-host/install-dependencies.vue'
 
   import type { FilterConfirmProps, FilterResetProps } from 
'ant-design-vue/es/table/interface'
diff --git a/bigtop-manager-ui/src/pages/cluster-manage/cluster/service.vue 
b/bigtop-manager-ui/src/pages/cluster-manage/cluster/service.vue
index b9cb7922..ecce6d2f 100644
--- a/bigtop-manager-ui/src/pages/cluster-manage/cluster/service.vue
+++ b/bigtop-manager-ui/src/pages/cluster-manage/cluster/service.vue
@@ -27,8 +27,6 @@
   import { useRouter } from 'vue-router'
   import { useJobProgress } from '@/store/job-progress'
 
-  import FilterForm from '@/components/common/filter-form/index.vue'
-
   import type { GroupItem } from '@/components/common/button-group/types'
   import type { FilterFormItem } from '@/components/common/filter-form/types'
   import type { ServiceListParams, ServiceStatusType, ServiceVO } from 
'@/api/service/types'
diff --git a/bigtop-manager-ui/src/pages/cluster-manage/components/index.vue 
b/bigtop-manager-ui/src/pages/cluster-manage/components/index.vue
index e7b40c22..4718e389 100644
--- a/bigtop-manager-ui/src/pages/cluster-manage/components/index.vue
+++ b/bigtop-manager-ui/src/pages/cluster-manage/components/index.vue
@@ -19,7 +19,7 @@
 <script setup lang="ts">
   import { ref, reactive, computed, onMounted, watchEffect } from 'vue'
   import useBaseTable from '@/composables/use-base-table'
-  import SetSource from '@/components/create-cluster/components/set-source.vue'
+  import SetSource from '@/components/set-source/index.vue'
   import { useI18n } from 'vue-i18n'
   import { useStackStore } from '@/store/stack'
   import { storeToRefs } from 'pinia'
diff --git a/bigtop-manager-ui/src/pages/cluster-manage/hosts/index.vue 
b/bigtop-manager-ui/src/pages/cluster-manage/hosts/index.vue
index 1d651221..15634877 100644
--- a/bigtop-manager-ui/src/pages/cluster-manage/hosts/index.vue
+++ b/bigtop-manager-ui/src/pages/cluster-manage/hosts/index.vue
@@ -27,7 +27,7 @@
   import * as hostApi from '@/api/hosts'
 
   import useBaseTable from '@/composables/use-base-table'
-  import HostCreate from '@/components/create-host/create.vue'
+  import HostCreate from '@/components/create-host/index.vue'
   import InstallDependencies from 
'@/components/create-host/install-dependencies.vue'
 
   import type { FilterConfirmProps, FilterResetProps, TableRowSelection } from 
'ant-design-vue/es/table/interface'
diff --git 
a/bigtop-manager-ui/src/pages/cluster-manage/infrastructures/service.vue 
b/bigtop-manager-ui/src/pages/cluster-manage/infrastructures/service.vue
index a92d506d..7ec7c175 100644
--- a/bigtop-manager-ui/src/pages/cluster-manage/infrastructures/service.vue
+++ b/bigtop-manager-ui/src/pages/cluster-manage/infrastructures/service.vue
@@ -26,6 +26,7 @@
   import { useRouter } from 'vue-router'
   import { useJobProgress } from '@/store/job-progress'
   import { Empty } from 'ant-design-vue'
+
   import type { ServiceListParams, ServiceStatusType, ServiceVO } from 
'@/api/service/types'
   import type { GroupItem } from '@/components/common/button-group/types'
   import type { FilterFormItem } from '@/components/common/filter-form/types'
diff --git a/bigtop-manager-ui/src/router/routes/modules/clusters.ts 
b/bigtop-manager-ui/src/router/routes/modules/clusters.ts
index beecba9d..1863d412 100644
--- a/bigtop-manager-ui/src/router/routes/modules/clusters.ts
+++ b/bigtop-manager-ui/src/router/routes/modules/clusters.ts
@@ -59,7 +59,7 @@ const routes: RouteRecordRaw[] = [
           {
             name: 'CreateCluster',
             path: 'create-cluster',
-            component: () => import('@/components/create-cluster/create.vue'),
+            component: () => import('@/components/create-cluster/index.vue'),
             meta: {
               hidden: true
             }
@@ -67,7 +67,7 @@ const routes: RouteRecordRaw[] = [
           {
             name: 'CreateService',
             path: ':id/create-service/:creationMode?',
-            component: () => import('@/components/create-service/create.vue'),
+            component: () => import('@/components/create-service/index.vue'),
             meta: {
               hidden: true
             }
@@ -83,7 +83,7 @@ const routes: RouteRecordRaw[] = [
           {
             name: 'CreateComponent',
             path: ':id/create-component/:serviceId/:creationMode?/:type',
-            component: () => import('@/components/create-service/create.vue'),
+            component: () => import('@/components/create-service/index.vue'),
             meta: {
               hidden: true
             }
@@ -111,7 +111,7 @@ const routes: RouteRecordRaw[] = [
           {
             name: 'CreateInfraService',
             path: 'create-infra-service/:id/:creationMode',
-            component: () => import('@/components/create-service/create.vue'),
+            component: () => import('@/components/create-service/index.vue'),
             meta: {
               hidden: true,
               activeMenu: '/cluster-manage/infrastructures/list'
@@ -129,7 +129,7 @@ const routes: RouteRecordRaw[] = [
           {
             name: 'CreateInfraComponent',
             path: 
'/create-infra-service/create-infra-component/:id/:serviceId/:creationMode/:type',
-            component: () => import('@/components/create-service/create.vue'),
+            component: () => import('@/components/create-service/index.vue'),
             meta: {
               hidden: true,
               activeMenu: '/cluster-manage/infrastructures/list'
@@ -178,7 +178,7 @@ const routes: RouteRecordRaw[] = [
           {
             name: 'HostCreation',
             path: 'add',
-            component: () => import('@/components/create-host/create.vue'),
+            component: () => import('@/components/create-host/index.vue'),
             meta: {
               hidden: true,
               activeMenu: '/cluster-manage/hosts/list'


Reply via email to