|
@@ -21,25 +21,19 @@
|
|
|
<el-option :value="4" label="协销填写" />
|
|
|
</el-select>
|
|
|
</div>
|
|
|
- <!-- <div class="filter-control">
|
|
|
- <span>搜索统计:</span>
|
|
|
- <el-date-picker
|
|
|
- v-model="time"
|
|
|
- type="daterange"
|
|
|
- unlink-panels
|
|
|
- range-separator="至"
|
|
|
- start-placeholder="开始日期"
|
|
|
- end-placeholder="结束日期"
|
|
|
- :picker-options="pickerOptions"
|
|
|
- value-format="yyyy-MM-dd"
|
|
|
- @change="getList"
|
|
|
- />
|
|
|
- </div> -->
|
|
|
+ <div class="filter-control">
|
|
|
+ <span>父标签:</span>
|
|
|
+ <el-select v-model="listQuery.parentLabel" clearable @change="getList">
|
|
|
+ <el-option value="" label="请选择" />
|
|
|
+ <el-option :value="1" label="是" />
|
|
|
+ <el-option :value="0" label="否" />
|
|
|
+ </el-select>
|
|
|
+ </div>
|
|
|
<div class="filter-control">
|
|
|
<el-button type="primary" @click="getList"> 查询 </el-button>
|
|
|
- <el-button v-permission="'tag:list:add'" type="primary" @click="handleAddTag"> 添加标签 </el-button>
|
|
|
+ <el-button v-permission="'tag:list:add'" type="primary" @click="handleOerate('add')"> 添加标签 </el-button>
|
|
|
<el-button v-permission="'tag:list:del'" type="danger" :disabled="disabled" @click="handleDeleteTag">
|
|
|
- 删除
|
|
|
+ 批量删除
|
|
|
</el-button>
|
|
|
<el-button v-permission="'tag:list:improt'" type="primary" @click="importDialog = true"> 导入 </el-button>
|
|
|
<el-button v-permission="'tag:list:export'" type="primary" :disabled="disabled" @click="handleExport">
|
|
@@ -50,15 +44,7 @@
|
|
|
</el-button>
|
|
|
</div>
|
|
|
</div>
|
|
|
-
|
|
|
<!-- 标签列表 -->
|
|
|
- <!-- <el-table
|
|
|
- v-loading="isLoading"
|
|
|
- :data="list"
|
|
|
- border
|
|
|
- :default-sort="{ prop: 'frequency', order: 'descending' }"
|
|
|
- @selection-change="handleSelectionChange"
|
|
|
- > -->
|
|
|
<el-table v-loading="isLoading" :data="list" border @selection-change="handleSelectionChange">
|
|
|
<el-table-column type="selection" width="55" align="center" />
|
|
|
<el-table-column label="序号" :index="indexMethod" type="index" sortable="custom" align="center" width="80" />
|
|
@@ -68,14 +54,6 @@
|
|
|
<el-switch v-model="scope.row.linkageStatus" @change="handleStatusChange(scope.row)" />
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column
|
|
|
- prop="frequency"
|
|
|
- label="搜索次数"
|
|
|
- width="120"
|
|
|
- align="center"
|
|
|
- sortable
|
|
|
- :sort-orders="['ascending', 'descending']"
|
|
|
- />
|
|
|
<el-table-column width="180" label="来源" align="center">
|
|
|
<template slot-scope="{ row }">
|
|
|
<span v-if="row.fromSearch === 1">单个添加</span>
|
|
@@ -84,6 +62,12 @@
|
|
|
<span v-else>协销填写</span>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
+ <el-table-column width="100" label="是否为父标签" align="center">
|
|
|
+ <template slot-scope="{ row }">
|
|
|
+ <el-tag v-if="row.parentLabel === 1" type="success" size="small">是</el-tag>
|
|
|
+ <el-tag v-else type="warning" size="small">否</el-tag>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
<el-table-column label="添加时间" align="center" width="200">
|
|
|
<template slot-scope="{ row }">
|
|
|
<span v-if="row.addTime">{{ row.addTime | parseTime }}</span>
|
|
@@ -92,10 +76,10 @@
|
|
|
</el-table-column>
|
|
|
<el-table-column label="操作" align="center" width="240">
|
|
|
<template slot-scope="{ row }">
|
|
|
+ <el-button type="primary" size="mini" @click="handleOerate('edit', row)"> 编辑 </el-button>
|
|
|
<el-button v-permission="'tag:list:del'" type="danger" size="mini" @click="handleDeleteTag(row)">
|
|
|
删除
|
|
|
</el-button>
|
|
|
- <!-- <el-button type="primary" size="mini" @click="handleSearch(row.keyword)"> 去搜索 </el-button> -->
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
</el-table>
|
|
@@ -105,35 +89,12 @@
|
|
|
:total="total"
|
|
|
:page.sync="listQuery.pageNum"
|
|
|
:limit.sync="listQuery.pageSize"
|
|
|
- @pagination="fetchKeywordList"
|
|
|
+ @pagination="getStatekeywordList"
|
|
|
/>
|
|
|
|
|
|
<!-- 去搜索跳转 -->
|
|
|
<SearchModel v-model="searchDialog" :keyword="visibleKeyword" />
|
|
|
|
|
|
- <!-- 添加标签 -->
|
|
|
- <el-dialog
|
|
|
- title="添加标签"
|
|
|
- :visible.sync="addTagDialog"
|
|
|
- width="460px"
|
|
|
- :close-on-click-modal="false"
|
|
|
- :show-close="false"
|
|
|
- >
|
|
|
- <el-form ref="tagForm" :model="tagForm" :rules="tagFormRules">
|
|
|
- <el-form-item label="标签名:" prop="keyword">
|
|
|
- <el-input v-model="tagForm.keyword" />
|
|
|
- </el-form-item>
|
|
|
- <!-- <el-form-item label="下拉联动搜索开关:" prop="isTrue">
|
|
|
- <el-switch v-model="tagForm.isTrue" />
|
|
|
- <div style="color: #ccc;font-size: 14px;">注:开启后,用户才能使用联动搜索</div>
|
|
|
- </el-form-item> -->
|
|
|
- </el-form>
|
|
|
- <div slot="footer">
|
|
|
- <el-button @click="closeAddTagDialog"> 取 消 </el-button>
|
|
|
- <el-button type="primary" @click="handleAddTagConfirm"> 确 定 </el-button>
|
|
|
- </div>
|
|
|
- </el-dialog>
|
|
|
-
|
|
|
<!-- 导入标签 -->
|
|
|
<el-dialog
|
|
|
title="导入标签"
|
|
@@ -171,65 +132,18 @@
|
|
|
|
|
|
<script>
|
|
|
import SearchModel from '@/components/SearchModel'
|
|
|
-import { downloadWithUrl, getYestodayTime, parseTime } from '@/utils'
|
|
|
+import { downloadWithUrl, parseTime } from '@/utils'
|
|
|
import {
|
|
|
- addKeyword,
|
|
|
- deleteKeyword,
|
|
|
- fetchKeywordList,
|
|
|
- importKeywordXlsx,
|
|
|
+ deleteTrendsLabel,
|
|
|
+ getStatekeywordList,
|
|
|
+ importKeywordLabelXlsx,
|
|
|
findLinkageStatus
|
|
|
} from '@/api/library/keyword'
|
|
|
import { export_json_to_excel } from '@/vendor/Export2Excel'
|
|
|
+import pickerOptions from '@/utils/time-picker.js'
|
|
|
export default {
|
|
|
components: { SearchModel },
|
|
|
data() {
|
|
|
- const pickerOptions = {
|
|
|
- shortcuts: [
|
|
|
- {
|
|
|
- text: '近1年',
|
|
|
- onClick(picker) {
|
|
|
- const end = new Date()
|
|
|
- const start = new Date()
|
|
|
- start.setTime(start.getTime() - 3600 * 1000 * 24 * 365)
|
|
|
- picker.$emit('pick', [start, end])
|
|
|
- }
|
|
|
- },
|
|
|
- {
|
|
|
- text: '近半年',
|
|
|
- onClick(picker) {
|
|
|
- const end = new Date()
|
|
|
- const start = new Date()
|
|
|
- start.setTime(start.getTime() - 3600 * 1000 * 24 * 183)
|
|
|
- picker.$emit('pick', [start, end])
|
|
|
- }
|
|
|
- },
|
|
|
- {
|
|
|
- text: '近1月',
|
|
|
- onClick(picker) {
|
|
|
- const end = new Date()
|
|
|
- const start = new Date()
|
|
|
- start.setTime(start.getTime() - 3600 * 1000 * 24 * 30)
|
|
|
- picker.$emit('pick', [start, end])
|
|
|
- }
|
|
|
- },
|
|
|
- {
|
|
|
- text: '近1周',
|
|
|
- onClick(picker) {
|
|
|
- const end = new Date()
|
|
|
- const start = new Date()
|
|
|
- start.setTime(start.getTime() - 3600 * 1000 * 24 * 6)
|
|
|
- picker.$emit('pick', [start, end])
|
|
|
- }
|
|
|
- },
|
|
|
- {
|
|
|
- text: '昨天',
|
|
|
- onClick(picker) {
|
|
|
- const { start, end } = getYestodayTime()
|
|
|
- picker.$emit('pick', [start, end])
|
|
|
- }
|
|
|
- }
|
|
|
- ]
|
|
|
- }
|
|
|
return {
|
|
|
isLoading: true,
|
|
|
pickerOptions,
|
|
@@ -237,25 +151,18 @@ export default {
|
|
|
listQuery: {
|
|
|
keyword: '',
|
|
|
beginTime: '',
|
|
|
+ dynamicStatus: 0,
|
|
|
+ parentLabel: '',
|
|
|
endTime: '',
|
|
|
- labelStatus: 1,
|
|
|
- searchTimeCode: '',
|
|
|
- fromSearch: '',
|
|
|
+ serviceProviderId: '',
|
|
|
pageNum: 1,
|
|
|
- pageSize: 10
|
|
|
+ pageSize: 20
|
|
|
},
|
|
|
list: [],
|
|
|
total: 0,
|
|
|
currentList: [],
|
|
|
searchDialog: false,
|
|
|
visibleKeyword: '',
|
|
|
- addTagDialog: false,
|
|
|
- tagForm: {
|
|
|
- keyword: ''
|
|
|
- },
|
|
|
- tagFormRules: {
|
|
|
- keyword: [{ required: true, message: '请输入标签名称', trigger: ['blur'] }]
|
|
|
- },
|
|
|
exportKeywordList: [],
|
|
|
importDialog: false,
|
|
|
fileList: [],
|
|
@@ -281,7 +188,7 @@ export default {
|
|
|
const res = await findLinkageStatus({ id: $event.id, linkageStatus: $event.linkageStatus ? 1 : 0 })
|
|
|
if (res.code === 0) {
|
|
|
if (res.data === 0) {
|
|
|
- await this.fetchKeywordList()
|
|
|
+ await this.getStatekeywordList()
|
|
|
return this.$message({
|
|
|
type: 'success',
|
|
|
message: `${res.msg}`
|
|
@@ -305,7 +212,7 @@ export default {
|
|
|
$event.linkageStatus = !$event.linkageStatus
|
|
|
})
|
|
|
}
|
|
|
- await this.fetchKeywordList()
|
|
|
+ await this.getStatekeywordList()
|
|
|
}
|
|
|
},
|
|
|
|
|
@@ -319,14 +226,14 @@ export default {
|
|
|
this.listQuery.beginTime = ''
|
|
|
this.listQuery.endTime = ''
|
|
|
}
|
|
|
- this.fetchKeywordList()
|
|
|
+ this.getStatekeywordList()
|
|
|
},
|
|
|
|
|
|
// 获取标签列表
|
|
|
- async fetchKeywordList() {
|
|
|
+ async getStatekeywordList() {
|
|
|
try {
|
|
|
this.isLoading = true
|
|
|
- const res = await fetchKeywordList(this.listQuery)
|
|
|
+ const res = await getStatekeywordList(this.listQuery)
|
|
|
this.list = res.data.results.map((i) => ({
|
|
|
addTime: i.addTime,
|
|
|
frequency: i.frequency,
|
|
@@ -336,7 +243,8 @@ export default {
|
|
|
labelStatus: i.labelStatus,
|
|
|
linkageStatus: i.linkageStatus === 1, // 0 关闭,1 打开
|
|
|
recommendTime: i.recommendTime,
|
|
|
- searchTime: i.searchTime
|
|
|
+ searchTime: i.searchTime,
|
|
|
+ parentLabel: i.parentLabel
|
|
|
}))
|
|
|
this.total = res.data.totalRecord
|
|
|
this.isLoading = false
|
|
@@ -360,39 +268,41 @@ export default {
|
|
|
handleAddTag() {
|
|
|
this.addTagDialog = true
|
|
|
},
|
|
|
-
|
|
|
- // 添加标签取消
|
|
|
- closeAddTagDialog() {
|
|
|
- this.$refs.tagForm.resetFields()
|
|
|
- this.addTagDialog = false
|
|
|
- },
|
|
|
-
|
|
|
- // 添加标签确定
|
|
|
- async handleAddTagConfirm() {
|
|
|
- try {
|
|
|
- await this.$refs.tagForm.validate()
|
|
|
- this.addTagSubmit()
|
|
|
- } catch (error) {
|
|
|
- console.log(error)
|
|
|
- }
|
|
|
- },
|
|
|
-
|
|
|
- // 提交添加标签信息
|
|
|
- async addTagSubmit() {
|
|
|
- try {
|
|
|
- await addKeyword(this.tagForm)
|
|
|
- this.$message.success('添加标签成功')
|
|
|
- this.getList()
|
|
|
- } catch (error) {
|
|
|
- console.log(error)
|
|
|
+ // 添加标签
|
|
|
+ handleOerate(type, row) {
|
|
|
+ if (type === 'add') {
|
|
|
+ this.$router.push({
|
|
|
+ path: '/library/tag/tag-form',
|
|
|
+ query: { type: type }
|
|
|
+ })
|
|
|
+ } else {
|
|
|
+ this.$router.push({
|
|
|
+ path: '/library/tag/tag-form',
|
|
|
+ query: { id: row.id, type: type }
|
|
|
+ })
|
|
|
}
|
|
|
- this.closeAddTagDialog()
|
|
|
},
|
|
|
-
|
|
|
// 删除标签
|
|
|
async handleDeleteTag(row) {
|
|
|
try {
|
|
|
- await this.$confirm('确定删除已选标签?', {
|
|
|
+ let confirmText = ''
|
|
|
+ if (row && row.parentLabel === 1) {
|
|
|
+ confirmText = '该标签为父标签删除后将失去和子标签的联系,确定删除吗?'
|
|
|
+ } else {
|
|
|
+ const parentLabel = []
|
|
|
+ this.currentList.forEach((el) => {
|
|
|
+ if (el.parentLabel === 1) {
|
|
|
+ parentLabel.push(`【${el.keyword}】`)
|
|
|
+ console.log('parentLabel', parentLabel)
|
|
|
+ }
|
|
|
+ })
|
|
|
+ if (parentLabel.length > 0) {
|
|
|
+ confirmText = `所选标签中含有父标签,删除后将失去和子标签的联系,确定删除吗?`
|
|
|
+ } else {
|
|
|
+ confirmText = '确定删除已选标签?'
|
|
|
+ }
|
|
|
+ }
|
|
|
+ await this.$confirm(confirmText, {
|
|
|
confirmButtonText: '确定',
|
|
|
cancelButtonText: '取消',
|
|
|
type: 'warning'
|
|
@@ -408,7 +318,7 @@ export default {
|
|
|
const keywords = row instanceof Event ? this.currentList : [].concat(row)
|
|
|
const ids = keywords.map((item) => item.id).join(',')
|
|
|
try {
|
|
|
- await deleteKeyword({ id: ids })
|
|
|
+ await deleteTrendsLabel({ id: ids })
|
|
|
this.$message.success('标签删除成功')
|
|
|
this.getList()
|
|
|
} catch (error) {
|
|
@@ -444,7 +354,7 @@ export default {
|
|
|
this.fileList = []
|
|
|
this.importDialog = false
|
|
|
formData.append('keywordFile', file.raw)
|
|
|
- await importKeywordXlsx(formData)
|
|
|
+ await importKeywordLabelXlsx(formData)
|
|
|
this.$message.success('导入标签成功')
|
|
|
this.getList()
|
|
|
} catch (error) {
|