| @@ -112,7 +112,7 @@ type Cloudbrain struct { | |||||
| SubTaskName string | SubTaskName string | ||||
| ContainerID string | ContainerID string | ||||
| ContainerIp string | ContainerIp string | ||||
| CreatedUnix timeutil.TimeStamp `xorm:"INDEX created"` | |||||
| CreatedUnix timeutil.TimeStamp `xorm:"INDEX"` | |||||
| UpdatedUnix timeutil.TimeStamp `xorm:"INDEX updated"` | UpdatedUnix timeutil.TimeStamp `xorm:"INDEX updated"` | ||||
| Duration int64 `xorm:"DEFAULT 0"` //运行时长 单位秒 | Duration int64 `xorm:"DEFAULT 0"` //运行时长 单位秒 | ||||
| TrainJobDuration string `xorm:"DEFAULT '00:00:00'"` | TrainJobDuration string `xorm:"DEFAULT '00:00:00'"` | ||||
| @@ -185,6 +185,12 @@ func (task *Cloudbrain) ComputeAndSetDuration() { | |||||
| task.TrainJobDuration = ConvertDurationToStr(d) | task.TrainJobDuration = ConvertDurationToStr(d) | ||||
| } | } | ||||
| func (task *Cloudbrain) CorrectCreateUnix() { | |||||
| if task.StartTime > 0 && task.CreatedUnix > task.StartTime { | |||||
| task.CreatedUnix = task.StartTime | |||||
| } | |||||
| } | |||||
| func (task *Cloudbrain) IsTerminal() bool { | func (task *Cloudbrain) IsTerminal() bool { | ||||
| status := task.Status | status := task.Status | ||||
| return status == string(ModelArtsTrainJobCompleted) || status == string(ModelArtsTrainJobFailed) || status == string(ModelArtsTrainJobKilled) || status == string(ModelArtsStopped) || status == string(JobStopped) || status == string(JobFailed) || status == string(JobSucceeded) | return status == string(ModelArtsTrainJobCompleted) || status == string(ModelArtsTrainJobFailed) || status == string(ModelArtsTrainJobKilled) || status == string(ModelArtsStopped) || status == string(JobStopped) || status == string(JobFailed) || status == string(JobSucceeded) | ||||
| @@ -219,6 +225,7 @@ func ParseAndSetDurationFromCloudBrainOne(result JobResultPayload, task *Cloudbr | |||||
| task.EndTime = timeutil.TimeStamp(result.JobStatus.CompletedTime / 1000) | task.EndTime = timeutil.TimeStamp(result.JobStatus.CompletedTime / 1000) | ||||
| } | } | ||||
| } | } | ||||
| task.CorrectCreateUnix() | |||||
| task.ComputeAndSetDuration() | task.ComputeAndSetDuration() | ||||
| } | } | ||||
| @@ -1473,7 +1480,7 @@ func UpdateTrainJobVersion(job *Cloudbrain) error { | |||||
| func updateJobTrainVersion(e Engine, job *Cloudbrain) error { | func updateJobTrainVersion(e Engine, job *Cloudbrain) error { | ||||
| var sess *xorm.Session | var sess *xorm.Session | ||||
| sess = e.Where("job_id = ? AND version_name=?", job.JobID, job.VersionName) | sess = e.Where("job_id = ? AND version_name=?", job.JobID, job.VersionName) | ||||
| _, err := sess.Cols("status", "train_job_duration", "duration", "start_time", "end_time").Update(job) | |||||
| _, err := sess.Cols("status", "train_job_duration", "duration", "start_time", "end_time", "created_unix").Update(job) | |||||
| return err | return err | ||||
| } | } | ||||
| @@ -1562,7 +1569,7 @@ func UpdateInferenceJob(job *Cloudbrain) error { | |||||
| func updateInferenceJob(e Engine, job *Cloudbrain) error { | func updateInferenceJob(e Engine, job *Cloudbrain) error { | ||||
| var sess *xorm.Session | var sess *xorm.Session | ||||
| sess = e.Where("job_id = ?", job.JobID) | sess = e.Where("job_id = ?", job.JobID) | ||||
| _, err := sess.Cols("status", "train_job_duration", "duration", "start_time", "end_time").Update(job) | |||||
| _, err := sess.Cols("status", "train_job_duration", "duration", "start_time", "end_time", "created_unix").Update(job) | |||||
| return err | return err | ||||
| } | } | ||||
| func RestartCloudbrain(old *Cloudbrain, new *Cloudbrain) (err error) { | func RestartCloudbrain(old *Cloudbrain, new *Cloudbrain) (err error) { | ||||
| @@ -246,7 +246,7 @@ func QueryUserStaticDataByTableName(start int, pageSize int, tableName string, q | |||||
| } | } | ||||
| log.Info("query return total:" + fmt.Sprint(allCount)) | log.Info("query return total:" + fmt.Sprint(allCount)) | ||||
| userBusinessAnalysisAllList := make([]*UserBusinessAnalysisAll, 0) | userBusinessAnalysisAllList := make([]*UserBusinessAnalysisAll, 0) | ||||
| if err := statictisSess.Table(tableName).Where(cond).OrderBy("commit_count desc,id desc").Limit(pageSize, start). | |||||
| if err := statictisSess.Table(tableName).Where(cond).OrderBy("user_index desc,id desc").Limit(pageSize, start). | |||||
| Find(&userBusinessAnalysisAllList); err != nil { | Find(&userBusinessAnalysisAllList); err != nil { | ||||
| return nil, 0 | return nil, 0 | ||||
| } | } | ||||
| @@ -448,6 +448,9 @@ func refreshUserStaticTable(wikiCountMap map[string]int, tableName string, pageS | |||||
| var indexTotal int64 | var indexTotal int64 | ||||
| indexTotal = 0 | indexTotal = 0 | ||||
| insertCount := 0 | insertCount := 0 | ||||
| userIndexMap := make(map[int64]float64, 0) | |||||
| maxUserIndex := 0.0 | |||||
| minUserIndex := 100000000.0 | |||||
| dateRecordBatch := make([]UserBusinessAnalysisAll, 0) | dateRecordBatch := make([]UserBusinessAnalysisAll, 0) | ||||
| for { | for { | ||||
| sess.Select("`user`.*").Table("user").Where(cond).OrderBy("id asc").Limit(PAGE_SIZE, int(indexTotal)) | sess.Select("`user`.*").Table("user").Where(cond).OrderBy("id asc").Limit(PAGE_SIZE, int(indexTotal)) | ||||
| @@ -494,7 +497,13 @@ func refreshUserStaticTable(wikiCountMap map[string]int, tableName string, pageS | |||||
| dateRecordAll.GpuBenchMarkJob = getMapKeyStringValue(fmt.Sprint(dateRecordAll.ID)+"_GpuBenchMarkJob", CloudBrainTaskItemMap) | dateRecordAll.GpuBenchMarkJob = getMapKeyStringValue(fmt.Sprint(dateRecordAll.ID)+"_GpuBenchMarkJob", CloudBrainTaskItemMap) | ||||
| dateRecordAll.CommitModelCount = getMapValue(dateRecordAll.ID, AiModelManageMap) | dateRecordAll.CommitModelCount = getMapValue(dateRecordAll.ID, AiModelManageMap) | ||||
| dateRecordAll.UserIndex = getUserIndexFromAnalysisAll(dateRecordAll, ParaWeight) | dateRecordAll.UserIndex = getUserIndexFromAnalysisAll(dateRecordAll, ParaWeight) | ||||
| userIndexMap[dateRecordAll.ID] = dateRecordAll.UserIndex | |||||
| if maxUserIndex < dateRecordAll.UserIndex { | |||||
| maxUserIndex = dateRecordAll.UserIndex | |||||
| } | |||||
| if minUserIndex > dateRecordAll.UserIndex { | |||||
| minUserIndex = dateRecordAll.UserIndex | |||||
| } | |||||
| dateRecordBatch = append(dateRecordBatch, dateRecordAll) | dateRecordBatch = append(dateRecordBatch, dateRecordAll) | ||||
| if len(dateRecordBatch) >= BATCH_INSERT_SIZE { | if len(dateRecordBatch) >= BATCH_INSERT_SIZE { | ||||
| insertTable(dateRecordBatch, tableName, statictisSess) | insertTable(dateRecordBatch, tableName, statictisSess) | ||||
| @@ -523,9 +532,19 @@ func refreshUserStaticTable(wikiCountMap map[string]int, tableName string, pageS | |||||
| } | } | ||||
| } | } | ||||
| //normalization | |||||
| for k, v := range userIndexMap { | |||||
| tmpResult := (v - minUserIndex) / (maxUserIndex - minUserIndex) | |||||
| updateUserIndex(tableName, statictisSess, k, tmpResult) | |||||
| } | |||||
| log.Info("refresh data finished.tableName=" + tableName + " total record:" + fmt.Sprint(insertCount)) | log.Info("refresh data finished.tableName=" + tableName + " total record:" + fmt.Sprint(insertCount)) | ||||
| } | } | ||||
| func updateUserIndex(tableName string, statictisSess *xorm.Session, userId int64, userIndex float64) { | |||||
| updateSql := "UPDATE public." + tableName + " set user_index=" + fmt.Sprint(userIndex) + " where id=" + fmt.Sprint(userId) | |||||
| statictisSess.Exec(updateSql) | |||||
| } | |||||
| func insertTable(dateRecords []UserBusinessAnalysisAll, tableName string, statictisSess *xorm.Session) { | func insertTable(dateRecords []UserBusinessAnalysisAll, tableName string, statictisSess *xorm.Session) { | ||||
| insertBatchSql := "INSERT INTO public." + tableName + | insertBatchSql := "INSERT INTO public." + tableName + | ||||
| @@ -50,6 +50,7 @@ func SendDecompressAttachToLabelOBS(attach string) error { | |||||
| _, err := redisclient.Do("Publish", setting.DecompressOBSTaskName, attach) | _, err := redisclient.Do("Publish", setting.DecompressOBSTaskName, attach) | ||||
| if err != nil { | if err != nil { | ||||
| log.Critical("redis Publish failed.") | log.Critical("redis Publish failed.") | ||||
| return err | |||||
| } | } | ||||
| log.Info("LabelDecompressOBSQueue(%s) success", attach) | log.Info("LabelDecompressOBSQueue(%s) success", attach) | ||||
| @@ -438,6 +438,7 @@ var ( | |||||
| //home page | //home page | ||||
| RecommentRepoAddr string | RecommentRepoAddr string | ||||
| ESSearchURL string | ESSearchURL string | ||||
| INDEXPOSTFIX string | |||||
| //notice config | //notice config | ||||
| UserNameOfNoticeRepo string | UserNameOfNoticeRepo string | ||||
| RepoNameOfNoticeRepo string | RepoNameOfNoticeRepo string | ||||
| @@ -1268,6 +1269,7 @@ func NewContext() { | |||||
| sec = Cfg.Section("homepage") | sec = Cfg.Section("homepage") | ||||
| RecommentRepoAddr = sec.Key("Address").MustString("https://git.openi.org.cn/OpenIOSSG/promote/raw/branch/master/") | RecommentRepoAddr = sec.Key("Address").MustString("https://git.openi.org.cn/OpenIOSSG/promote/raw/branch/master/") | ||||
| ESSearchURL = sec.Key("ESSearchURL").MustString("http://192.168.207.94:9200") | ESSearchURL = sec.Key("ESSearchURL").MustString("http://192.168.207.94:9200") | ||||
| INDEXPOSTFIX = sec.Key("INDEXPOSTFIX").MustString("") | |||||
| sec = Cfg.Section("notice") | sec = Cfg.Section("notice") | ||||
| UserNameOfNoticeRepo = sec.Key("USER_NAME").MustString("OpenIOSSG") | UserNameOfNoticeRepo = sec.Key("USER_NAME").MustString("OpenIOSSG") | ||||
| @@ -30,6 +30,8 @@ type FileInfo struct { | |||||
| } | } | ||||
| type FileInfoList []FileInfo | type FileInfoList []FileInfo | ||||
| const MAX_LIST_PARTS = 1000 | |||||
| func (ulist FileInfoList) Swap(i, j int) { ulist[i], ulist[j] = ulist[j], ulist[i] } | func (ulist FileInfoList) Swap(i, j int) { ulist[i], ulist[j] = ulist[j], ulist[i] } | ||||
| func (ulist FileInfoList) Len() int { return len(ulist) } | func (ulist FileInfoList) Len() int { return len(ulist) } | ||||
| func (ulist FileInfoList) Less(i, j int) bool { | func (ulist FileInfoList) Less(i, j int) bool { | ||||
| @@ -97,29 +99,48 @@ func CompleteObsMultiPartUpload(uuid, uploadID, fileName string) error { | |||||
| input.Bucket = setting.Bucket | input.Bucket = setting.Bucket | ||||
| input.Key = strings.TrimPrefix(path.Join(setting.BasePath, path.Join(uuid[0:1], uuid[1:2], uuid, fileName)), "/") | input.Key = strings.TrimPrefix(path.Join(setting.BasePath, path.Join(uuid[0:1], uuid[1:2], uuid, fileName)), "/") | ||||
| input.UploadId = uploadID | input.UploadId = uploadID | ||||
| output, err := ObsCli.ListParts(&obs.ListPartsInput{ | |||||
| Bucket: setting.Bucket, | |||||
| Key: input.Key, | |||||
| UploadId: uploadID, | |||||
| }) | |||||
| if err != nil { | |||||
| log.Error("ListParts failed:", err.Error()) | |||||
| return err | |||||
| } | |||||
| for _, partInfo := range output.Parts { | |||||
| input.Parts = append(input.Parts, obs.Part{ | |||||
| PartNumber: partInfo.PartNumber, | |||||
| ETag: partInfo.ETag, | |||||
| partNumberMarker := 0 | |||||
| for { | |||||
| output, err := ObsCli.ListParts(&obs.ListPartsInput{ | |||||
| Bucket: setting.Bucket, | |||||
| Key: input.Key, | |||||
| UploadId: uploadID, | |||||
| MaxParts: MAX_LIST_PARTS, | |||||
| PartNumberMarker: partNumberMarker, | |||||
| }) | }) | ||||
| if err != nil { | |||||
| log.Error("ListParts failed:", err.Error()) | |||||
| return err | |||||
| } | |||||
| partNumberMarker = output.NextPartNumberMarker | |||||
| log.Info("uuid:%s, MaxParts:%d, PartNumberMarker:%d, NextPartNumberMarker:%d, len:%d", uuid, output.MaxParts, output.PartNumberMarker, output.NextPartNumberMarker, len(output.Parts)) | |||||
| for _, partInfo := range output.Parts { | |||||
| input.Parts = append(input.Parts, obs.Part{ | |||||
| PartNumber: partInfo.PartNumber, | |||||
| ETag: partInfo.ETag, | |||||
| }) | |||||
| } | |||||
| if len(output.Parts) < output.MaxParts { | |||||
| break | |||||
| } else { | |||||
| continue | |||||
| } | |||||
| break | |||||
| } | } | ||||
| _, err = ObsCli.CompleteMultipartUpload(input) | |||||
| output, err := ObsCli.CompleteMultipartUpload(input) | |||||
| if err != nil { | if err != nil { | ||||
| log.Error("CompleteMultipartUpload failed:", err.Error()) | log.Error("CompleteMultipartUpload failed:", err.Error()) | ||||
| return err | return err | ||||
| } | } | ||||
| log.Info("uuid:%s, RequestId:%s", uuid, output.RequestId) | |||||
| return nil | return nil | ||||
| } | } | ||||
| @@ -74,6 +74,7 @@ func GetModelArtsNotebook2(ctx *context.APIContext) { | |||||
| if job.EndTime == 0 && models.IsModelArtsDebugJobTerminal(job.Status) { | if job.EndTime == 0 && models.IsModelArtsDebugJobTerminal(job.Status) { | ||||
| job.EndTime = timeutil.TimeStampNow() | job.EndTime = timeutil.TimeStampNow() | ||||
| } | } | ||||
| job.CorrectCreateUnix() | |||||
| job.ComputeAndSetDuration() | job.ComputeAndSetDuration() | ||||
| err = models.UpdateJob(job) | err = models.UpdateJob(job) | ||||
| if err != nil { | if err != nil { | ||||
| @@ -160,6 +161,7 @@ func GetModelArtsTrainJobVersion(ctx *context.APIContext) { | |||||
| } | } | ||||
| if result.JobStatus.State != string(models.JobWaiting) { | if result.JobStatus.State != string(models.JobWaiting) { | ||||
| models.ParseAndSetDurationFromCloudBrainOne(result, job) | |||||
| err = models.UpdateJob(job) | err = models.UpdateJob(job) | ||||
| if err != nil { | if err != nil { | ||||
| log.Error("UpdateJob failed:", err) | log.Error("UpdateJob failed:", err) | ||||
| @@ -177,14 +179,12 @@ func GetModelArtsTrainJobVersion(ctx *context.APIContext) { | |||||
| } | } | ||||
| job.Status = modelarts.TransTrainJobStatus(result.IntStatus) | job.Status = modelarts.TransTrainJobStatus(result.IntStatus) | ||||
| job.Duration = result.Duration / 1000 | job.Duration = result.Duration / 1000 | ||||
| job.TrainJobDuration = result.TrainJobDuration | |||||
| job.TrainJobDuration = models.ConvertDurationToStr(job.Duration) | job.TrainJobDuration = models.ConvertDurationToStr(job.Duration) | ||||
| if job.EndTime == 0 && models.IsTrainJobTerminal(job.Status) && job.StartTime > 0 { | if job.EndTime == 0 && models.IsTrainJobTerminal(job.Status) && job.StartTime > 0 { | ||||
| job.EndTime = job.StartTime.Add(job.Duration) | job.EndTime = job.StartTime.Add(job.Duration) | ||||
| } | } | ||||
| job.CorrectCreateUnix() | |||||
| err = models.UpdateTrainJobVersion(job) | err = models.UpdateTrainJobVersion(job) | ||||
| if err != nil { | if err != nil { | ||||
| log.Error("UpdateJob failed:", err) | log.Error("UpdateJob failed:", err) | ||||
| @@ -417,7 +417,7 @@ func GetModelArtsInferenceJob(ctx *context.APIContext) { | |||||
| if job.EndTime == 0 && models.IsTrainJobTerminal(job.Status) && job.StartTime > 0 { | if job.EndTime == 0 && models.IsTrainJobTerminal(job.Status) && job.StartTime > 0 { | ||||
| job.EndTime = job.StartTime.Add(job.Duration) | job.EndTime = job.StartTime.Add(job.Duration) | ||||
| } | } | ||||
| job.CorrectCreateUnix() | |||||
| err = models.UpdateInferenceJob(job) | err = models.UpdateInferenceJob(job) | ||||
| if err != nil { | if err != nil { | ||||
| log.Error("UpdateJob failed:", err) | log.Error("UpdateJob failed:", err) | ||||
| @@ -78,7 +78,7 @@ func UploadAttachmentUI(ctx *context.Context) { | |||||
| } | } | ||||
| func EditAttachmentUI(ctx *context.Context) { | func EditAttachmentUI(ctx *context.Context) { | ||||
| id, _ := strconv.ParseInt(ctx.Params(":id"), 10, 64) | id, _ := strconv.ParseInt(ctx.Params(":id"), 10, 64) | ||||
| ctx.Data["PageIsDataset"] = true | ctx.Data["PageIsDataset"] = true | ||||
| attachment, _ := models.GetAttachmentByID(id) | attachment, _ := models.GetAttachmentByID(id) | ||||
| @@ -986,23 +986,29 @@ func HandleUnDecompressAttachment() { | |||||
| if attach.Type == models.TypeCloudBrainOne { | if attach.Type == models.TypeCloudBrainOne { | ||||
| err = worker.SendDecompressTask(contexExt.Background(), attach.UUID, attach.Name) | err = worker.SendDecompressTask(contexExt.Background(), attach.UUID, attach.Name) | ||||
| if err != nil { | if err != nil { | ||||
| log.Error("SendDecompressTask(%s) failed:%s", attach.UUID, err.Error()) | |||||
| log.Error("SendDecompressTask(%s) failed:%s", attach.UUID, err.Error()) | |||||
| } else { | } else { | ||||
| attach.DecompressState = models.DecompressStateIng | |||||
| err = models.UpdateAttachment(attach) | |||||
| if err != nil { | |||||
| log.Error("UpdateAttachment state(%s) failed:%s", attach.UUID, err.Error()) | |||||
| } | |||||
| updateAttachmentDecompressStateIng(attach) | |||||
| } | } | ||||
| } else if attach.Type == models.TypeCloudBrainTwo { | } else if attach.Type == models.TypeCloudBrainTwo { | ||||
| attachjson, _ := json.Marshal(attach) | attachjson, _ := json.Marshal(attach) | ||||
| labelmsg.SendDecompressAttachToLabelOBS(string(attachjson)) | |||||
| err = labelmsg.SendDecompressAttachToLabelOBS(string(attachjson)) | |||||
| if err != nil { | |||||
| log.Error("SendDecompressTask to labelsystem (%s) failed:%s", attach.UUID, err.Error()) | |||||
| } else { | |||||
| updateAttachmentDecompressStateIng(attach) | |||||
| } | |||||
| } | } | ||||
| } | } | ||||
| return | return | ||||
| } | } | ||||
| func updateAttachmentDecompressStateIng(attach *models.Attachment) { | |||||
| attach.DecompressState = models.DecompressStateIng | |||||
| err := models.UpdateAttachment(attach) | |||||
| if err != nil { | |||||
| log.Error("UpdateAttachment state(%s) failed:%s", attach.UUID, err.Error()) | |||||
| } | |||||
| } | |||||
| func QueryAllPublicDataset(ctx *context.Context) { | func QueryAllPublicDataset(ctx *context.Context) { | ||||
| attachs, err := models.GetAllPublicAttachments() | attachs, err := models.GetAllPublicAttachments() | ||||
| @@ -1386,6 +1386,7 @@ func SyncCloudbrainStatus() { | |||||
| if task.EndTime == 0 && models.IsModelArtsDebugJobTerminal(task.Status) { | if task.EndTime == 0 && models.IsModelArtsDebugJobTerminal(task.Status) { | ||||
| task.EndTime = timeutil.TimeStampNow() | task.EndTime = timeutil.TimeStampNow() | ||||
| } | } | ||||
| task.CorrectCreateUnix() | |||||
| task.ComputeAndSetDuration() | task.ComputeAndSetDuration() | ||||
| err = models.UpdateJob(task) | err = models.UpdateJob(task) | ||||
| if err != nil { | if err != nil { | ||||
| @@ -1412,7 +1413,7 @@ func SyncCloudbrainStatus() { | |||||
| if task.EndTime == 0 && models.IsTrainJobTerminal(task.Status) && task.StartTime > 0 { | if task.EndTime == 0 && models.IsTrainJobTerminal(task.Status) && task.StartTime > 0 { | ||||
| task.EndTime = task.StartTime.Add(task.Duration) | task.EndTime = task.StartTime.Add(task.Duration) | ||||
| } | } | ||||
| task.CorrectCreateUnix() | |||||
| err = models.UpdateJob(task) | err = models.UpdateJob(task) | ||||
| if err != nil { | if err != nil { | ||||
| log.Error("UpdateJob(%s) failed:%v", task.JobName, err) | log.Error("UpdateJob(%s) failed:%v", task.JobName, err) | ||||
| @@ -1534,6 +1535,7 @@ func handleNoDurationTask(cloudBrains []*models.Cloudbrain) { | |||||
| task.StartTime = timeutil.TimeStamp(startTime / 1000) | task.StartTime = timeutil.TimeStamp(startTime / 1000) | ||||
| task.EndTime = task.StartTime.Add(duration) | task.EndTime = task.StartTime.Add(duration) | ||||
| } | } | ||||
| task.CorrectCreateUnix() | |||||
| task.ComputeAndSetDuration() | task.ComputeAndSetDuration() | ||||
| err = models.UpdateJob(task) | err = models.UpdateJob(task) | ||||
| if err != nil { | if err != nil { | ||||
| @@ -41,24 +41,24 @@ func queryUserDataPage(ctx *context.Context, tableName string, queryObj interfac | |||||
| "A1": ctx.Tr("user.static.id"), | "A1": ctx.Tr("user.static.id"), | ||||
| "B1": ctx.Tr("user.static.name"), | "B1": ctx.Tr("user.static.name"), | ||||
| "C1": ctx.Tr("user.static.codemergecount"), | "C1": ctx.Tr("user.static.codemergecount"), | ||||
| "D1": ctx.Tr("user.static.commitcount"), | |||||
| "E1": ctx.Tr("user.static.issuecount"), | |||||
| "F1": ctx.Tr("user.static.commentcount"), | |||||
| "G1": ctx.Tr("user.static.focusrepocount"), | |||||
| "H1": ctx.Tr("user.static.starrepocount"), | |||||
| "I1": ctx.Tr("user.static.logincount"), | |||||
| "J1": ctx.Tr("user.static.watchedcount"), | |||||
| "K1": ctx.Tr("user.static.commitcodesize"), | |||||
| "L1": ctx.Tr("user.static.solveissuecount"), | |||||
| "M1": ctx.Tr("user.static.encyclopediascount"), | |||||
| "N1": ctx.Tr("user.static.createrepocount"), | |||||
| "O1": ctx.Tr("user.static.openiindex"), | |||||
| "P1": ctx.Tr("user.static.registdate"), | |||||
| "Q1": ctx.Tr("user.static.CloudBrainTaskNum"), | |||||
| "R1": ctx.Tr("user.static.CloudBrainRunTime"), | |||||
| "S1": ctx.Tr("user.static.CommitDatasetNum"), | |||||
| "T1": ctx.Tr("user.static.CommitModelCount"), | |||||
| "U1": ctx.Tr("user.static.UserIndex"), | |||||
| "D1": ctx.Tr("user.static.UserIndex"), | |||||
| "E1": ctx.Tr("user.static.commitcount"), | |||||
| "F1": ctx.Tr("user.static.issuecount"), | |||||
| "G1": ctx.Tr("user.static.commentcount"), | |||||
| "H1": ctx.Tr("user.static.focusrepocount"), | |||||
| "I1": ctx.Tr("user.static.starrepocount"), | |||||
| "J1": ctx.Tr("user.static.logincount"), | |||||
| "K1": ctx.Tr("user.static.watchedcount"), | |||||
| "L1": ctx.Tr("user.static.commitcodesize"), | |||||
| "M1": ctx.Tr("user.static.solveissuecount"), | |||||
| "N1": ctx.Tr("user.static.encyclopediascount"), | |||||
| "O1": ctx.Tr("user.static.createrepocount"), | |||||
| "P1": ctx.Tr("user.static.openiindex"), | |||||
| "Q1": ctx.Tr("user.static.registdate"), | |||||
| "R1": ctx.Tr("user.static.CloudBrainTaskNum"), | |||||
| "S1": ctx.Tr("user.static.CloudBrainRunTime"), | |||||
| "T1": ctx.Tr("user.static.CommitDatasetNum"), | |||||
| "U1": ctx.Tr("user.static.CommitModelCount"), | |||||
| "V1": ctx.Tr("user.static.countdate"), | "V1": ctx.Tr("user.static.countdate"), | ||||
| } | } | ||||
| for k, v := range dataHeader { | for k, v := range dataHeader { | ||||
| @@ -78,28 +78,27 @@ func queryUserDataPage(ctx *context.Context, tableName string, queryObj interfac | |||||
| xlsx.SetCellValue(sheetName, "A"+rows, userRecord.ID) | xlsx.SetCellValue(sheetName, "A"+rows, userRecord.ID) | ||||
| xlsx.SetCellValue(sheetName, "B"+rows, userRecord.Name) | xlsx.SetCellValue(sheetName, "B"+rows, userRecord.Name) | ||||
| xlsx.SetCellValue(sheetName, "C"+rows, userRecord.CodeMergeCount) | xlsx.SetCellValue(sheetName, "C"+rows, userRecord.CodeMergeCount) | ||||
| xlsx.SetCellValue(sheetName, "D"+rows, userRecord.CommitCount) | |||||
| xlsx.SetCellValue(sheetName, "E"+rows, userRecord.IssueCount) | |||||
| xlsx.SetCellValue(sheetName, "F"+rows, userRecord.CommentCount) | |||||
| xlsx.SetCellValue(sheetName, "G"+rows, userRecord.FocusRepoCount) | |||||
| xlsx.SetCellValue(sheetName, "H"+rows, userRecord.StarRepoCount) | |||||
| xlsx.SetCellValue(sheetName, "I"+rows, userRecord.LoginCount) | |||||
| xlsx.SetCellValue(sheetName, "J"+rows, userRecord.WatchedCount) | |||||
| xlsx.SetCellValue(sheetName, "K"+rows, userRecord.CommitCodeSize) | |||||
| xlsx.SetCellValue(sheetName, "L"+rows, userRecord.SolveIssueCount) | |||||
| xlsx.SetCellValue(sheetName, "M"+rows, userRecord.EncyclopediasCount) | |||||
| xlsx.SetCellValue(sheetName, "N"+rows, userRecord.CreateRepoCount) | |||||
| xlsx.SetCellValue(sheetName, "O"+rows, fmt.Sprintf("%.2f", userRecord.OpenIIndex)) | |||||
| xlsx.SetCellValue(sheetName, "D"+rows, fmt.Sprintf("%.2f", userRecord.UserIndex)) | |||||
| xlsx.SetCellValue(sheetName, "E"+rows, userRecord.CommitCount) | |||||
| xlsx.SetCellValue(sheetName, "F"+rows, userRecord.IssueCount) | |||||
| xlsx.SetCellValue(sheetName, "G"+rows, userRecord.CommentCount) | |||||
| xlsx.SetCellValue(sheetName, "H"+rows, userRecord.FocusRepoCount) | |||||
| xlsx.SetCellValue(sheetName, "I"+rows, userRecord.StarRepoCount) | |||||
| xlsx.SetCellValue(sheetName, "J"+rows, userRecord.LoginCount) | |||||
| xlsx.SetCellValue(sheetName, "K"+rows, userRecord.WatchedCount) | |||||
| xlsx.SetCellValue(sheetName, "L"+rows, userRecord.CommitCodeSize) | |||||
| xlsx.SetCellValue(sheetName, "M"+rows, userRecord.SolveIssueCount) | |||||
| xlsx.SetCellValue(sheetName, "N"+rows, userRecord.EncyclopediasCount) | |||||
| xlsx.SetCellValue(sheetName, "O"+rows, userRecord.CreateRepoCount) | |||||
| xlsx.SetCellValue(sheetName, "P"+rows, fmt.Sprintf("%.2f", userRecord.OpenIIndex)) | |||||
| formatTime := userRecord.RegistDate.Format("2006-01-02 15:04:05") | formatTime := userRecord.RegistDate.Format("2006-01-02 15:04:05") | ||||
| xlsx.SetCellValue(sheetName, "P"+rows, formatTime[0:len(formatTime)-3]) | |||||
| xlsx.SetCellValue(sheetName, "Q"+rows, userRecord.CloudBrainTaskNum) | |||||
| xlsx.SetCellValue(sheetName, "R"+rows, fmt.Sprintf("%.2f", float64(userRecord.CloudBrainRunTime)/3600)) | |||||
| xlsx.SetCellValue(sheetName, "S"+rows, userRecord.CommitDatasetNum) | |||||
| xlsx.SetCellValue(sheetName, "T"+rows, userRecord.CommitModelCount) | |||||
| xlsx.SetCellValue(sheetName, "U"+rows, fmt.Sprintf("%.2f", userRecord.UserIndex)) | |||||
| xlsx.SetCellValue(sheetName, "Q"+rows, formatTime[0:len(formatTime)-3]) | |||||
| xlsx.SetCellValue(sheetName, "R"+rows, userRecord.CloudBrainTaskNum) | |||||
| xlsx.SetCellValue(sheetName, "S"+rows, fmt.Sprintf("%.2f", float64(userRecord.CloudBrainRunTime)/3600)) | |||||
| xlsx.SetCellValue(sheetName, "T"+rows, userRecord.CommitDatasetNum) | |||||
| xlsx.SetCellValue(sheetName, "U"+rows, userRecord.CommitModelCount) | |||||
| formatTime = userRecord.DataDate | formatTime = userRecord.DataDate | ||||
| xlsx.SetCellValue(sheetName, "V"+rows, formatTime) | xlsx.SetCellValue(sheetName, "V"+rows, formatTime) | ||||
| } | } | ||||
| @@ -243,24 +242,24 @@ func QueryUserStaticDataPage(ctx *context.Context) { | |||||
| "A1": ctx.Tr("user.static.id"), | "A1": ctx.Tr("user.static.id"), | ||||
| "B1": ctx.Tr("user.static.name"), | "B1": ctx.Tr("user.static.name"), | ||||
| "C1": ctx.Tr("user.static.codemergecount"), | "C1": ctx.Tr("user.static.codemergecount"), | ||||
| "D1": ctx.Tr("user.static.commitcount"), | |||||
| "E1": ctx.Tr("user.static.issuecount"), | |||||
| "F1": ctx.Tr("user.static.commentcount"), | |||||
| "G1": ctx.Tr("user.static.focusrepocount"), | |||||
| "H1": ctx.Tr("user.static.starrepocount"), | |||||
| "I1": ctx.Tr("user.static.logincount"), | |||||
| "J1": ctx.Tr("user.static.watchedcount"), | |||||
| "K1": ctx.Tr("user.static.commitcodesize"), | |||||
| "L1": ctx.Tr("user.static.solveissuecount"), | |||||
| "M1": ctx.Tr("user.static.encyclopediascount"), | |||||
| "N1": ctx.Tr("user.static.createrepocount"), | |||||
| "O1": ctx.Tr("user.static.openiindex"), | |||||
| "P1": ctx.Tr("user.static.registdate"), | |||||
| "Q1": ctx.Tr("user.static.CloudBrainTaskNum"), | |||||
| "R1": ctx.Tr("user.static.CloudBrainRunTime"), | |||||
| "S1": ctx.Tr("user.static.CommitDatasetNum"), | |||||
| "T1": ctx.Tr("user.static.CommitModelCount"), | |||||
| "U1": ctx.Tr("user.static.UserIndex"), | |||||
| "D1": ctx.Tr("user.static.UserIndex"), | |||||
| "E1": ctx.Tr("user.static.commitcount"), | |||||
| "F1": ctx.Tr("user.static.issuecount"), | |||||
| "G1": ctx.Tr("user.static.commentcount"), | |||||
| "H1": ctx.Tr("user.static.focusrepocount"), | |||||
| "I1": ctx.Tr("user.static.starrepocount"), | |||||
| "J1": ctx.Tr("user.static.logincount"), | |||||
| "K1": ctx.Tr("user.static.watchedcount"), | |||||
| "L1": ctx.Tr("user.static.commitcodesize"), | |||||
| "M1": ctx.Tr("user.static.solveissuecount"), | |||||
| "N1": ctx.Tr("user.static.encyclopediascount"), | |||||
| "O1": ctx.Tr("user.static.createrepocount"), | |||||
| "P1": ctx.Tr("user.static.openiindex"), | |||||
| "Q1": ctx.Tr("user.static.registdate"), | |||||
| "R1": ctx.Tr("user.static.CloudBrainTaskNum"), | |||||
| "S1": ctx.Tr("user.static.CloudBrainRunTime"), | |||||
| "T1": ctx.Tr("user.static.CommitDatasetNum"), | |||||
| "U1": ctx.Tr("user.static.CommitModelCount"), | |||||
| "V1": ctx.Tr("user.static.countdate"), | "V1": ctx.Tr("user.static.countdate"), | ||||
| } | } | ||||
| for k, v := range dataHeader { | for k, v := range dataHeader { | ||||
| @@ -274,26 +273,26 @@ func QueryUserStaticDataPage(ctx *context.Context) { | |||||
| xlsx.SetCellValue(sheetName, "A"+rows, userRecord.ID) | xlsx.SetCellValue(sheetName, "A"+rows, userRecord.ID) | ||||
| xlsx.SetCellValue(sheetName, "B"+rows, userRecord.Name) | xlsx.SetCellValue(sheetName, "B"+rows, userRecord.Name) | ||||
| xlsx.SetCellValue(sheetName, "C"+rows, userRecord.CodeMergeCount) | xlsx.SetCellValue(sheetName, "C"+rows, userRecord.CodeMergeCount) | ||||
| xlsx.SetCellValue(sheetName, "D"+rows, userRecord.CommitCount) | |||||
| xlsx.SetCellValue(sheetName, "E"+rows, userRecord.IssueCount) | |||||
| xlsx.SetCellValue(sheetName, "F"+rows, userRecord.CommentCount) | |||||
| xlsx.SetCellValue(sheetName, "G"+rows, userRecord.FocusRepoCount) | |||||
| xlsx.SetCellValue(sheetName, "H"+rows, userRecord.StarRepoCount) | |||||
| xlsx.SetCellValue(sheetName, "I"+rows, userRecord.LoginCount) | |||||
| xlsx.SetCellValue(sheetName, "J"+rows, userRecord.WatchedCount) | |||||
| xlsx.SetCellValue(sheetName, "K"+rows, userRecord.CommitCodeSize) | |||||
| xlsx.SetCellValue(sheetName, "L"+rows, userRecord.SolveIssueCount) | |||||
| xlsx.SetCellValue(sheetName, "M"+rows, userRecord.EncyclopediasCount) | |||||
| xlsx.SetCellValue(sheetName, "N"+rows, userRecord.CreateRepoCount) | |||||
| xlsx.SetCellValue(sheetName, "O"+rows, fmt.Sprintf("%.2f", userRecord.OpenIIndex)) | |||||
| xlsx.SetCellValue(sheetName, "D"+rows, fmt.Sprintf("%.2f", userRecord.UserIndex)) | |||||
| xlsx.SetCellValue(sheetName, "E"+rows, userRecord.CommitCount) | |||||
| xlsx.SetCellValue(sheetName, "F"+rows, userRecord.IssueCount) | |||||
| xlsx.SetCellValue(sheetName, "G"+rows, userRecord.CommentCount) | |||||
| xlsx.SetCellValue(sheetName, "H"+rows, userRecord.FocusRepoCount) | |||||
| xlsx.SetCellValue(sheetName, "I"+rows, userRecord.StarRepoCount) | |||||
| xlsx.SetCellValue(sheetName, "J"+rows, userRecord.LoginCount) | |||||
| xlsx.SetCellValue(sheetName, "K"+rows, userRecord.WatchedCount) | |||||
| xlsx.SetCellValue(sheetName, "L"+rows, userRecord.CommitCodeSize) | |||||
| xlsx.SetCellValue(sheetName, "M"+rows, userRecord.SolveIssueCount) | |||||
| xlsx.SetCellValue(sheetName, "N"+rows, userRecord.EncyclopediasCount) | |||||
| xlsx.SetCellValue(sheetName, "O"+rows, userRecord.CreateRepoCount) | |||||
| xlsx.SetCellValue(sheetName, "P"+rows, fmt.Sprintf("%.2f", userRecord.OpenIIndex)) | |||||
| formatTime := userRecord.RegistDate.Format("2006-01-02 15:04:05") | formatTime := userRecord.RegistDate.Format("2006-01-02 15:04:05") | ||||
| xlsx.SetCellValue(sheetName, "P"+rows, formatTime[0:len(formatTime)-3]) | |||||
| xlsx.SetCellValue(sheetName, "Q"+rows, userRecord.CloudBrainTaskNum) | |||||
| xlsx.SetCellValue(sheetName, "R"+rows, fmt.Sprintf("%.2f", float64(userRecord.CloudBrainRunTime)/3600)) | |||||
| xlsx.SetCellValue(sheetName, "S"+rows, userRecord.CommitDatasetNum) | |||||
| xlsx.SetCellValue(sheetName, "T"+rows, userRecord.CommitModelCount) | |||||
| xlsx.SetCellValue(sheetName, "U"+rows, fmt.Sprintf("%.2f", userRecord.UserIndex)) | |||||
| xlsx.SetCellValue(sheetName, "Q"+rows, formatTime[0:len(formatTime)-3]) | |||||
| xlsx.SetCellValue(sheetName, "R"+rows, userRecord.CloudBrainTaskNum) | |||||
| xlsx.SetCellValue(sheetName, "S"+rows, fmt.Sprintf("%.2f", float64(userRecord.CloudBrainRunTime)/3600)) | |||||
| xlsx.SetCellValue(sheetName, "T"+rows, userRecord.CommitDatasetNum) | |||||
| xlsx.SetCellValue(sheetName, "U"+rows, userRecord.CommitModelCount) | |||||
| formatTime = userRecord.DataDate | formatTime = userRecord.DataDate | ||||
| xlsx.SetCellValue(sheetName, "V"+rows, formatTime) | xlsx.SetCellValue(sheetName, "V"+rows, formatTime) | ||||
| } | } | ||||
| @@ -68,23 +68,23 @@ func SearchApi(ctx *context.Context) { | |||||
| if OnlySearchLabel { | if OnlySearchLabel { | ||||
| searchRepoByLabel(ctx, Key, Page, PageSize) | searchRepoByLabel(ctx, Key, Page, PageSize) | ||||
| } else { | } else { | ||||
| searchRepo(ctx, "repository-es-index", Key, Page, PageSize, OnlyReturnNum) | |||||
| searchRepo(ctx, "repository-es-index"+setting.INDEXPOSTFIX, Key, Page, PageSize, OnlyReturnNum) | |||||
| } | } | ||||
| return | return | ||||
| } else if TableName == "issue" { | } else if TableName == "issue" { | ||||
| searchIssueOrPr(ctx, "issue-es-index", Key, Page, PageSize, OnlyReturnNum, "f") | |||||
| searchIssueOrPr(ctx, "issue-es-index"+setting.INDEXPOSTFIX, Key, Page, PageSize, OnlyReturnNum, "f") | |||||
| return | return | ||||
| } else if TableName == "user" { | } else if TableName == "user" { | ||||
| searchUserOrOrg(ctx, "user-es-index", Key, Page, PageSize, true, OnlyReturnNum) | |||||
| searchUserOrOrg(ctx, "user-es-index"+setting.INDEXPOSTFIX, Key, Page, PageSize, true, OnlyReturnNum) | |||||
| return | return | ||||
| } else if TableName == "org" { | } else if TableName == "org" { | ||||
| searchUserOrOrg(ctx, "user-es-index", Key, Page, PageSize, false, OnlyReturnNum) | |||||
| searchUserOrOrg(ctx, "user-es-index"+setting.INDEXPOSTFIX, Key, Page, PageSize, false, OnlyReturnNum) | |||||
| return | return | ||||
| } else if TableName == "dataset" { | } else if TableName == "dataset" { | ||||
| searchDataSet(ctx, "dataset-es-index", Key, Page, PageSize, OnlyReturnNum) | |||||
| searchDataSet(ctx, "dataset-es-index"+setting.INDEXPOSTFIX, Key, Page, PageSize, OnlyReturnNum) | |||||
| return | return | ||||
| } else if TableName == "pr" { | } else if TableName == "pr" { | ||||
| searchIssueOrPr(ctx, "issue-es-index", Key, Page, PageSize, OnlyReturnNum, "t") | |||||
| searchIssueOrPr(ctx, "issue-es-index"+setting.INDEXPOSTFIX, Key, Page, PageSize, OnlyReturnNum, "t") | |||||
| //searchPR(ctx, "issue-es-index", Key, Page, PageSize, OnlyReturnNum) | //searchPR(ctx, "issue-es-index", Key, Page, PageSize, OnlyReturnNum) | ||||
| return | return | ||||
| } | } | ||||
| @@ -91,19 +91,19 @@ | |||||
| {{if eq $i 0}} | {{if eq $i 0}} | ||||
| <li class="wi"> | <li class="wi"> | ||||
| <div class="org_icon"> | <div class="org_icon"> | ||||
| <svg width="20px" height="20px" viewBox="0 0 32 32" class="contribution-item-img__2-fih"><defs><path id="rank1_svg__a" d="M13.69 20V9.616h-1.598l-3.139 2.61 1.027 1.218 1.95-1.804V20z"></path></defs><g fill="none" fill-rule="evenodd"><path d="M0 0h32v32H0z"></path><g transform="translate(4 2.667)"><path fill="#D16C11" d="M0 0h6.976l5.49 7.642L17.063 0H24L12 16z"></path><circle fill="#F7C049" cx="12" cy="14.667" r="12"></circle><circle fill="#FEE6AD" cx="12" cy="14.667" r="9.333"></circle><g fill-rule="nonzero"><use fill="#FFF" xlink:href="#rank1_svg__a"></use><use fill="#D74D03" xlink:href="#rank1_svg__a"></use></g></g></g></svg> | |||||
| <svg width="24px" height="24px" viewBox="0 0 32 32" class="contribution-item-img__2-fih"><defs><path id="rank1_svg__a" d="M13.69 20V9.616h-1.598l-3.139 2.61 1.027 1.218 1.95-1.804V20z"></path></defs><g fill="none" fill-rule="evenodd"><path d="M0 0h32v32H0z"></path><g transform="translate(4 2.667)"><path fill="#D16C11" d="M0 0h6.976l5.49 7.642L17.063 0H24L12 16z"></path><circle fill="#F7C049" cx="12" cy="14.667" r="12"></circle><circle fill="#FEE6AD" cx="12" cy="14.667" r="9.333"></circle><g fill-rule="nonzero"><use fill="#FFF" xlink:href="#rank1_svg__a"></use><use fill="#D74D03" xlink:href="#rank1_svg__a"></use></g></g></g></svg> | |||||
| </div> | </div> | ||||
| </li> | </li> | ||||
| {{else if eq $i 1}} | {{else if eq $i 1}} | ||||
| <li class="wi"> | <li class="wi"> | ||||
| <div class="org_icon"> | <div class="org_icon"> | ||||
| <svg width="20px" height="20px" viewBox="0 0 32 32" class="contribution-item-img__2-fih"><g transform="translate(4 2.667)" fill="none" fill-rule="evenodd"><path fill="#305269" d="M0 0h6.976l5.49 7.642L17.063 0H24L12 16z"></path><circle fill="#BDD8F0" cx="12" cy="14.667" r="12"></circle><circle fill="#E1E9FC" cx="12" cy="14.667" r="9.333"></circle><path d="M15.817 20v-1.584h-4.81l3.212-2.977c.469-.43.853-.883 1.151-1.357.298-.474.447-1.039.447-1.694 0-.499-.088-.934-.264-1.305a2.525 2.525 0 00-.718-.917 3.169 3.169 0 00-1.064-.543 4.531 4.531 0 00-1.312-.183c-.47 0-.905.064-1.306.19-.4.128-.753.314-1.056.558-.303.244-.55.55-.74.917-.191.366-.306.79-.345 1.268l1.848.147c.059-.43.23-.772.513-1.027.284-.254.646-.381 1.086-.381.205 0 .398.032.579.095.18.064.34.154.477.272a1.262 1.262 0 01.455.997c0 .176-.035.345-.103.506a2.52 2.52 0 01-.257.462 3.476 3.476 0 01-.345.418c-.127.132-.249.257-.366.374l-4.034 3.901V20h6.952z" fill="#305269" fill-rule="nonzero"></path></g></svg> | |||||
| <svg width="24px" height="24px" viewBox="0 0 32 32" class="contribution-item-img__2-fih"><g transform="translate(4 2.667)" fill="none" fill-rule="evenodd"><path fill="#305269" d="M0 0h6.976l5.49 7.642L17.063 0H24L12 16z"></path><circle fill="#BDD8F0" cx="12" cy="14.667" r="12"></circle><circle fill="#E1E9FC" cx="12" cy="14.667" r="9.333"></circle><path d="M15.817 20v-1.584h-4.81l3.212-2.977c.469-.43.853-.883 1.151-1.357.298-.474.447-1.039.447-1.694 0-.499-.088-.934-.264-1.305a2.525 2.525 0 00-.718-.917 3.169 3.169 0 00-1.064-.543 4.531 4.531 0 00-1.312-.183c-.47 0-.905.064-1.306.19-.4.128-.753.314-1.056.558-.303.244-.55.55-.74.917-.191.366-.306.79-.345 1.268l1.848.147c.059-.43.23-.772.513-1.027.284-.254.646-.381 1.086-.381.205 0 .398.032.579.095.18.064.34.154.477.272a1.262 1.262 0 01.455.997c0 .176-.035.345-.103.506a2.52 2.52 0 01-.257.462 3.476 3.476 0 01-.345.418c-.127.132-.249.257-.366.374l-4.034 3.901V20h6.952z" fill="#305269" fill-rule="nonzero"></path></g></svg> | |||||
| </div> | </div> | ||||
| </li> | </li> | ||||
| {{else if eq $i 2}} | {{else if eq $i 2}} | ||||
| <li class="wi"> | <li class="wi"> | ||||
| <div class="org_icon"> | <div class="org_icon"> | ||||
| <svg width="20px" height="20px" viewBox="0 0 32 32" class="contribution-item-img__2-fih"><g transform="translate(4 2.667)" fill="none" fill-rule="evenodd"><path fill="#865B45" d="M0 0h6.976l5.49 7.642L17.063 0H24L12 16z"></path><circle fill="#E7C5AC" cx="12" cy="14.667" r="12"></circle><circle fill="#FEDDC7" cx="12" cy="14.667" r="9.333"></circle><path d="M12.239 20.176c.46 0 .902-.066 1.327-.198.425-.132.8-.328 1.122-.587.323-.259.58-.579.77-.96.19-.382.286-.822.286-1.32 0-.646-.171-1.203-.513-1.672-.343-.47-.846-.753-1.511-.851v-.03c.557-.136.992-.422 1.305-.857.313-.435.47-.932.47-1.489 0-.46-.09-.863-.272-1.21a2.547 2.547 0 00-.726-.865 3.232 3.232 0 00-1.056-.521 4.521 4.521 0 00-1.276-.176 4.52 4.52 0 00-1.1.132 3.404 3.404 0 00-.968.403 2.79 2.79 0 00-.762.697 3.181 3.181 0 00-.499.997l1.863.499c.127-.362.33-.643.608-.843.279-.2.594-.301.946-.301.44 0 .797.127 1.071.381.274.255.41.582.41.983 0 .313-.058.562-.175.748a1.17 1.17 0 01-.462.425 1.903 1.903 0 01-.646.191 6.09 6.09 0 01-.74.044h-.455v1.584h.425c.264 0 .533.02.807.059.274.039.52.115.74.227.22.112.402.274.543.484.142.21.213.482.213.814a1.533 1.533 0 01-.52 1.18 1.772 1.772 0 01-.558.33 1.88 1.88 0 01-.667.118c-.47 0-.841-.117-1.115-.352s-.464-.567-.572-.997l-1.877.498c.117.43.288.8.513 1.108.225.308.491.56.8.755.307.196.652.34 1.033.433a5.13 5.13 0 001.218.139z" fill="#865B45" fill-rule="nonzero"></path></g></svg> | |||||
| <svg width="24px" height="24px" viewBox="0 0 32 32" class="contribution-item-img__2-fih"><g transform="translate(4 2.667)" fill="none" fill-rule="evenodd"><path fill="#865B45" d="M0 0h6.976l5.49 7.642L17.063 0H24L12 16z"></path><circle fill="#E7C5AC" cx="12" cy="14.667" r="12"></circle><circle fill="#FEDDC7" cx="12" cy="14.667" r="9.333"></circle><path d="M12.239 20.176c.46 0 .902-.066 1.327-.198.425-.132.8-.328 1.122-.587.323-.259.58-.579.77-.96.19-.382.286-.822.286-1.32 0-.646-.171-1.203-.513-1.672-.343-.47-.846-.753-1.511-.851v-.03c.557-.136.992-.422 1.305-.857.313-.435.47-.932.47-1.489 0-.46-.09-.863-.272-1.21a2.547 2.547 0 00-.726-.865 3.232 3.232 0 00-1.056-.521 4.521 4.521 0 00-1.276-.176 4.52 4.52 0 00-1.1.132 3.404 3.404 0 00-.968.403 2.79 2.79 0 00-.762.697 3.181 3.181 0 00-.499.997l1.863.499c.127-.362.33-.643.608-.843.279-.2.594-.301.946-.301.44 0 .797.127 1.071.381.274.255.41.582.41.983 0 .313-.058.562-.175.748a1.17 1.17 0 01-.462.425 1.903 1.903 0 01-.646.191 6.09 6.09 0 01-.74.044h-.455v1.584h.425c.264 0 .533.02.807.059.274.039.52.115.74.227.22.112.402.274.543.484.142.21.213.482.213.814a1.533 1.533 0 01-.52 1.18 1.772 1.772 0 01-.558.33 1.88 1.88 0 01-.667.118c-.47 0-.841-.117-1.115-.352s-.464-.567-.572-.997l-1.877.498c.117.43.288.8.513 1.108.225.308.491.56.8.755.307.196.652.34 1.033.433a5.13 5.13 0 001.218.139z" fill="#865B45" fill-rule="nonzero"></path></g></svg> | |||||
| </div> | </div> | ||||
| </li> | </li> | ||||
| {{else }} | {{else }} | ||||
| @@ -139,19 +139,19 @@ | |||||
| {{if eq $i 0}} | {{if eq $i 0}} | ||||
| <li class="wi"> | <li class="wi"> | ||||
| <div class="org_icon"> | <div class="org_icon"> | ||||
| <svg width="20px" height="20px" viewBox="0 0 32 32" class="contribution-item-img__2-fih"><defs><path id="rank1_svg__a" d="M13.69 20V9.616h-1.598l-3.139 2.61 1.027 1.218 1.95-1.804V20z"></path></defs><g fill="none" fill-rule="evenodd"><path d="M0 0h32v32H0z"></path><g transform="translate(4 2.667)"><path fill="#D16C11" d="M0 0h6.976l5.49 7.642L17.063 0H24L12 16z"></path><circle fill="#F7C049" cx="12" cy="14.667" r="12"></circle><circle fill="#FEE6AD" cx="12" cy="14.667" r="9.333"></circle><g fill-rule="nonzero"><use fill="#FFF" xlink:href="#rank1_svg__a"></use><use fill="#D74D03" xlink:href="#rank1_svg__a"></use></g></g></g></svg> | |||||
| <svg width="24px" height="24px" viewBox="0 0 32 32" class="contribution-item-img__2-fih"><defs><path id="rank1_svg__a" d="M13.69 20V9.616h-1.598l-3.139 2.61 1.027 1.218 1.95-1.804V20z"></path></defs><g fill="none" fill-rule="evenodd"><path d="M0 0h32v32H0z"></path><g transform="translate(4 2.667)"><path fill="#D16C11" d="M0 0h6.976l5.49 7.642L17.063 0H24L12 16z"></path><circle fill="#F7C049" cx="12" cy="14.667" r="12"></circle><circle fill="#FEE6AD" cx="12" cy="14.667" r="9.333"></circle><g fill-rule="nonzero"><use fill="#FFF" xlink:href="#rank1_svg__a"></use><use fill="#D74D03" xlink:href="#rank1_svg__a"></use></g></g></g></svg> | |||||
| </div> | </div> | ||||
| </li> | </li> | ||||
| {{else if eq $i 1}} | {{else if eq $i 1}} | ||||
| <li class="wi"> | <li class="wi"> | ||||
| <div class="org_icon"> | <div class="org_icon"> | ||||
| <svg width="20px" height="20px" viewBox="0 0 32 32" class="contribution-item-img__2-fih"><g transform="translate(4 2.667)" fill="none" fill-rule="evenodd"><path fill="#305269" d="M0 0h6.976l5.49 7.642L17.063 0H24L12 16z"></path><circle fill="#BDD8F0" cx="12" cy="14.667" r="12"></circle><circle fill="#E1E9FC" cx="12" cy="14.667" r="9.333"></circle><path d="M15.817 20v-1.584h-4.81l3.212-2.977c.469-.43.853-.883 1.151-1.357.298-.474.447-1.039.447-1.694 0-.499-.088-.934-.264-1.305a2.525 2.525 0 00-.718-.917 3.169 3.169 0 00-1.064-.543 4.531 4.531 0 00-1.312-.183c-.47 0-.905.064-1.306.19-.4.128-.753.314-1.056.558-.303.244-.55.55-.74.917-.191.366-.306.79-.345 1.268l1.848.147c.059-.43.23-.772.513-1.027.284-.254.646-.381 1.086-.381.205 0 .398.032.579.095.18.064.34.154.477.272a1.262 1.262 0 01.455.997c0 .176-.035.345-.103.506a2.52 2.52 0 01-.257.462 3.476 3.476 0 01-.345.418c-.127.132-.249.257-.366.374l-4.034 3.901V20h6.952z" fill="#305269" fill-rule="nonzero"></path></g></svg> | |||||
| <svg width="24px" height="24px" viewBox="0 0 32 32" class="contribution-item-img__2-fih"><g transform="translate(4 2.667)" fill="none" fill-rule="evenodd"><path fill="#305269" d="M0 0h6.976l5.49 7.642L17.063 0H24L12 16z"></path><circle fill="#BDD8F0" cx="12" cy="14.667" r="12"></circle><circle fill="#E1E9FC" cx="12" cy="14.667" r="9.333"></circle><path d="M15.817 20v-1.584h-4.81l3.212-2.977c.469-.43.853-.883 1.151-1.357.298-.474.447-1.039.447-1.694 0-.499-.088-.934-.264-1.305a2.525 2.525 0 00-.718-.917 3.169 3.169 0 00-1.064-.543 4.531 4.531 0 00-1.312-.183c-.47 0-.905.064-1.306.19-.4.128-.753.314-1.056.558-.303.244-.55.55-.74.917-.191.366-.306.79-.345 1.268l1.848.147c.059-.43.23-.772.513-1.027.284-.254.646-.381 1.086-.381.205 0 .398.032.579.095.18.064.34.154.477.272a1.262 1.262 0 01.455.997c0 .176-.035.345-.103.506a2.52 2.52 0 01-.257.462 3.476 3.476 0 01-.345.418c-.127.132-.249.257-.366.374l-4.034 3.901V20h6.952z" fill="#305269" fill-rule="nonzero"></path></g></svg> | |||||
| </div> | </div> | ||||
| </li> | </li> | ||||
| {{else if eq $i 2}} | {{else if eq $i 2}} | ||||
| <li class="wi"> | <li class="wi"> | ||||
| <div class="org_icon"> | <div class="org_icon"> | ||||
| <svg width="20px" height="20px" viewBox="0 0 32 32" class="contribution-item-img__2-fih"><g transform="translate(4 2.667)" fill="none" fill-rule="evenodd"><path fill="#865B45" d="M0 0h6.976l5.49 7.642L17.063 0H24L12 16z"></path><circle fill="#E7C5AC" cx="12" cy="14.667" r="12"></circle><circle fill="#FEDDC7" cx="12" cy="14.667" r="9.333"></circle><path d="M12.239 20.176c.46 0 .902-.066 1.327-.198.425-.132.8-.328 1.122-.587.323-.259.58-.579.77-.96.19-.382.286-.822.286-1.32 0-.646-.171-1.203-.513-1.672-.343-.47-.846-.753-1.511-.851v-.03c.557-.136.992-.422 1.305-.857.313-.435.47-.932.47-1.489 0-.46-.09-.863-.272-1.21a2.547 2.547 0 00-.726-.865 3.232 3.232 0 00-1.056-.521 4.521 4.521 0 00-1.276-.176 4.52 4.52 0 00-1.1.132 3.404 3.404 0 00-.968.403 2.79 2.79 0 00-.762.697 3.181 3.181 0 00-.499.997l1.863.499c.127-.362.33-.643.608-.843.279-.2.594-.301.946-.301.44 0 .797.127 1.071.381.274.255.41.582.41.983 0 .313-.058.562-.175.748a1.17 1.17 0 01-.462.425 1.903 1.903 0 01-.646.191 6.09 6.09 0 01-.74.044h-.455v1.584h.425c.264 0 .533.02.807.059.274.039.52.115.74.227.22.112.402.274.543.484.142.21.213.482.213.814a1.533 1.533 0 01-.52 1.18 1.772 1.772 0 01-.558.33 1.88 1.88 0 01-.667.118c-.47 0-.841-.117-1.115-.352s-.464-.567-.572-.997l-1.877.498c.117.43.288.8.513 1.108.225.308.491.56.8.755.307.196.652.34 1.033.433a5.13 5.13 0 001.218.139z" fill="#865B45" fill-rule="nonzero"></path></g></svg> | |||||
| <svg width="24px" height="24px" viewBox="0 0 32 32" class="contribution-item-img__2-fih"><g transform="translate(4 2.667)" fill="none" fill-rule="evenodd"><path fill="#865B45" d="M0 0h6.976l5.49 7.642L17.063 0H24L12 16z"></path><circle fill="#E7C5AC" cx="12" cy="14.667" r="12"></circle><circle fill="#FEDDC7" cx="12" cy="14.667" r="9.333"></circle><path d="M12.239 20.176c.46 0 .902-.066 1.327-.198.425-.132.8-.328 1.122-.587.323-.259.58-.579.77-.96.19-.382.286-.822.286-1.32 0-.646-.171-1.203-.513-1.672-.343-.47-.846-.753-1.511-.851v-.03c.557-.136.992-.422 1.305-.857.313-.435.47-.932.47-1.489 0-.46-.09-.863-.272-1.21a2.547 2.547 0 00-.726-.865 3.232 3.232 0 00-1.056-.521 4.521 4.521 0 00-1.276-.176 4.52 4.52 0 00-1.1.132 3.404 3.404 0 00-.968.403 2.79 2.79 0 00-.762.697 3.181 3.181 0 00-.499.997l1.863.499c.127-.362.33-.643.608-.843.279-.2.594-.301.946-.301.44 0 .797.127 1.071.381.274.255.41.582.41.983 0 .313-.058.562-.175.748a1.17 1.17 0 01-.462.425 1.903 1.903 0 01-.646.191 6.09 6.09 0 01-.74.044h-.455v1.584h.425c.264 0 .533.02.807.059.274.039.52.115.74.227.22.112.402.274.543.484.142.21.213.482.213.814a1.533 1.533 0 01-.52 1.18 1.772 1.772 0 01-.558.33 1.88 1.88 0 01-.667.118c-.47 0-.841-.117-1.115-.352s-.464-.567-.572-.997l-1.877.498c.117.43.288.8.513 1.108.225.308.491.56.8.755.307.196.652.34 1.033.433a5.13 5.13 0 001.218.139z" fill="#865B45" fill-rule="nonzero"></path></g></svg> | |||||
| </div> | </div> | ||||
| </li> | </li> | ||||
| {{else }} | {{else }} | ||||
| @@ -187,19 +187,19 @@ | |||||
| {{if eq $i 0}} | {{if eq $i 0}} | ||||
| <li class="wi"> | <li class="wi"> | ||||
| <div class="org_icon"> | <div class="org_icon"> | ||||
| <svg width="20px" height="20px" viewBox="0 0 32 32" class="contribution-item-img__2-fih"><defs><path id="rank1_svg__a" d="M13.69 20V9.616h-1.598l-3.139 2.61 1.027 1.218 1.95-1.804V20z"></path></defs><g fill="none" fill-rule="evenodd"><path d="M0 0h32v32H0z"></path><g transform="translate(4 2.667)"><path fill="#D16C11" d="M0 0h6.976l5.49 7.642L17.063 0H24L12 16z"></path><circle fill="#F7C049" cx="12" cy="14.667" r="12"></circle><circle fill="#FEE6AD" cx="12" cy="14.667" r="9.333"></circle><g fill-rule="nonzero"><use fill="#FFF" xlink:href="#rank1_svg__a"></use><use fill="#D74D03" xlink:href="#rank1_svg__a"></use></g></g></g></svg> | |||||
| <svg width="24px" height="24px" viewBox="0 0 32 32" class="contribution-item-img__2-fih"><defs><path id="rank1_svg__a" d="M13.69 20V9.616h-1.598l-3.139 2.61 1.027 1.218 1.95-1.804V20z"></path></defs><g fill="none" fill-rule="evenodd"><path d="M0 0h32v32H0z"></path><g transform="translate(4 2.667)"><path fill="#D16C11" d="M0 0h6.976l5.49 7.642L17.063 0H24L12 16z"></path><circle fill="#F7C049" cx="12" cy="14.667" r="12"></circle><circle fill="#FEE6AD" cx="12" cy="14.667" r="9.333"></circle><g fill-rule="nonzero"><use fill="#FFF" xlink:href="#rank1_svg__a"></use><use fill="#D74D03" xlink:href="#rank1_svg__a"></use></g></g></g></svg> | |||||
| </div> | </div> | ||||
| </li> | </li> | ||||
| {{else if eq $i 1}} | {{else if eq $i 1}} | ||||
| <li class="wi"> | <li class="wi"> | ||||
| <div class="org_icon"> | <div class="org_icon"> | ||||
| <svg width="20px" height="20px" viewBox="0 0 32 32" class="contribution-item-img__2-fih"><g transform="translate(4 2.667)" fill="none" fill-rule="evenodd"><path fill="#305269" d="M0 0h6.976l5.49 7.642L17.063 0H24L12 16z"></path><circle fill="#BDD8F0" cx="12" cy="14.667" r="12"></circle><circle fill="#E1E9FC" cx="12" cy="14.667" r="9.333"></circle><path d="M15.817 20v-1.584h-4.81l3.212-2.977c.469-.43.853-.883 1.151-1.357.298-.474.447-1.039.447-1.694 0-.499-.088-.934-.264-1.305a2.525 2.525 0 00-.718-.917 3.169 3.169 0 00-1.064-.543 4.531 4.531 0 00-1.312-.183c-.47 0-.905.064-1.306.19-.4.128-.753.314-1.056.558-.303.244-.55.55-.74.917-.191.366-.306.79-.345 1.268l1.848.147c.059-.43.23-.772.513-1.027.284-.254.646-.381 1.086-.381.205 0 .398.032.579.095.18.064.34.154.477.272a1.262 1.262 0 01.455.997c0 .176-.035.345-.103.506a2.52 2.52 0 01-.257.462 3.476 3.476 0 01-.345.418c-.127.132-.249.257-.366.374l-4.034 3.901V20h6.952z" fill="#305269" fill-rule="nonzero"></path></g></svg> | |||||
| <svg width="24px" height="24px" viewBox="0 0 32 32" class="contribution-item-img__2-fih"><g transform="translate(4 2.667)" fill="none" fill-rule="evenodd"><path fill="#305269" d="M0 0h6.976l5.49 7.642L17.063 0H24L12 16z"></path><circle fill="#BDD8F0" cx="12" cy="14.667" r="12"></circle><circle fill="#E1E9FC" cx="12" cy="14.667" r="9.333"></circle><path d="M15.817 20v-1.584h-4.81l3.212-2.977c.469-.43.853-.883 1.151-1.357.298-.474.447-1.039.447-1.694 0-.499-.088-.934-.264-1.305a2.525 2.525 0 00-.718-.917 3.169 3.169 0 00-1.064-.543 4.531 4.531 0 00-1.312-.183c-.47 0-.905.064-1.306.19-.4.128-.753.314-1.056.558-.303.244-.55.55-.74.917-.191.366-.306.79-.345 1.268l1.848.147c.059-.43.23-.772.513-1.027.284-.254.646-.381 1.086-.381.205 0 .398.032.579.095.18.064.34.154.477.272a1.262 1.262 0 01.455.997c0 .176-.035.345-.103.506a2.52 2.52 0 01-.257.462 3.476 3.476 0 01-.345.418c-.127.132-.249.257-.366.374l-4.034 3.901V20h6.952z" fill="#305269" fill-rule="nonzero"></path></g></svg> | |||||
| </div> | </div> | ||||
| </li> | </li> | ||||
| {{else if eq $i 2}} | {{else if eq $i 2}} | ||||
| <li class="wi"> | <li class="wi"> | ||||
| <div class="org_icon"> | <div class="org_icon"> | ||||
| <svg width="20px" height="20px" viewBox="0 0 32 32" class="contribution-item-img__2-fih"><g transform="translate(4 2.667)" fill="none" fill-rule="evenodd"><path fill="#865B45" d="M0 0h6.976l5.49 7.642L17.063 0H24L12 16z"></path><circle fill="#E7C5AC" cx="12" cy="14.667" r="12"></circle><circle fill="#FEDDC7" cx="12" cy="14.667" r="9.333"></circle><path d="M12.239 20.176c.46 0 .902-.066 1.327-.198.425-.132.8-.328 1.122-.587.323-.259.58-.579.77-.96.19-.382.286-.822.286-1.32 0-.646-.171-1.203-.513-1.672-.343-.47-.846-.753-1.511-.851v-.03c.557-.136.992-.422 1.305-.857.313-.435.47-.932.47-1.489 0-.46-.09-.863-.272-1.21a2.547 2.547 0 00-.726-.865 3.232 3.232 0 00-1.056-.521 4.521 4.521 0 00-1.276-.176 4.52 4.52 0 00-1.1.132 3.404 3.404 0 00-.968.403 2.79 2.79 0 00-.762.697 3.181 3.181 0 00-.499.997l1.863.499c.127-.362.33-.643.608-.843.279-.2.594-.301.946-.301.44 0 .797.127 1.071.381.274.255.41.582.41.983 0 .313-.058.562-.175.748a1.17 1.17 0 01-.462.425 1.903 1.903 0 01-.646.191 6.09 6.09 0 01-.74.044h-.455v1.584h.425c.264 0 .533.02.807.059.274.039.52.115.74.227.22.112.402.274.543.484.142.21.213.482.213.814a1.533 1.533 0 01-.52 1.18 1.772 1.772 0 01-.558.33 1.88 1.88 0 01-.667.118c-.47 0-.841-.117-1.115-.352s-.464-.567-.572-.997l-1.877.498c.117.43.288.8.513 1.108.225.308.491.56.8.755.307.196.652.34 1.033.433a5.13 5.13 0 001.218.139z" fill="#865B45" fill-rule="nonzero"></path></g></svg> | |||||
| <svg width="24px" height="24px" viewBox="0 0 32 32" class="contribution-item-img__2-fih"><g transform="translate(4 2.667)" fill="none" fill-rule="evenodd"><path fill="#865B45" d="M0 0h6.976l5.49 7.642L17.063 0H24L12 16z"></path><circle fill="#E7C5AC" cx="12" cy="14.667" r="12"></circle><circle fill="#FEDDC7" cx="12" cy="14.667" r="9.333"></circle><path d="M12.239 20.176c.46 0 .902-.066 1.327-.198.425-.132.8-.328 1.122-.587.323-.259.58-.579.77-.96.19-.382.286-.822.286-1.32 0-.646-.171-1.203-.513-1.672-.343-.47-.846-.753-1.511-.851v-.03c.557-.136.992-.422 1.305-.857.313-.435.47-.932.47-1.489 0-.46-.09-.863-.272-1.21a2.547 2.547 0 00-.726-.865 3.232 3.232 0 00-1.056-.521 4.521 4.521 0 00-1.276-.176 4.52 4.52 0 00-1.1.132 3.404 3.404 0 00-.968.403 2.79 2.79 0 00-.762.697 3.181 3.181 0 00-.499.997l1.863.499c.127-.362.33-.643.608-.843.279-.2.594-.301.946-.301.44 0 .797.127 1.071.381.274.255.41.582.41.983 0 .313-.058.562-.175.748a1.17 1.17 0 01-.462.425 1.903 1.903 0 01-.646.191 6.09 6.09 0 01-.74.044h-.455v1.584h.425c.264 0 .533.02.807.059.274.039.52.115.74.227.22.112.402.274.543.484.142.21.213.482.213.814a1.533 1.533 0 01-.52 1.18 1.772 1.772 0 01-.558.33 1.88 1.88 0 01-.667.118c-.47 0-.841-.117-1.115-.352s-.464-.567-.572-.997l-1.877.498c.117.43.288.8.513 1.108.225.308.491.56.8.755.307.196.652.34 1.033.433a5.13 5.13 0 001.218.139z" fill="#865B45" fill-rule="nonzero"></path></g></svg> | |||||
| </div> | </div> | ||||
| </li> | </li> | ||||
| {{else }} | {{else }} | ||||
| @@ -9,14 +9,14 @@ | |||||
| <div class="ui sixteen wide computer column list"> | <div class="ui sixteen wide computer column list"> | ||||
| {{ range .Members}} | {{ range .Members}} | ||||
| <div class="item ui grid"> | <div class="item ui grid"> | ||||
| <div class="ui two wide column"> | |||||
| <div class="three wide mobile two wide tablet two wide computer column"> | |||||
| <img class="ui avatar" src="{{.SizedRelAvatarLink 48}}"> | <img class="ui avatar" src="{{.SizedRelAvatarLink 48}}"> | ||||
| </div> | </div> | ||||
| <div class="ui three wide column"> | |||||
| <div class="seven wide mobile three wide tablet three wide computer column"> | |||||
| <div class="meta"><a href="{{.HomeLink}}">{{.Name}}</a></div> | <div class="meta"><a href="{{.HomeLink}}">{{.Name}}</a></div> | ||||
| <div class="meta">{{.FullName}}</div> | <div class="meta">{{.FullName}}</div> | ||||
| </div> | </div> | ||||
| <div class="ui four wide column center"> | |||||
| <div class="ui four wide column center tablet only computer only"> | |||||
| <div class="meta"> | <div class="meta"> | ||||
| {{$.i18n.Tr "org.members.membership_visibility"}} | {{$.i18n.Tr "org.members.membership_visibility"}} | ||||
| </div> | </div> | ||||
| @@ -31,7 +31,7 @@ | |||||
| {{end}} | {{end}} | ||||
| </div> | </div> | ||||
| </div> | </div> | ||||
| <div class="ui three wide column center"> | |||||
| <div class="five wide mobile three wide tablet three wide computer column"> | |||||
| <div class="meta"> | <div class="meta"> | ||||
| {{$.i18n.Tr "org.members.member_role"}} | {{$.i18n.Tr "org.members.member_role"}} | ||||
| </div> | </div> | ||||
| @@ -39,7 +39,7 @@ | |||||
| <strong>{{if index $.MembersIsUserOrgOwner .ID}}{{svg "octicon-shield-lock" 16}} {{$.i18n.Tr "org.members.owner"}}{{else}}{{$.i18n.Tr "org.members.member"}}{{end}}</strong> | <strong>{{if index $.MembersIsUserOrgOwner .ID}}{{svg "octicon-shield-lock" 16}} {{$.i18n.Tr "org.members.owner"}}{{else}}{{$.i18n.Tr "org.members.member"}}{{end}}</strong> | ||||
| </div> | </div> | ||||
| </div> | </div> | ||||
| <div class="ui one wide column center"> | |||||
| <div class="ui one wide column center tablet only computer only"> | |||||
| <div class="meta"> | <div class="meta"> | ||||
| 2FA | 2FA | ||||
| </div> | </div> | ||||
| @@ -53,7 +53,7 @@ | |||||
| </strong> | </strong> | ||||
| </div> | </div> | ||||
| </div> | </div> | ||||
| <div class="ui three wide column"> | |||||
| <div class="ui three wide column tablet only computer only"> | |||||
| <div class="text right"> | <div class="text right"> | ||||
| {{if eq $.SignedUser.ID .ID}} | {{if eq $.SignedUser.ID .ID}} | ||||
| <form method="post" action="{{$.OrgLink}}/members/action/leave"> | <form method="post" action="{{$.OrgLink}}/members/action/leave"> | ||||
| @@ -9,7 +9,7 @@ | |||||
| <div class="ui sixteen wide computer column list"> | <div class="ui sixteen wide computer column list"> | ||||
| <div class="ui two column grid"> | |||||
| <div class="ui stackable two column grid"> | |||||
| {{range .Teams}} | {{range .Teams}} | ||||
| <div class="column"> | <div class="column"> | ||||
| <div class="ui top attached header"> | <div class="ui top attached header"> | ||||
| @@ -31,7 +31,7 @@ | |||||
| <span slot="label"> | <span slot="label"> | ||||
| <el-image style="width: 13px; height: 13px" src="/img/pro_rgb.svg"> | <el-image style="width: 13px; height: 13px" src="/img/pro_rgb.svg"> | ||||
| </el-image> | </el-image> | ||||
| 云脑分析 | |||||
| 云脑分析(建设中..) | |||||
| </span> | </span> | ||||
| </el-tab-pane> | </el-tab-pane> | ||||
| </el-tabs> | </el-tabs> | ||||
| @@ -26,7 +26,7 @@ import qs from 'qs'; | |||||
| import createDropzone from '../features/dropzone.js'; | import createDropzone from '../features/dropzone.js'; | ||||
| const {_AppSubUrl, _StaticUrlPrefix, csrf} = window.config; | const {_AppSubUrl, _StaticUrlPrefix, csrf} = window.config; | ||||
| // const uploadtype = 0; | |||||
| const chunkSize = 1024 * 1024 * 64; | |||||
| export default { | export default { | ||||
| props:{ | props:{ | ||||
| @@ -137,7 +137,6 @@ export default { | |||||
| resetStatus() { | resetStatus() { | ||||
| this.progress = 0; | this.progress = 0; | ||||
| this.status = ''; | this.status = ''; | ||||
| console.log(this.uploadtype) | |||||
| }, | }, | ||||
| updateProgress(file, progress) { | updateProgress(file, progress) { | ||||
| console.log("progress---",progress) | console.log("progress---",progress) | ||||
| @@ -165,7 +164,6 @@ export default { | |||||
| .getElementById('datasetId') | .getElementById('datasetId') | ||||
| .getAttribute('datasetId'); | .getAttribute('datasetId'); | ||||
| this.resetStatus(); | this.resetStatus(); | ||||
| console.log(this.file,!this.file?.upload) | |||||
| if(!this.file?.upload){ | if(!this.file?.upload){ | ||||
| this.btnFlag = false | this.btnFlag = false | ||||
| return | return | ||||
| @@ -186,7 +184,6 @@ export default { | |||||
| File.prototype.slice || | File.prototype.slice || | ||||
| File.prototype.mozSlice || | File.prototype.mozSlice || | ||||
| File.prototype.webkitSlice, | File.prototype.webkitSlice, | ||||
| chunkSize = 1024 * 1024 * 64, | |||||
| chunks = Math.ceil(file.size / chunkSize), | chunks = Math.ceil(file.size / chunkSize), | ||||
| spark = new SparkMD5.ArrayBuffer(), | spark = new SparkMD5.ArrayBuffer(), | ||||
| fileReader = new FileReader(); | fileReader = new FileReader(); | ||||
| @@ -327,7 +324,6 @@ export default { | |||||
| }, | }, | ||||
| async newMultiUpload(file) { | async newMultiUpload(file) { | ||||
| console.log(this.uploadtype,this) | |||||
| const res = await axios.get('/attachments/new_multipart', { | const res = await axios.get('/attachments/new_multipart', { | ||||
| params: { | params: { | ||||
| totalChunkCounts: file.totalChunkCounts, | totalChunkCounts: file.totalChunkCounts, | ||||
| @@ -348,7 +344,6 @@ export default { | |||||
| File.prototype.slice || | File.prototype.slice || | ||||
| File.prototype.mozSlice || | File.prototype.mozSlice || | ||||
| File.prototype.webkitSlice, | File.prototype.webkitSlice, | ||||
| chunkSize = 1024 * 1024 * 32, | |||||
| chunks = Math.ceil(file.size / chunkSize), | chunks = Math.ceil(file.size / chunkSize), | ||||
| fileReader = new FileReader(), | fileReader = new FileReader(), | ||||
| time = new Date().getTime(); | time = new Date().getTime(); | ||||
| @@ -457,7 +452,6 @@ export default { | |||||
| } | } | ||||
| async function completeUpload() { | async function completeUpload() { | ||||
| console.log(_this.uploadtype) | |||||
| return await axios.post( | return await axios.post( | ||||
| '/attachments/complete_multipart', | '/attachments/complete_multipart', | ||||
| qs.stringify({ | qs.stringify({ | ||||
| @@ -494,7 +488,6 @@ export default { | |||||
| 1}/${chunks}个分片上传` | 1}/${chunks}个分片上传` | ||||
| ); | ); | ||||
| this.progress = Math.ceil((currentChunk / chunks) * 100); | this.progress = Math.ceil((currentChunk / chunks) * 100); | ||||
| console.log("((currentChunk / chunks) * 100).toFixed(2)",((currentChunk / chunks) * 100).toFixed(2)) | |||||
| this.updateProgress(file, ((currentChunk / chunks) * 100).toFixed(2)); | this.updateProgress(file, ((currentChunk / chunks) * 100).toFixed(2)); | ||||
| this.status = `${this.dropzoneParams.data('uploading')} ${( | this.status = `${this.dropzoneParams.data('uploading')} ${( | ||||
| (currentChunk / chunks) * | (currentChunk / chunks) * | ||||
| @@ -67,6 +67,15 @@ | |||||
| label="PR数" | label="PR数" | ||||
| align="center"> | align="center"> | ||||
| </el-table-column> | </el-table-column> | ||||
| <el-table-column | |||||
| prop="UserIndex" | |||||
| label="用户指数" | |||||
| width="120px" | |||||
| align="center"> | |||||
| <template slot-scope="scope"> | |||||
| {{scope.row.UserIndex | rounding}} | |||||
| </template> | |||||
| </el-table-column> | |||||
| <el-table-column | <el-table-column | ||||
| prop="CommitCount" | prop="CommitCount" | ||||
| label="commit数" | label="commit数" | ||||
| @@ -161,15 +170,7 @@ | |||||
| width="120px" | width="120px" | ||||
| align="center"> | align="center"> | ||||
| </el-table-column> | </el-table-column> | ||||
| <el-table-column | |||||
| prop="UserIndex" | |||||
| label="用户指数" | |||||
| width="120px" | |||||
| align="center"> | |||||
| <template slot-scope="scope"> | |||||
| {{scope.row.UserIndex | rounding}} | |||||
| </template> | |||||
| </el-table-column> | |||||
| <el-table-column | <el-table-column | ||||
| prop="DataDate" | prop="DataDate" | ||||
| label="系统统计时间" | label="系统统计时间" | ||||
| @@ -761,7 +761,7 @@ display: block; | |||||
| padding-top: 0; | padding-top: 0; | ||||
| padding-bottom: 0; | padding-bottom: 0; | ||||
| } | } | ||||
| .ui.attached:not(.message)+.ui.attached.segment:not(.top){ | |||||
| .repository .ui.attached:not(.message)+.ui.attached.segment:not(.top){ | |||||
| border: none; | border: none; | ||||
| } | } | ||||
| .markdown:not(code).file-view{ | .markdown:not(code).file-view{ | ||||