Compare commits

...

8 Commits

Author SHA1 Message Date
  wangjr c9f9227de3 云脑镜像增加国际化 3 years ago
  wangjr 50719dcca9 解决冲突 3 years ago
  wangjr 4fc2bf6501 国际化 3 years ago
  wangjr 0baec6d053 修改国际化 3 years ago
  wangjr 6e941c4d88 修改国际化 3 years ago
  wangjr 90fb3e9daf 国际化 3 years ago
  wangjr 74c5595778 增加国际化 3 years ago
  wangjr 68693ade8e 国际化 3 years ago
25 changed files with 20074 additions and 206 deletions
Split View
  1. +33
    -0
      options/locale/locale_en-US.ini
  2. +34
    -0
      options/locale/locale_zh-CN.ini
  3. +18908
    -17
      package-lock.json
  4. +1
    -0
      package.json
  5. +1
    -1
      templates/base/footer_content.tmpl
  6. +1
    -1
      templates/base/footer_content_fluid.tmpl
  7. +1
    -1
      templates/explore/data_analysis.tmpl
  8. +17
    -1
      templates/explore/datasets.tmpl
  9. +1
    -1
      templates/explore/repo_orgtop.tmpl
  10. +1
    -1
      templates/explore/repo_right.tmpl
  11. +84
    -0
      templates/repo/cloudbrain/show.tmpl
  12. +4
    -4
      templates/repo/home.tmpl
  13. +10
    -10
      templates/repo/modelarts/trainjob/show.tmpl
  14. +16
    -15
      templates/repo/modelmanage/index.tmpl
  15. +73
    -53
      web_src/js/components/Contributors.vue
  16. +6
    -6
      web_src/js/components/EditAboutInfo.vue
  17. +24
    -8
      web_src/js/components/EditTopics.vue
  18. +517
    -0
      web_src/js/components/Images.vue
  19. +12
    -5
      web_src/js/components/MinioUploader.vue
  20. +15
    -15
      web_src/js/components/Model.vue
  21. +74
    -0
      web_src/js/components/i18n/lang/en.js
  22. +82
    -0
      web_src/js/components/i18n/lang/zh.js
  23. +76
    -61
      web_src/js/components/images/Images.vue
  24. +31
    -3
      web_src/js/features/images.js
  25. +52
    -3
      web_src/js/index.js

+ 33
- 0
options/locale/locale_en-US.ini View File

@@ -309,6 +309,8 @@ robot = Robot
federated_learning = Federated learning
data_mining = Data mining
RISC-V_development = RISC-V development
recommend_org_desc = These great organizations are using
recommended_encyclopedia = Recommended encyclopedia

[auth]
create_new_account = Register Account
@@ -878,6 +880,7 @@ search_dataset = Search Dataset Files
unzip_tooltips = If it has not been decompressed for a long time, please check whether the compressed package has encrypted files or file errors
zip_failed = Decompression failed, please check whether the compressed package is encrypted or contact technical support
dataset_desc = The description should not exceed 1024 characters

[repo]
owner = Owner
repo_name = Repository Name
@@ -963,6 +966,7 @@ image_delete_fail=Failed to delete image, please try again later.
image_overwrite=You had submitted the same name image before, are you sure to overwrite the original image?
download=Download
score=Score
all_contribute = All

images.name = Image Tag
images.name_placerholder = Please enter the image name
@@ -1000,6 +1004,14 @@ cloudbrain_jobname_err=Name must start with a lowercase letter or number,can inc
cloudbrain_query_fail=Failed to query cloudbrain information.
cloudbrain.mirror_tag = Mirror Tag
cloudbrain.mirror_description = Mirror Description
cloudbrain_task_result = Task Result
cloudbrain_task_status = Status
cloudbrain_task_hardware_information = Hardware Information
cloudbrain_task_debug_info = Debug Info
cloudbrain_task_platform = Platform
cloudbrain_start_time = Start Time
cloudbrain_end_time = End Time
cloudbrain_exit_information = Exit Information

record_begintime_get_err=Can not get the record begin time.
parameter_is_wrong=The input parameter is wrong.
@@ -1041,6 +1053,15 @@ modelarts.create_model = Create Model
modelarts.model_label=Model Label
modelarts.infer_dataset = Inference Dataset

modelarts.task = Task Name
modelarts.task_ details= Task Details
modelarts.task_describe = Description
modelarts.mirror_name = Mirror Name
modelarts.dataset_download_URL = Dataset Download URL
modelarts.create_time = Create Time
modelarts.last_update_time = Last Update Time
modelarts.mirror = Mirror
modelarts.type = Type

modelarts.train_job.basic_info=Basic Info
modelarts.train_job.job_status=Job Status
@@ -1105,6 +1126,12 @@ modelarts.infer_job.select_model = Select Model
modelarts.infer_job.boot_file_helper=The startup file is the entry file for your program execution and must end in.py.Such as inference.py, main.py, example/inference. Py, case/main.py.
modelarts.infer_job.tooltip = The model has been deleted and cannot be viewed.

modelarts.train_job.choose_training_task = Choose a training task
modelarts.train_job.model_version = Model Version
modelarts.model_description = Model Description
modelarts.canceled= You have canceled the operation
modelarts.scrolled_bottom= You have scrolled to the bottom of the log
modelarts.scrolled_top = You have scrolled to the top of the log

debug_task_not_created = Debug task has not been created
train_task_not_created = Train task has not been created
@@ -1133,6 +1160,12 @@ model.manage.sava_model = Sava Model
model.manage.model_manage = ModelManage
model.manage.model_accuracy = Model Accuracy

model_not_created = Model has not been created
model_not_training_task = Training task: You have not created a training task, please create it first <a href="%s/modelarts/train-job">training task</a>.
delete_model = Delete Model
delete_model_issure = Are you sure you want to delete this model? Once this model is deleted, it cannot be recovered.
select_version = Select Version

template.items = Template Items
template.git_content = Git Content (Default Branch)
template.git_hooks = Git Hooks


+ 34
- 0
options/locale/locale_zh-CN.ini View File

@@ -313,6 +313,8 @@ robot = 机器人
federated_learning = 联邦学习
data_mining = 数据挖掘
RISC-V_development = RISC-V开发
recommend_org_desc = 这些优秀的组织正在使用
recommended_encyclopedia = 推荐百科

[auth]
create_new_account=注册帐号
@@ -965,6 +967,7 @@ image_overwrite=您已经提交过相同名称的镜像,您确定要覆盖原
download=模型下载
score=评分

all_contribute = 全部

images.name = 镜像Tag
images.name_placerholder = 请输入镜像Tag
@@ -1002,6 +1005,15 @@ cloudbrain_jobname_err=只能以小写字母或数字开头且只包含小写字
cloudbrain_query_fail=查询云脑任务失败。
cloudbrain.mirror_tag = 镜像标签
cloudbrain.mirror_description = 镜像描述
cloudbrain_task_result = 任务结果
cloudbrain_task_status = 状态
cloudbrain_task_hardware_information = 硬件信息
cloudbrain_task_debug_info = 调试信息
cloudbrain_task_platform = 平台
cloudbrain_start_time = 开始时间
cloudbrain_end_time = 结束时间
cloudbrain_exit_information = 退出信息

cloudbrain.exitinfo=退出信息
cloudbrain.platform=平台
cloudbrain.endtime=结束时间
@@ -1048,6 +1060,16 @@ modelarts.create_model=创建模型
modelarts.model_label=模型标签
modelarts.infer_dataset = 推理数据集

modelarts.task = 任务名称
modelarts.task_details = 任务详情
modelarts.task_describe = 描述
modelarts.mirror_name = 镜像名称
modelarts.dataset_download_URL = 数据集下载地址
modelarts.create_time = 开始时间
modelarts.last_update_time = 最后更新时间
modelarts.mirror = 镜像
modelarts.type = 类型



modelarts.train_job.basic_info=基本信息
@@ -1116,6 +1138,12 @@ modelarts.infer_job.select_model = 选择模型
modelarts.infer_job.boot_file_helper=启动文件是您程序执行的入口文件,必须是以.py结尾的文件。比如inference.py、main.py、example/inference.py、case/main.py。
modelarts.infer_job.tooltip = 该模型已删除,无法查看。

modelarts.train_job.choose_training_task = 选择训练任务
modelarts.train_job.model_version = 模型版本
modelarts.model_description = 模型描述
modelarts.canceled = 您已取消操作
modelarts.scrolled_bottom = 您已翻阅至日志底部
modelarts.scrolled_top = 您已翻阅至日志顶部

debug_task_not_created = 未创建过调试任务
train_task_not_created = 未创建过训练任务
@@ -1144,6 +1172,12 @@ model.manage.sava_model = 保存模型
model.manage.model_manage = 模型管理
model.manage.model_accuracy = 模型精度

model_not_created = 未创建过模型
model_not_training_task = 训练任务:您还没创建过训练任务,请先创建<a href="%s/modelarts/train-job">训练任务</a>。
delete_model = 删除模型
delete_model_issure = 你确认删除该模型么?此模型一旦删除不可恢复。
select_version = 选择版本

template.items=模板选项
template.git_content=Git数据(默认分支)
template.git_hooks=Git 钩子


+ 18908
- 17
package-lock.json
File diff suppressed because it is too large
View File


+ 1
- 0
package.json View File

@@ -54,6 +54,7 @@
"vue": "2.6.11",
"vue-bar-graph": "1.2.0",
"vue-calendar-heatmap": "0.8.4",
"vue-i18n": "6.1.3",
"vue-loader": "15.9.2",
"vue-router": "3.3.4",
"vue-template-compiler": "2.6.11",


+ 1
- 1
templates/base/footer_content.tmpl View File

@@ -21,7 +21,7 @@
<div class="header item">{{.i18n.Tr "custom.foot.help"}}</div>
<div class="ui language bottom floating slide up dropdown link item">
<i class="world icon"></i>
<div class="text">{{.LangName}}</div>
<div class="text" id="langName">{{.LangName}}</div>
<div class="menu">
{{range .AllLangs}}
<a lang="{{.Lang}}" class="item {{if eq $.Lang .Lang}}active selected{{end}}" href="{{if eq $.Lang .Lang}}#{{else}}{{$.Link}}?lang={{.Lang}}{{end}}">{{.Name}}</a>


+ 1
- 1
templates/base/footer_content_fluid.tmpl View File

@@ -19,7 +19,7 @@
<div class="header item">{{.i18n.Tr "custom.foot.help"}}</div>
<div class="ui language bottom floating slide up dropdown link item">
<i class="world icon"></i>
<div class="text">{{.LangName}}</div>
<div class="text" id="langName">{{.LangName}}</div>
<div class="menu">
{{range .AllLangs}}
<a lang="{{.Lang}}" class="item {{if eq $.Lang .Lang}}active selected{{end}}" href="{{if eq $.Lang .Lang}}#{{else}}{{$.Link}}?lang={{.Lang}}{{end}}">{{.Name}}</a>


+ 1
- 1
templates/explore/data_analysis.tmpl View File

@@ -12,4 +12,4 @@
padding-bottom: 53px;
}

</style>
</style>

+ 17
- 1
templates/explore/datasets.tmpl View File

@@ -228,4 +228,20 @@
</div>
</div>
</div>
{{template "base/footer" .}}
{{template "base/footer" .}}

<script type="mode">
import Vue from 'vue'
import enLocale from 'element-ui/lib/locale/lang/en'
import zhLocale from 'element-ui/lib/locale/lang/zh-CN'
import locale from 'element-ui/lib/locale'

let text_langName = document.getElementById("menutext_2").innerText
console.log("fjdhfdjhfjdhfdjhfdj:",text_langName)
if (text_langName == '简体中文'){
locale.use(zhLocale)
}
else if (text_langName == 'English'){
locale.use(enLocale)
}
</script>

+ 1
- 1
templates/explore/repo_orgtop.tmpl View File

@@ -31,7 +31,7 @@

<div class="repos--seach repos--orgtop">
<div class="ui container">
<p class="text grey">这些优秀的组织正在使用:</p>
<p class="text grey">{{.i18n.Tr "explore.recommend_org_desc"}} :</p>
<!-- Swiper -->
<div class="swiper-container">
<div class="swiper-wrapper">


+ 1
- 1
templates/explore/repo_right.tmpl View File

@@ -2,7 +2,7 @@

<div class="ui secondary pointing menu">
<div class="active item">
推荐百科
{{.i18n.Tr "explore.recommended_encyclopedia"}}
</div>
</div>
<div class="ui relaxed list">


+ 84
- 0
templates/repo/cloudbrain/show.tmpl View File

@@ -194,6 +194,89 @@ td, th {
<div class="active section">{{.displayJobName}}</div>
</div>
</h4>
<<<<<<< HEAD
<div>
<div class="ui yellow segment">
{{with .task}}
<p>{{$.i18n.Tr "repo.cloudbrain_task" }}: {{.DisplayJobName}}</p>
{{end}}
</div>
<div class="ui green segment">
<p>{{$.i18n.Tr "repo.cloudbrain_task_result"}}:</p>
{{with .taskRes}}
{{range .TaskStatuses}}
<table class="ui celled striped table">
<tbody>
<tr>
<td class="four wide"> {{$.i18n.Tr "repo.cloudbrain_task_status"}} </td>
<td> {{.State}} </td>
</tr>
</tbody>
</table>
{{end}}
{{end}}
</div>
<div class="ui blue segment">
{{with .result}}
<table class="ui celled striped table">
<thead>
<tr> <th colspan="2"> {{$.i18n.Tr "repo.cloudbrain_task_platform"}} </th> </tr>
</thead>
<tbody>
<tr>
<td class="four wide"> CPU </td>
<td>{{.Resource.CPU}}</td>
</tr>
<tr>
<td> Memory </td>
<td>{{.Resource.Memory}}</td>
</tr>
<tr>
<td> NvidiaComGpu </td>
<td>{{.Resource.NvidiaComGpu}}</td>
</tr>
</tbody>
</table>

<table class="ui celled striped table">
<thead>
<tr> <th colspan="2"> {{$.i18n.Tr "repo.cloudbrain_task_debug_info"}}</th> </tr>
</thead>
<tbody>
<tr>
<td class="four wide"> {{$.i18n.Tr "repo.cloudbrain_task_platform"}} </td>
<td> {{.Platform}} </td>
</tr>
<tr>
<td> {{$.i18n.Tr "repo.cloudbrain_start_time"}} </td>
{{if not (eq $.task.StartTime 0)}}
<td>{{TimeSinceUnix1 $.task.StartTime}}</td>
{{else}}
<td>无<td>
{{end}}
</tr>
<tr>
<td> {{$.i18n.Tr "repo.cloudbrain_end_time"}} </td>
{{if not (eq $.task.EndTime 0)}}
<td>{{TimeSinceUnix1 $.task.EndTime}}</td>
{{else}}
<td>无<td>
{{end}}
</tr>
<tr>
<td> ExitCode </td>
<td>{{.JobStatus.AppExitCode}}</td>
</tr>
<tr>
<td> {{$.i18n.Tr "repo.cloudbrain_exit_information"}} </td>
<td>{{.JobStatus.AppExitDiagnostics | nl2br}}</td>
</tr>
</tbody>
</table>
{{end}}
</div>
=======
{{range $k ,$v := .version_list_task}}
<div class="ui accordion border-according" id="accordion{{.VersionName}}" data-repopath="{{$.RepoRelPath}}" data-jobid="{{.JobID}}" data-version="{{.VersionName}}">
<input type="hidden" id="jobId_input" name="jobId_input" value="{{.JobID}}">
@@ -468,6 +551,7 @@ td, th {

</div>
</div>
>>>>>>> wangjr_develop
</div>
{{end}} {{template "base/paginate" .}}
</div>


+ 4
- 4
templates/repo/home.tmpl View File

@@ -256,7 +256,7 @@
</div>
<div class="ui six wide tablet four wide computer column">
<div id="repo-desc" data-IsAdmin= "{{.Permission.IsAdmin}}" data-IsArchived="{{.Repository.IsArchived}}" >
<h4 id="about-desc" class="ui header">简介</h4>
<h4 id="about-desc" class="ui header"> {{ .i18n.Tr "repo.computing.Introduction"}}</h4>
<input type="hidden" id="edit-alias" value="{{.Repository.Alias}}">
<p>
{{if .Repository.DescriptionHTML}}
@@ -322,14 +322,14 @@
<h4 class="ui header">
{{$lenCon := len .ContributorInfo}}
{{if lt $lenCon 25 }}
<strong>贡献者 ({{len .ContributorInfo}})</strong>
<strong> {{.i18n.Tr "home.contributors"}} ({{len .ContributorInfo}})</strong>
{{else}}
<strong>贡献者 ({{len .ContributorInfo}}+)</strong>
<strong> {{.i18n.Tr "home.contributors"}} ({{len .ContributorInfo}}+)</strong>
{{end}}
<div class="ui right">
<!-- <a class="membersmore text grey" href="{{.RepoLink}}/contributors">全部 {{svg "octicon-chevron-right" 16}}</a> -->
<a class="membersmore text grey" href="{{.RepoLink}}/contributors?type={{if .IsViewBranch}}branch{{else}}tag{{end}}&name={{.BranchName}}">全部 {{svg "octicon-chevron-right" 16}}</a>
<a class="membersmore text grey" href="{{.RepoLink}}/contributors?type={{if .IsViewBranch}}branch{{else}}tag{{end}}&name={{.BranchName}}">{{.i18n.Tr "repo.all_contribute" }} {{svg "octicon-chevron-right" 16}}</a>
</div>
</h4>
<div class="ui members" id="contributorInfo">


+ 10
- 10
templates/repo/modelarts/trainjob/show.tmpl View File

@@ -481,7 +481,7 @@ td, th {
<div id="newmodel">
<div class="ui modal second">
<div class="header" style="padding: 1rem;background-color: rgba(240, 240, 240, 100);">
<h4 id="model_header">导入新模型</h4>
<h4 id="model_header">{{.i18n.Tr "repo.cloudbrain.model.manage.import_new_model"}}</h4>
</div>
<div class="content content-padding">
<form id="formId" method="POST" class="ui form">
@@ -492,31 +492,31 @@ td, th {

<div class="two inline fields ">
<div class="required ten wide field">
<label style="margin-left: -23px;">选择训练任务</label>
<label style="margin-left: -23px;"> {{.i18n.Tr "repo.modelarts.train_job.choose_training_task"}}</label>
<input type="hidden" class="width83" id="JobId" name="JobId" readonly required>
<input class="width83" id="JobName" readonly required>

</div>
<div class="required six widde field">
<label>版本</label>
<label>{{.i18n.Tr "repo.model.manage.version"}} </label>
<input class="width70" id="VersionName" name="VersionName" readonly required>
</div>
</div>

<div class="required inline field" id="modelname">
<label>模型名称</label>
<label>{{.i18n.Tr "repo.modelarts.model_name"}}</label>
<input style="width: 45%;" id="name" name="Name" required maxlength="25" onkeyup="this.value=this.value.replace(/[, ]/g,'')">
</div>
<div class="required inline field" id="verionname">
<label>模型版本</label>
<label>{{.i18n.Tr "repo.modelarts.model_version"}}</label>
<input style="width: 45%;" id="version" name="Version" value="" readonly required maxlength="255">
</div>
<div class="inline field">
<label>模型标签</label>
<label>{{.i18n.Tr "repo.modelarts.model_label"}}</label>
<input style="width: 83%;margin-left: 7px;" id="label" name="Label" maxlength="255" placeholder='{{.i18n.Tr "repo.modelarts.train_job.label_place"}}'>
</div>
<div class="inline field">
<label for="description">模型描述</label>
<label for="description"> {{.i18n.Tr "repo.modelarts.model_description"}}</label>
<textarea style="width: 83%;margin-left: 7px;" id="Description" name="Description" rows="3" maxlength="255" placeholder='{{.i18n.Tr "repo.modelarts.train_job.new_place"}}' onchange="this.value=this.value.substring(0, 255)" onkeydown="this.value=this.value.substring(0, 255)" onkeyup="this.value=this.value.substring(0, 256)"></textarea>
</div>

@@ -706,7 +706,7 @@ td, th {
},
onHidden: function() {
if (flag == false) {
$('.alert').html('您已取消操作').removeClass('alert-success').addClass('alert-danger').show().delay(1500).fadeOut();
$('.alert').html("{{.i18n.Tr "repo.modelarts.canceled"}}").removeClass('alert-success').addClass('alert-danger').show().delay(1500).fadeOut();
}
}
})
@@ -861,7 +861,7 @@ td, th {
let end_line = $(`#log${version_name} input[name=end_line]`).val()
$.get(`/api/v1/repos/${userName}/${repoPath}/modelarts/train-job/${jobID}/log?version_name=${version_name}&base_line=${end_line}&lines=50&order=desc`, (data) => {
if (data.Lines == 0){
$(`.message${version_name} #header`).text('您已翻阅至日志底部')
$(`.message${version_name} #header`).text("{{.i18n.Tr "repo.modelarts.scrolled_bottom"}}")
$(`.message${version_name}`).css('display', 'block')
setTimeout(function(){
$(`.message${version_name}`).css('display', 'none')
@@ -884,7 +884,7 @@ td, th {
let start_line = $(`#log${version_name} input[name=start_line]`).val()
$.get(`/api/v1/repos/${userName}/${repoPath}/modelarts/train-job/${jobID}/log?version_name=${version_name}&base_line=${start_line}&lines=50&order=asc`, (data) => {
if (data.Lines == 0){
$(`.message${version_name} #header`).text('您已翻阅至日志顶部')
$(`.message${version_name} #header`).text("{{.i18n.Tr "repo.modelarts.scrolled_top"}}")
$(`.message${version_name}`).css('display', 'block')
setTimeout(function(){
$(`.message${version_name}`).css('display', 'none')


+ 16
- 15
templates/repo/modelmanage/index.tmpl View File

@@ -29,15 +29,16 @@
{{if eq $.MODEL_COUNT 0}}
<div class="ui placeholder segment bgtask-none">
<div class="ui icon header bgtask-header-pic"></div>
<div class="bgtask-content-header">未创建过模型</div>
<div class="bgtask-content-header">{{$.i18n.Tr "repo.model_not_created"}}</div>
<div class="bgtask-content">
{{if $.RepoIsEmpty}}
<div class="bgtask-content-txt">代码版本:您还没有初始化代码仓库,请先<a href="{{.RepoLink}}">创建代码版本;</a></div>
<!-- <div class="bgtask-content-txt">代码版本:您还没有初始化代码仓库,请先<a href="{{.RepoLink}}">创建代码版本;</a></div> -->
<div class="bgtask-content-txt">{{$.i18n.Tr "repo.repo_not_initialized" .RepoLink | Safe}}</div>
{{end}}
{{if eq $.TRAIN_COUNT 0}}
<div class="bgtask-content-txt">训练任务:您还没创建过训练任务,请先创建<a href="{{.RepoLink}}/modelarts/train-job">训练任务</a>。</div>
<div class="bgtask-content-txt">{{$.i18n.Tr "repo.repo_not_initialized" .RepoLink | Safe}}</div>
{{end}}
<div class="bgtask-content-txt">使用说明:可以参考启智AI协作平台<a href="https://git.openi.org.cn/zeizei/OpenI_Learning">小白训练营课程。</a></div>
<div class="bgtask-content-txt"> {{$.i18n.Tr "repo.platform_instructions" .RepoLink | Safe}} </a></div>

</div>
<div style="display: none;">
@@ -71,11 +72,11 @@
<div id="deletemodel">
<div class="ui basic modal first">
<div class="ui icon header">
<i class="trash icon"></i> 删除模型
<i class="trash icon"></i> {{$.i18n.Tr "repo.delete_model"}}
</div>

<div class="content">
<p>你确认删除该模型么?此模型一旦删除不可恢复。</p>
<p> {{$.i18n.Tr "repo.delete_model_issure"}} </p>
</div>
<div class="actions">
<div class="ui red basic inverted cancel button">
@@ -101,20 +102,20 @@
<input type="hidden" name="_csrf" value="">
<div class="two inline fields ">
<div class="required ten wide field">
<label style="margin-left: -23px;">选择训练任务</label>
<label style="margin-left: -23px;"> {{$.i18n.Tr "repo.modelarts.train_job.choose_training_task"}} </label>
<div class="ui dropdown selection search width83 loading" id="choice_model">
<input type="hidden" id="JobId" name="JobId" required>
<div class="default text">选择训练任务</div>
<div class="default text">{{$.i18n.Tr "repo.modelarts.train_job.choose_training_task"}}</div>
<i class="dropdown icon"></i>
<div class="menu" id="job-name">
</div>
</div>
</div>
<div class="required six widde field">
<label>版本</label>
<label> {{$.i18n.Tr "repo.modelarts.version"}} </label>
<div class="ui dropdown selection search width70" id="choice_version">
<input type="hidden" id="VersionName" name="VersionName" required>
<div class="default text">选择版本</div>
<div class="default text"> {{$.i18n.Tr "repo.select_version"}} </div>
<i class="dropdown icon"></i>
<div class="menu" id="job-version">

@@ -123,19 +124,19 @@
</div>
</div>
<div class="required inline field" id="modelname">
<label>模型名称</label>
<label> {{$.i18n.Tr "repo.model.manage.model_name"}} </label>
<input style="width: 45%;" id="name" name="Name" required maxlength="25" onkeyup="this.value=this.value.replace(/[, ]/g,'')">
</div>
<div class="required inline field" id="verionname">
<label>模型版本</label>
<label> {{$.i18n.Tr "repo.modelarts.train_job.model_version"}} </label>
<input style="width: 45%;" id="version" name="Version" value="" readonly required maxlength="255">
</div>
<div class="inline field">
<label>模型标签</label>
<label> {{$.i18n.Tr "repo.modelarts.model_label"}} </label>
<input style="width: 83%;margin-left: 7px;" id="label" name="Label" maxlength="255" placeholder='{{.i18n.Tr "repo.modelarts.train_job.label_place"}}'>
</div>
<div class="inline field">
<label for="description">模型描述</label>
<label for="description"> {{$.i18n.Tr "repo.modelarts.model_descriptionl"}} </label>
<textarea style="width: 83%;margin-left: 7px;" id="Description" name="Description" rows="3" maxlength="255" placeholder='{{.i18n.Tr "repo.modelarts.train_job.new_place"}}' onchange="this.value=this.value.substring(0, 255)" onkeydown="this.value=this.value.substring(0, 255)" onkeyup="this.value=this.value.substring(0, 256)"></textarea>
</div>

@@ -173,7 +174,7 @@
.modal({
centered: false,
onShow:function(){
$('#model_header').text("导入新模型")
$('#model_header').text( "{{.i18n.Tr "repo.model.manage.import_new_model"}}" )
$('input[name="Version"]').addClass('model_disabled')
$('.ui.dimmer').css({"background-color":"rgb(136, 136, 136,0.7)"})
$("#job-name").empty()


+ 73
- 53
web_src/js/components/Contributors.vue View File

@@ -1,11 +1,11 @@
<template>
<div class="ui container">
<div class="row git-user-content">
<div class="row git-user-content" >
<h3 class="ui header">
<div class="ui breadcrumb">
<a class="section" :href="url_code">代码</a>
<div class="ui breadcrumb" id ='contri'>
<a class="section" :href="url_code"> {{$t('message.code')}}</a>
<div class="divider"> / </div>
<div class="active section" >贡献者&nbsp;({{totalNum}})</div>
<div class="active section" >{{$t('message.contributor')}} &nbsp;({{totalNum}})</div>
</div>
</h3>
<div class="ui horizontal relaxed list">
@@ -36,63 +36,83 @@
</div>
</template>

<script>
<script type="text/javascript">
import enLocale from 'element-ui/lib/locale/lang/en'
import zhLocale from 'element-ui/lib/locale/lang/zh-CN'
import locale from 'element-ui/lib/locale'

const {AppSubUrl, StaticUrlPrefix, csrf} = window.config;
const {AppSubUrl, StaticUrlPrefix, csrf} = window.config;

export default {
data() {
return {
url:'',
url_infor:'',
href_:'',
contributors_list:[],
contributors_list_page:[],
currentPage:1,
pageSize:50,
totalNum:0,
AppSubUrl:AppSubUrl
};
},
methods: {
export default {
data() {
return {
url:'',
url_infor:'',
href_:'',
contributors_list:[],
contributors_list_page:[],
currentPage:1,
pageSize:50,
totalNum:0,
AppSubUrl:AppSubUrl,
};
},
methods: {

getContributorsList(){
this.$axios.get(this.url+'/list?'+this.url_infor).then((res)=>{
this.contributors_list = res.data.contributor_info
this.totalNum = this.contributors_list.length
this.contributors_list_page = this.contributors_list.slice(0,this.pageSize)
})
},
handleCurrentChange(val){
this.contributors_list_page = this.contributors_list.slice((val-1)*this.pageSize,val*this.pageSize)
},

getContributorsList(){
this.$axios.get(this.url+'/list?'+this.url_infor).then((res)=>{
this.contributors_list = res.data.contributor_info
this.totalNum = this.contributors_list.length
this.contributors_list_page = this.contributors_list.slice(0,this.pageSize)
})
getLang(){
this.text_langName = document.getElementById("menutext_1").innerText
if (this.text_langName == '简体中文'){
this.$i18n.locale = 'zh'
locale.use(zhLocale)
}
else if (this.text_langName == 'English'){
this.$i18n.locale = 'en'
locale.use(enLocale)
}
}
},
handleCurrentChange(val){
this.contributors_list_page = this.contributors_list.slice((val-1)*this.pageSize,val*this.pageSize)
computed:{
},
},
computed:{
},
watch: {
watch: {

},
created(){
const url = window.location.pathname;
this.url = url;
let strIndex = this.url.indexOf("contributors")
this.url_code = this.url.substr(0,strIndex)
this.href_ = window.location.href;
let index = this.href_.indexOf("?")
this.url_infor = this.href_.substring(index+1,this.href_.length)
this.getContributorsList()
},
},
created(){
console.log(this)
const url = window.location.pathname;
this.url = url;
let strIndex = this.url.indexOf("contributors")
this.url_code = this.url.substr(0,strIndex)
this.href_ = window.location.href;
let index = this.href_.indexOf("?")
this.url_infor = this.href_.substring(index+1,this.href_.length)
this.getContributorsList()
// this.text_langName=''
// this.getLang()
},

updated(){
if(document.querySelectorAll('img[avatar]').length!==0){
window.LetterAvatar.transform()
updated(){
if(document.querySelectorAll('img[avatar]').length!==0){
window.LetterAvatar.transform()
}
},
mounted(){
// this.getLang()
}
}
};
</script>


+ 6
- 6
web_src/js/components/EditAboutInfo.vue View File

@@ -1,13 +1,13 @@
<template>
<div>
<h4 id="about-desc" class="ui header desc-home">简介
<h4 id="about-desc" class="ui header desc-home">{{$t('message.introduction')}}
<a class="edit-icon" v-if="IsPermit" id ="editBtn" href="javascript:void(0)" @click="editClick" >
<i class="gray edit outline icon" style="margin-right: 0;"></i>
</a>
</h4>
<edit-dialog-cmpt
:vmContext="vmContext"
dialogTitle="编辑仓库信息"
:dialogTitle="$t('message.edit_repository_information')"
v-model="editDataDialog"
:deleteCallback="editDataFunc"
:deleteLoading ="editDataListLoading"
@@ -19,11 +19,11 @@
</div>
<div slot="content">
<el-form label-position="top" :model="info" :rules="rule" ref="ruleForm">
<el-form-item label="简介" prop="desc">
<el-input v-model="info.desc" type="textarea" placeholder="请输入内容" :autosize="{minRows:4,maxRows:6}" maxlength="255" show-word-limit></el-input>
<el-form-item :label="$t('message.introduction')" prop="desc">
<el-input v-model="info.desc" type="textarea" :placeholder="$t('message.please_enter_content')" :autosize="{minRows:4,maxRows:6}" maxlength="255" show-word-limit></el-input>
</el-form-item>
<el-form-item label="主页" prop="index_web" >
<el-input v-model="info.index_web" placeholder="主页(eg: https://git.openi.org.cn)"></el-input>
<el-form-item :label="$t('message.home')" prop="index_web" >
<el-input v-model="info.index_web" :placeholder="$t('message.home_placeholder')"></el-input>
</el-form-item>
</el-form>
</div>


+ 24
- 8
web_src/js/components/EditTopics.vue View File

@@ -3,7 +3,7 @@
<div class="input-search">
<el-input v-model="input" clearable :autofocus="true" @input="changeValue" id="topics_input" @keyup.enter.native="postTopic" placeholder="搜索或创建标签">
<el-input v-model="input" clearable :autofocus="true" @input="changeValue" id="topics_input" @keyup.enter.native="postTopic" :placeholder="$t('message.search_or_create_tags')">

</el-input>
<div class="scrolling-menu">
@@ -14,7 +14,7 @@
<div class="text">{{arr.topic_name.toLowerCase()}} </div>
</div>
<div v-if="showInputValue" class="addition item-text" @click="postTopic">
点击或回车添加<b class="user-add-label-text">{{input.toLowerCase()}}</b>标签
{{$t('message.click_or_enter_to_add')}}<b class="user-add-label-text">{{input.toLowerCase()}}</b>标签
</div>
<div v-if="showAddTopic" class="item-text" @click="addPostTopic">
<div class="icon-wrapper">
@@ -31,7 +31,9 @@
</template>

<script>

import enLocale from 'element-ui/lib/locale/lang/en'
import zhLocale from 'element-ui/lib/locale/lang/zh-CN'
import locale from 'element-ui/lib/locale'
const {AppSubUrl, StaticUrlPrefix, csrf} = window.config;

import $ from 'jquery'
@@ -98,7 +100,7 @@ export default {
this.Post(data,topics)
this.$set(this.showInitTopic,item,false)
if(this.arrayTopics.length===0){
$('#repo-topics1').append('<span class="no-description text-italic">暂无标签</span>')
$('#repo-topics1').append('<span class="no-description text-italic">'+this.$t('message.No_label_yet')+'</span>')
}else{
$('#repo-topics1').children('span').remove()
}
@@ -264,7 +266,7 @@ export default {
if(this.arrayTopics.length===0){
$('#repo-topics1').append('<span class="no-description text-italic">暂无标签</span>')
$('#repo-topics1').append('<span class="no-description text-italic">'+this.$t('message.No_label_yet')+'</span>')
}else{
$('#repo-topics1').children('span').remove()
}
@@ -342,6 +344,17 @@ export default {
window.event.cancelBubble = true;//兼容IE
}
}
},
getLang(){
this.text_langName = document.getElementById("menutext_1").innerText
if (this.text_langName == '简体中文'){
this.$i18n.locale = 'zh'
locale.use(zhLocale)
}
else if (this.text_langName == 'English'){
this.$i18n.locale = 'en'
locale.use(enLocale)
}
}
},
computed:{
@@ -386,14 +399,17 @@ mounted() {
});
if(this.arrayTopics.length===0){
$('#repo-topics1').append('<span class="no-description text-italic">暂无标签</span>')
$('#repo-topics1').append('<span class="no-description text-italic">'+this.$t('message.No_label_yet')+'</span>')
}
this.changeValue()
this.changeValue();
this.getLang()
} ,
created(){
this.initTopics();
this.input=''
this.input='';
this.text_langName='' ;
this.getLang()
}
};


+ 517
- 0
web_src/js/components/Images.vue View File

@@ -0,0 +1,517 @@
<template>
<div>
<div class="header-wrapper">
<div class="ui container">
<el-row class="image_text">
<h1>{{$t('message.cloud_brain_mirror')}}</h1>
</el-row>
</div>
</div>
<div class="ui container" id="header">
<el-tabs v-model="activeName" @tab-click="handleClick">
<el-tab-pane :label="$t('message.cloud_brain_mirror')"name="first" v-loading="loading">
<div class="ui sixteen wide column">
<div class="ui two column stackable grid">
<div class="column">
<el-input :placeholder="$t('message.enter_mirror_name_keyword')" v-model="search" class="input-with-select" @keyup.enter.native="searchName()">
<el-button id="success" slot="append" icon="el-icon-search" @click="searchName()">{{$t('message.search')}}</el-button>
</el-input>
</div>

<!-- <div class="column right aligned">
<el-dropdown>
<span class="el-dropdown-link">
排序<i class="el-icon-caret-bottom"></i>
</span>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item>最早创建</el-dropdown-item>
<el-dropdown-item>最新创建</el-dropdown-item>
<el-dropdown-item divided>按镜像字母顺序排序</el-dropdown-item>
<el-dropdown-item>按镜像字母逆序排序</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</div> -->
</div>
</div>

<el-row style="margin-top:15px;">

<el-table
:data="tableData"
style="width: 100%"
:header-cell-style="tableHeaderStyle"
:default-sort="{prop:'createtime',order:'descending'}">
<el-table-column
:label="$t('message.mirror_name')"
width="350"
align="left"
prop="name"
sortable
>
<template slot-scope="scope">
<a class="text-over" style="cursor:default;color:#426290" :title="scope.row.name">{{ scope.row.name }}</a>
</template>
</el-table-column>
<el-table-column
:label="$t('message.file_path_image_description')"
width="450"
align="left"
>
<template slot-scope="scope">
<el-tooltip class="item" effect="dark" :content="$t('message.click_Copy_file_path')" placement="top">
<a class="text-over" style="display:block;" @click="copyUrl(scope.row.place)">{{ scope.row.place }}</a>
</el-tooltip>
<span class="text-over" :title="scope.row.description | clearP">{{ scope.row.description | clearP}}</span>
</template>
</el-table-column>
<el-table-column
prop="provider"
:label="$t('message.provider')"
width="120"
align="left"
sortable>
</el-table-column>
<el-table-column
prop="createtime"
:label="$t('message.creation_time')"
align="center"
sortable>
<template slot-scope="scope">
{{scope.row.createtime | transformTimestamp}}
</template>
</el-table-column>
</el-table>
</el-row>
<div class="ui container" style="margin-top:50px;text-align:center">
<el-pagination
background
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="currentPage"
:page-size="pageSize"
:page-sizes="[5,10,20]"
layout="total, sizes, prev, pager, next, jumper"
:total="totalNum">
</el-pagination>
</div>
</el-tab-pane>
<el-tab-pane :label="$t('message.custom_mirror_1')" name="second" v-loading="loading1">
<div class="ui sixteen wide column">
<div class="ui two column stackable grid">
<div class="column">
<el-input :placeholder="$t('message.enter_mirror_name_keyword')" v-model="search" class="input-with-select" @keyup.enter.native="searchName()">
<el-button slot="append" id="success" icon="el-icon-search" @click="searchName()">{{$t('message.search')}}</el-button>
</el-input>
</div>

<!-- <div class="column right aligned">
<el-dropdown>
<span class="el-dropdown-link">
排序<i class="el-icon-caret-bottom"></i>
</span>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item>最早创建</el-dropdown-item>
<el-dropdown-item>最新创建</el-dropdown-item>
<el-dropdown-item divided>按镜像字母顺序排序</el-dropdown-item>
<el-dropdown-item>按镜像字母逆序排序</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</div> -->
</div>
</div>

<el-row style="margin-top:15px;">

<el-table
:data="tableData1"
style="width: 100%"
:header-cell-style="tableHeaderStyle"
:default-sort="{prop:'createtime',order:'descending'}">
<el-table-column
:label="$t('message.mirror_name')"
width="350"
align="left"
prop="name"
sortable
>
<template slot-scope="scope">
<a class="text-over" :title="scope.row.name" style="cursor:default;color:#426290">{{ scope.row.name }}</a>
</template>
</el-table-column>
<el-table-column
:label="$t('message.file_path_mirror_description')"
width="450"
align="left"
>
<template slot-scope="scope">
<el-tooltip class="item" effect="dark" :content="$t('message.click_Copy_file_path')" placement="top">
<a class="text-over" style="display:block;" @click="copyUrl(scope.row.place)">{{ scope.row.place }}</a>
</el-tooltip>
<span class="text-over" :title="scope.row.description | clearP">{{ scope.row.description | clearP }}</span>
</template>
</el-table-column>
<el-table-column
prop="provider"
:label="$t('message.provider')"
width="120"
align="left"
sortable>
</el-table-column>
<el-table-column
prop="createtime"
:label="$t('message.creation_time')"
align="center"
sortable>
<template slot-scope="scope">
{{scope.row.createtime | transformTimestamp}}
</template>
</el-table-column>
</el-table>
</el-row>
<div class="ui container" style="margin-top:50px;text-align:center">
<el-pagination
background
@size-change="handleSizeChange1"
@current-change="handleCurrentChange1"
:current-page="currentPage1"
:page-size="pageSize1"
:page-sizes="[5,10,20]"
layout="total, sizes, prev, pager, next, jumper"
:total="totalNum1">
</el-pagination>
</div>

</el-tab-pane>
<el-tab-pane :label="$t('message.public_mirror_2')" name="third">
<div class="ui sixteen wide column">
<div class="ui two column stackable grid">
<div class="column">
<el-input :placeholder="$t('message.enter_mirror_name_keyword')" v-model="search" class="input-with-select">
<el-button slot="append" id="success" icon="el-icon-search">{{$t('message.search')}}</el-button>
</el-input>
</div>

<!-- <div class="column right aligned">
<el-dropdown>
<span class="el-dropdown-link">
排序<i class="el-icon-caret-bottom"></i>
</span>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item>最早创建</el-dropdown-item>
<el-dropdown-item>最新创建</el-dropdown-item>
<el-dropdown-item divided>按镜像字母顺序排序</el-dropdown-item>
<el-dropdown-item>按镜像字母逆序排序</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</div> -->
</div>
</div>

<el-empty :image-size="200"></el-empty>
</el-tab-pane>
<el-tab-pane :label="$t('message.custom_mirror_2')" name="fourth">
<div class="ui sixteen wide column">
<div class="ui two column stackable grid">
<div class="column">
<el-input :placeholder="$t('message.enter_mirror_name_keyword')" v-model="search" class="input-with-select">
<el-button slot="append" id="success" icon="el-icon-search">{{$t('message.search')}}</el-button>
</el-input>
</div>

<!-- <div class="column right aligned">
<el-dropdown>
<span class="el-dropdown-link">
排序<i class="el-icon-caret-bottom"></i>
</span>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item>最早创建</el-dropdown-item>
<el-dropdown-item>最新创建</el-dropdown-item>
<el-dropdown-item divided>按镜像字母顺序排序</el-dropdown-item>
<el-dropdown-item>按镜像字母逆序排序</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</div> -->
</div>
</div>

<el-empty :image-size="200"></el-empty>

</el-tab-pane>
</el-tabs>
</div>
</div>

</template>

<script>

const {_AppSubUrl, _StaticUrlPrefix, csrf} = window.config;




export default {
components: {
},
data() {
return {
activeName: 'first',
search:'',
currentPage:1,
pageSize:10,
totalNum:0,
params:{page:1,size:10,name:''},
tableData: [],
loading:false,

currentPage1:1,
pageSize1:10,
totalNum1:0,
params1:{page:1,size:10,name:''},
tableData1: [],
loading1:false,
text_langName:'',
};
},
methods: {
handleClick(tab, event) {
if(tab.name=="first"){
this.getImageList()
}
if(tab.name=="second"){
this.getImageList1()
}
},
tableHeaderStyle({row,column,rowIndex,columnIndex}){
if(rowIndex===0){
return 'background:#f5f5f6;color:#606266'
}
},
handleSizeChange(val){
this.params.size = val
this.getImageList()


},
handleCurrentChange(val){
this.params.page = val
this.getImageList()

},
handleSizeChange1(val){
this.params1.size = val
this.getImageList1()


},
handleCurrentChange1(val){
this.params1.page = val
this.getImageList1()

},
getImageList(){
this.loading = true
this.$axios.get('/explore/images/public',{
params:this.params
}).then((res)=>{
this.totalNum = res.data.count
this.tableData = res.data.rows
this.loading = false
})
},

getImageList1(){
this.loading1 = true
this.$axios.get('/explore/images/custom',{
params:this.params1
}).then((res)=>{
this.totalNum1 = res.data.count
this.tableData1 = res.data.rows
this.loading1 = false
})
},
copyUrl(url){
const cInput = document.createElement('input')
cInput.value = url
document.body.appendChild(cInput)
cInput.select()
document.execCommand('Copy')
cInput.remove()

},
searchName(){
if(this.activeName=='first'){
this.params.name = this.search
this.params.page = 1
this.getImageList()
}
if(this.activeName=='second'){
this.params1.name = this.search
this.params1.page = 1
this.getImageList1()
}
},
getLang(){
this.text_langName = document.getElementById("menutext_1").innerText
if (this.text_langName == '简体中文'){
this.$i18n.locale = 'zh'
// locale.use(zhLocale)
}
else if (this.text_langName == 'English'){
this.$i18n.locale = 'en'
// locale.use(enLocale)
}
}

},
filters:{



clearP(value){
if(!value) return ''
const reg = /\<\/?p\>/g;
value = value.replace(reg,'')
return value

},
transformTimestamp(timestamp){
let a = new Date(timestamp).getTime();
const date = new Date(a);
const Y = date.getFullYear() + '-';
const M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';
const D = (date.getDate() < 10 ? '0'+date.getDate() : date.getDate()) + ' ';
const h = (date.getHours() < 10 ? '0'+date.getHours() : date.getHours()) + ':';
const m = (date.getMinutes() <10 ? '0'+date.getMinutes() : date.getMinutes()) + ':' ;
const s = (date.getSeconds() <10 ? '0'+date.getSeconds() : date.getSeconds()) ; // 秒
const dateString = Y + M + D + h + m + s;
// console.log('dateString', dateString); // > dateString 2021-07-06 14:23
return dateString;
},
},
watch:{
search(val){
if(!val && this.activeName=='first'){
this.params.name = val
this.getImageList()
}
if(!val && this.activeName=='second'){
this.params1.name = val
this.getImageList1()
}
}

},
mounted() {
this.getImageList(),
this.getLang()
},
created() {
this.text_langName='',
this.getLang()
}

};
</script>

<style scoped>
.header-wrapper {
background-color: #f5f5f6;
padding-top: 15px;
}
.image_text{
padding:25px 0 55px 0 ;
}
#header{
position: relative;
top:-40px;
}
.el-dropdown-menu__item--divided{
border-top: 1px solid blue;
}
.el-table thead{
background-color: #f5f5f6;
}
/deep/ .el-tabs__item:hover{
color: #000;
font-weight: 500;
}
/deep/ .el-tabs__item.is-active {
color: #000;
font-weight: 500;
}
/deep/ .el-tabs__active-bar{
background-color:#000
}

/deep/ .el-pagination.is-background .el-pager li:not(.disabled).active {
background-color: #5bb973;
color: #FFF;
}
/deep/ .el-pagination.is-background .el-pager li.active {
color: #fff;
cursor: default;
}
/deep/ .el-pagination.is-background .el-pager li:hover {
color: #5bb973;
}
/deep/ .el-pagination.is-background .el-pager li:not(.disabled):hover {
color: #5bb973;
}
/deep/ .el-pagination.is-background .el-pager li:not(.disabled).active:hover {
background-color: #5bb973;
color: #FFF;
}

/deep/ .el-pager li.active {
color: #08C0B9;
cursor: default;
}
/deep/ .el-pagination .el-pager li:hover {
color: #08C0B9;
}
/deep/ .el-pagination .el-pager li:not(.disabled):hover {
color: #08C0B9;
}
/* /deep/ .el-pagination.is-background .el-pager li:not(.disabled).active{
background-color: #5bb973;
color: #000;
} */
/* /deep/ .el-pager li:hover{
color: #000;
} */
#success{
background-color: #5bb973;
color: white;
}
.text-over{
overflow: hidden;
text-overflow: ellipsis;
vertical-align: middle;
white-space: nowrap;
}
</style>

+ 12
- 5
web_src/js/components/MinioUploader.vue View File

@@ -26,6 +26,13 @@
</template>

<script>

import enLocale from 'element-ui/lib/locale/lang/en'
import zhLocale from 'element-ui/lib/locale/lang/zh-CN'
import locale from 'element-ui/lib/locale'
/* eslint-disable eqeqeq */
// import Dropzone from 'dropzone/dist/dropzone.js';
// import 'dropzone/dist/dropzone.css'
import SparkMD5 from 'spark-md5';
import axios from 'axios';
import qs from 'qs';
@@ -530,7 +537,7 @@ export default {
}
const urls = []; // TODO const ?
const etags = [];
console.log('上传分片...');
// console.log('上传分片...');
this.status = this.dropzoneParams.data('uploading');
loadNext();
fileReader.onload = async (e) => {
@@ -543,10 +550,10 @@ export default {
fileReader.abort();
currentChunk++;
if (currentChunk < chunks) {
console.log(
`第${currentChunk}个分片上传完成, 开始第${currentChunk +
1}/${chunks}个分片上传`
);
// console.log(
// `第${currentChunk}个分片上传完成, 开始第${currentChunk +
// 1}/${chunks}个分片上传`
// );
this.progress = Math.ceil((currentChunk / chunks) * 100);
this.updateProgress(file, ((currentChunk / chunks) * 100).toFixed(2));
this.status = `${this.dropzoneParams.data('uploading')} ${(


+ 15
- 15
web_src/js/components/Model.vue View File

@@ -14,7 +14,7 @@
>
<el-table-column
prop="Name"
label="模型名称"
:label="$t('model.model_name')"
align="left"
min-width="18%"
>
@@ -28,7 +28,7 @@
</el-table-column>
<el-table-column
prop="Version"
label="版本"
:label="$t('model.version')"
align="center"
min-width="6.5%"
>
@@ -39,7 +39,7 @@
<el-table-column
prop="VersionCount"
label="版本数"
:label="$('model.version_number')"
align="center"
min-width="7.5%"
>
@@ -50,7 +50,7 @@

<el-table-column
prop="Size"
label="模型大小"
:label="$t('model.model_size')"
align="center"
min-width="10.5%"
>
@@ -60,7 +60,7 @@
</el-table-column>
<el-table-column
prop="EngineName"
label="AI引擎"
:label="$t('model.AI_engine')"
align="center"
min-width="8.5%"
>
@@ -70,7 +70,7 @@
</el-table-column>
<el-table-column
prop="ComputeResource"
label="计算资源"
:label="$t('model.computing_resources')"
align="center"
min-width="10.5%"
>
@@ -80,7 +80,7 @@
</el-table-column>
<el-table-column
prop="CreatedUnix"
label="创建时间"
:label="$t('model.creation_time')"
align="center"
min-width="13.75%"
>
@@ -90,7 +90,7 @@
</el-table-column>
<el-table-column
prop="UserName"
label="创建者"
:label="$t('model.creator')"
align="center"
min-width="6.75%"
>
@@ -101,12 +101,12 @@
</template>
</el-table-column>

<el-table-column label="操作" min-width="18%" align="center">
<el-table-column :label="$t('model.operate')" min-width="18%" align="center">
<template slot-scope="scope">
<div class="space-around">
<a :style="{visibility:!scope.row.Children ? 'visible':'hidden'}" :class="{'disabled':!scope.row.IsCanOper}" @click="showcreateVue(scope.row.Name,scope.row.Version,scope.row.Label)">创建新版本</a>
<a :href="loadhref+scope.row.ID" :class="{'disabled':!scope.row.IsCanOper}">下载</a>
<a :class="{'disabled':!scope.row.IsCanDelete}" @click="deleteModel(scope.row.ID,scope.row.cName)">删除</a>
<a :style="{visibility:!scope.row.Children ? 'visible':'hidden'}" :class="{'disabled':!scope.row.IsCanOper}" @click="showcreateVue(scope.row.Name,scope.row.Version,scope.row.Label)">{{$t('model.create_version')}}</a>
<a :href="loadhref+scope.row.ID" :class="{'disabled':!scope.row.IsCanOper}">{{$t('modle.download')}}</a>
<a :class="{'disabled':!scope.row.IsCanDelete}" @click="deleteModel(scope.row.ID,scope.row.cName)">{{$t('model.delete')}}</a>
</div>
</template>
@@ -200,7 +200,7 @@ export default {
.modal({
centered: false,
onShow:function(){
$('#model_header').text("创建模型新版本")
$('#model_header').text(this.$t('model.create_version_model'))
$('input[name="Name"]').addClass('model_disabled')
$('input[name="Name"]').attr('readonly','readonly')
$('input[name="Version"]').addClass('model_disabled')
@@ -339,9 +339,9 @@ export default {
},
onHidden: function() {
if (flag == false) {
$('.alert').html('您已取消操作').removeClass('alert-success').addClass('alert-danger').show().delay(1500).fadeOut();
$('.alert').html(this.$t('modle.canceled_operation')).removeClass('alert-success').addClass('alert-danger').show().delay(1500).fadeOut();
}else{
$('.alert').html('删除成功').removeClass('alert-danger').addClass('alert-success').show().delay(1500).fadeOut();
$('.alert').html(this.$t('modle.successfully_deleted')).removeClass('alert-danger').addClass('alert-success').show().delay(1500).fadeOut();
}
}
})


+ 74
- 0
web_src/js/components/i18n/lang/en.js View File

@@ -0,0 +1,74 @@
import enLocale from 'element-ui/lib/locale/lang/en'

const en = {
message: {
code: 'code',
contributor:'Contributor',
introduction: 'Introduction',
edit_repository_information: 'Edit repository information',
please_enter_content: 'Please enter content',
home: 'Home',
home_placeholder:'home(eg: https://git.openi.org.cn)',
search_or_create_tags: 'Search or create tags',
click_or_enter_to_add: 'Click or enter to add',
label: 'Label',
No_label_yet: 'No label',
cloud_brain_mirror: 'Cloud Brain Mirror',
public_mirror_1: 'Public mirror (Cloud Brain 1)',
enter_mirror_name_keyword: 'Please enter the image name keyword',
search: 'Search',
mirror_name: 'Mirror Name',
file_path_mirror_description: 'File Path / Mirror Description',
click_Copy_file_path: 'Click Copy File Path',
provider: 'Provider',
creation_time: 'Creation Time',
custom_mirror_1: 'Custom Mirror (Cloud Brain 1)',
public_mirror_2: 'Public Mirror (Cloud Brain 2)',
custom_mirror_1: 'Custom Mirror (Cloud Brain 2)'
},
model:{
model_name:'Model Name',
version:'Version',
version_number:'Version Number',
model_size:'Model Size',
AI_engine:'AI Engine',
computing_resources:'Computing Resources',
creation_time:'Creation Time',
creator:'Creator',
operate:'Operate',
create_version:'Create a new version',
download:'Download',
delete:'Delete',
create_version_model:'Create a new version of the model',
canceled_operation:'You have canceled the operation',
successfully_deleted:'Successfully deleted'
},
cloudeBrainMirror:{
cloud_brain_mirror: 'Cloud Brain Mirror',
public_mirror: 'Public Mirror',
platform_recommendations:'Show platform recommendations only',
placeholder: 'Search Mirror tag / description / tag ... ',
search:'Search',
mirror_tag:'Mirror Tag',
mirror_description:'mirror_description ',
available_clusters: 'Available clusters',
creator: 'Creator',
creation_time: 'Creation time',
operation: 'Operation',
copy_address: 'Copy address',
my_mirror: 'My Mirror',
state: 'State',
private: 'Private',
public: 'Public',
mirror_committed: 'Mirror Committed...',
check_exceeds_20g:'Check whether the size of the submitted image exceeds 20g!',
mirror_submitted:'Image submitted successfully',
edit: 'Edit',
delete: 'Delete',
my_favorite_mirror: 'My Favorite Mirror',
more:'More',

}
}

export default en;

+ 82
- 0
web_src/js/components/i18n/lang/zh.js View File

@@ -0,0 +1,82 @@
import zhLocale from 'element-ui/lib/locale/lang/zh-CN'

const zh = {
message: {
code: '代码',
contributor: '贡献者',
introduction: '简介',
edit_repository_information: '编辑仓库信息',
please_enter_content: '请输入内容',
home: '主页',
home_placeholder:'主页(eg: https://git.openi.org.cn)',
search_or_create_tags:'搜索或创建标签',
click_or_enter_to_add: '点击或回车添加',
label: '标签',
No_label_yet: '暂无标签',
cloud_brain_mirror: '云脑镜像',
public_mirror_1: '公共镜像(云脑1)',
enter_mirror_name_keyword: '请输入镜像名称关健词',
search: '搜索',
mirror_name: '镜像名称',
file_path_mirror_description: '文件路径/镜像描述',
click_Copy_file_path: '点击复制文件路径',
provider: '提供者',
creation_time: '创建时间',
custom_mirror_1: '自定义镜像(云脑1)',
public_mirror_2: '公共镜像(云脑2)',
custom_mirror_2: '自定义镜像(云脑2)'
},
model:{
model_name:'模型名称',
version:'版本',
version_number:'版本数',
model_size:'模型大小',
AI_engine:'AI引擎',
computing_resources:'计算资源',
creation_time:'创建时间',
creator:'创建者',
operate:'操作',
create_version:'创建新版本',
download:'下载',
delete:'删除',
create_version_model:'创建模型新版本',
canceled_operation:'您已取消操作',
successfully_deleted:'删除成功'
},
cloudeBrainMirror:{
cloud_brain_mirror: '云脑镜像',
public_mirror: '公开镜像',
platform_recommendations:'仅显示平台推荐',
placeholder: '搜镜像Tag/描述/标签...',
search:'搜索',
mirror_tag:'镜像Tag',
mirror_description:'镜像描述',
available_clusters: '可用集群',
creator: '创建者',
creation_time: '创建时间',
operation: '操作',
copy_address: '复制地址',
my_mirror: '我的镜像',
state: '状态',
private: '私有',
public: '公开',
mirror_committed: '镜像提交中...',
check_exceeds_20g:'检测提交镜像是否大小超过20G!',
mirror_submitted:'镜像提交成功',
edit: '编辑',
delete: '删除',
my_favorite_mirror: '我收藏的镜像',
more:'更多',









}
}

export default zh

+ 76
- 61
web_src/js/components/images/Images.vue View File

@@ -3,25 +3,25 @@
<div class="header-wrapper">
<div class="ui container">
<el-row class="image_text">
<h1>云脑镜像</h1>
<h1>{{$t('cloudeBrainMirror.cloud_brain_mirror')}}</h1>
</el-row>
</div>
</div>
<div class="ui container" id="header">
<el-tabs v-model="activeName" @tab-click="handleClick">
<el-tab-pane label="公开镜像" name="first" v-loading="loadingPublic">
<el-tab-pane :label="$t('cloudeBrainMirror.cloud_brain_mirror')" name="first" v-loading="loadingPublic">
<template v-if="tableDataPublic.length!==0">
<el-row style="align-items: center;display: flex;">
<el-col :span="12">
<div>
<el-checkbox v-model="checked">仅显示平台推荐</el-checkbox>
<el-checkbox v-model="checked">{{$t('cloudeBrainMirror.platform_recommendations')}}</el-checkbox>
</div>
</el-col>
<el-col :span="4"><div style="visibility: hidden;">TODO</div></el-col>
<el-col :span="8">
<div>
<el-input placeholder="搜镜像Tag/描述/标签..." v-model="search" class="input-with-select" @keyup.enter.native="searchName()">
<el-button id="success" slot="append" icon="el-icon-search" @click="searchName()">搜索</el-button>
<el-input :placeholder="$t('cloudeBrainMirror.placeholder')" v-model="search" class="input-with-select" @keyup.enter.native="searchName()">
<el-button id="success" slot="append" icon="el-icon-search" @click="searchName()">{{$t('cloudeBrainMirror.search')}}</el-button>
</el-input>
</div>
</el-col>
@@ -34,7 +34,7 @@
:header-cell-style="tableHeaderStyle"
>
<el-table-column
label="镜像Tag"
:label="$t('cloudeBrainMirror.mirror_tag')"
min-width="19%"
align="left"
prop="tag"
@@ -47,7 +47,7 @@
</template>
</el-table-column>
<el-table-column
label="镜像描述"
:label="$t('cloudeBrainMirror.mirror_description')"
min-width="28%"
align="left"
prop="description"
@@ -62,7 +62,7 @@
</el-table-column>
<el-table-column
prop="cloudbrainType"
label="可用集群"
:label="$t('cloudeBrainMirror.available_clusters')"
min-width="10%"
align="center"
>
@@ -72,7 +72,7 @@
</el-table-column>
<el-table-column
prop="creator"
label="创建者"
:label="$t('cloudeBrainMirror.creator')"
min-width="8%"
align="center"
>
@@ -84,7 +84,7 @@
</el-table-column>
<el-table-column
prop="createdUnix"
label="创建时间"
:label="$t('cloudeBrainMirror.creation_time')"
align="center"
min-width="14%"
>
@@ -95,7 +95,7 @@
<el-table-column
align="center"
min-width="21%"
label="操作"
:label="$t('cloudeBrainMirror.operation')"
>
<template slot-scope="scope">
<div style="display: flex;justify-content: flex-end;align-items: center;">
@@ -103,7 +103,7 @@
<svg width="1.4em" height="1.4em" viewBox="0 0 32 32" class="heart-stroke" :class='{stars_active:scope.row.isStar}'><path d="M4.4 6.54c-1.761 1.643-2.6 3.793-2.36 6.056.24 2.263 1.507 4.521 3.663 6.534a29110.9 29110.9 0 0010.296 9.633l10.297-9.633c2.157-2.013 3.424-4.273 3.664-6.536.24-2.264-.599-4.412-2.36-6.056-1.73-1.613-3.84-2.29-6.097-1.955-1.689.25-3.454 1.078-5.105 2.394l-.4.319-.398-.319c-1.649-1.316-3.414-2.143-5.105-2.394a7.612 7.612 0 00-1.113-.081c-1.838 0-3.541.694-4.983 2.038z"></path></svg>
<span style="line-height: 2;margin-left:0.3rem;">{{scope.row.numStars}}</span>
</div>
<span style="padding: 0 1rem;color:#0366d6;cursor:pointer;" @click="copyUrl(scope.row.place)">复制地址</span>
<span style="padding: 0 1rem;color:#0366d6;cursor:pointer;" @click="copyUrl(scope.row.place)">{{$t('cloudeBrainMirror.copy_address')}}</span>
</div>
</template>
</el-table-column>
@@ -126,14 +126,14 @@
<el-row style="align-items: center;display: flex;">
<el-col :span="12">
<div>
<el-checkbox v-model="checked">仅显示平台推荐</el-checkbox>
<el-checkbox v-model="checked">{{$t('cloudeBrainMirror.platform_recommendations')}}</el-checkbox>
</div>
</el-col>
<el-col :span="4"><div style="visibility: hidden;">TODO</div></el-col>
<el-col :span="8">
<div>
<el-input placeholder="搜镜像Tag/描述/标签..." v-model="search" class="input-with-select" @keyup.enter.native="searchName()">
<el-button id="success" slot="append" icon="el-icon-search" @click="searchName()">搜索</el-button>
<el-input :placeholder="$t('cloudeBrainMirror.placeholder')" v-model="search" class="input-with-select" @keyup.enter.native="searchName()">
<el-button id="success" slot="append" icon="el-icon-search" @click="searchName()">{{$t('cloudeBrainMirror.search')}}</el-button>
</el-input>
</div>
</el-col>
@@ -142,7 +142,7 @@
</template>
</el-tab-pane>
<el-tab-pane label="我的镜像" name="second" v-loading="loadingCustom">
<el-tab-pane :label="$t('cloudeBrainMirror.my_mirror')" name="second" v-loading="loadingCustom">
<template v-if="tableDataCustom.length!==0">
<el-row style="align-items: center;display: flex;">
<el-col :span="12">
@@ -153,8 +153,8 @@
<el-col :span="4"><div style="visibility: hidden;">TODO</div></el-col>
<el-col :span="8">
<div>
<el-input placeholder="搜镜像Tag/描述/标签..." v-model="search" class="input-with-select" @keyup.enter.native="searchName()">
<el-button id="success" slot="append" icon="el-icon-search" @click="searchName()">搜索</el-button>
<el-input :placeholder="$t('cloudeBrainMirror.placeholder')" v-model="search" class="input-with-select" @keyup.enter.native="searchName()">
<el-button id="success" slot="append" icon="el-icon-search" @click="searchName()">{{$t('cloudeBrainMirror.search')}}</el-button>
</el-input>
</div>
</el-col>
@@ -166,7 +166,7 @@
:header-cell-style="tableHeaderStyle"
>
<el-table-column
label="镜像Tag"
:label="$t('cloudeBrainMirror.mirror_tag')"
min-width="19%"
align="left"
prop="tag"
@@ -180,7 +180,7 @@
</template>
</el-table-column>
<el-table-column
label="镜像描述"
:label="$t('cloudeBrainMirror.mirror_description')"
min-width="27%"
align="left"
prop="description"
@@ -195,7 +195,7 @@
</el-table-column>
<el-table-column
prop="cloudbrainType"
label="可用集群"
:label="$t('cloudeBrainMirror.available_clusters')"
min-width="9%"
align="center"
>
@@ -205,23 +205,23 @@
</el-table-column>
<el-table-column
prop="isPrivate"
label="状态"
:label="$t('cloudeBrainMirror.state')"
min-width="10%"
align="center"
>
<template slot-scope="scope">
<div style="display:flex;align-items: center;justify-content: center;">
<span v-if="scope.row.isPrivate" style="color: rgb(250, 140, 22);">私有</span>
<span v-else style="color: rgb(19, 194, 141);">公开</span>
<el-tooltip class="item" effect="dark" content="镜像提交中..." placement="top">
<span v-if="scope.row.isPrivate" style="color: rgb(250, 140, 22);">{{$t('cloudeBrainMirror.private')}}</span>
<span v-else style="color: rgb(19, 194, 141);">{{$t('cloudeBrainMirror.public')}}</span>
<el-tooltip class="item" effect="dark" :content= "$t('cloudeBrainMirror.mirror_committed')" placement="top">
<i v-if="scope.row.status===0" class="CREATING" style="margin-left:0.3rem"></i>
</el-tooltip>
<el-tooltip class="item" effect="dark" content="检测提交镜像是否大小超过20G!" placement="top">
<el-tooltip class="item" effect="dark" :content="$t('cloudeBrainMirror.check_exceeds_20g')" placement="top">
<i v-if="scope.row.status===2" class="FAILED" style="margin-left:0.3rem"></i>
</el-tooltip>
<el-tooltip class="item" effect="dark" content="镜像提交成功" placement="top">
<el-tooltip class="item" effect="dark" :content="$t('cloudeBrainMirror.mirror_submitted')" placement="top">
<i v-if="scope.row.status===1" class="SUCCEEDED" style="margin-left:0.3rem"></i>
</el-tooltip>
@@ -231,7 +231,7 @@
</el-table-column>
<el-table-column
prop="createdUnix"
label="创建时间"
:label="$t('cloudeBrainMirror.creation_time')"
align="center"
min-width="14%"
>
@@ -242,7 +242,7 @@
<el-table-column
align="center"
min-width="21%"
label="操作"
:label="$t('cloudeBrainMirror.operation')"
>
<template slot-scope="scope">
<div style="display: flex;justify-content: flex-end;align-items: center;">
@@ -250,15 +250,15 @@
<svg width="1.4em" height="1.4em" viewBox="0 0 32 32" class="heart-stroke"><path d="M4.4 6.54c-1.761 1.643-2.6 3.793-2.36 6.056.24 2.263 1.507 4.521 3.663 6.534a29110.9 29110.9 0 0010.296 9.633l10.297-9.633c2.157-2.013 3.424-4.273 3.664-6.536.24-2.264-.599-4.412-2.36-6.056-1.73-1.613-3.84-2.29-6.097-1.955-1.689.25-3.454 1.078-5.105 2.394l-.4.319-.398-.319c-1.649-1.316-3.414-2.143-5.105-2.394a7.612 7.612 0 00-1.113-.081c-1.838 0-3.541.694-4.983 2.038z"></path></svg>
<span style="line-height: 2;margin-left:0.3rem;">{{scope.row.numStars}}</span>
</div>
<span style="padding: 0 1rem;color:#0366d6;cursor:pointer;" @click="copyUrl(scope.row.place)">复制地址</span>
<span style="padding: 0 1rem;color:#0366d6;cursor:pointer;" @click="copyUrl(scope.row.place)">{{$t('cloudeBrainMirror.copy_address')}}</span>
<div style="padding-left:1rem;cursor:pointer;">
<el-dropdown size="medium">
<span class="el-dropdown-link">
更多<i class="el-icon-arrow-down el-icon--right"></i>
{{$t('cloudeBrainMirror.more')}} <i class="el-icon-arrow-down el-icon--right"></i>
</span>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item @click.native="eidtImage(scope.row.id)">编辑</el-dropdown-item>
<el-dropdown-item style="color: red;" @click.native="deleteImage(scope.row.id)">删除</el-dropdown-item>
<el-dropdown-item @click.native="eidtImage(scope.row.id)">{{$t('cloudeBrainMirror.edit')}}</el-dropdown-item>
<el-dropdown-item style="color: red;" @click.native="deleteImage(scope.row.id)"> {{$t('cloudeBrainMirror.delete')}} </el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</div>
@@ -290,8 +290,8 @@
<el-col :span="4"><div style="visibility: hidden;">TODO</div></el-col>
<el-col :span="8">
<div>
<el-input placeholder="搜镜像Tag/描述/标签..." v-model="search" class="input-with-select" @keyup.enter.native="searchName()">
<el-button id="success" slot="append" icon="el-icon-search" @click="searchName()">搜索</el-button>
<el-input :placeholder="$t('cloudeBrainMirror.placeholder')" v-model="search" class="input-with-select" @keyup.enter.native="searchName()">
<el-button id="success" slot="append" icon="el-icon-search" @click="searchName()">{{$t('cloudeBrainMirror.search')}}</el-button>
</el-input>
</div>
</el-col>
@@ -300,7 +300,7 @@
</template>
</el-tab-pane>
<el-tab-pane label="我收藏的镜像" name="third">
<el-tab-pane :label="$t('cloudeBrainMirror.my_favorite_mirror')" name="third">
<template v-if="tableDataStar.length!==0">
<el-row style="align-items: center;display: flex;">
<el-col :span="12">
@@ -311,8 +311,8 @@
<el-col :span="4"><div style="visibility: hidden;">TODO</div></el-col>
<el-col :span="8">
<div>
<el-input placeholder="搜镜像Tag/描述/标签..." v-model="search" class="input-with-select" @keyup.enter.native="searchName()">
<el-button id="success" slot="append" icon="el-icon-search" @click="searchName()">搜索</el-button>
<el-input :placeholder="$t('cloudeBrainMirror.placeholder')" v-model="search" class="input-with-select" @keyup.enter.native="searchName()">
<el-button id="success" slot="append" icon="el-icon-search" @click="searchName()">{{$t('cloudeBrainMirror.search')}}</el-button>
</el-input>
</div>
</el-col>
@@ -325,7 +325,7 @@
:header-cell-style="tableHeaderStyle"
>
<el-table-column
label="镜像Tag"
:label="$t('cloudeBrainMirror.mirror_tag')"
min-width="19%"
align="left"
prop="tag"
@@ -338,7 +338,7 @@
</template>
</el-table-column>
<el-table-column
label="镜像描述"
:label="$t('cloudeBrainMirror.mirror_description')"
min-width="28%"
align="left"
prop="description"
@@ -353,7 +353,7 @@
</el-table-column>
<el-table-column
prop="cloudbrainType"
label="可用集群"
:label="$t('cloudeBrainMirror.available_clusters')"
min-width="10%"
align="center"
>
@@ -363,7 +363,7 @@
</el-table-column>
<el-table-column
prop="creator"
label="创建者"
:label="$t('cloudeBrainMirror.creator')"
min-width="8%"
align="center"
>
@@ -375,7 +375,7 @@
</el-table-column>
<el-table-column
prop="createdUnix"
label="创建时间"
:label="$t('cloudeBrainMirror.creation_time')"
align="center"
min-width="14%"
>
@@ -386,7 +386,7 @@
<el-table-column
align="center"
min-width="21%"
label="操作"
:label="$t('cloudeBrainMirror.operation')"
>
<template slot-scope="scope">
<div style="display: flex;justify-content: flex-end;align-items: center;">
@@ -394,7 +394,7 @@
<svg width="1.4em" height="1.4em" viewBox="0 0 32 32" class="heart-stroke stars_active"><path d="M4.4 6.54c-1.761 1.643-2.6 3.793-2.36 6.056.24 2.263 1.507 4.521 3.663 6.534a29110.9 29110.9 0 0010.296 9.633l10.297-9.633c2.157-2.013 3.424-4.273 3.664-6.536.24-2.264-.599-4.412-2.36-6.056-1.73-1.613-3.84-2.29-6.097-1.955-1.689.25-3.454 1.078-5.105 2.394l-.4.319-.398-.319c-1.649-1.316-3.414-2.143-5.105-2.394a7.612 7.612 0 00-1.113-.081c-1.838 0-3.541.694-4.983 2.038z"></path></svg>
<span style="line-height: 2;margin-left:0.3rem;">{{scope.row.numStars}}</span>
</div>
<span style="padding: 0 1rem;color:#0366d6;cursor:pointer;" @click="copyUrl(scope.row.place)">复制地址</span>
<span style="padding: 0 1rem;color:#0366d6;cursor:pointer;" @click="copyUrl(scope.row.place)">{{$t('cloudeBrainMirror.copy_address')}}</span>
</div>
</template>
</el-table-column>
@@ -424,8 +424,8 @@
<el-col :span="4"><div style="visibility: hidden;">TODO</div></el-col>
<el-col :span="8">
<div>
<el-input placeholder="搜镜像Tag/描述/标签..." v-model="search" class="input-with-select" @keyup.enter.native="searchName()">
<el-button id="success" slot="append" icon="el-icon-search" @click="searchName()">搜索</el-button>
<el-input :placeholder="$t('cloudeBrainMirror.placeholder')" v-model="search" class="input-with-select" @keyup.enter.native="searchName()">
<el-button id="success" slot="append" icon="el-icon-search" @click="searchName()">{{$t('cloudeBrainMirror.search')}}</el-button>
</el-input>
</div>
</el-col>
@@ -587,9 +587,9 @@ export default {
},
onHidden: function() {
if (flag == false) {
$('.alert').html('您已取消操作').removeClass('alert-success').addClass('alert-danger').show().delay(1500).fadeOut();
$('.alert').html(this.$t('modle.canceled_operation')).removeClass('alert-success').addClass('alert-danger').show().delay(1500).fadeOut();
}else{
$('.alert').html('删除成功').removeClass('alert-danger').addClass('alert-success').show().delay(1500).fadeOut();
$('.alert').html(this.$t('modle.successfully_deleted')).removeClass('alert-danger').addClass('alert-success').show().delay(1500).fadeOut();
}
}
})
@@ -657,6 +657,17 @@ export default {
}
},
getLang(){
this.text_langName = document.getElementById("menutext_1").innerText
if (this.text_langName == '简体中文'){
this.$i18n.locale = 'zh'
// locale.use(zhLocale)
}
else if (this.text_langName == 'English'){
this.$i18n.locale = 'en'
// locale.use(enLocale)
}
},
},
filters:{
transformType(val){
@@ -666,9 +677,9 @@ export default {
},
transformPravite(val){
if(val){
return "私有"
return this.$t('cloudeBrainMirror.private')
}else{
return "公开"
return this.$t('cloudeBrainMirror.public')
}
},
transformTimestamp(timestamp){
@@ -690,20 +701,24 @@ export default {
this.getImageListPublic()
}
},

mounted() {
this.getLang()
},

created() {
const params = new URLSearchParams(location.search)
if(params.has('type')&&params.get('type')=='myimage'){
this.activeName = 'second'
this.getImageListCustom()
}
else{
this.getImageListPublic()
}
}
if(params.has('type')&&params.get('type')=='myimage'){
this.activeName = 'second'
this.getImageListCustom()
}
else{
this.getImageListPublic()
}

this.getLang()
},

};
</script>


+ 31
- 3
web_src/js/features/images.js View File

@@ -2,6 +2,31 @@ import Images from '../components/images/Images.vue';
import adminImages from '../components/images/adminImages.vue';
import selectImages from '../components/images/selectImages.vue';
import Vue from 'vue';

// import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
import VueI18n from 'vue-i18n';
import enLocale from 'element-ui/lib/locale/lang/en';
import zhLocale from 'element-ui/lib/locale/lang/zh-CN';
// import locale from 'element-ui/lib/locale';
import Element from 'element-ui'
import cn from '../components/i18n/lang/zh.js';
import en from '../components/i18n/lang/en.js';

Vue.use(VueI18n)
const messages = {
'en':{...en,...enLocale} ,
'zh': {...cn,...zhLocale},
}
// Create VueI18n instance with options
const i18n = new VueI18n({
locale: 'zh', // set locale
messages, // set locale messages
})
Vue.use(Element, {
i18n: (key, value) => i18n.t(key, value)
})

export default async function initImage(){
function validate() {
$("#form_image")
@@ -183,7 +208,8 @@ export default async function initImage(){
}
new Vue({
el:el,
el:el,
i18n,
render: h => h(Images)
});
}
@@ -194,7 +220,8 @@ export default async function initImage(){
}
new Vue({
el:el,
el:el,
i18n,
render: h => h(adminImages)
});
}
@@ -205,7 +232,8 @@ export default async function initImage(){
}
new Vue({
el:el,
el:el,
i18n,
render: h => h(selectImages)
});
}


+ 52
- 3
web_src/js/index.js View File

@@ -7,7 +7,8 @@ import './polyfills.js';
import './features/letteravatar.js'
import Vue from 'vue';
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
import 'element-ui/lib/theme-chalk/index.css';
import VueI18n from 'vue-i18n'
import axios from 'axios';
import qs from 'qs';
import Cookies from 'js-cookie'
@@ -45,12 +46,52 @@ import initCloudrain from './features/cloudrbanin.js'
import initImage from './features/images.js'
// import $ from 'jquery.js'

//import VueI18n from 'vue-i18n'
import enLocale from 'element-ui/lib/locale/lang/en'
import zhLocale from 'element-ui/lib/locale/lang/zh-CN'
import locale from 'element-ui/lib/locale'

import Element from 'element-ui'
import cn from './components/i18n/lang/zh.js'
import en from './components/i18n/lang/en.js'
Vue.use(ElementUI);
Vue.prototype.$axios = axios;
Vue.prototype.$Cookies = Cookies;
Vue.prototype.qs = qs;
const {AppSubUrl, StaticUrlPrefix, csrf} = window.config;




Vue.use(VueI18n)
const messages = {
'en':{...en,...enLocale} ,
'zh': {...cn,...zhLocale},
}
// Create VueI18n instance with options
const i18n = new VueI18n({
locale: 'zh', // set locale
messages, // set locale messages
})
Vue.use(Element, {
i18n: (key, value) => i18n.t(key, value)
})

function initGetlang(){
var text_langName = document.getElementById("langName").innerText
if (text_langName == '简体中文'){
i18n.locale = 'zh'
locale.use(zhLocale)
}
else if (text_langName == 'English'){
i18n.locale = 'en'
locale.use(enLocale)
}
}

initGetlang()


Object.defineProperty(Vue.prototype, '$echarts', {
value: echarts
})
@@ -3652,6 +3693,7 @@ function initVueApp() {
new Vue({
delimiters: ['${', '}'],
el,
i18n,
data: {
page:parseInt(new URLSearchParams(window.location.search).get('page')),
searchLimit: Number(
@@ -3697,6 +3739,7 @@ function initVueUploader() {

new Vue({
el: '#minioUploader',
i18n,
components: {MinioUploader},
template: '<MinioUploader />'
});
@@ -3711,6 +3754,7 @@ function initVueEditAbout() {

new Vue({
el: '#about-desc',
i18n,
render: h => h(EditAboutInfo)
});
}
@@ -3833,6 +3877,7 @@ function initVueDataset() {
new Vue({
delimiters: ['${', '}'],
el,
i18n,
data: {
suburl: AppSubUrl,
url:'',
@@ -4416,6 +4461,7 @@ function initVueEditTopic() {
new Vue({
el:'#topic_edit1',
i18n,
render:h=>h(EditTopics)
})
}
@@ -4429,6 +4475,7 @@ function initVueContributors() {

new Vue({
el:'#Contributors',
i18n,
render:h=>h(Contributors)
})
}
@@ -4458,7 +4505,7 @@ function initVueModel() {

new Vue({
el: el,
i18n,
render: h => h(Model)
});
}
@@ -4470,7 +4517,7 @@ function initVueDataAnalysis() {

new Vue({
el: '#data_analysis',
i18n,
render: h => h(DataAnalysis)
});
}
@@ -4481,6 +4528,7 @@ function initVueWxAutorize() {
}
new Vue({
el:el,
i18n,
render: h => h(WxAutorize)
});
}
@@ -4529,6 +4577,7 @@ function initFilterBranchTagDropdown(selector) {
new Vue({
delimiters: ['${', '}'],
el: this,
i18n,
data,

beforeMount() {


Loading…
Cancel
Save