mirror of https://github.com/doccano/doccano.git
Hironsan
3 years ago
4 changed files with 233 additions and 2 deletions
Split View
Diff Options
-
3frontend/components/organisms/layout/TheSideBar.vue
-
4frontend/i18n/en/index.js
-
3frontend/i18n/en/projects/settings.js
-
225frontend/pages/projects/_id/settings/index.vue
@ -0,0 +1,3 @@ |
|||
export default { |
|||
title: 'Settings' |
|||
} |
@ -0,0 +1,225 @@ |
|||
<template> |
|||
<v-card> |
|||
<v-card-title class="mb-2"> |
|||
<h2>About project</h2> |
|||
</v-card-title> |
|||
<v-card-text v-if="isReady"> |
|||
<v-form |
|||
ref="form" |
|||
v-model="valid" |
|||
> |
|||
<v-row> |
|||
<v-col |
|||
cols="12" |
|||
sm="6" |
|||
> |
|||
<h3>Name</h3> |
|||
<v-text-field |
|||
v-model="project.name" |
|||
label="Add project name" |
|||
:rules="projectNameRules($t('rules.projectNameRules'))" |
|||
:disabled="!edit.name" |
|||
single-line |
|||
/> |
|||
</v-col> |
|||
<v-col |
|||
cols="12" |
|||
sm="6" |
|||
> |
|||
<v-btn |
|||
v-if="!edit.name" |
|||
outlined |
|||
color="grey" |
|||
class="text-capitalize" |
|||
@click="editProject('name')" |
|||
> |
|||
Edit |
|||
</v-btn> |
|||
<v-btn |
|||
v-if="edit.name" |
|||
outlined |
|||
color="primary" |
|||
class="text-capitalize" |
|||
@click="doneEdit()" |
|||
> |
|||
Save |
|||
</v-btn> |
|||
<v-btn |
|||
v-if="edit.name" |
|||
outlined |
|||
color="grey" |
|||
class="text-capitalize" |
|||
@click="cancelEdit()" |
|||
> |
|||
Cancel |
|||
</v-btn> |
|||
</v-col> |
|||
</v-row> |
|||
<v-row> |
|||
<v-col |
|||
cols="12" |
|||
sm="6" |
|||
> |
|||
<h3>Description</h3> |
|||
<v-text-field |
|||
v-model="project.description" |
|||
label="Add description" |
|||
:rules="descriptionRules($t('rules.descriptionRules'))" |
|||
:disabled="!edit.desc" |
|||
single-line |
|||
/> |
|||
</v-col> |
|||
<v-col |
|||
cols="12" |
|||
sm="6" |
|||
> |
|||
<v-btn |
|||
v-if="!edit.desc" |
|||
outlined |
|||
color="grey" |
|||
class="text-capitalize" |
|||
@click="editProject('desc')" |
|||
> |
|||
Edit |
|||
</v-btn> |
|||
<v-btn |
|||
v-if="edit.desc" |
|||
outlined |
|||
color="primary" |
|||
class="text-capitalize" |
|||
@click="doneEdit()" |
|||
> |
|||
Save |
|||
</v-btn> |
|||
<v-btn |
|||
v-if="edit.desc" |
|||
outlined |
|||
color="grey" |
|||
class="text-capitalize" |
|||
@click="cancelEdit()" |
|||
> |
|||
Cancel |
|||
</v-btn> |
|||
</v-col> |
|||
</v-row> |
|||
<v-row> |
|||
<v-col |
|||
cols="12" |
|||
sm="6" |
|||
> |
|||
<h3>Shuffle</h3> |
|||
<v-checkbox |
|||
v-model="project.randomize_document_order" |
|||
:label="$t('overview.randomizeDocOrder')" |
|||
/> |
|||
</v-col> |
|||
</v-row> |
|||
<v-row> |
|||
<v-col |
|||
cols="12" |
|||
sm="6" |
|||
> |
|||
<h3>Collaboration</h3> |
|||
<v-checkbox |
|||
v-model="project.collaborative_annotation" |
|||
:label="$t('overview.shareAnnotations')" |
|||
/> |
|||
</v-col> |
|||
</v-row> |
|||
</v-form> |
|||
</v-card-text> |
|||
</v-card> |
|||
</template> |
|||
|
|||
<script> |
|||
import ProjectService from '@/services/project.service' |
|||
import { projectNameRules, descriptionRules } from '@/rules/index' |
|||
|
|||
export default { |
|||
layout: 'project', |
|||
|
|||
data() { |
|||
return { |
|||
project: {}, |
|||
beforeEditCache: {}, |
|||
edit: { |
|||
name: false, |
|||
desc: false |
|||
}, |
|||
projectNameRules, |
|||
descriptionRules, |
|||
valid: false |
|||
} |
|||
}, |
|||
|
|||
computed: { |
|||
isReady() { |
|||
return !!this.project |
|||
} |
|||
}, |
|||
|
|||
watch: { |
|||
'project.randomize_document_order'() { |
|||
this.doneEdit() |
|||
}, |
|||
'project.collaborative_annotation'() { |
|||
this.doneEdit() |
|||
} |
|||
}, |
|||
|
|||
created() { |
|||
const projectId = this.$route.params.id |
|||
ProjectService.fetchProjectById(projectId) |
|||
.then((response) => { |
|||
this.project = response.data |
|||
}) |
|||
.catch((error) => { |
|||
alert(error) |
|||
}) |
|||
}, |
|||
|
|||
methods: { |
|||
initEdit() { |
|||
Object.keys(this.edit).forEach((v) => { this.edit[v] = false }) |
|||
}, |
|||
|
|||
editProject(name) { |
|||
this.cancelEdit() |
|||
this.edit[name] = true |
|||
Object.assign(this.beforeEditCache, this.project) |
|||
}, |
|||
|
|||
cancelEdit() { |
|||
this.initEdit() |
|||
Object.assign(this.project, this.beforeEditCache) |
|||
}, |
|||
|
|||
doneEdit() { |
|||
if (!this.validate()) { |
|||
this.cancelEdit() |
|||
return |
|||
} |
|||
const projectId = this.$route.params.id |
|||
ProjectService.updateProject(projectId, this.project) |
|||
.then((response) => { |
|||
this.project = response.data |
|||
this.beforeEditCache = {} |
|||
}) |
|||
.catch((error) => { |
|||
alert(error) |
|||
}) |
|||
.finally(() => { |
|||
this.initEdit() |
|||
}) |
|||
}, |
|||
|
|||
validate() { |
|||
return this.$refs.form.validate() |
|||
} |
|||
}, |
|||
|
|||
validate({ params }) { |
|||
return /^\d+$/.test(params.id) |
|||
} |
|||
} |
|||
</script> |
Write
Preview
Loading…
Cancel
Save