mirror of https://github.com/doccano/doccano.git
Hironsan
2 years ago
1 changed files with 156 additions and 0 deletions
Split View
Diff Options
@ -0,0 +1,156 @@ |
|||
<template> |
|||
<v-main> |
|||
<v-container fluid> |
|||
<v-row justify="center"> |
|||
<v-col cols="12" md="9"> |
|||
<v-card> |
|||
<v-img contain :src="currentDoc.filename" max-height="300" class="grey lighten-2" /> |
|||
</v-card> |
|||
<v-card> |
|||
<v-data-table |
|||
:headers="headers" |
|||
:items="currentDoc.annotations" |
|||
item-key="id" |
|||
hide-default-header |
|||
hide-default-footer |
|||
disable-pagination |
|||
class="elevation-1" |
|||
@input="update" |
|||
> |
|||
<template #top> |
|||
<v-text-field |
|||
v-model="newText" |
|||
:prepend-inner-icon="mdiPencil" |
|||
:label="$t('annotation.newText')" |
|||
autofocus |
|||
single-line |
|||
hide-details |
|||
filled |
|||
@keyup.enter="create" |
|||
@compositionstart="compositionStart" |
|||
@compositionend="compositionEnd" |
|||
/> |
|||
</template> |
|||
<template #[`item.text`]="{ item }"> |
|||
<v-edit-dialog> |
|||
<span class="title" style="font-weight: 400"> |
|||
{{ item.text }} |
|||
</span> |
|||
<template #input> |
|||
<v-textarea |
|||
:value="item.text" |
|||
:label="$t('generic.edit')" |
|||
autofocus |
|||
@change="update(item.id, $event)" |
|||
/> |
|||
</template> |
|||
</v-edit-dialog> |
|||
</template> |
|||
<template #[`item.action`]="{ item }"> |
|||
<v-icon small @click="remove(item.id)"> |
|||
{{ mdiDeleteOutline }} |
|||
</v-icon> |
|||
</template> |
|||
</v-data-table> |
|||
</v-card> |
|||
</v-col> |
|||
<v-col cols="12" md="3"> |
|||
<list-metadata :metadata="currentDoc.meta" /> |
|||
</v-col> |
|||
</v-row> |
|||
</v-container> |
|||
</v-main> |
|||
</template> |
|||
|
|||
<script> |
|||
import ListMetadata from '@/components/tasks/metadata/ListMetadata' |
|||
import { mdiPencil, mdiDeleteOutline } from '@mdi/js' |
|||
|
|||
export default { |
|||
components: { |
|||
ListMetadata |
|||
}, |
|||
layout: 'demo', |
|||
|
|||
data() { |
|||
return { |
|||
newText: '', |
|||
headers: [ |
|||
{ |
|||
text: 'Text', |
|||
align: 'left', |
|||
value: 'text' |
|||
}, |
|||
{ |
|||
text: 'Actions', |
|||
align: 'right', |
|||
value: 'action' |
|||
} |
|||
], |
|||
isComposing: false, |
|||
hasCompositionJustEnded: false, |
|||
mdiPencil, |
|||
mdiDeleteOutline, |
|||
currentDoc: { |
|||
id: 8, |
|||
filename: require('~/assets/6737785.png'), |
|||
annotations: [ |
|||
{ |
|||
id: 17, |
|||
text: "S'il ne m'avait pas aidé, j'aurais échoué.", |
|||
user: 1, |
|||
document: 8 |
|||
}, |
|||
{ |
|||
id: 18, |
|||
text: "S'il ne m'avait pas aidée, j'aurais échoué.", |
|||
user: 1, |
|||
document: 8 |
|||
} |
|||
], |
|||
meta: { |
|||
url: 'https://github.com/Hironsan' |
|||
}, |
|||
annotation_approver: null |
|||
} |
|||
} |
|||
}, |
|||
|
|||
methods: { |
|||
update(annotationId, text) { |
|||
if (text.length > 0) { |
|||
const index = this.currentDoc.annotations.findIndex((item) => item.id === annotationId) |
|||
this.currentDoc.annotations[index].text = text |
|||
} else { |
|||
this.remove(annotationId) |
|||
} |
|||
}, |
|||
create() { |
|||
if (this.isComposing || this.hasCompositionJustEnded) { |
|||
this.hasCompositionJustEnded = false |
|||
return |
|||
} |
|||
if (this.newText.length > 0) { |
|||
const payload = { |
|||
id: Math.floor(Math.random() * Math.floor(Number.MAX_SAFE_INTEGER)), |
|||
text: this.newText |
|||
} |
|||
this.currentDoc.annotations.push(payload) |
|||
this.newText = '' |
|||
} |
|||
}, |
|||
remove(annotationId) { |
|||
this.currentDoc.annotations = this.currentDoc.annotations.filter( |
|||
(item) => item.id !== annotationId |
|||
) |
|||
}, |
|||
compositionStart() { |
|||
this.isComposing = true |
|||
}, |
|||
compositionEnd() { |
|||
this.isComposing = false |
|||
this.hasCompositionJustEnded = true |
|||
} |
|||
} |
|||
} |
|||
</script> |
Write
Preview
Loading…
Cancel
Save