diff --git a/backend/app/dto/response/app.go b/backend/app/dto/response/app.go index 05a24dc03..3b4d35212 100644 --- a/backend/app/dto/response/app.go +++ b/backend/app/dto/response/app.go @@ -21,8 +21,9 @@ type AppUpdateRes struct { type AppDTO struct { model.App - Versions []string `json:"versions"` - Tags []model.Tag `json:"tags"` + Installed bool `json:"installed"` + Versions []string `json:"versions"` + Tags []model.Tag `json:"tags"` } type TagDTO struct { diff --git a/backend/app/service/app.go b/backend/app/service/app.go index a24cbe527..713141973 100644 --- a/backend/app/service/app.go +++ b/backend/app/service/app.go @@ -98,6 +98,8 @@ func (a AppService) PageApp(req request.AppSearch) (interface{}, error) { continue } appDTO.Tags = tags + installs, _ := appInstallRepo.ListBy(appInstallRepo.WithAppId(a.ID)) + appDTO.Installed = len(installs) > 0 } res.Items = appDTOs res.Total = total diff --git a/frontend/src/api/interface/app.ts b/frontend/src/api/interface/app.ts index 6eaddaae7..f21d8944e 100644 --- a/frontend/src/api/interface/app.ts +++ b/frontend/src/api/interface/app.ts @@ -16,6 +16,7 @@ export namespace App { export interface AppDTO extends App { versions: string[]; + installed: boolean; } export interface Tag { @@ -25,7 +26,7 @@ export namespace App { export interface AppResPage { total: number; - items: App.App[]; + items: App.AppDTO[]; } export interface AppUpdateRes { diff --git a/frontend/src/lang/modules/en.ts b/frontend/src/lang/modules/en.ts index b54a1a0ac..ccae3d04f 100644 --- a/frontend/src/lang/modules/en.ts +++ b/frontend/src/lang/modules/en.ts @@ -1124,6 +1124,7 @@ const message = { editCompose: 'Edit compose file', editComposeHelper: 'Editing the compose file may cause the software installation to fail', composeNullErr: 'compose cannot be empty', + takeDown: 'TakeDown', }, website: { website: 'Website', diff --git a/frontend/src/lang/modules/zh.ts b/frontend/src/lang/modules/zh.ts index b4a622c09..f8ad70d1f 100644 --- a/frontend/src/lang/modules/zh.ts +++ b/frontend/src/lang/modules/zh.ts @@ -1117,6 +1117,8 @@ const message = { editCompose: '编辑 compose 文件', editComposeHelper: '编辑 compose 文件可能导致软件安装失败', composeNullErr: 'compose 不能为空', + takeDown: '已废弃', + allReadyInstalled: '已安装', }, website: { website: '网站', diff --git a/frontend/src/views/app-store/apps/index.vue b/frontend/src/views/app-store/apps/index.vue index d2b96bbb3..6f5ddb1bd 100644 --- a/frontend/src/views/app-store/apps/index.vue +++ b/frontend/src/views/app-store/apps/index.vue @@ -62,6 +62,9 @@
{{ app.name }} + + {{ $t('app.allReadyInstalled') }} + - 已废弃 + {{ $t('app.takeDown') }}
@@ -113,21 +116,21 @@ import { useI18n } from 'vue-i18n'; const language = useI18n().locale.value; -let req = reactive({ +const req = reactive({ name: '', tags: [], page: 1, pageSize: 50, }); -let apps = ref([]); -let tags = ref([]); +const apps = ref([]); +const tags = ref([]); const colorArr = ['#005eeb', '#008B45', '#BEBEBE', '#FFF68F', '#FFFF00', '#8B0000']; -let loading = ref(false); -let activeTag = ref('all'); -let showDetail = ref(false); -let appId = ref(0); -let canUpdate = ref(false); +const loading = ref(false); +const activeTag = ref('all'); +const showDetail = ref(false); +const appId = ref(0); +const canUpdate = ref(false); const getColor = (index: number) => { return colorArr[index];