124 lines
3.8 KiB
Vue
124 lines
3.8 KiB
Vue
|
<template>
|
||
|
<el-row>
|
||
|
<el-col>
|
||
|
<el-col style="margin-bottom: 1rem;">
|
||
|
<el-breadcrumb separator-class="el-icon-arrow-right">
|
||
|
<el-breadcrumb-item :to="{ path: '/admin' }">首页</el-breadcrumb-item>
|
||
|
<el-breadcrumb-item :to="{ path: '/admin/topics' }">专题管理</el-breadcrumb-item>
|
||
|
<el-breadcrumb-item :to="{ path: '/admin/topic/' + topic.topicUri }">{{ topic.topicTitle }}</el-breadcrumb-item>
|
||
|
<el-breadcrumb-item>关联标签</el-breadcrumb-item>
|
||
|
</el-breadcrumb>
|
||
|
</el-col>
|
||
|
<el-col>
|
||
|
<el-input placeholder="请输入标签名" v-model="tagTitle">
|
||
|
<el-button @click="getTags()" slot="append" icon="el-icon-search"></el-button>
|
||
|
</el-input>
|
||
|
</el-col>
|
||
|
<el-col v-for="tag in tags" :key="tag.idTag">
|
||
|
<el-card style="margin: .5rem;">
|
||
|
<el-col :span="1">
|
||
|
<el-avatar shape="square" :src="tag.tagIconPath" fit="scale-down"></el-avatar>
|
||
|
</el-col>
|
||
|
<el-col :span="20">
|
||
|
<el-col>
|
||
|
<span class="tag-title">{{ tag.tagTitle }}</span>
|
||
|
</el-col>
|
||
|
<el-col>
|
||
|
<span class="text-muted" v-if="tag.tagArticleCount">{{ tag.tagArticleCount }} 引用</span>
|
||
|
<span class="text-muted" v-else> <span style="color: #F56C6C;">0</span> 引用</span>
|
||
|
</el-col>
|
||
|
</el-col>
|
||
|
<el-col :span="3" class="text-right">
|
||
|
<el-button size="small" @click="bindTopicTag(tag.idTag)">关联</el-button>
|
||
|
</el-col>
|
||
|
<el-col style="margin-bottom: .8rem">{{ tag.tagDescription }}</el-col>
|
||
|
</el-card>
|
||
|
</el-col>
|
||
|
<el-col>
|
||
|
<div class="vertical-container text-center">
|
||
|
<el-pagination v-show="pagination.total > 10" v-model="pagination"
|
||
|
layout="prev, pager, next"
|
||
|
:current-page="pagination.currentPage"
|
||
|
:total="pagination.total"
|
||
|
@current-change="currentChange">
|
||
|
</el-pagination>
|
||
|
</div>
|
||
|
</el-col>
|
||
|
</el-col>
|
||
|
</el-row>
|
||
|
</template>
|
||
|
|
||
|
<script>
|
||
|
import {mapState} from 'vuex';
|
||
|
|
||
|
export default {
|
||
|
name: "adminTopicBindTag",
|
||
|
fetch({store, params, error}) {
|
||
|
let _ts = this;
|
||
|
return Promise.all([
|
||
|
store.dispatch('topic/fetchUnBindTags', {
|
||
|
idTopic: params.topic_id
|
||
|
})
|
||
|
])
|
||
|
},
|
||
|
computed: {
|
||
|
...mapState({
|
||
|
topic: state => state.topic.detail.data,
|
||
|
tags: state => state.topic.tags.data.tags,
|
||
|
pagination: state => state.topic.tags.data.pagination
|
||
|
})
|
||
|
},
|
||
|
data() {
|
||
|
return {
|
||
|
tagTitle: ''
|
||
|
}
|
||
|
},
|
||
|
methods: {
|
||
|
currentChange(page) {
|
||
|
let _ts = this;
|
||
|
this.$store.dispatch('topic/fetchUnBindTags', {
|
||
|
page: page,
|
||
|
idTopic: _ts.topic.idTopic,
|
||
|
tagTitle: _ts.tagTitle
|
||
|
})
|
||
|
},
|
||
|
bindTopicTag(idTag) {
|
||
|
let _ts = this;
|
||
|
this.$confirm('确定关联吗?', '提示', {
|
||
|
confirmButtonText: '确定',
|
||
|
cancelButtonText: '取消',
|
||
|
type: 'warning'
|
||
|
}).then(() => {
|
||
|
_ts.$axios.$post('/api/admin/topic/bind-topic-tag', {
|
||
|
idTag: idTag,
|
||
|
idTopic: _ts.topic.idTopic
|
||
|
}).then(function (res) {
|
||
|
if (res && res.message) {
|
||
|
_ts.$message.error(res.message);
|
||
|
} else {
|
||
|
_ts.currentChange(_ts.pagination.currentPage);
|
||
|
}
|
||
|
})
|
||
|
}).catch(() => {
|
||
|
_ts.currentChange(_ts.pagination.currentPage);
|
||
|
});
|
||
|
},
|
||
|
getTags() {
|
||
|
this.currentChange(this.pagination.currentPage);
|
||
|
}
|
||
|
},
|
||
|
mounted() {
|
||
|
let _ts = this;
|
||
|
if (!_ts.topic.idTopic) {
|
||
|
_ts.$axios.$get('/api/admin/topic/detail/' + _ts.$route.params.topic_id).then(function (res) {
|
||
|
_ts.$store.commit('topic/updateDetailData', res)
|
||
|
});
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
</script>
|
||
|
|
||
|
<style scoped>
|
||
|
|
||
|
</style>
|