diff --git a/apps/mysql/5.7.39/docker-compose.yml b/apps/mysql/5.7.39/docker-compose.yml index 676c12173..c1910556e 100644 --- a/apps/mysql/5.7.39/docker-compose.yml +++ b/apps/mysql/5.7.39/docker-compose.yml @@ -3,7 +3,7 @@ version: '3' services: mysql5.7: image: mysql:5.7.39 - container_name: 1panel-mysql + container_name: ${CONTAINER_NAME} restart: always environment: TZ: ${TZ} diff --git a/apps/mysql/5.7.39/form.json b/apps/mysql/5.7.39/form.json deleted file mode 100644 index 529d5c4a2..000000000 --- a/apps/mysql/5.7.39/form.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "form_fields": [ - { - "type": "text", - "label_zh": "时区", - "label_en": "TimeZone", - "required": true, - "default": "Asia/Shanghai", - "env_variable": "TZ" - }, - { - "type": "text", - "label_zh": "数据库", - "label_en": "Database", - "required": true, - "default": "db", - "env_variable": "DATABASE" - }, - { - "type": "text", - "label_zh": "普通用户", - "label_en": "User", - "required": true, - "default": "mysql", - "env_variable": "USER" - }, - { - "type": "password", - "label_zh": "普通用户密码", - "label_en": "Password", - "required": true, - "default": "1qaz@WSX", - "env_variable": "PASSWORD" - }, - { - "type": "password", - "label_zh": "Root用户密码", - "label_en": "RootPassword", - "required": true, - "default": "1panel@mysql", - "env_variable": "ROOT_PASSWORD" - }, - { - "type": "number", - "label_zh": "端口", - "label_en": "Port", - "required": true, - "default": 3306, - "env_variable": "PORT" - } - ] -} \ No newline at end of file diff --git a/apps/mysql/5.7.39/params.json b/apps/mysql/5.7.39/params.json new file mode 100644 index 000000000..5e4ce3d2f --- /dev/null +++ b/apps/mysql/5.7.39/params.json @@ -0,0 +1,52 @@ +{ + "formFields": [ + { + "type": "text", + "labelZh": "时区", + "labelEn": "TimeZone", + "required": true, + "default": "Asia/Shanghai", + "envKey": "TZ" + }, + { + "type": "text", + "labelZh": "数据库", + "labelEn": "Database", + "required": true, + "default": "db", + "envKey": "DATABASE" + }, + { + "type": "text", + "labelZh": "普通用户", + "labelEn": "User", + "required": true, + "default": "mysql", + "envKey": "USER" + }, + { + "type": "text", + "labelZh": "普通用户密码", + "labelEn": "Password", + "required": true, + "default": "1qaz@WSX", + "envKey": "PASSWORD" + }, + { + "type": "text", + "labelZh": "Root用户密码", + "labelEn": "RootPassword", + "required": true, + "default": "1panel@mysql", + "envKey": "ROOT_PASSWORD" + }, + { + "type": "number", + "labelZh": "端口", + "labelEn": "Port", + "required": true, + "default": 3306, + "envKey": "PORT" + } + ] +} \ No newline at end of file diff --git a/backend/app/api/v1/app.go b/backend/app/api/v1/app.go index 2019f5a06..72b060ae0 100644 --- a/backend/app/api/v1/app.go +++ b/backend/app/api/v1/app.go @@ -61,3 +61,34 @@ func (b *BaseApi) GetAppDetail(c *gin.Context) { } helper.SuccessWithData(c, appDetailDTO) } + +func (b *BaseApi) InstallApp(c *gin.Context) { + var req dto.AppInstallRequest + if err := c.ShouldBindJSON(&req); err != nil { + helper.ErrorWithDetail(c, constant.CodeErrBadRequest, constant.ErrTypeInvalidParams, err) + return + } + if err := appService.Install(req.AppDetailId, req.Params); err != nil { + helper.ErrorWithDetail(c, constant.CodeErrInternalServer, constant.ErrTypeInternalServer, err) + return + } + + helper.SuccessWithData(c, nil) +} +func (b *BaseApi) PageInstalled(c *gin.Context) { + var req dto.AppInstalledRequest + if err := c.ShouldBindJSON(&req); err != nil { + helper.ErrorWithDetail(c, constant.CodeErrBadRequest, constant.ErrTypeInvalidParams, err) + return + } + total, list, err := appService.PageInstalled(req) + if err != nil { + helper.ErrorWithDetail(c, constant.CodeErrInternalServer, constant.ErrTypeInternalServer, err) + return + } + + helper.SuccessWithData(c, dto.PageResult{ + Items: list, + Total: total, + }) +} diff --git a/backend/app/dto/app.go b/backend/app/dto/app.go index aa7ca34fb..d8decea7a 100644 --- a/backend/app/dto/app.go +++ b/backend/app/dto/app.go @@ -18,6 +18,7 @@ type AppDTO struct { type AppDetailDTO struct { model.AppDetail + Params interface{} `json:"params"` } type AppList struct { @@ -61,3 +62,20 @@ type AppRequest struct { Name string `json:"name"` Tags []string `json:"tags"` } + +type AppInstallRequest struct { + AppDetailId uint `json:"appDetailId" validate:"required"` + Params map[string]interface{} `json:"params"` +} + +type AppInstalled struct { + model.AppInstall + Total int `json:"total"` + Ready int `json:"ready"` + AppName string `json:"appName"` + Icon string `json:"icon"` +} + +type AppInstalledRequest struct { + PageInfo +} diff --git a/backend/app/model/app_detail.go b/backend/app/model/app_detail.go index b87311479..b3fd54554 100644 --- a/backend/app/model/app_detail.go +++ b/backend/app/model/app_detail.go @@ -4,7 +4,7 @@ type AppDetail struct { BaseModel AppId uint `json:"appId" gorm:"type:integer;not null"` Version string `json:"version" gorm:"type:varchar(64);not null"` - FormFields string `json:"formFields" gorm:"type:longtext;"` - DockerCompose string `json:"dockerCompose" gorm:"type:longtext;not null"` + Params string `json:"-" gorm:"type:longtext;"` + DockerCompose string `json:"-" gorm:"type:longtext;not null"` Readme string `json:"readme" gorm:"type:longtext;not null"` } diff --git a/backend/app/model/app_install.go b/backend/app/model/app_install.go new file mode 100644 index 000000000..5bdfe0400 --- /dev/null +++ b/backend/app/model/app_install.go @@ -0,0 +1,14 @@ +package model + +type AppInstall struct { + BaseModel + ContainerName string `json:"containerName" gorm:"type:varchar(256);not null"` + Version string `json:"version" gorm:"type:varchar(256);not null"` + AppId uint `json:"appId" gorm:"type:integer;not null"` + AppDetailId uint `json:"appDetailId" gorm:"type:integer;not null"` + Params string `json:"params" gorm:"type:longtext;not null"` + Status string `json:"status" gorm:"type:varchar(256);not null"` + Description string `json:"description" gorm:"type:varchar(256);not null"` + Message string `json:"message" gorm:"type:longtext;not null"` + App App `json:"-"` +} diff --git a/backend/app/repo/app_install.go b/backend/app/repo/app_install.go new file mode 100644 index 000000000..899155abf --- /dev/null +++ b/backend/app/repo/app_install.go @@ -0,0 +1,39 @@ +package repo + +import ( + "github.com/1Panel-dev/1Panel/app/model" + "github.com/1Panel-dev/1Panel/global" +) + +type AppInstallRepo struct{} + +func (a AppInstallRepo) GetBy(opts ...DBOption) ([]model.AppInstall, error) { + db := global.DB.Model(&model.AppInstall{}) + for _, opt := range opts { + db = opt(db) + } + var install []model.AppInstall + err := db.Find(&install).Error + return install, err +} + +func (a AppInstallRepo) Create(install model.AppInstall) error { + db := global.DB.Model(&model.AppInstall{}) + return db.Create(&install).Error +} +func (a AppInstallRepo) Save(install model.AppInstall) error { + db := global.DB.Model(&model.AppInstall{}) + return db.Save(&install).Error +} + +func (a AppInstallRepo) Page(page, size int, opts ...DBOption) (int64, []model.AppInstall, error) { + var apps []model.AppInstall + db := global.DB.Model(&model.AppInstall{}) + for _, opt := range opts { + db = opt(db) + } + count := int64(0) + db = db.Count(&count) + err := db.Debug().Limit(size).Offset(size * (page - 1)).Preload("App").Find(&apps).Error + return count, apps, err +} diff --git a/backend/app/repo/entry.go b/backend/app/repo/entry.go index 0e5811742..e51d71269 100644 --- a/backend/app/repo/entry.go +++ b/backend/app/repo/entry.go @@ -13,6 +13,7 @@ type RepoGroup struct { AppTagRepo TagRepo AppDetailRepo + AppInstallRepo } var RepoGroupApp = new(RepoGroup) diff --git a/backend/app/service/app.go b/backend/app/service/app.go index 8be73517e..ec91f5031 100644 --- a/backend/app/service/app.go +++ b/backend/app/service/app.go @@ -6,13 +6,18 @@ import ( "github.com/1Panel-dev/1Panel/app/dto" "github.com/1Panel-dev/1Panel/app/model" "github.com/1Panel-dev/1Panel/app/repo" + "github.com/1Panel-dev/1Panel/constant" "github.com/1Panel-dev/1Panel/global" "github.com/1Panel-dev/1Panel/utils/common" + "github.com/1Panel-dev/1Panel/utils/compose" + "github.com/1Panel-dev/1Panel/utils/files" + "github.com/joho/godotenv" "golang.org/x/net/context" "os" "path" "reflect" "sort" + "strconv" ) type AppService struct { @@ -105,6 +110,24 @@ func (a AppService) GetApp(id uint) (dto.AppDTO, error) { return appDTO, nil } +func (a AppService) PageInstalled(req dto.AppInstalledRequest) (int64, []dto.AppInstalled, error) { + total, installed, err := appInstallRepo.Page(req.Page, req.PageSize) + if err != nil { + return 0, nil, err + } + installDTOs := []dto.AppInstalled{} + for _, in := range installed { + installDto := dto.AppInstalled{ + AppInstall: in, + AppName: in.App.Name, + Icon: in.App.Icon, + } + installDTOs = append(installDTOs, installDto) + } + + return total, installDTOs, nil +} + func (a AppService) GetAppDetail(appId uint, version string) (dto.AppDetailDTO, error) { var ( @@ -117,11 +140,85 @@ func (a AppService) GetAppDetail(appId uint, version string) (dto.AppDetailDTO, if err != nil { return appDetailDTO, err } - + paramMap := make(map[string]interface{}) + json.Unmarshal([]byte(detail.Params), ¶mMap) appDetailDTO.AppDetail = detail + appDetailDTO.Params = paramMap return appDetailDTO, nil } +func (a AppService) Install(appDetailId uint, params map[string]interface{}) error { + appDetail, err := appDetailRepo.GetAppDetail(commonRepo.WithByID(appDetailId)) + if err != nil { + return err + } + app, err := appRepo.GetFirst(commonRepo.WithByID(appDetail.AppId)) + paramByte, err := json.Marshal(params) + if err != nil { + return err + } + containerName := constant.ContainerPrefix + app.Key + "-" + common.RandStr(6) + appInstall := model.AppInstall{ + AppId: appDetail.AppId, + AppDetailId: appDetail.ID, + Version: appDetail.Version, + Status: constant.Installing, + Params: string(paramByte), + ContainerName: containerName, + Message: "", + } + resourceDir := path.Join(global.CONF.System.ResourceDir, "apps", app.Key, appDetail.Version) + installDir := path.Join(global.CONF.System.AppDir, app.Key) + op := files.NewFileOp() + if err := op.CopyDir(resourceDir, installDir); err != nil { + return err + } + installAppDir := path.Join(installDir, appDetail.Version) + containerNameDir := path.Join(installDir, containerName) + if err := op.Rename(installAppDir, containerNameDir); err != nil { + return err + } + composeFilePath := path.Join(containerNameDir, "docker-compose.yml") + envPath := path.Join(containerNameDir, ".env") + + envParams := make(map[string]string, len(params)) + for k, v := range params { + switch t := v.(type) { + case string: + envParams[k] = t + case float64: + envParams[k] = strconv.FormatFloat(t, 'f', -1, 32) + default: + envParams[k] = t.(string) + } + } + envParams["CONTAINER_NAME"] = containerName + if err := godotenv.Write(envParams, envPath); err != nil { + return err + } + if err := appInstallRepo.Create(appInstall); err != nil { + return err + } + go upApp(composeFilePath, appInstall) + return nil +} + +func upApp(composeFilePath string, appInstall model.AppInstall) { + out, err := compose.Up(composeFilePath) + if err != nil { + if out != "" { + appInstall.Message = out + } else { + appInstall.Message = err.Error() + } + appInstall.Status = constant.Error + _ = appInstallRepo.Save(appInstall) + } else { + appInstall.Status = constant.Running + _ = appInstallRepo.Save(appInstall) + } +} + func (a AppService) Sync() error { //TODO 从 oss 拉取最新列表 var appConfig model.AppConfig @@ -204,11 +301,11 @@ func (a AppService) Sync() error { continue } detail.DockerCompose = string(dockerComposeStr) - formStr, err := os.ReadFile(path.Join(detailPath, "form.json")) + paramStr, err := os.ReadFile(path.Join(detailPath, "params.json")) if err != nil { global.LOG.Errorf("get [%s] form.json error: %s", detailPath, err.Error()) } - detail.FormFields = string(formStr) + detail.Params = string(paramStr) app.Details = append(app.Details, detail) } } diff --git a/backend/app/service/entry.go b/backend/app/service/entry.go index df2b934eb..d363a90db 100644 --- a/backend/app/service/entry.go +++ b/backend/app/service/entry.go @@ -30,4 +30,5 @@ var ( appTagRepo = repo.RepoGroupApp.AppTagRepo appDetailRepo = repo.RepoGroupApp.AppDetailRepo tagRepo = repo.RepoGroupApp.TagRepo + appInstallRepo = repo.AppInstallRepo{} ) diff --git a/backend/app/service/file.go b/backend/app/service/file.go index 0d08779b3..a40205b2f 100644 --- a/backend/app/service/file.go +++ b/backend/app/service/file.go @@ -1,14 +1,13 @@ package service import ( - "crypto/rand" "fmt" "github.com/1Panel-dev/1Panel/app/dto" "github.com/1Panel-dev/1Panel/global" + "github.com/1Panel-dev/1Panel/utils/common" "github.com/1Panel-dev/1Panel/utils/files" "github.com/pkg/errors" uuid "github.com/satori/go.uuid" - "io" "io/fs" "os" "path/filepath" @@ -36,14 +35,14 @@ func (f FileService) GetFileTree(op dto.FileOption) ([]dto.FileTree, error) { return nil, err } node := dto.FileTree{ - ID: getUuid(), + ID: common.GetUuid(), Name: info.Name, Path: info.Path, } for _, v := range info.Items { if v.IsDir { node.Children = append(node.Children, dto.FileTree{ - ID: getUuid(), + ID: common.GetUuid(), Name: v.Name, Path: v.Path, }) @@ -177,11 +176,3 @@ func (f FileService) DirSize(req dto.DirSizeReq) (dto.DirSizeRes, error) { } return dto.DirSizeRes{Size: size}, nil } - -func getUuid() string { - b := make([]byte, 16) - _, _ = io.ReadFull(rand.Reader, b) - b[6] = (b[6] & 0x0f) | 0x40 - b[8] = (b[8] & 0x3f) | 0x80 - return fmt.Sprintf("%x-%x-%x-%x-%x", b[0:4], b[4:6], b[6:8], b[8:10], b[10:]) -} diff --git a/backend/constant/app.go b/backend/constant/app.go new file mode 100644 index 000000000..3befe623d --- /dev/null +++ b/backend/constant/app.go @@ -0,0 +1,13 @@ +package constant + +const ( + Running = "Running" + Warning = "Warning" + Error = "Error" + Stopped = "Stopped" + Installing = "Installing" +) + +const ( + ContainerPrefix = "1Panel-" +) diff --git a/backend/go.sum b/backend/go.sum index eb6ad32df..c2a8c8279 100644 --- a/backend/go.sum +++ b/backend/go.sum @@ -276,6 +276,7 @@ github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHW github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= github.com/joho/godotenv v1.4.0 h1:3l4+N6zfMWnkbPEXKng2o2/MR5mSwTrBih4ZEkkz1lg= +github.com/joho/godotenv v1.4.0/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= diff --git a/backend/init/migration/migrations/init.go b/backend/init/migration/migrations/init.go index eb820ae24..d6719995e 100644 --- a/backend/init/migration/migrations/init.go +++ b/backend/init/migration/migrations/init.go @@ -150,6 +150,6 @@ var AddTableCronjob = &gormigrate.Migration{ var AddTableApp = &gormigrate.Migration{ ID: "20200921-add-table-app", Migrate: func(tx *gorm.DB) error { - return tx.AutoMigrate(&model.App{}, &model.AppDetail{}, &model.Tag{}, &model.AppTag{}, &model.AppConfig{}) + return tx.AutoMigrate(&model.App{}, &model.AppDetail{}, &model.Tag{}, &model.AppTag{}, &model.AppConfig{}, &model.AppInstall{}) }, } diff --git a/backend/router/ro_app.go b/backend/router/ro_app.go index cf16dd685..c51ed12c2 100644 --- a/backend/router/ro_app.go +++ b/backend/router/ro_app.go @@ -19,5 +19,7 @@ func (a *AppRouter) InitAppRouter(Router *gin.RouterGroup) { appRouter.POST("/search", baseApi.AppSearch) appRouter.GET("/:id", baseApi.GetApp) appRouter.GET("/detail/:appid/:version", baseApi.GetAppDetail) + appRouter.POST("/install", baseApi.InstallApp) + appRouter.POST("/installed", baseApi.PageInstalled) } } diff --git a/backend/utils/common/common.go b/backend/utils/common/common.go index 9ce9eb52c..da3135530 100644 --- a/backend/utils/common/common.go +++ b/backend/utils/common/common.go @@ -1,6 +1,10 @@ package common import ( + "crypto/rand" + "fmt" + "io" + mathRand "math/rand" "regexp" "strconv" "strings" @@ -38,3 +42,21 @@ func min(a, b int) int { } return b } + +func GetUuid() string { + b := make([]byte, 16) + _, _ = io.ReadFull(rand.Reader, b) + b[6] = (b[6] & 0x0f) | 0x40 + b[8] = (b[8] & 0x3f) | 0x80 + return fmt.Sprintf("%x-%x-%x-%x-%x", b[0:4], b[4:6], b[6:8], b[8:10], b[10:]) +} + +var letters = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890") + +func RandStr(n int) string { + b := make([]rune, n) + for i := range b { + b[i] = letters[mathRand.Intn(len(letters))] + } + return string(b) +} diff --git a/backend/utils/compose/compose.go b/backend/utils/compose/compose.go index e429b8625..593b5b9bc 100644 --- a/backend/utils/compose/compose.go +++ b/backend/utils/compose/compose.go @@ -6,7 +6,7 @@ func Up(filePath string) (string, error) { cmd := exec.Command("docker-compose", "-f", filePath, "up", "-d") stdout, err := cmd.CombinedOutput() if err != nil { - return "", err + return string(stdout), err } return string(stdout), nil } diff --git a/frontend/src/api/interface/app.ts b/frontend/src/api/interface/app.ts index c3565ca26..e3413da14 100644 --- a/frontend/src/api/interface/app.ts +++ b/frontend/src/api/interface/app.ts @@ -34,7 +34,7 @@ export namespace App { icon: string; version: string; readme: string; - formFields: string; + params: AppParams; dockerCompose: string; } @@ -42,4 +42,37 @@ export namespace App { name: string; tags: string[]; } + + export interface AppParams { + formFields: FromField[]; + } + + export interface FromField { + type: string; + labelZh: string; + labelEn: string; + required: boolean; + default: any; + envKey: string; + } + + export interface AppInstall { + appDetailId: number; + params: any; + } + + export interface AppInstalled extends CommonModel { + containerName: string; + version: string; + appId: string; + appDetailId: string; + params: string; + status: string; + description: string; + message: string; + appName: string; + total: number; + ready: number; + icon: string; + } } diff --git a/frontend/src/api/modules/app.ts b/frontend/src/api/modules/app.ts index 34bb645cf..5e25540e4 100644 --- a/frontend/src/api/modules/app.ts +++ b/frontend/src/api/modules/app.ts @@ -1,4 +1,5 @@ import http from '@/api'; +import { ReqPage, ResPage } from '../interface'; import { App } from '../interface/app'; export const SyncApp = () => { @@ -16,3 +17,11 @@ export const GetApp = (id: number) => { export const GetAppDetail = (id: number, version: string) => { return http.get('apps/detail/' + id + '/' + version); }; + +export const InstallApp = (install: App.AppInstall) => { + return http.post('apps/install', install); +}; + +export const GetAppInstalled = (info: ReqPage) => { + return http.post>('apps/installed', info); +}; diff --git a/frontend/src/components/complex-table/index.vue b/frontend/src/components/complex-table/index.vue index ad9d72817..902ad1258 100644 --- a/frontend/src/components/complex-table/index.vue +++ b/frontend/src/components/complex-table/index.vue @@ -22,7 +22,7 @@
- +
diff --git a/frontend/src/lang/modules/zh.ts b/frontend/src/lang/modules/zh.ts index 3813372df..bdb982e7d 100644 --- a/frontend/src/lang/modules/zh.ts +++ b/frontend/src/lang/modules/zh.ts @@ -394,5 +394,14 @@ export default { version: '版本', detail: '详情', install: '安装', + author: '作者', + source: '来源', + sync: '同步', + appName: '应用名称', + status: '状态', + container: '容器', + restart: '重启', + up: '启动', + down: '停止', }, }; diff --git a/frontend/src/views/app-store/apps/index.vue b/frontend/src/views/app-store/apps/index.vue new file mode 100644 index 000000000..652a44ecb --- /dev/null +++ b/frontend/src/views/app-store/apps/index.vue @@ -0,0 +1,137 @@ + + + + + diff --git a/frontend/src/views/app-store/detail/index.vue b/frontend/src/views/app-store/detail/index.vue index 25a79cb6a..d0ec7a6bf 100644 --- a/frontend/src/views/app-store/detail/index.vue +++ b/frontend/src/views/app-store/detail/index.vue @@ -28,15 +28,15 @@ - + - {{ app.author }} + {{ app.author }}
- {{ $t('app.install') }} + {{ $t('app.install') }}
@@ -46,6 +46,7 @@
+ @@ -53,6 +54,7 @@ import { GetApp, GetAppDetail } from '@/api/modules/app'; import LayoutContent from '@/layout/layout-content.vue'; import { onMounted, ref } from 'vue'; +import Install from './install.vue'; interface OperateProps { id: number; @@ -64,6 +66,7 @@ let app = ref({}); let appDetail = ref({}); let version = ref(''); let loadingDetail = ref(false); +const installRef = ref(); const getApp = () => { GetApp(props.id).then((res) => { @@ -88,6 +91,14 @@ const toLink = (link: string) => { window.open(link, '_blank'); }; +const openInstall = () => { + let params = { + params: appDetail.value.params, + appDetailId: appDetail.value.id, + }; + installRef.value.acceptParams(params); +}; + onMounted(() => { getApp(); }); diff --git a/frontend/src/views/app-store/detail/install.vue b/frontend/src/views/app-store/detail/install.vue new file mode 100644 index 000000000..cf0dee9dc --- /dev/null +++ b/frontend/src/views/app-store/detail/install.vue @@ -0,0 +1,94 @@ + + + diff --git a/frontend/src/views/app-store/index.vue b/frontend/src/views/app-store/index.vue index eb693c0c4..89d24eff9 100644 --- a/frontend/src/views/app-store/index.vue +++ b/frontend/src/views/app-store/index.vue @@ -1,108 +1,40 @@ diff --git a/frontend/src/views/host/file-management/process/index.vue b/frontend/src/views/host/file-management/process/index.vue index 413999576..df3a83c0f 100644 --- a/frontend/src/views/host/file-management/process/index.vue +++ b/frontend/src/views/host/file-management/process/index.vue @@ -64,7 +64,6 @@ const initProcess = () => { const getKeys = () => { FileKeys().then((res) => { - console.log(res); if (res.data.keys.length > 0) { keys.value = res.data.keys; initProcess();