Browse Source

Merge branch 'V202108' of https://git.openi.org.cn/OpenI/aiforge into fix228-xu

tags/v1.21.12.1
avadesian 4 years ago
parent
commit
f37c4f3591
5 changed files with 166 additions and 14 deletions
  1. +10
    -0
      models/user_mail.go
  2. +41
    -0
      routers/repo/cloudbrain.go
  3. +6
    -0
      routers/user/setting/account.go
  4. +13
    -4
      templates/repo/cloudbrain/new.tmpl
  5. +96
    -10
      web_src/js/components/Images.vue

+ 10
- 0
models/user_mail.go View File

@@ -293,6 +293,16 @@ func MakeEmailPrimary(email *EmailAddress) error {
}

user.Email = email.Email

has, err = sess.Where("id!=?", user.ID).
And("type=?", user.Type).
And("email=?", strings.ToLower(user.Email)).
Get(new(User))
if err != nil {
return err
} else if has {
return ErrEmailAlreadyUsed{user.Email}
}
if _, err = sess.ID(user.ID).Cols("email").Update(user); err != nil {
return err
}


+ 41
- 0
routers/repo/cloudbrain.go View File

@@ -1,8 +1,10 @@
package repo

import (
"bufio"
"encoding/json"
"errors"
"io"
"net/http"
"os"
"os/exec"
@@ -499,6 +501,45 @@ func downloadCode(repo *models.Repository, codePath string) error {
return err
}

configFile, err := os.OpenFile(codePath + "/.git/config", os.O_RDWR, 0666)
if err != nil {
log.Error("open file(%s) failed:%v", codePath + "/,git/config", err)
return err
}

defer configFile.Close()

pos := int64(0)
reader := bufio.NewReader(configFile)
for {
line, err := reader.ReadString('\n')
if err != nil {
if err == io.EOF {
log.Error("not find the remote-url")
return nil
} else {
log.Error("read error: %v", err)
return err
}
}

if strings.Contains(line, "url") && strings.Contains(line, ".git"){
originUrl := "\turl = " + repo.CloneLink().HTTPS + "\n"
if len(line) > len(originUrl) {
originUrl += strings.Repeat( " ", len(line) - len(originUrl))
}
bytes := []byte(originUrl)
_, err := configFile.WriteAt(bytes, pos)
if err != nil {
log.Error("WriteAt failed:%v", err)
return err
}
break
}

pos += int64(len(line))
}

return nil
}



+ 6
- 0
routers/user/setting/account.go View File

@@ -80,6 +80,12 @@ func EmailPost(ctx *context.Context, form auth.AddEmailForm) {
// Make emailaddress primary.
if ctx.Query("_method") == "PRIMARY" {
if err := models.MakeEmailPrimary(&models.EmailAddress{ID: ctx.QueryInt64("id")}); err != nil {
if _, ok := err.(models.ErrEmailAlreadyUsed); ok {
ctx.Flash.Error(ctx.Tr("form.email_been_used"))
ctx.Redirect(setting.AppSubURL + "/user/settings/account")
return
}

ctx.ServerError("MakeEmailPrimary", err)
return
}


+ 13
- 4
templates/repo/cloudbrain/new.tmpl View File

@@ -116,6 +116,9 @@
<div class="repository new repo ui middle very relaxed page grid">
<div class="column">
{{template "base/alert" .}}
<div class="ui positive message" id="messageInfo">
<p></p>
</div>
<form id="form_id" class="ui form" action="{{.Link}}" method="post">
{{.CsrfTokenHtml}}
<h3 class="ui top attached header">
@@ -162,7 +165,7 @@

<div class="inline required field">
<label>镜像</label>
<input type="text" list="cloudbrain_image" placeholder="选择镜像" name="image">
<input type="text" list="cloudbrain_image" placeholder="选择镜像" name="image" required autofocus maxlength="36">
<datalist class="ui search" id="cloudbrain_image" style='width:385px;' name="image">
{{range .images}}
<option name="image" value="{{.Place}}">{{.PlaceView}}</option>
@@ -240,18 +243,24 @@
let form = document.getElementById('form_id');
let value_image = $("input[name='image']").val()
console.log("value_image",$("input[name='image']").val())
$('#messageInfo').css('display','none')

form.onsubmit = function(e){
let value_task = $("input[name='job_name']").val()
let value_image = $("input[name='image']").val()
let re = /^[a-zA-Z0-9-.]+$/
let re = /^[a-z0-9][a-z0-9-_]{1,36}$/
let flag = re.test(value_task)
if(!flag){
alert("任务名称只能包含字母,数字,'-',和'.'")
$('#messageInfo').css('display','block')
let str = '只能以小写字母或数字开头且只包含小写字母、数字、_和-、最长36个字符。'
$('#messageInfo p').text(str)
return false
}
if(!value_image){
alert("镜像为空")
return false
}
let min_value_task = value_task.toLowerCase()


+ 96
- 10
web_src/js/components/Images.vue View File

@@ -13,7 +13,7 @@
<div class="ui sixteen wide column">
<div class="ui two column stackable grid">
<div class="column">
<el-input placeholder="请输入内容" v-model="search" class="input-with-select">
<el-input placeholder="请输入镜像名称关健词" 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>
</div>
@@ -44,7 +44,7 @@
<el-table-column
label="镜像名称"
width="350"
align="center"
align="left"
prop="name"
sortable
>
@@ -55,14 +55,14 @@
<el-table-column
label="文件路径/镜像描述"
width="450"
align="center"
align="left"
>
<template slot-scope="scope">
<el-tooltip class="item" effect="dark" content="点击复制文件路径" 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">{{ scope.row.description }}</span>
<span class="text-over" :title="scope.row.description">{{ scope.row.description | clearP}}</span>
</template>
</el-table-column>
<el-table-column
@@ -77,6 +77,9 @@
label="创建时间"
align="center"
sortable>
<template slot-scope="scope">
{{scope.row.createtime | transformTimestamp}}
</template>
</el-table-column>
</el-table>
</el-row>
@@ -99,7 +102,7 @@
<div class="ui sixteen wide column">
<div class="ui two column stackable grid">
<div class="column">
<el-input placeholder="请输入内容" v-model="search" class="input-with-select">
<el-input placeholder="请输入内容" v-model="search" class="input-with-select" @keyup.enter.native="searchName()">
<el-button slot="append" id="success" icon="el-icon-search" @click="searchName()">搜索</el-button>
</el-input>
</div>
@@ -132,7 +135,7 @@
<el-table-column
label="镜像名称"
width="350"
align="center"
align="left"
prop="name"
sortable
>
@@ -143,7 +146,7 @@
<el-table-column
label="文件路径/镜像描述"
width="450"
align="center"
align="left"
>
<template slot-scope="scope">
@@ -151,7 +154,7 @@
<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">{{ scope.row.description }}</span>
<span class="text-over" :title="scope.row.description">{{ scope.row.description | clearP }}</span>
</template>
</el-table-column>
<el-table-column
@@ -166,6 +169,9 @@
label="创建时间"
align="center"
sortable>
<template slot-scope="scope">
{{scope.row.createtime | transformTimestamp}}
</template>
</el-table-column>
</el-table>
</el-row>
@@ -315,7 +321,7 @@ export default {


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

@@ -365,6 +371,37 @@ export default {
}

},
filters:{



clearP(value){
console.log("sorce value",value)
if(!value) return ''
const reg = /\<\/?p\>/g;
value = value.replace(reg,'')
console.log("repalace:",value)
return value

},
transformTimestamp(timestamp){
console.log("timestamp",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){
@@ -407,8 +444,57 @@ export default {
.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: #4093ff;
background-color: #5bb973;
color: white;
}
.text-over{


Loading…
Cancel
Save