diff --git a/custom/public/css/git.openi.css b/custom/public/css/git.openi.css
index 3d7e15ada..3a4eff8e4 100755
--- a/custom/public/css/git.openi.css
+++ b/custom/public/css/git.openi.css
@@ -72,9 +72,7 @@
z-index: 10;
}
.ui.secondary.c2net.segment{
- /* background: #f8faff;
- border: none;*/
- margin-bottom: 5em;
+ padding-bottom: 3em;
padding-top: 2em;
color: rgba(0,0,0,.87);
background-image: linear-gradient(to bottom left,var(--tw-gradient-stops));
@@ -176,7 +174,7 @@
}
.homeorg, .homepro, .homemodel, .i-env{
position: relative;
- padding-bottom: 5em;
+ padding-bottom: 3em;
}
.homenews::before{
content: '';
@@ -203,7 +201,7 @@
padding: 0;
}
.newslist{
- height: 300px;
+ height: 260px;
overflow: hidden;
}
@@ -278,7 +276,7 @@
z-index: 9;
}
.homeorg-list .card{
- background-image: linear-gradient(#FFF, #FFF 60%, #DFF0EF) !important;
+ /* background-image: linear-gradient(#FFF, #FFF 60%, #DFF0EF) !important; */
box-shadow: none !important;
}
.homeorg-list .card .ui.small.header .content{
@@ -299,7 +297,7 @@
background-color: #FFF;
box-shadow: 0px 5px 10px 0px rgba(105, 192, 255, .3);
border: 1px solid rgba(105, 192, 255, .4);
- min-height: 10.8em;
+ /* min-height: 10.8em; */
}
.homepro-list .ui.card>.content>.header{
line-height: 40px !important;
@@ -307,7 +305,7 @@
.homepro-list .swiper-pagination-bullet-active, .homeorg-list .swiper-pagination-bullet-active{
width: 40px;
- border-radius: 4px;
+ border-radius: 4px;
}
.i-env > div{
position: relative;
@@ -317,6 +315,15 @@
}
@media only screen and (max-width: 767px) {
+ .mobile-margin-left-20 {
+ margin-left: 20px !important;
+ }
+ .mobile-text-align-center {
+ text-align: center !important;
+ }
+ .mobile-justify-content-center {
+ justify-content: center !important;
+ }
.am-mt-30{ margin-top: 1.5rem !important;}
.ui.secondary.hometop.segment{
margin-bottom: 5.0rem;
@@ -341,7 +348,7 @@
background: #FFF;
}
.homeorg{
- padding-left: 3.5em;
+ /* padding-left: 3.5em; */
}
.homeorg-tit::after {
left: -2.3em;
diff --git a/custom/public/img/home-banner-01-en.jpg b/custom/public/img/home-banner-01-en.jpg
new file mode 100644
index 000000000..59001d4f0
Binary files /dev/null and b/custom/public/img/home-banner-01-en.jpg differ
diff --git a/custom/public/img/home-banner-01.jpg b/custom/public/img/home-banner-01.jpg
new file mode 100644
index 000000000..1aa0563c4
Binary files /dev/null and b/custom/public/img/home-banner-01.jpg differ
diff --git a/custom/public/img/home-bg-ps.png b/custom/public/img/home-bg-ps.png
new file mode 100644
index 000000000..27e6ae1a1
Binary files /dev/null and b/custom/public/img/home-bg-ps.png differ
diff --git a/custom/public/img/logo-footer.svg b/custom/public/img/logo-footer.svg
new file mode 100644
index 000000000..3be0e5b18
--- /dev/null
+++ b/custom/public/img/logo-footer.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/custom/public/img/logo-w.svg b/custom/public/img/logo-w.svg
index 867acc1e2..133f63d23 100644
--- a/custom/public/img/logo-w.svg
+++ b/custom/public/img/logo-w.svg
@@ -1 +1,45 @@
-logo-w
\ No newline at end of file
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/models/dataset.go b/models/dataset.go
index 972503641..4c1dc24db 100755
--- a/models/dataset.go
+++ b/models/dataset.go
@@ -122,22 +122,22 @@ func (datasets DatasetList) loadAttachmentAttributes(opts *SearchDatasetOptions)
for i := range datasets {
if attachment.DatasetID == datasets[i].ID {
- if !attachment.IsPrivate{
+ if !attachment.IsPrivate {
datasets[i].Attachments = append(datasets[i].Attachments, attachment)
- }else{
+ } else {
permission, ok := permissionMap[datasets[i].ID]
if !ok {
permission = false
datasets[i].Repo.GetOwner()
if !permission {
- if datasets[i].Repo.OwnerID==opts.User.ID{
+ if datasets[i].Repo.OwnerID == opts.User.ID {
permission = true
- }else{
+ } else {
isCollaborator, _ := datasets[i].Repo.IsCollaborator(opts.User.ID)
- isInRepoTeam,_:=datasets[i].Repo.IsInRepoTeam(opts.User.ID)
+ isInRepoTeam, _ := datasets[i].Repo.IsInRepoTeam(opts.User.ID)
- if isCollaborator ||isInRepoTeam {
+ if isCollaborator || isInRepoTeam {
permission = true
}
}
@@ -603,3 +603,11 @@ func UpdateDatasetCreateUser(ID int64, user *User) error {
}
return nil
}
+
+func QueryDatasetGroupByTask() ([]map[string]interface{}, error) {
+ rows, err := x.QueryInterface("SELECT count(*) as total,task FROM public.dataset where task <>'' group by task order by total desc limit 7")
+ if err != nil {
+ return nil, err
+ }
+ return rows, nil
+}
diff --git a/models/repo_activity_custom.go b/models/repo_activity_custom.go
index b6fffca0e..26b2ea14f 100644
--- a/models/repo_activity_custom.go
+++ b/models/repo_activity_custom.go
@@ -263,7 +263,11 @@ func GetAllUserKPIStats(startTime time.Time, endTime time.Time) (map[string]*git
log.Warn("get user kpi status err:"+repository.RepoPath(), err1.Error())
continue
}
-
+ // if repository.Name == "yolov5" {
+ // log.Info("repoName=" + repository.Name + " owner=" + repository.RepoPath())
+ // authorsOneRepoJson, _ := json.Marshal(authorsOneRepo)
+ // log.Info("authorsOneRepoJson=" + string(authorsOneRepoJson))
+ // }
for key, value := range authorsOneRepo {
if _, ok := authors[key]; !ok {
authors[key] = &git.UserKPIStats{
diff --git a/options/locale/locale_en-US.ini b/options/locale/locale_en-US.ini
index 62c89986d..3f52cedbe 100755
--- a/options/locale/locale_en-US.ini
+++ b/options/locale/locale_en-US.ini
@@ -24,6 +24,7 @@ enable_javascript = This website works better with JavaScript.
toc = Table of Contents
return=Back OpenI
calculation_points = Calculation Points
+notice_announcement = Notice Announcement
username = Username
email = Email Address
@@ -236,7 +237,7 @@ page_title=Explore Better AI
page_small_title=OpenI AI Development Cooperation Platform
page_description=The one-stop collaborative development environment for AI field provides AI development pipeline integrating code development, data management, model debugging, reasoning and evaluation
page_use=Use Now
-page_only_dynamic=Only show the dynamics of open source projects
+page_only_dynamic=The dynamics of open source projects
page_recommend_org=Recommended Organizations
page_recommend_org_desc=These excellent organizations are using the OpenI AI Collaboration Platform for collaborative development of projects. To show your organization here,
page_recommend_org_commit=Click here to submit.
@@ -283,6 +284,7 @@ search_ge=
wecome_AI_plt = Welcome to OpenI AI Collaboration Platform!
explore_AI = Explore better AI, come here to find more interesting
datasets = Datasets
+datasets_descr = Open source dataset base, seamlessly integrated with your project. View all
repositories = Repositories
use_plt__fuction = To use the AI collaboration functions provided by this platform, such as: hosting code, sharing data, debugging algorithms or training models, start with
provide_resoure = Computing resources of CPU/GPU/NPU are provided freely for various types of AI tasks.
@@ -290,6 +292,12 @@ activity = Activity
no_events = There are no events related
or_t = or
powerdby=Powered_by Pengcheng CloudBrain、China Computing NET(C²NET)、
+experience_officer=Experience Officer
+openi_experience_officer_plan=OpenI AI experience officer growth plan
+more_benefits=, More benefits
+org_see=See
+more_notice=More notices
+vedio_detail=Video details
[explore]
repos = Repositories
@@ -3203,6 +3211,9 @@ foot.copyright= Copyright: New Generation Artificial Intelligence Open Source Op
Platform_Tutorial = Tutorial
foot.advice_feedback = Feedback
resource_description = Resource Note
+foot.openi_subscription_number = OpenI subscription number
+foot.user_communication_group = User communication group
+
[cloudbrain]
all_resource_cluster=All Cluster
all_ai_center=All Computing NET
diff --git a/options/locale/locale_zh-CN.ini b/options/locale/locale_zh-CN.ini
index 8a33d17a4..3e26ae251 100755
--- a/options/locale/locale_zh-CN.ini
+++ b/options/locale/locale_zh-CN.ini
@@ -24,6 +24,7 @@ enable_javascript=使用 JavaScript能使本网站更好的工作。
toc=目录
return=返回OpenI
calculation_points=算力积分
+notice_announcement=通知公告
username=用户名
email=电子邮件地址
@@ -238,7 +239,7 @@ page_title=探索更好的AI
page_small_title=启智AI协作平台
page_description=面向AI领域的一站式协同开发环境,提供集代码开发、数据管理、模型调试、推理和评测为一体的AI开发流水线
page_use=立即使用
-page_only_dynamic=仅展示开源项目动态
+page_only_dynamic=社区开源项目动态
page_recommend_org=推荐组织
page_recommend_org_desc=这些优秀的组织正在使用启智AI开发协作平台;你的组织也想展示到这里,
page_recommend_org_commit=点此提交
@@ -285,6 +286,7 @@ search_ge=个
wecome_AI_plt=欢迎来到启智AI协作平台!
explore_AI = 探索更好的AI,来这里发现更有意思的
datasets = 数据集
+datasets_descr=开源数据集大本营,同你的项目无缝集成。查看所有
repositories = 项目
use_plt__fuction = 使用本平台提供的AI协作功能,如:托管代码、共享数据、调试算法或训练模型,请先
provide_resoure = 平台目前提供CPU、GPU、NPU的普惠算力资源,可进行多种类型的AI任务。
@@ -293,7 +295,12 @@ activity = 活动
no_events = 还没有与您相关的活动
or_t = 或
powerdby=Powered_by 鹏城实验室云脑、中国算力网(C²NET)、
-
+experience_officer=体验官
+openi_experience_officer_plan=启智社区体验官成长计划
+more_benefits=,超多福利大放送
+org_see=。查看
+more_notice=更多通知
+vedio_detail=详细介绍视频
[explore]
repos=项目
@@ -3221,6 +3228,8 @@ foot.copyright= 版权所有:新一代人工智能开源开放平台(OpenI
Platform_Tutorial=新手指引
foot.advice_feedback = 意见反馈
resource_description = 资源说明
+foot.openi_subscription_number = 启智社区订阅号
+foot.user_communication_group = 用户交流群
[cloudbrain]
all_resource_cluster=全部集群
diff --git a/public/home/home.js b/public/home/home.js
index 853c3ef23..43eab17e0 100755
--- a/public/home/home.js
+++ b/public/home/home.js
@@ -9,16 +9,20 @@ if(isEmpty(token)){
var swiperNewMessage = new Swiper(".newslist", {
direction: "vertical",
- slidesPerView: 9,
+ slidesPerView: 6,
loop: true,
+ spaceBetween: 8,
autoplay: {
delay: 2500,
disableOnInteraction: false,
},
});
-var swiperEvent = new Swiper(".event-list", {
- slidesPerView: 3,
- spaceBetween: 30,
+
+var swiperRepo = new Swiper(".homepro-list", {
+ slidesPerView: 1,
+ // slidesPerColumn: 2,
+ // slidesPerColumnFill:'row',
+ spaceBetween: 20,
pagination: {
el: ".swiper-pagination",
clickable: true,
@@ -27,49 +31,130 @@ var swiperEvent = new Swiper(".event-list", {
delay: 2500,
disableOnInteraction: false,
},
+ breakpoints: {
+ 768: {
+ slidesPerView: 2,
+ },
+ 1024: {
+ slidesPerView: 2,
+ },
+ 1200: {
+ slidesPerView: 3,
+ },
+ 1440: {
+ slidesPerView: 3,
+ },
+ 1840: {
+ slidesPerView: 3,
+ },
+ 1920: {
+ slidesPerView: 3,
+ },
+ },
});
-var swiperRepo = new Swiper(".homepro-list", {
+
+var swiperOrg = new Swiper(".homeorg-list", {
slidesPerView: 1,
slidesPerColumn: 2,
slidesPerColumnFill:'row',
- spaceBetween: 30,
+ spaceBetween: 25,
pagination: {
el: ".swiper-pagination",
clickable: true,
},
autoplay: {
- delay: 2500,
+ delay: 4500,
disableOnInteraction: false,
},
breakpoints: {
768: {
- slidesPerView: 2,
+ slidesPerView: 3,
+ slidesPerColumn: 2,
},
1024: {
slidesPerView: 3,
+ slidesPerColumn: 2,
+ },
+ 1200: {
+ slidesPerView: 4,
+ slidesPerColumn: 2,
+ },
+ 1440: {
+ slidesPerView: 4,
+ slidesPerColumn: 2,
+ },
+ 1840: {
+ slidesPerView: 4,
+ slidesPerColumn: 2,
+ },
+ 1920: {
+ slidesPerView: 4,
+ slidesPerColumn: 2,
},
},
});
-var swiperOrg = new Swiper(".homeorg-list", {
+var swiperUserExp = new Swiper(".home-user-exp-list", {
slidesPerView: 1,
- slidesPerColumn: 4,
+ spaceBetween: 0,
+ navigation: {
+ nextEl: '.homeuserexp .swiper-prev',
+ prevEl: '.homeuserexp .swiper-next',
+ },
+ autoplay: {
+ delay: 2500,
+ disableOnInteraction: false,
+ },
+ breakpoints: {
+ 768: {
+ slidesPerView: 2,
+ },
+ 1200: {
+ slidesPerView: 3,
+ },
+ 1440: {
+ slidesPerView: 4,
+ },
+ 1840: {
+ slidesPerView: 4,
+ },
+ 1920: {
+ slidesPerView: 5,
+ },
+ },
+});
+
+var swiperDataset = new Swiper(".home-dataset-list", {
+ slidesPerView: 2,
+ slidesPerColumn: 1,
slidesPerColumnFill:'row',
- spaceBetween: 15,
+ spaceBetween: 30,
pagination: {
el: ".swiper-pagination",
clickable: true,
},
autoplay: {
- delay: 4500,
+ delay: 2500,
disableOnInteraction: false,
},
breakpoints: {
+ 676: {
+ slidesPerView: 3,
+ },
768: {
- slidesPerView: 2,
+ slidesPerView: 4,
},
- 1024: {
- slidesPerView: 3,
+ 1320: {
+ slidesPerView: 5,
+ },
+ 1520: {
+ slidesPerView: 6,
+ },
+ 1720: {
+ slidesPerView: 7,
+ },
+ 1920: {
+ slidesPerView: 7,
},
},
});
@@ -85,7 +170,7 @@ document.onreadystatechange = function () {
if(document.readyState != "complete"){
return;
}
- console.log("Start to open WebSocket." + document.readyState);
+ console.log("Start to open WebSocket." + document.readyState);
queryRecommendData();
var output = document.getElementById("newmessage");
@@ -101,6 +186,7 @@ document.onreadystatechange = function () {
};
socket.onmessage = function (e) {
+ if (!output) return;
var data =JSON.parse(e.data)
var html = "";
if (data != null){
@@ -177,18 +263,17 @@ document.onreadystatechange = function () {
var time = getTime(record.CreatedUnix,currentTime);
html += " " + time;
}
- html += "";
+ html += "";
html += "";
}
}
output.innerHTML = html;
+ $('#homenews p').show();
swiperNewMessage.updateSlides();
swiperNewMessage.updateProgress();
};
}
-
-
function getTaskLink(record){
var re = getRepoLink(record);
if(record.OpType == 24){
@@ -223,7 +308,7 @@ function getMsg(record){
}else{
console.log("act user is null.");
}
- html += " "
+ html += "
"
html += "
"
html += "
" + name + " "
return html;
@@ -236,6 +321,7 @@ function getRepotext(record){
return record.Repo.OwnerName + "/" + record.Repo.Name;
}
}
+
function getRepoLink(record){
return encodeURI(record.Repo.OwnerName + "/" + record.Repo.Name);
@@ -437,10 +523,6 @@ function getAction(opType,isZh){
}
}
-
-
-
-
function queryRecommendData(){
$.ajax({
type:"GET",
@@ -453,7 +535,10 @@ function queryRecommendData(){
success:function(json){
displayOrg(json.org);
displayRepo(json.repo);
- displayActivity(json.image);
+ displayActivity(json.activity);
+ displayDataset(json.dataset);
+ displayUserExp(json.user_experience);
+ LetterAvatar && LetterAvatar.transform();
},
error:function(response) {
}
@@ -463,49 +548,99 @@ function queryRecommendData(){
function displayActivity(json){
var activityDiv = document.getElementById("recommendactivity");
+ if (!activityDiv) return;
var html = "";
if (json != null && json.length > 0){
for(var i = 0; i < json.length;i++){
- var record = json[i]
- html += "
";
- html += "
";
- html += " "
+ var record = json[i];
+ var name = isZh ? (record["name"] || '') : (record["name_en"] || record["name"]);
+ html += "";
}
+ var swiperEvent = new Swiper(".event-list", {
+ slidesPerView: 1,
+ spaceBetween: 30,
+ // pagination: {
+ // el: ".swiper-pagination",
+ // clickable: true,
+ // },
+ autoplay: {
+ delay: 2500,
+ disableOnInteraction: false,
+ },
+ breakpoints: {
+ 768: {
+ slidesPerView: Math.min(2, json.length),
+ },
+ 1024: {
+ slidesPerView: Math.min(3, json.length),
+ },
+ 1200: {
+ slidesPerView: Math.min(3, json.length),
+ },
+ 1440: {
+ slidesPerView: Math.min(4, json.length),
+ },
+ 1840: {
+ slidesPerView: Math.min(4, json.length),
+ },
+ 1920: {
+ slidesPerView: Math.min(4, json.length),
+ },
+ },
+ });
+ activityDiv.innerHTML = html;
+ swiperEvent.updateSlides();
+ swiperEvent.updateProgress();
}
- activityDiv.innerHTML = html;
- swiperEvent.updateSlides();
- swiperEvent.updateProgress();
}
function displayRepo(json){
var orgRepo = document.getElementById("recommendrepo");
var html = "";
if (json != null && json.length > 0){
- for(var i = 0; i < json.length;i++){
- var record = json[i]
- html += "";
- html += "
";
- html += "
";
- html += "
";
- html += " " + record["NumStars"] + " " + record["NumForks"];
- html += " ";
- html += "
";
- html += " ";
- html += "
" + record["Description"] + "
";
- html += "
"
- if(record["Topics"] != null){
- for(var j = 0; j < record["Topics"].length; j++){
- topic = record["Topics"][j];
- url = "/explore/repos?q=" + (topic) + "&topic="
- html += "
" + topic + " ";
- }
+ var repoMap = {};
+ for (var i = 0, iLen = json.length; i < iLen; i++) {
+ var repo = json[i];
+ var labelSearch = repo.Label;
+ var label = isZh ? repo.Label : repo.Label_en;
+ if (repoMap[label]) {
+ repoMap[label].push(repo);
+ } else {
+ repoMap[label] = [repo];
}
- html += "
";
- html += "
";
- html += "
";
- html += "
";
+ }
+
+ for (var label in repoMap) {
+ var repos = repoMap[label];
+ html += ``;
+ for (var i = 0, iLen = repos.length; i < iLen; i++) {
+ if (i >= 4) break;
+ var repo = repos[i];
+ //
${repo["NumStars"]}
${repo["NumForks"]}
+ html += `
+
+ ${repo["Avatar"] ? `
` : `
`}
+
+
${repo["Description"]}
+ `;
+ // if (repo["Topics"] != null) {
+ // for(var j = 0; j < repo["Topics"].length; j++){
+ // var topic = repo["Topics"][j];
+ // var url = "/explore/repos?q=" + (topic) + "&topic="
+ // html += `
${topic} `;
+ // }
+ // }
+ html += `
+
+
`;
+ }
+ html += '
'
}
}
orgRepo.innerHTML = html;
@@ -513,7 +648,6 @@ function displayRepo(json){
swiperRepo.updateProgress();
}
-
function getRepoOrOrg(key,isZhLang,numbers=1){
if(numbers > 1){
key+="1";
@@ -537,7 +671,7 @@ function displayOrg(json){
html += " ";
html += " ";
html += "
" + record["Name"] + " " + record["FullName"];
- html += "
" + record["NumRepos"] +" " + getRepoOrOrg(1,isZh,record["NumRepos"]) + " ・ " + record["NumMembers"] +" " + getRepoOrOrg(2,isZh,record["NumMembers"]) + " ・ " + record["NumTeams"] + " " + getRepoOrOrg(3,isZh,record["NumTeams"]) + "
";
+ html += "
" + record["NumRepos"] +" " + getRepoOrOrg(1,isZh,record["NumRepos"]) + " ・ " + record["NumMembers"] +" " + getRepoOrOrg(2,isZh,record["NumMembers"]) + " ・ " + record["NumTeams"] + " " + getRepoOrOrg(3,isZh,record["NumTeams"]) + "
";
html += "
";
html += " ";
html += "
";
@@ -548,3 +682,173 @@ function displayOrg(json){
orgDiv.innerHTML = html;
swiperOrg.updateSlides();
}
+
+function displayDataset(data) {
+ var homeDatasetEl = document.getElementById("home_dataset");
+ if (!homeDatasetEl) return;
+ var html = '';
+ var svgStrMap = {
+ '0': '
',
+ '1': '
',
+ '2': '
',
+ '3': '
',
+ '4': '
',
+ '5': '
',
+ '6': '
',
+ }
+ for (var i = 0, iLen = data.length; i < iLen; i++) {
+ var dataI = data[i];
+ html += `
`
+ }
+ homeDatasetEl.innerHTML = html;
+ swiperDataset.updateSlides();
+ swiperDataset.updateProgress();
+}
+
+function displayUserExp(data) {
+ var homeUserExpEl = document.getElementById("home_user-exp");
+ if (!homeUserExpEl) return;
+ var html = '';
+ for (var i = 0, iLen = data.length; i < iLen; i++) {
+ var dataI = data[i];
+ html += `
+
+
+
${dataI.fullname || dataI.name}
+
+
+
`
+ }
+ homeUserExpEl.innerHTML = html;
+ swiperUserExp.updateSlides();
+ swiperUserExp.updateProgress();
+}
+
+function getNotice() {
+ $.ajax({
+ type:"GET",
+ url:"/dashboard/invitation",
+ headers: { authorization:token, },
+ dataType:"json",
+ data: {
+ filename: 'notice/notice.json',
+ },
+ success:function(json){
+ if (json) {
+ try {
+ var noticeList = JSON.parse(json).Notices || [];
+ var noticeEls = $('._hm-recommend-info-area-1 a._hm-notice');
+ for (var i = 0, iLen = noticeEls.length; i < iLen; i++) {
+ var noticeEl = noticeEls.eq(i);
+ var noticeObj = noticeList[i];
+ if (noticeObj) {
+ var title = isZh ? noticeObj.Title : (noticeObj.Title_en || noticeObj.Title);
+ noticeEl.attr('href', noticeObj.Link);
+ noticeEl.find('span').text(title).attr('title', title);
+ noticeEl.show();
+ } else {
+ noticeEl.hide();
+ }
+ }
+ } catch (e) {
+ console.info(e);
+ }
+ }
+ },
+ error:function(response) {
+ }
+ });
+}
+
+function getRecommendModule() {
+ $.ajax({
+ type:"GET",
+ url:"/dashboard/invitation",
+ headers: { authorization:token, },
+ dataType:"json",
+ data: {
+ filename: 'home/newfunction',
+ },
+ success:function(json){
+ if (json) {
+ try {
+ var recommendModuleList = JSON.parse(json) || [];
+ var recommendModuleEls = $('._hm-recommend-info-area a._hm-link');
+ for (var i = 0, iLen = recommendModuleEls.length; i < iLen; i++) {
+ var recommendModuleEl = recommendModuleEls.eq(i);
+ var recommendModuleObj = recommendModuleList[i];
+ if (recommendModuleObj) {
+ recommendModuleEl.attr('href', recommendModuleObj.image_link);
+ recommendModuleEl.text(isZh ? recommendModuleObj.name : (recommendModuleObj.name_en || recommendModuleObj.name));
+ } else {
+ }
+ }
+ } catch (e) {
+ console.info(e);
+ }
+ }
+ },
+ error:function(response) {
+ }
+ });
+}
+
+function initHomeTopBanner() {
+ var homeSlideTimer = null;
+ var homeSlideDuration = 8000;
+ function homeSlide(direction) {
+ var slidePages = $('._hm-pg-c ._hm-pg');
+ var currentPage = slidePages.filter('._hm-pg-show');
+ var currentIndex = currentPage.index();
+ var next = direction == 'left' ? currentIndex - 1 : currentIndex + 1;
+ if (next < 0) next = slidePages.length - 1;
+ if (next == slidePages.length) next = 0;
+ slidePages.removeClass('_hm-pg-show');
+ slidePages.eq(next).addClass('_hm-pg-show');
+ }
+
+ function startSlide() {
+ homeSlideTimer && clearTimeout(homeSlideTimer);
+ homeSlideTimer = setTimeout(function() {
+ homeSlide('right');
+ startSlide();
+ }, homeSlideDuration);
+ }
+
+ function stopSlide() {
+ homeSlideTimer && clearTimeout(homeSlideTimer);
+ }
+
+ $('._hm-slide-btn').on('click', function () {
+ if ($(this).hasClass('_hm-slide-btn-left')) {
+ homeSlide('left');
+ } else {
+ homeSlide('right');
+ }
+ startSlide();
+ });
+ $('._hm-pg #homenews').on('mouseenter', function() {
+ stopSlide();
+ }).on('mouseleave', function() {
+ startSlide();
+ });
+ setTimeout(function() { startSlide(); }, 500);
+}
+
+initHomeTopBanner();
+getNotice();
+getRecommendModule();
diff --git a/public/img/search.svg b/public/img/search.svg
index ec91b07dd..a4d965f9a 100644
--- a/public/img/search.svg
+++ b/public/img/search.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/routers/api/v1/repo/cloudbrain.go b/routers/api/v1/repo/cloudbrain.go
index cecb0ec27..f1b2751f8 100755
--- a/routers/api/v1/repo/cloudbrain.go
+++ b/routers/api/v1/repo/cloudbrain.go
@@ -636,7 +636,6 @@ func CloudbrainDownloadLogFile(ctx *context.Context) {
url, err := storage.Attachments.PresignedGetURL(prefix+"/"+fileName, fileName)
if err != nil {
log.Error("Get minio get SignedUrl failed: %v", err.Error(), ctx.Data["msgID"])
- ctx.ServerError("Get minio get SignedUrl failed", err)
return
}
log.Info("fileName=" + fileName)
@@ -720,7 +719,7 @@ func CloudbrainGetLog(ctx *context.APIContext) {
result = getLogFromModelDir(job.JobName, startLine, endLine, resultPath)
if result == nil {
log.Error("GetJobLog failed: %v", err, ctx.Data["MsgID"])
- ctx.ServerError(err.Error(), err)
+ //ctx.ServerError(err.Error(), err)
return
}
}
@@ -935,7 +934,7 @@ func CloudBrainModelConvertList(ctx *context.APIContext) {
err = json.Unmarshal([]byte(dirs), &fileInfos)
if err != nil {
log.Error("json.Unmarshal failed:%v", err.Error(), ctx.Data["msgID"])
- ctx.ServerError("json.Unmarshal failed:", err)
+ //ctx.ServerError("json.Unmarshal failed:", err)
return
}
@@ -966,7 +965,7 @@ func CloudBrainModelConvertList(ctx *context.APIContext) {
models, err := storage.GetObsListObject(job.ID, "output/", parentDir, versionName)
if err != nil {
log.Info("get TrainJobListModel failed:", err)
- ctx.ServerError("GetObsListObject:", err)
+ //ctx.ServerError("GetObsListObject:", err)
return
}
@@ -1011,7 +1010,7 @@ func CloudBrainModelList(ctx *context.APIContext) {
err = json.Unmarshal([]byte(dirs), &fileInfos)
if err != nil {
log.Error("json.Unmarshal failed:%v", err.Error(), ctx.Data["msgID"])
- ctx.ServerError("json.Unmarshal failed:", err)
+ //ctx.ServerError("json.Unmarshal failed:", err)
return
}
diff --git a/routers/home.go b/routers/home.go
index aab760611..092b30fe3 100755
--- a/routers/home.go
+++ b/routers/home.go
@@ -7,6 +7,7 @@ package routers
import (
"bytes"
+ "encoding/json"
"net/http"
"strconv"
"strings"
@@ -672,7 +673,7 @@ func NotFound(ctx *context.Context) {
}
func getRecommendOrg() ([]map[string]interface{}, error) {
- url := setting.RecommentRepoAddr + "organizations"
+ url := setting.RecommentRepoAddr + "home/organizations"
result, err := repository.RecommendFromPromote(url)
if err != nil {
@@ -745,7 +746,7 @@ func GetMapInfo(ctx *context.Context) {
}
func GetRankUser(index string) ([]map[string]interface{}, error) {
- url := setting.RecommentRepoAddr + "user_rank_" + index
+ url := setting.RecommentRepoAddr + "user_rank/user_rank_" + index
result, err := repository.RecommendFromPromote(url)
if err != nil {
@@ -756,13 +757,25 @@ func GetRankUser(index string) ([]map[string]interface{}, error) {
tmpIndex := strings.Index(userRank, " ")
userName := userRank
score := 0
+ label := ""
if tmpIndex != -1 {
userName = userRank[0:tmpIndex]
- tmpScore, err := strconv.Atoi(userRank[tmpIndex+1:])
- if err != nil {
- log.Info("convert to int error.")
+ left := userRank[tmpIndex+1:]
+ tmpIndex1 := strings.Index(left, " ")
+ if tmpIndex1 != -1 {
+ tmpScore, err := strconv.Atoi(left[0:tmpIndex1])
+ if err != nil {
+ log.Info("convert to int error.")
+ }
+ score = tmpScore
+ label = left[tmpIndex1+1:]
+ } else {
+ tmpScore, err := strconv.Atoi(left[tmpIndex+1:])
+ if err != nil {
+ log.Info("convert to int error.")
+ }
+ score = tmpScore
}
- score = tmpScore
}
user, err := models.GetUserByName(userName)
if err == nil {
@@ -772,6 +785,7 @@ func GetRankUser(index string) ([]map[string]interface{}, error) {
userMap["FullName"] = user.FullName
userMap["HomeLink"] = user.HomeLink()
userMap["ID"] = user.ID
+ userMap["Label"] = label
userMap["Avatar"] = user.RelAvatarLink()
userMap["Score"] = score
resultOrg = append(resultOrg, userMap)
@@ -792,25 +806,54 @@ func GetUserRankFromPromote(ctx *context.Context) {
ctx.JSON(200, resultUserRank)
}
+func getMapContent(fileName string) []map[string]string {
+ url := setting.RecommentRepoAddr + fileName
+ result, err := repository.RecommendContentFromPromote(url)
+ remap := make([]map[string]string, 0)
+ if err == nil {
+ json.Unmarshal([]byte(result), &remap)
+ }
+ return remap
+}
+
+func HomeNoticeTmpl(ctx *context.Context) {
+ ctx.Data["url_params"] = ""
+ ctx.HTML(200, "notice")
+}
+
func RecommendHomeInfo(ctx *context.Context) {
resultOrg, err := getRecommendOrg()
if err != nil {
log.Info("error." + err.Error())
}
- resultRepo, err := repository.GetRecommendRepoFromPromote("projects")
+ repoMap := getMapContent("home/projects")
+ resultRepo, err := repository.GetRecommendRepoFromPromote(repoMap)
if err != nil {
log.Info("error." + err.Error())
}
- resultImage, err := getImageInfo("picture_info")
- if err != nil {
- log.Info("error." + err.Error())
- }
-
+ resultActivityInfo := getMapContent("home/activity_info")
mapInterface := make(map[string]interface{})
mapInterface["org"] = resultOrg
mapInterface["repo"] = resultRepo
- mapInterface["image"] = resultImage
- //mapInterface["cloudbrain"] = resultCloudBrain
+ mapInterface["activity"] = resultActivityInfo
+
+ user_experience := getMapContent("home/user_experience")
+ for _, amap := range user_experience {
+ userId := amap["userid"]
+ userIntId, _ := strconv.Atoi(userId)
+ user, err := models.GetUserByID(int64(userIntId))
+ if err == nil {
+ amap["name"] = user.Name
+ amap["fullname"] = user.FullName
+ amap["detail"] = user.Description
+ amap["avatar"] = user.AvatarLink()
+ }
+ }
+ mapInterface["user_experience"] = user_experience
+ dataset, err := models.QueryDatasetGroupByTask()
+ if err == nil {
+ mapInterface["dataset"] = dataset
+ }
ctx.JSON(http.StatusOK, mapInterface)
}
@@ -824,4 +867,4 @@ func HomePrivacy(ctx *context.Context) {
func HomeResoruceDesc(ctx *context.Context) {
ctx.HTML(200, tplResoruceDesc)
-}
\ No newline at end of file
+}
diff --git a/routers/repo/ai_model_convert.go b/routers/repo/ai_model_convert.go
index 962c76aae..405f0ef89 100644
--- a/routers/repo/ai_model_convert.go
+++ b/routers/repo/ai_model_convert.go
@@ -828,5 +828,4 @@ func ModelConvertDownloadModel(ctx *context.Context) {
http.Redirect(ctx.Resp, ctx.Req.Request, url, http.StatusTemporaryRedirect)
}
}
-
}
diff --git a/routers/routes/routes.go b/routers/routes/routes.go
index a988e4849..60f0365ea 100755
--- a/routers/routes/routes.go
+++ b/routers/routes/routes.go
@@ -359,6 +359,7 @@ func RegisterRoutes(m *macaron.Macaron) {
m.Get("/all/dosearch/", routers.SearchApi)
m.Post("/user/login/kanban", user.SignInPostAPI)
m.Get("/home/term", routers.HomeTerm)
+ m.Get("/home/notice", routers.HomeNoticeTmpl)
m.Get("/home/privacy", routers.HomePrivacy)
m.Get("/extension/tuomin/upload", modelapp.ProcessImageUI)
m.Post("/extension/tuomin/upload", reqSignIn, modelapp.ProcessImage)
@@ -1273,8 +1274,8 @@ func RegisterRoutes(m *macaron.Macaron) {
m.Group("/modelsafety", func() {
m.Group("/:id", func() {
- m.Get("/show", reqRepoCloudBrainWriter, repo.GetAiSafetyTaskTmpl)
- m.Get("", reqRepoCloudBrainWriter, repo.GetAiSafetyTask)
+ m.Get("/show", reqRepoCloudBrainReader, repo.GetAiSafetyTaskTmpl)
+ m.Get("", reqRepoCloudBrainReader, repo.GetAiSafetyTask)
m.Post("/stop", cloudbrain.AdminOrOwnerOrJobCreaterRight, repo.StopAiSafetyTask)
m.Post("/del", cloudbrain.AdminOrOwnerOrJobCreaterRight, repo.DelAiSafetyTask)
})
diff --git a/services/repository/repository.go b/services/repository/repository.go
index b4c047392..db25010ea 100644
--- a/services/repository/repository.go
+++ b/services/repository/repository.go
@@ -107,18 +107,13 @@ func GetRecommendCourseKeyWords() ([]string, error) {
}
-func GetRecommendRepoFromPromote(filename string) ([]map[string]interface{}, error) {
+func GetRecommendRepoFromPromote(repoMap []map[string]string) ([]map[string]interface{}, error) {
resultRepo := make([]map[string]interface{}, 0)
- url := setting.RecommentRepoAddr + filename
- result, err := RecommendFromPromote(url)
-
- if err != nil {
-
- return resultRepo, err
- }
//resultRepo := make([]*models.Repository, 0)
- for _, repoName := range result {
+ for _, record := range repoMap {
+ repoName := record["project_url"]
+ //log.Info("repoName=" + repoName + " tmpIndex1=" + fmt.Sprint(tmpIndex1) + " len(repoName)=" + fmt.Sprint(len(repoName)))
tmpIndex := strings.Index(repoName, "/")
if tmpIndex == -1 {
log.Info("error repo name format.")
@@ -131,7 +126,8 @@ func GetRecommendRepoFromPromote(filename string) ([]map[string]interface{}, err
repoMap["ID"] = fmt.Sprint(repo.ID)
repoMap["Name"] = repo.Name
repoMap["Alias"] = repo.Alias
-
+ repoMap["Label"] = record["class"]
+ repoMap["Label_en"] = record["class_en"]
repoMap["OwnerName"] = repo.OwnerName
repoMap["NumStars"] = repo.NumStars
repoMap["NumForks"] = repo.NumForks
diff --git a/templates/base/footer_content.tmpl b/templates/base/footer_content.tmpl
index b4c8518c4..94940e7a9 100755
--- a/templates/base/footer_content.tmpl
+++ b/templates/base/footer_content.tmpl
@@ -1,15 +1,17 @@
-
+
-
+
+
+
+
-
+
+
+
+
+
{{.i18n.Tr "custom.foot.openi_subscription_number"}}
+
+
+
+
{{.i18n.Tr "custom.foot.user_communication_group"}}
+
+
+
+
+
{{.i18n.Tr "custom.foot.copyright"}}
京ICP备18004880号
{{.i18n.Tr "home.powerdby"}}
Trustie确实 {{.i18n.Tr "、Gitea"}}
@@ -69,4 +104,9 @@
+
diff --git a/templates/base/head.tmpl b/templates/base/head.tmpl
index 4ab9da231..f4766bc9d 100755
--- a/templates/base/head.tmpl
+++ b/templates/base/head.tmpl
@@ -240,6 +240,7 @@ var _hmt = _hmt || [];
}
}
if (isShowNoticeTag){
+ if (!document.getElementById("notic_content")) return;
if(isNewNotice){
document.getElementById("notic_content").style.display='block'
}else{
diff --git a/templates/base/head_home.tmpl b/templates/base/head_home.tmpl
index a77d7b00a..6456e2a4a 100644
--- a/templates/base/head_home.tmpl
+++ b/templates/base/head_home.tmpl
@@ -247,6 +247,7 @@ var _hmt = _hmt || [];
}
}
if (isShowNoticeTag){
+ if (!document.getElementById("notic_content")) return;
if(isNewNotice){
document.getElementById("notic_content").style.display='block'
}else{
diff --git a/templates/base/head_navbar.tmpl b/templates/base/head_navbar.tmpl
index 50521516f..e598d7ca4 100755
--- a/templates/base/head_navbar.tmpl
+++ b/templates/base/head_navbar.tmpl
@@ -1,5 +1,5 @@
-
+
@@ -7,15 +7,18 @@
-
-
+
-
-
-
{{if .IsSigned}}
{{else}}
@@ -224,14 +234,14 @@
diff --git a/templates/base/head_notice.tmpl b/templates/base/head_notice.tmpl
index 43c581e6e..9bd35bcb6 100644
--- a/templates/base/head_notice.tmpl
+++ b/templates/base/head_notice.tmpl
@@ -1,5 +1,5 @@
{{if not .IsCourse}}
- {{ if .notices}}
+ {{ if (and .notices (not .PageIsHome)) }}
diff --git a/templates/custom/home/home_activity.tmpl b/templates/custom/home/home_activity.tmpl
new file mode 100644
index 000000000..447aaafe7
--- /dev/null
+++ b/templates/custom/home/home_activity.tmpl
@@ -0,0 +1,36 @@
+
+
+
+
{{.page_recommend_activity}}
+
{{.page_recommend_activity_desc}}
+
+
+
diff --git a/templates/custom/home/home_dataset.tmpl b/templates/custom/home/home_dataset.tmpl
new file mode 100644
index 000000000..9fb1a04f0
--- /dev/null
+++ b/templates/custom/home/home_dataset.tmpl
@@ -0,0 +1,85 @@
+
+
diff --git a/templates/custom/home/home_org.tmpl b/templates/custom/home/home_org.tmpl
new file mode 100644
index 000000000..14c976cb1
--- /dev/null
+++ b/templates/custom/home/home_org.tmpl
@@ -0,0 +1,20 @@
+
+
diff --git a/templates/custom/home/home_repo.tmpl b/templates/custom/home/home_repo.tmpl
new file mode 100644
index 000000000..0a5e45f25
--- /dev/null
+++ b/templates/custom/home/home_repo.tmpl
@@ -0,0 +1,21 @@
+
+
diff --git a/templates/custom/home/home_top.tmpl b/templates/custom/home/home_top.tmpl
new file mode 100644
index 000000000..3d5b58167
--- /dev/null
+++ b/templates/custom/home/home_top.tmpl
@@ -0,0 +1,1942 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
* {{.page_only_dynamic}}
+
+
+
+
+
+
{{.i18n.Tr "home.page_title"}}
+
{{.i18n.Tr "home.page_description"}}
+
+
+
+
+
+
+
+
+
+
{{.i18n.Tr "home.c2net_title"}}
+
+
+
+
+
+
+
+
+
+
diff --git a/templates/custom/home/home_user_experience.tmpl b/templates/custom/home/home_user_experience.tmpl
new file mode 100644
index 000000000..edee8993d
--- /dev/null
+++ b/templates/custom/home/home_user_experience.tmpl
@@ -0,0 +1,133 @@
+
+
diff --git a/templates/explore/repos.tmpl b/templates/explore/repos.tmpl
index 23170b3d6..e55f0987e 100644
--- a/templates/explore/repos.tmpl
+++ b/templates/explore/repos.tmpl
@@ -1,9 +1,7 @@
-{{template "base/head_pro" .}}
+{{template "base/head_home" .}}
-
{{template "explore/repo_search" .}}
{{template "explore/repo_orgtop" .}}
-
{{template "explore/repo_left" .}}
diff --git a/templates/home.tmpl b/templates/home.tmpl
index c7485a214..c103bf1fc 100755
--- a/templates/home.tmpl
+++ b/templates/home.tmpl
@@ -1,91 +1,25 @@
{{template "base/head_home" .}}
-
+
+ {{template "custom/home/home_top" .}}
+
-
-
-
-
+ {{template "custom/home/home_org" .}}
-
-
{{.page_recommend_activity}}
-
{{.page_recommend_activity_desc}}
-
-
-
-
-
-
-
-
-
-
-
-
+
+ {{template "custom/home/home_repo" .}}
-
-
-
+
+ {{template "custom/home/home_dataset" .}}
+
+
+ {{template "custom/home/home_user_experience" .}}
+
+ {{template "custom/home/home_activity" .}}
+
+
+
-
+
+
-
-
+
{{.page_dev_env}}
{{.page_dev_env_desc}}
@@ -193,8 +127,10 @@
+
+
+
+
diff --git a/templates/notice.tmpl b/templates/notice.tmpl
new file mode 100644
index 000000000..564c96dd3
--- /dev/null
+++ b/templates/notice.tmpl
@@ -0,0 +1,81 @@
+
+{{template "base/head_home" .}}
+
+
+
{{.i18n.Tr "notice_announcement"}}
+
+
+
+{{template "base/footer" .}}
+
diff --git a/templates/repo/modelsafety/new.tmpl b/templates/repo/modelsafety/new.tmpl
index 94f52cc1f..467295fd8 100644
--- a/templates/repo/modelsafety/new.tmpl
+++ b/templates/repo/modelsafety/new.tmpl
@@ -217,7 +217,9 @@
{{end}}
{{else}}
{{range .engine_versions}}
-
{{.Value}}
+ {{if not (eq .ID -1)}}
+
{{.Value}}
+ {{end}}
{{end}}
{{end}}
diff --git a/web_src/js/features/i18nVue.js b/web_src/js/features/i18nVue.js
index 2983b3dc1..5e8c55e62 100644
--- a/web_src/js/features/i18nVue.js
+++ b/web_src/js/features/i18nVue.js
@@ -108,6 +108,8 @@ export const i18nVue = {
local:"本地",
online:"线上",
modify:"修改",
+ about:"约",
+ count:"个",
},
US: {
computer_vision: "computer vision",
@@ -222,5 +224,7 @@ export const i18nVue = {
local:"Local",
online:"Online",
modify:"Modify",
+ about:"About",
+ count:"",
},
};
diff --git a/web_src/js/index.js b/web_src/js/index.js
index 001644d92..9d67c5004 100755
--- a/web_src/js/index.js
+++ b/web_src/js/index.js
@@ -5207,4 +5207,22 @@ Fancybox.bind('.gallery img', {
// Custom animations
showClass: "fancybox-zoomIn",
hideClass: "fancybox-zoomOut",
-});
\ No newline at end of file
+});
+
+function initTopToHome() {
+ const topToHomeEl = $('.__go-top');
+ $(window).scroll(function (e) {
+ const scrollTop = $(document).scrollTop();
+ const winHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;
+ if (scrollTop > winHeight * 1.2) {
+ topToHomeEl.fadeIn();
+ } else {
+ topToHomeEl.fadeOut();
+ }
+ });
+ topToHomeEl.on('click', function() {
+ $('html').animate({ scrollTop: 0 }, 'slow', 'swing');
+ });
+}
+
+initTopToHome();
diff --git a/web_src/less/openi.less b/web_src/less/openi.less
index 329802d47..083d5e702 100644
--- a/web_src/less/openi.less
+++ b/web_src/less/openi.less
@@ -34,7 +34,7 @@ a {
}
.following.bar.dark {
- background-color: #363840;
+ background-color: rgb(16, 16, 16);
}
.ui.secondary.menu.dark .item {
color: #fff;
@@ -94,7 +94,7 @@ footer {
}
@media only screen and (min-width: 1600px) {
.ui.ui.ui.container:not(.fluid) {
- width: 1200px;
+ width: 1440px;
}
}
diff --git a/web_src/vuepages/pages/modelmanage/common/modelmanage-common-detail.vue b/web_src/vuepages/pages/modelmanage/common/modelmanage-common-detail.vue
index 995e2d83f..d78a4cfec 100644
--- a/web_src/vuepages/pages/modelmanage/common/modelmanage-common-detail.vue
+++ b/web_src/vuepages/pages/modelmanage/common/modelmanage-common-detail.vue
@@ -339,7 +339,7 @@ export default {
bootFile: trainTaskInfo.BootFile,
datasetName: trainTaskInfo.DatasetName,
parameters: parametersStr || '--',
- workServerNumber: trainTaskInfo.WorkServerNumber || '--',
+ workServerNumber: trainTaskInfo.WorkServerNumber || '1',
specStr: sepcStr || '--',
});
}