Update tags: add delete tag function

This commit is contained in:
RemiZOffAlex
2019-11-02 22:30:36 +03:00
parent 4a04efc355
commit da2654bf74
3 changed files with 87 additions and 12 deletions

View File

@@ -26,3 +26,39 @@ def tag_add(name):
models.db_session.add(newTag)
models.db_session.commit()
return newTag.as_dict()
@jsonrpc.method('tag.delete(id=int)')
@login_required
def tag_delete(id):
"""
Удалить тег
"""
exist = models.db_session.query(
models.Tag
).filter(
models.Tag.id==id
).first()
if exist is None:
raise ValueError
models.db_session.delete(exist)
models.db_session.commit()
return 'OK'
@jsonrpc.method('tags()')
@login_required
def tags_list():
"""
Список тегов
"""
tags = models.db_session.query(
models.Tag
).all()
result = []
for tag in tags:
newRow = tag.as_dict()
result.append(newRow)
return result

View File

@@ -18,7 +18,10 @@
<div class="row">
<div class="col py-2">
<a class="btn btn-outline-secondary mr-2 mb-3" v-for="(tag, tagIdx) in tags" :href="'/tag/' + tag.id">{{ tag.name }}</a>
<div class="btn-group mr-2 mb-3" v-for="(tag, tagIdx) in tags">
<a class="btn btn-outline-secondary" :href="'/tag/' + tag.id">{{ tag.name }}</a>
<button type="button" class="btn btn-outline-danger" v-on:click="deleteTag(tag)"><i class="fa fa-remove"></i></button>
</div>
</div>
</div>
{% endraw %}
@@ -42,11 +45,17 @@
var app = new Vue({
el: '#app',
data: {
tags: {{ pagedata['tags']|tojson|safe }},
tags: [],
formNewTag: false,
newTag: ''
},
methods: {
arrayRemove: function(arr, value) {
/* Удаление элемента из списка */
return arr.filter(function(element){
return element != value;
});
},
addTag: function() {
/* Добавить тег */
var vm = this;
@@ -73,7 +82,47 @@ var app = new Vue({
/* Показать/скрыть форму добавления нового тега */
var vm = this;
vm.formNewTag = !vm.formNewTag;
},
deleteTag: function(tag) {
/* Удалить тег */
var vm = this;
axios.post(
'/api',
{
"jsonrpc": "2.0",
"method": 'tag.delete',
"params": {
"id": tag.id
},
"id": 1
}
).then(
function(response) {
if ('result' in response.data) {
vm.tags = vm.arrayRemove(vm.tags, tag);
}
}
);
}
},
created: function() {
/* Получить список тегов после загрузки страницы */
var vm = this;
axios.post(
'/api',
{
"jsonrpc": "2.0",
"method": 'tags',
"params": {},
"id": 1
}
).then(
function(response) {
if ('result' in response.data) {
vm.tags = response.data['result'];
}
}
);
}
})
</script>

View File

@@ -16,16 +16,6 @@ def tags():
"""
pagedata = {}
pagedata['title'] = 'Список меток - ' + app.config['TITLE']
tags = models.db_session.query(
models.Tag
).order_by(
models.Tag.name.asc()
).all()
pagedata['tags'] = []
for tag in tags:
pagedata['tags'].append(tag.as_dict())
body = render_template('tags.html', pagedata=pagedata)
return body