Files
dvcp_v2_webapp/ui/packages/layout/AiHighlight.vue
2022-12-01 09:35:20 +08:00

56 lines
1.0 KiB
Vue

<template>
<section class="AiHighlight" :class="{bold,color}" v-html="html"/>
</template>
<script>
export default {
name: "AiHighlight",
props: {
value: {default: ""},
content: {default: ""},
keywords: {default: () => []},
color: {default: ""},
bold: Boolean
},
computed: {
words: v => [v.keywords].flat(),
html() {
let {content, words, value} = this
const reg = new RegExp(`(${words.join("|")})`, 'g')
content = content?.replace(/(@v)/g, this.keywordRender(value))
return !!words.join("|") ? content?.replace(reg, this.keywordRender('$1')) : content
}
},
methods: {
keywordRender(word) {
const {color} = this
return `<p class="keyword" style="color:${color}">${word}</p>`
}
}
}
</script>
<style lang="scss" scoped>
:deep(.AiHighlight ){
display: flex;
align-items: baseline;
.keyword {
display: block;
width: auto;
color: $primaryColor;
}
&.color {
.keyword {
}
}
&.bold {
.keyword {
font-weight: bold;
}
}
}
</style>