|
@@ -1,29 +1,32 @@
|
|
<template>
|
|
<template>
|
|
<div class="classify">
|
|
<div class="classify">
|
|
- <div class="classify-list" v-for="(item,index) in datas.keyList" :key="'1' + index">
|
|
|
|
|
|
+ <div class="classify-list" v-for="(item,index) in trans.newWordsList" :key="'1' + index">
|
|
<div class="classify-title">
|
|
<div class="classify-title">
|
|
<span class="title-text">{{item.s_item}}</span>
|
|
<span class="title-text">{{item.s_item}}</span>
|
|
<span class="icon-edit" @click="editClassFn(item.s_item, index)"></span>
|
|
<span class="icon-edit" @click="editClassFn(item.s_item, index)"></span>
|
|
<span class="icon-delete" @click="deleteClassFn(item.s_item, index)"></span>
|
|
<span class="icon-delete" @click="deleteClassFn(item.s_item, index)"></span>
|
|
</div>
|
|
</div>
|
|
<div class="classify-content">
|
|
<div class="classify-content">
|
|
- <div class="list" v-for="(v, i) in item.a_key" :key="'2' + i">
|
|
|
|
- <div class="list-box">
|
|
|
|
- <div class="list-value">
|
|
|
|
- <p>关键词: {{v.key.join(' ') || '--'}}</p>
|
|
|
|
- <p>附加词: {{v.appendkey.join('、') || '--'}}</p>
|
|
|
|
- <p>排除词: {{v.notkey.join('、') || '--'}}</p>
|
|
|
|
|
|
+ <div class="add-words-box" @click="addNewKeyword(item, index)" v-if="!item.showForm" key="add">+新增关键词</div>
|
|
|
|
+ <div style="width:100%;" v-else key="add">
|
|
|
|
+ <Edit :datas="trans" title="新增关键词组"></Edit>
|
|
|
|
+ </div>
|
|
|
|
+ <div v-for="(v, i) in item.a_key" :key="'2' + i" style="width:100%;">
|
|
|
|
+ <Edit :datas="trans" title="修改关键词组" :classify="item" :keywords="v" v-if="v.showForm" key="edit"></Edit>
|
|
|
|
+ <div class="words-list" v-else key="edit">
|
|
|
|
+ <div class="list-left yellow-box" v-if="v.matchway">模糊</div>
|
|
|
|
+ <div class="list-left blue-box" v-else>精准</div>
|
|
|
|
+ <div class="list-middle">
|
|
|
|
+ <div class="list-keywords">{{v.key.join(' ')}}</div>
|
|
|
|
+ <p class="list-addkey" v-if="v.appendkey && v.appendkey.length > 0">附加词: {{v.appendkey.join(' ')}}</p>
|
|
|
|
+ <p class="list-notkey" v-if="v.notkey && v.notkey.length > 0">排除词: {{v.notkey.join(' ')}}</p>
|
|
</div>
|
|
</div>
|
|
- <div class="list-icon" @click="deleteKeyFn(index, i)"></div>
|
|
|
|
- <div class="list-edit" @click="editKeyFn(item, v, index, i)">
|
|
|
|
- 编辑
|
|
|
|
- <i class="tri-down"></i>
|
|
|
|
|
|
+ <div class="list-right">
|
|
|
|
+ <span class="icon-edit" @click="editKeyFn(item, v, index, i)"></span>
|
|
|
|
+ <span class="icon-delete" @click="deleteKeyFn(index, i)"></span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
- <div class="words-add" @click="addKeyFn(item.s_item)">
|
|
|
|
- <i class="el-icon-plus"></i>
|
|
|
|
- </div>
|
|
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<!-- 修改分类dialog -->
|
|
<!-- 修改分类dialog -->
|
|
@@ -69,7 +72,7 @@
|
|
</div>
|
|
</div>
|
|
</el-dialog>
|
|
</el-dialog>
|
|
<!-- 关键词dialog -->
|
|
<!-- 关键词dialog -->
|
|
- <el-dialog
|
|
|
|
|
|
+ <!-- <el-dialog
|
|
custom-class="sub-dialog"
|
|
custom-class="sub-dialog"
|
|
:visible.sync="dialog.editKey"
|
|
:visible.sync="dialog.editKey"
|
|
:close-on-click-modal="false"
|
|
:close-on-click-modal="false"
|
|
@@ -84,13 +87,34 @@
|
|
<KeyEdit ref="keyEditRef" :datas="props"></KeyEdit>
|
|
<KeyEdit ref="keyEditRef" :datas="props"></KeyEdit>
|
|
</div>
|
|
</div>
|
|
</KeyCard>
|
|
</KeyCard>
|
|
|
|
+ </el-dialog> -->
|
|
|
|
+ <!-- 删除关键词dialog -->
|
|
|
|
+ <el-dialog
|
|
|
|
+ custom-class="sub-dialog small-dialog"
|
|
|
|
+ :visible.sync="dialog.delKey"
|
|
|
|
+ :close-on-click-modal="false"
|
|
|
|
+ :show-close="false"
|
|
|
|
+ top="30vh"
|
|
|
|
+ center
|
|
|
|
+ width="380px"
|
|
|
|
+ v-if="dialog.delKey"
|
|
|
|
+ >
|
|
|
|
+ <div class="delete-class">
|
|
|
|
+ <div class="delete-class-header">删除关键词组</div>
|
|
|
|
+ <div class="delete-class-content">确定删除该关键词组吗?</div>
|
|
|
|
+ <div class="delete-class-footer">
|
|
|
|
+ <el-button type="primary" class="confirm" @click="confirmDeleteKeyFn">确定</el-button>
|
|
|
|
+ <el-button class="cancel" @click="dialog.delKey = false">取消</el-button>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
</el-dialog>
|
|
</el-dialog>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
</template>
|
|
<script>
|
|
<script>
|
|
import { Tooltip, Dialog, Input, Button } from 'element-ui'
|
|
import { Tooltip, Dialog, Input, Button } from 'element-ui'
|
|
import KeyCard from '@/components/selector/SelectorCard'
|
|
import KeyCard from '@/components/selector/SelectorCard'
|
|
-import KeyEdit from './KeyEdit'
|
|
|
|
|
|
+import Edit from './Edit'
|
|
|
|
+import $bus from '@/utils/bus'
|
|
export default {
|
|
export default {
|
|
name: 'keywords-list',
|
|
name: 'keywords-list',
|
|
components: {
|
|
components: {
|
|
@@ -99,7 +123,7 @@ export default {
|
|
[Input.name]: Input,
|
|
[Input.name]: Input,
|
|
[Button.name]: Button,
|
|
[Button.name]: Button,
|
|
KeyCard,
|
|
KeyCard,
|
|
- KeyEdit
|
|
|
|
|
|
+ Edit
|
|
},
|
|
},
|
|
props: {
|
|
props: {
|
|
datas: {
|
|
datas: {
|
|
@@ -112,7 +136,8 @@ export default {
|
|
dialog: {
|
|
dialog: {
|
|
editClass: false, // 修改分类弹框
|
|
editClass: false, // 修改分类弹框
|
|
delClass: false, // 删除分类弹框
|
|
delClass: false, // 删除分类弹框
|
|
- editKey: false // 修改关键词弹框
|
|
|
|
|
|
+ editKey: false, // 修改关键词弹框
|
|
|
|
+ delKey: false // 删除关键词
|
|
},
|
|
},
|
|
// 传给dialog子组件的数据
|
|
// 传给dialog子组件的数据
|
|
props: {
|
|
props: {
|
|
@@ -123,12 +148,36 @@ export default {
|
|
key: [], // 关键词
|
|
key: [], // 关键词
|
|
notkey: [], // 排除词
|
|
notkey: [], // 排除词
|
|
appendkey: [] // 附加词
|
|
appendkey: [] // 附加词
|
|
|
|
+ },
|
|
|
|
+ trans: {
|
|
|
|
+ newWordsList: [], // 将父组件传来的数据赋值给该变量
|
|
|
|
+ maxCount: 0
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
},
|
|
computed: {},
|
|
computed: {},
|
|
- mounted () {},
|
|
|
|
|
|
+ watch: {
|
|
|
|
+ 'datas.keyList': function (newVal) {
|
|
|
|
+ if (newVal) {
|
|
|
|
+ this.formatDatasList()
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ mounted () {
|
|
|
|
+ this.formatDatasList()
|
|
|
|
+ },
|
|
methods: {
|
|
methods: {
|
|
|
|
+ formatDatasList () {
|
|
|
|
+ const lists = JSON.parse(JSON.stringify(this.datas.keyList))
|
|
|
|
+ lists.forEach(v => {
|
|
|
|
+ v.showForm = false
|
|
|
|
+ v.a_key.forEach(s => {
|
|
|
|
+ s.showForm = false
|
|
|
|
+ })
|
|
|
|
+ })
|
|
|
|
+ this.trans.newWordsList = lists
|
|
|
|
+ this.trans.maxCount = this.datas.maxCount
|
|
|
|
+ },
|
|
// 取消编辑弹框
|
|
// 取消编辑弹框
|
|
cancleEdit () {
|
|
cancleEdit () {
|
|
this.dialog.editKey = false
|
|
this.dialog.editKey = false
|
|
@@ -159,8 +208,15 @@ export default {
|
|
v.s_item = this.props.className
|
|
v.s_item = this.props.className
|
|
}
|
|
}
|
|
})
|
|
})
|
|
- this.$emit('updateKey', data)
|
|
|
|
|
|
+ // this.$emit('updateKey', data)
|
|
|
|
+ $bus.$emit('updateKey', data)
|
|
this.dialog.editClass = false
|
|
this.dialog.editClass = false
|
|
|
|
+ // this.$forceUpdate()
|
|
|
|
+ },
|
|
|
|
+ // 新增关键词
|
|
|
|
+ addNewKeyword (item, index) {
|
|
|
|
+ console.log(item, index)
|
|
|
|
+ item.showForm = true
|
|
},
|
|
},
|
|
// 打开删除关键词分类弹框
|
|
// 打开删除关键词分类弹框
|
|
deleteClassFn (name, index) {
|
|
deleteClassFn (name, index) {
|
|
@@ -175,7 +231,8 @@ export default {
|
|
this.dialog.delClass = false
|
|
this.dialog.delClass = false
|
|
// 删除整个分类的数据
|
|
// 删除整个分类的数据
|
|
data.splice(this.props.classIndex, 1)
|
|
data.splice(this.props.classIndex, 1)
|
|
- this.$emit('updateKey', data)
|
|
|
|
|
|
+ // this.$emit('updateKey', data)
|
|
|
|
+ $bus.$emit('updateKey', data)
|
|
},
|
|
},
|
|
// 添加关键词
|
|
// 添加关键词
|
|
addKeyFn (name) {
|
|
addKeyFn (name) {
|
|
@@ -193,20 +250,13 @@ export default {
|
|
this.props.notkey = []
|
|
this.props.notkey = []
|
|
this.props.appendkey = []
|
|
this.props.appendkey = []
|
|
},
|
|
},
|
|
- // 删除单个关键词
|
|
|
|
- deleteKeyFn (index, i) {
|
|
|
|
- console.log(index, i)
|
|
|
|
- const data = JSON.parse(JSON.stringify(this.datas.keyList))
|
|
|
|
- if (!data) return
|
|
|
|
- data[index].a_key.splice(i, 1)
|
|
|
|
- this.$emit('updateKey', data)
|
|
|
|
- },
|
|
|
|
// 编辑单个关键词
|
|
// 编辑单个关键词
|
|
editKeyFn (item, v, index, i) {
|
|
editKeyFn (item, v, index, i) {
|
|
|
|
+ console.log(item)
|
|
// index 分类下标 i 关键词下标
|
|
// index 分类下标 i 关键词下标
|
|
this.clearPropsData()
|
|
this.clearPropsData()
|
|
- this.props.ways = 'edit'
|
|
|
|
- this.dialog.editKey = true
|
|
|
|
|
|
+ // this.props.ways = 'edit'
|
|
|
|
+ // this.dialog.editKey = true
|
|
// 把当前关键词传到dialog key,notkey,appendKey都为数组
|
|
// 把当前关键词传到dialog key,notkey,appendKey都为数组
|
|
this.props.className = item.s_item
|
|
this.props.className = item.s_item
|
|
this.props.key = v.key
|
|
this.props.key = v.key
|
|
@@ -214,6 +264,23 @@ export default {
|
|
this.props.appendkey = v.appendkey
|
|
this.props.appendkey = v.appendkey
|
|
this.props.keyIndex = i
|
|
this.props.keyIndex = i
|
|
this.props.classIndex = index
|
|
this.props.classIndex = index
|
|
|
|
+ v.showForm = true
|
|
|
|
+ },
|
|
|
|
+ // 打开删除关键词dialog
|
|
|
|
+ deleteKeyFn (index, i) {
|
|
|
|
+ console.log(index, i)
|
|
|
|
+ this.props.classIndex = index
|
|
|
|
+ this.props.keyIndex = i
|
|
|
|
+ this.dialog.delKey = true
|
|
|
|
+ },
|
|
|
|
+ // 确定删除关键词组
|
|
|
|
+ confirmDeleteKeyFn () {
|
|
|
|
+ const data = this.datas.keyList
|
|
|
|
+ this.dialog.delKey = false
|
|
|
|
+ if (!data) return
|
|
|
|
+ data[this.props.classIndex].a_key.splice(this.props.keyIndex, 1)
|
|
|
|
+ // this.$emit('updateKey', data)
|
|
|
|
+ $bus.$emit('updateKey', data)
|
|
},
|
|
},
|
|
// 清空传值
|
|
// 清空传值
|
|
clearPropsData () {
|
|
clearPropsData () {
|
|
@@ -277,7 +344,8 @@ export default {
|
|
})
|
|
})
|
|
}
|
|
}
|
|
// 通知父组件发请求修改并更新
|
|
// 通知父组件发请求修改并更新
|
|
- this.$emit('updateKey', data)
|
|
|
|
|
|
+ // this.$emit('updateKey', data)
|
|
|
|
+ $bus.$emit('updateKey', data)
|
|
this.dialog.editKey = false
|
|
this.dialog.editKey = false
|
|
},
|
|
},
|
|
// 获取所有分类名
|
|
// 获取所有分类名
|
|
@@ -450,8 +518,7 @@ export default {
|
|
display: flex;
|
|
display: flex;
|
|
align-items: center;
|
|
align-items: center;
|
|
.title-text{
|
|
.title-text{
|
|
- font-size: 14px;
|
|
|
|
- font-weight: 700;
|
|
|
|
|
|
+ font-size: 16px;
|
|
color: #1d1d1d;
|
|
color: #1d1d1d;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -477,6 +544,66 @@ export default {
|
|
align-items: center;
|
|
align-items: center;
|
|
justify-content: flex-start;
|
|
justify-content: flex-start;
|
|
flex-wrap: wrap;
|
|
flex-wrap: wrap;
|
|
|
|
+ .add-words-box{
|
|
|
|
+ width: 100%;
|
|
|
|
+ height: 38px;
|
|
|
|
+ margin-top: 20px;
|
|
|
|
+ line-height: 38px;
|
|
|
|
+ border: 1px dashed #2cb7ca;
|
|
|
|
+ border-radius: 6px;
|
|
|
|
+ color: #2cb7ca;
|
|
|
|
+ font-size: 14px;
|
|
|
|
+ text-align: center;
|
|
|
|
+ cursor: pointer;
|
|
|
|
+ }
|
|
|
|
+ .words-list{
|
|
|
|
+ width: 100%;
|
|
|
|
+ display: flex;
|
|
|
|
+ justify-content: space-between;
|
|
|
|
+ align-items: center;
|
|
|
|
+ padding: 12px 16px;
|
|
|
|
+ margin-top: 12px;
|
|
|
|
+ border: 1px solid #ececec;
|
|
|
|
+ border-radius: 8px;
|
|
|
|
+ box-sizing: border-box;
|
|
|
|
+ .list-left{
|
|
|
|
+ width: 40px;
|
|
|
|
+ height: 22px;
|
|
|
|
+ line-height: 22px;
|
|
|
|
+ margin-right: 12px;
|
|
|
|
+ font-size: 12px;
|
|
|
|
+ text-align: center;
|
|
|
|
+ box-sizing: border-box;
|
|
|
|
+ }
|
|
|
|
+ .yellow-box{
|
|
|
|
+ border: 1px solid #ff9f40;
|
|
|
|
+ color: #ff9f40;
|
|
|
|
+ border-radius: 4px;
|
|
|
|
+ }
|
|
|
|
+ .blue-box{
|
|
|
|
+ border: 1px solid #2cb7ca;
|
|
|
|
+ color: #2cb7ca;
|
|
|
|
+ border-radius: 4px;
|
|
|
|
+ }
|
|
|
|
+ .list-middle{
|
|
|
|
+ flex: 1;
|
|
|
|
+ }
|
|
|
|
+ .list-keywords{
|
|
|
|
+ color: #1d1d1d;
|
|
|
|
+ line-height: 22px;
|
|
|
|
+ font-size: 14px;
|
|
|
|
+ }
|
|
|
|
+ .list-addkey,
|
|
|
|
+ .list-notkey{
|
|
|
|
+ color: #686868;
|
|
|
|
+ line-height: 20px;
|
|
|
|
+ font-size: 12px;
|
|
|
|
+ }
|
|
|
|
+ .list-right{
|
|
|
|
+ margin-left:15px;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
.list{
|
|
.list{
|
|
padding-top: 10px;
|
|
padding-top: 10px;
|
|
margin-right: 10px;
|
|
margin-right: 10px;
|