diff --git a/models/cloudbrain.go b/models/cloudbrain.go index 8bb3357ae..b2eed744d 100755 --- a/models/cloudbrain.go +++ b/models/cloudbrain.go @@ -144,8 +144,10 @@ type Cloudbrain struct { CkptName string //权重文件名称 ResultUrl string //推理结果的obs路径 - User *User `xorm:"-"` - Repo *Repository `xorm:"-"` + User *User `xorm:"-"` + Repo *Repository `xorm:"-"` + BenchmarkTypeName string `xorm:"-"` + BenchmarkTypeRankLink string `xorm:"-"` } type CloudbrainInfo struct { @@ -407,9 +409,10 @@ type BenchmarkTypes struct { } type BenchmarkType struct { - Id int `json:"id"` - First string `json:"first"` //一级算法类型名称 - Second []*BenchmarkDataset `json:"second"` + Id int `json:"id"` + RankLink string `json:"rank_link"` + First string `json:"first"` //一级算法类型名称 + Second []*BenchmarkDataset `json:"second"` } type BenchmarkDataset struct { diff --git a/models/dataset_permission.go b/models/dataset_permission.go old mode 100644 new mode 100755 index a4c232d26..f9a1e61ff --- a/models/dataset_permission.go +++ b/models/dataset_permission.go @@ -4,26 +4,27 @@ package models -import ( - "code.gitea.io/gitea/modules/log" -) +import "code.gitea.io/gitea/modules/log" // GetUserDataSetPermission returns the user permissions to the data_set func GetUserDataSetPermission(dataSet *Dataset, user *User) (isPermit bool, err error) { isPermit = false - switch dataSet.Status { - case DatasetStatusDeleted: - log.Error("the data_set has been deleted") - case DatasetStatusPrivate: - if !user.IsAdmin && user.ID != dataSet.UserID { - log.Error("the user is not admin nor the owner of the data_set") + if user != nil { + switch dataSet.Status { + case DatasetStatusDeleted: + log.Error("the data_set has been deleted") + case DatasetStatusPrivate: + if !user.IsAdmin && user.ID != dataSet.UserID { + log.Error("the user is not admin nor the owner of the data_set") + } else { + isPermit = true + } + case DatasetStatusPublic: + isPermit = true + default: + log.Error("the status of data_set is wrong") } - isPermit = true - case DatasetStatusPublic: - isPermit = true - default: - log.Error("the status of data_set is wrong") } return isPermit, nil diff --git a/models/org.go b/models/org.go index e8006d55f..85fb157ae 100755 --- a/models/org.go +++ b/models/org.go @@ -180,8 +180,8 @@ func CreateOrganization(org, owner *User) (err error) { // Add initial creator to organization and owner team. if _, err = sess.Insert(&OrgUser{ - UID: owner.ID, - OrgID: org.ID, + UID: owner.ID, + OrgID: org.ID, IsPublic: setting.Service.DefaultOrgMemberVisible, }); err != nil { return fmt.Errorf("insert org-user relation: %v", err) diff --git a/models/topic.go b/models/topic.go index 5533da7bc..0b19bc1f0 100644 --- a/models/topic.go +++ b/models/topic.go @@ -324,3 +324,16 @@ func SaveTopics(repoID int64, topicNames ...string) error { return sess.Commit() } + +func GetOrgTopics(orgId int64) ([]Topic, error) { + result := make([]Topic, 0) + sql := "select distinct(t.*) from repository r " + + "inner join repo_topic rt on rt.repo_id = r.id " + + "inner join topic t on rt.topic_id = t.id " + + "where r.owner_id = ? order by repo_count desc limit 50" + if e := x.SQL(sql, orgId).Find(&result); e != nil { + return nil, e + } + + return result, nil +} diff --git a/modules/modelarts/resty.go b/modules/modelarts/resty.go index 65dd6fe6d..2f7d08c35 100755 --- a/modules/modelarts/resty.go +++ b/modules/modelarts/resty.go @@ -35,7 +35,8 @@ const ( //error code modelartsIllegalToken = "ModelArts.6401" NotebookNotFound = "ModelArts.6404" - NotebookNoPermission = "ModelArts.6403" + NotebookNoPermission = "ModelArts.6407" + NotebookInvalid = "ModelArts.6400" ) func getRestyClient() *resty.Client { diff --git a/modules/repository/fork.go b/modules/repository/fork.go index da9039d00..e3ebbfee2 100644 --- a/modules/repository/fork.go +++ b/modules/repository/fork.go @@ -86,5 +86,11 @@ func ForkRepository(doer, owner *models.User, oldRepo *models.Repository, name, if err := models.CopyLanguageStat(oldRepo, repo); err != nil { log.Error("Copy language stat from oldRepo failed") } + //inherit parent repo's topics + if len(oldRepo.Topics) > 0 { + if err := models.SaveTopics(repo.ID, oldRepo.Topics...); err != nil { + log.Error("SaveTopics failed when fork,e=%v", err) + } + } return repo, models.CopyLFS(ctx, repo, oldRepo) } diff --git a/options/locale/locale_en-US.ini b/options/locale/locale_en-US.ini index 0787e6ce6..fdd3f7f94 100755 --- a/options/locale/locale_en-US.ini +++ b/options/locale/locale_en-US.ini @@ -235,7 +235,7 @@ page_recommend_org_more=More Organizations page_recommend_repo=Recommended Projects page_recommend_repo_desc=Excellent AI projects recommendation. To show your project here, page_recommend_repo_commit=Click here to submit. -page_recommend_repo_go=Click here to +page_recommend_repo_go=Click here to page_recommend_repo_more=explore more projects. page_dev_env=Collaborative Development Environment page_dev_env_desc=Provide a collaborative development environment for AI development, which is the biggest highlight that distinguishes the OpenI AI Collaboration Platform from other traditional Git platforms. @@ -1254,6 +1254,7 @@ issues.filter_sort.moststars = Most stars issues.filter_sort.feweststars = Fewest stars issues.filter_sort.mostforks = Most forks issues.filter_sort.fewestforks = Fewest forks +issues.filter_sort.downloadtimes = Most downloaded issues.action_open = Open issues.action_close = Close issues.action_label = Label @@ -2088,14 +2089,17 @@ team_unit_disabled = (Disabled) selected_couse=Selected Courses release_course = Publish Course all_keywords=All keywords +all_org_topics=All max_selectedPro= Select up to 9 public projects -custom_select_courses = Customize selected courses +custom_select_courses = Customize selected courses recommend_remain_pro = Remain save_fail_tips = The upper limit is exceeded select_again = Select more than 9, please select again! -custom_select_projects = Customize selected projects +custom_select_projects = Customize selected projects customize = Customize selected_project=Selected Projects +fold = Fold +unfold = Unfold form.name_reserved = The organization name '%s' is reserved. form.name_pattern_not_allowed = The pattern '%s' is not allowed in an organization name. diff --git a/options/locale/locale_zh-CN.ini b/options/locale/locale_zh-CN.ini index 2eeb72735..982dc1a49 100755 --- a/options/locale/locale_zh-CN.ini +++ b/options/locale/locale_zh-CN.ini @@ -2096,6 +2096,7 @@ team_unit_disabled=(已禁用) selected_couse=精选课程 release_course = 发布课程 all_keywords=全部关键字 +all_org_topics=全部 max_selectedPro= 最多可选9个公开项目 custom_select_courses = 自定义精选课程 recommend_remain_pro = 还能推荐 @@ -2104,6 +2105,8 @@ select_again = 选择超过9个,请重新选择! custom_select_projects = 自定义精选项目 customize = 自定义 selected_project=精选项目 +fold = 折叠 +unfold = 展开 form.name_reserved=组织名称 '%s' 是被保留的。 form.name_pattern_not_allowed=组织名称中不允许使用 "%s"。 diff --git a/routers/org/home.go b/routers/org/home.go index c9769f559..3ffb4fd86 100755 --- a/routers/org/home.go +++ b/routers/org/home.go @@ -94,6 +94,13 @@ func Home(ctx *context.Context) { recommendCourseKeyWords, _ := repository.GetRecommendCourseKeyWords() ctx.Data["CoursesKeywords"] = recommendCourseKeyWords + } else { + orgTopics, err := models.GetOrgTopics(org.ID) + if err != nil { + ctx.Error(500, "GetOrgTopics failed") + return + } + ctx.Data["OrgTopics"] = orgTopics } repos, count, err = models.SearchRepository(&models.SearchRepoOptions{ diff --git a/routers/repo/cloudbrain.go b/routers/repo/cloudbrain.go index 4cde5d40d..a3ab2bbab 100755 --- a/routers/repo/cloudbrain.go +++ b/routers/repo/cloudbrain.go @@ -339,6 +339,8 @@ func CloudBrainBenchMarkShow(ctx *context.Context) { if benchmarkTypes == nil { if err := json.Unmarshal([]byte(setting.BenchmarkTypes), &benchmarkTypes); err != nil { log.Error("json.Unmarshal BenchmarkTypes(%s) failed:%v", setting.BenchmarkTypes, err, ctx.Data["MsgID"]) + ctx.ServerError(err.Error(), err) + return } } cloudBrainShow(ctx, tplCloudBrainBenchmarkShow) @@ -404,7 +406,7 @@ func cloudBrainShow(ctx *context.Context, tpName base.TplName) { } else { duration = int64(task.UpdatedUnix) - int64(task.CreatedUnix) } - if benchmarkTypes != nil { + if task.BenchmarkTypeID > 0 { for _, benchmarkType := range benchmarkTypes.BenchmarkType { if task.BenchmarkTypeID == benchmarkType.Id { ctx.Data["BenchmarkTypeName"] = benchmarkType.First @@ -1051,6 +1053,13 @@ func CloudBrainBenchmarkIndex(ctx *context.Context) { return } + if benchmarkTypes == nil { + if err := json.Unmarshal([]byte(setting.BenchmarkTypes), &benchmarkTypes); err != nil { + ctx.ServerError("Get BenchmarkTypes faild:", err) + return + } + } + for i, task := range ciTasks { ciTasks[i].CanDel = cloudbrain.CanDeleteJob(ctx, &task.Cloudbrain) ciTasks[i].Cloudbrain.ComputeResource = task.ComputeResource @@ -1061,6 +1070,16 @@ func CloudBrainBenchmarkIndex(ctx *context.Context) { duration = int64(task.Cloudbrain.UpdatedUnix) - int64(task.Cloudbrain.CreatedUnix) } ciTasks[i].TrainJobDuration = util.AddZero(duration/3600000) + ":" + util.AddZero(duration%3600000/60000) + ":" + util.AddZero(duration%60000/1000) + ciTasks[i].BenchmarkTypeName = "" + if task.BenchmarkTypeID > 0 { + for _, benchmarkType := range benchmarkTypes.BenchmarkType { + if task.BenchmarkTypeID == benchmarkType.Id { + ciTasks[i].BenchmarkTypeRankLink = benchmarkType.RankLink + ciTasks[i].BenchmarkTypeName = benchmarkType.First + break + } + } + } } pager := context.NewPagination(int(count), setting.UI.IssuePagingNum, page, 5) diff --git a/routers/repo/modelarts.go b/routers/repo/modelarts.go index ae21e89c7..044652b2f 100755 --- a/routers/repo/modelarts.go +++ b/routers/repo/modelarts.go @@ -431,7 +431,7 @@ func NotebookDel(ctx *context.Context) { if task.Status != string(models.ModelArtsCreateFailed) && task.Status != string(models.ModelArtsStartFailed) && task.Status != string(models.ModelArtsStopped) { log.Error("the job(%s) has not been stopped", task.JobName) - ctx.ServerError("the job has not been stopped", errors.New("the job has not been stopped")) + ctx.RenderWithErr("the job has not been stopped", tplDebugJobIndex, nil) return } @@ -441,17 +441,17 @@ func NotebookDel(ctx *context.Context) { _, err := modelarts.DelNotebook2(jobID) if err != nil { log.Error("DelNotebook2(%s) failed:%v", task.JobName, err.Error()) - if strings.Contains(err.Error(), modelarts.NotebookNotFound) || strings.Contains(err.Error(), modelarts.NotebookNoPermission) { + if strings.Contains(err.Error(), modelarts.NotebookNotFound) || strings.Contains(err.Error(), modelarts.NotebookNoPermission) || strings.Contains(err.Error(), modelarts.NotebookInvalid){ log.Info("old notebook version") } else { - ctx.ServerError("DelNotebook2 failed", err) + ctx.RenderWithErr(err.Error(), tplDebugJobIndex, nil) return } } err = models.DeleteJob(task) if err != nil { - ctx.ServerError("DeleteJob failed", err) + ctx.RenderWithErr(err.Error(), tplDebugJobIndex, nil) return } diff --git a/routers/routes/routes.go b/routers/routes/routes.go index 7fa06fa3b..4ef1e53e3 100755 --- a/routers/routes/routes.go +++ b/routers/routes/routes.go @@ -579,7 +579,7 @@ func RegisterRoutes(m *macaron.Macaron) { m.Group("", func() { m.Get("/attachments/:uuid", repo.GetAttachment) - }, reqSignIn) + }) m.Group("/attachments", func() { m.Post("", repo.UploadAttachment) diff --git a/templates/explore/repo_orgtop.tmpl b/templates/explore/repo_orgtop.tmpl index d9c29fd54..5706a92b8 100755 --- a/templates/explore/repo_orgtop.tmpl +++ b/templates/explore/repo_orgtop.tmpl @@ -53,8 +53,8 @@
- - 京东 + + 京东智能供应链开源工具
diff --git a/templates/org/home.tmpl b/templates/org/home.tmpl index 865a780a8..2715cb649 100755 --- a/templates/org/home.tmpl +++ b/templates/org/home.tmpl @@ -1,3 +1,4 @@ + {{template "base/head" .}}
{{/* overflow: auto is the clearfix - this avoids the image going beyond @@ -22,22 +23,54 @@
{{template "org/navber" .}} {{template "org/select_pro" .}} +
+ +
+
+
+ {{if .OrgTopics}} + {{$.i18n.Tr "org.all_org_topics"}} + {{end}} + + {{range .OrgTopics}} + {{if ne .Name ""}} + + {{.Name}} + + {{end}} + {{end}} + {{if .OrgTopics}} + + +  {{.i18n.Tr "org.unfold"}} + + {{end}} +
+ +
+
+
- {{if .CanCreateOrgRepo}} + {{template "org/repo_list" .}} {{template "base/paginate" .}}
-

+ {{if .CanCreateOrgRepo}} + + {{end}} +

{{.i18n.Tr "org.people"}}

{{template "base/footer" .}} + + \ No newline at end of file diff --git a/templates/org/home_courses.tmpl b/templates/org/home_courses.tmpl index 03ca8c41e..0f553687d 100644 --- a/templates/org/home_courses.tmpl +++ b/templates/org/home_courses.tmpl @@ -32,27 +32,13 @@ .organization-info >.container { padding-bottom:0px !important; } - .tag_bg{ - background-color: #0366D6 !important; - color:#FFFFFF !important; - } .course{ padding:10px 0 15px !important; } .course_color{ color: #FA8C16; } - .tag_lable{ - border: 1px solid rgba(232, 232, 232, 100) ; - border-radius: 4px; - color: rgba(65, 80, 88, 100); - font-family: Microsoft Yahei; - font-size: 14px; - padding: 0.3em 0.5em; - height: 30px; - text-align: center; - margin: 0.2em; - } + .tag_lable_first{ border: 1px solid rgba(232, 232, 232, 100) ; border-radius: 4px; @@ -65,17 +51,11 @@ margin: 0.2em; margin-left: none; } - .tag_key{ - max-width:100%; - margin: 3px 3px; - display:inline-flex; - } + .bpadding{ padding:10px 40px } - .omit{ - overflow: hidden; white-space: nowrap; text-overflow: ellipsis; - } + .noborder{ border: none !important; } @@ -83,7 +63,7 @@ text-align: center; margin-top: 5px; margin-top: 10px; - } + } diff --git a/templates/repo/cloudbrain/benchmark/index.tmpl b/templates/repo/cloudbrain/benchmark/index.tmpl old mode 100644 new mode 100755 index e0eb0a6f3..2fc12dc40 --- a/templates/repo/cloudbrain/benchmark/index.tmpl +++ b/templates/repo/cloudbrain/benchmark/index.tmpl @@ -39,7 +39,7 @@
- 基准测试排行榜 + 基准测试排行榜 {{if .Permission.CanWrite $.UnitTypeCloudBrain}} {{$.i18n.Tr "repo.modelarts.evaluate_job.new_job"}} {{else}} @@ -76,9 +76,12 @@ {{$.i18n.Tr "repo.modelarts.status"}}
- {{$.i18n.Tr "repo.modelarts.createtime"}} + {{.i18n.Tr "repo.cloudbrain.benchmark.evaluate_type"}}
+ {{$.i18n.Tr "repo.modelarts.createtime"}} +
+
{{$.i18n.Tr "repo.cloudbrain_status_runtime"}}
@@ -109,12 +112,17 @@ {{.Status}}
+
{{TimeSinceUnix .Cloudbrain.CreatedUnix $.Lang}}
-
+
{{.TrainJobDuration}}
@@ -149,6 +157,7 @@ 评分 +
diff --git a/templates/repo/cloudbrain/benchmark/new.tmpl b/templates/repo/cloudbrain/benchmark/new.tmpl index 3ea2641d8..51da4b10b 100755 --- a/templates/repo/cloudbrain/benchmark/new.tmpl +++ b/templates/repo/cloudbrain/benchmark/new.tmpl @@ -150,13 +150,13 @@
- 查看样例 + 查看样例
- 查看样例 + 查看样例
@@ -190,6 +190,13 @@ function setChildType(){ let type_id = $('#benchmark_types_id').val(); + if(type_id == 3){ + $('#train_href_id').attr('href','https://git.openi.org.cn/CV_benchmark/CV_MOT_benchmark'); + $('#test_href_id').attr('href','https://git.openi.org.cn/CV_benchmark/CV_MOT_benchmark'); + }else{ + $('#train_href_id').attr('href','https://git.openi.org.cn/CV_benchmark/CV_reID_benchmark'); + $('#test_href_id').attr('href','https://git.openi.org.cn/CV_benchmark/CV_reID_benchmark'); + } let child_selected_id = $('#benchmark_child_types_id_hidden').val(); $.get(`${repolink}/cloudbrain/benchmark/get_child_types?benchmark_type_id=${type_id}`, (data) => { const n_length = data['child_types'].length diff --git a/web_src/less/openi.less b/web_src/less/openi.less index 6598f5f40..1ff26dfad 100644 --- a/web_src/less/openi.less +++ b/web_src/less/openi.less @@ -734,4 +734,47 @@ display: block; } .el-pagination.is-background .el-pager li:hover { color: #5bb973 !important; - } \ No newline at end of file + } + +.tag_key{ + max-width:100%; + margin: 3px 3px; + display:inline-flex; +} +.tag_lable{ + border: 1px solid rgba(232, 232, 232, 100) ; + border-radius: 4px; + color: rgba(65, 80, 88, 100); + font-family: Microsoft Yahei; + font-size: 14px; + padding: 0.3em 0.5em; + height: 30px; + text-align: center; + margin: 0.2em; +} +.omit{ + overflow: hidden; white-space: nowrap; text-overflow: ellipsis; +} +.tag_bg{ + background-color: #0366D6 !important; + color:#FFFFFF !important; +} +.margin-bottom20{ + margin-bottom: 20px; +} +.maxheight{ + max-height: 88px; + overflow: hidden; +} +.pad-botom{ + padding-bottom:0px !important; +} +.icon_a{ + position: absolute; + right: 0; + bottom: .2em; + background: #FFF; + border: none !important; + color: #0366d6 !important; + box-shadow: -15px 0px 10px #fff; +} \ No newline at end of file