mirror of https://github.com/nocodb/nocodb
Wing-Kam Wong
2 years ago
1 changed files with 145 additions and 0 deletions
@ -0,0 +1,145 @@ |
|||||||
|
<template> |
||||||
|
<div class="main justify-center d-flex" style="min-height: 600px;overflow: auto"> |
||||||
|
<v-form ref="form" v-model="valid" @submit.prevent="renameProject"> |
||||||
|
<v-card style="width:530px;margin-top: 100px" class="mx-auto"> |
||||||
|
<div |
||||||
|
style="position: absolute;top:-33px; |
||||||
|
left:-moz-calc(50% - 33px); |
||||||
|
left:-webkit-calc(50% - 33px); |
||||||
|
left:calc(50% - 33px); |
||||||
|
border-radius: 15px; |
||||||
|
" |
||||||
|
class="primary" |
||||||
|
> |
||||||
|
<v-img |
||||||
|
class="mx-auto" |
||||||
|
width="66" |
||||||
|
height="66" |
||||||
|
:src="require('~/assets/img/icons/512x512-trans.png')" |
||||||
|
/> |
||||||
|
</div> |
||||||
|
|
||||||
|
<v-container fluid class="pb-10 px-12" style="padding-top: 43px !important;"> |
||||||
|
<!-- Edit Project --> |
||||||
|
<h1 class="mt-4 mb-4 text-center"> |
||||||
|
{{ $t('activity.editProject') }} |
||||||
|
</h1> |
||||||
|
<div class="mx-auto" style="width:350px"> |
||||||
|
<!-- label="Enter Project Name" --> |
||||||
|
<!-- rule text: Required --> |
||||||
|
<v-text-field |
||||||
|
ref="projectTitleInput" |
||||||
|
v-model="projectTitle" |
||||||
|
autofocus |
||||||
|
:full-width="false" |
||||||
|
class="nc-metadb-project-name" |
||||||
|
:label="$t('placeholder.projName')" |
||||||
|
:rules="form.titleValidationRule" |
||||||
|
/> |
||||||
|
</div> |
||||||
|
<div class="text-center"> |
||||||
|
<v-btn |
||||||
|
v-t="['a:project:edit:rename']" |
||||||
|
class="mt-3" |
||||||
|
large |
||||||
|
:loading="loading" |
||||||
|
color="primary" |
||||||
|
@click="renameProject" |
||||||
|
> |
||||||
|
<v-icon class="mr-1 mt-n1"> |
||||||
|
mdi-rocket-launch-outline |
||||||
|
</v-icon> |
||||||
|
<!-- Edit --> |
||||||
|
<span class="mr-1">{{ $t('general.edit') }}</span> |
||||||
|
</v-btn> |
||||||
|
</div> |
||||||
|
</v-container> |
||||||
|
</v-card> |
||||||
|
</v-form> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script> |
||||||
|
import colors from '@/mixins/colors' |
||||||
|
|
||||||
|
export default { |
||||||
|
name: 'EditProject', |
||||||
|
mixins: [colors], |
||||||
|
data: () => ({ |
||||||
|
valid: null, |
||||||
|
projectTitle: '', |
||||||
|
loading: false, |
||||||
|
projectType: 'rest', |
||||||
|
form: { |
||||||
|
titleValidationRule: [ |
||||||
|
v => !!v || 'Title is required', |
||||||
|
v => v && v.length <= 50 || 'Project name exceeds 50 characters', |
||||||
|
], |
||||||
|
}, |
||||||
|
}), |
||||||
|
computed: { |
||||||
|
pid() { |
||||||
|
return this.$route.query.projectId |
||||||
|
}, |
||||||
|
}, |
||||||
|
async mounted() { |
||||||
|
setTimeout(() => { |
||||||
|
this.$refs.projectTitleInput.$el.querySelector('input').focus() |
||||||
|
}, 100) |
||||||
|
await this.getProject(this.pid) |
||||||
|
}, |
||||||
|
methods: { |
||||||
|
async getProject() { |
||||||
|
try { |
||||||
|
const result = (await this.$api.project.read(this.pid)) |
||||||
|
this.$nextTick(() => { |
||||||
|
this.projectTitle = result.title |
||||||
|
}) |
||||||
|
} catch (e) { |
||||||
|
this.$toast.error(await this._extractSdkResponseErrorMsg(e)).goAway(3000) |
||||||
|
} |
||||||
|
}, |
||||||
|
async renameProject() { |
||||||
|
if (this.$refs.form.validate()) { |
||||||
|
this.loading = true |
||||||
|
try { |
||||||
|
await this.$api.project.update(this.pid, { |
||||||
|
title: this.projectTitle |
||||||
|
}) |
||||||
|
|
||||||
|
await this.$store.dispatch('project/ActLoadProjectInfo') |
||||||
|
|
||||||
|
this.projectReloading = false |
||||||
|
|
||||||
|
this.$router.push({ |
||||||
|
path: `/nc/${this.pid}`, |
||||||
|
query: { |
||||||
|
new: 1 |
||||||
|
} |
||||||
|
}) |
||||||
|
} catch (e) { |
||||||
|
this.$toast.error(await this._extractSdkResponseErrorMsg(e)).goAway(3000) |
||||||
|
} |
||||||
|
this.loading = false |
||||||
|
} else { |
||||||
|
this.$toast.error('Invalid Form') |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
</script> |
||||||
|
|
||||||
|
<style scoped> |
||||||
|
/deep/ label { |
||||||
|
font-size: .75rem; |
||||||
|
} |
||||||
|
|
||||||
|
.wrapper { |
||||||
|
border: 2px solid var(--v-backgroundColor-base); |
||||||
|
border-radius: 4px; |
||||||
|
} |
||||||
|
|
||||||
|
.main { |
||||||
|
height: calc(100vh - 48px) |
||||||
|
} |
||||||
|
</style> |
Loading…
Reference in new issue