travel/admin/src/views/qa/problem.vue

199 lines
5.1 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div class="problem">
<el-row>
<el-col :span="24">
<div class="problem_form">
<el-form :inline="true" ref="form" :model="dataForm" label-width="60px">
<el-form-item label="关键字:">
<el-input v-model="dataForm.keyword" placeholder="请输入搜索关键字" style="width: 400px;" class="filter-item" />
</el-form-item>
<el-form-item>
<el-button type="success" @click="onSubmit">查询</el-button>
</el-form-item>
</el-form>
</div>
</el-col>
</el-row>
<div class="problem_container">
<div class="problem_left">
<div @click="handleQacityl(item.city_id)" class="btn" v-for="item in getQaCityList">{{ item.city_name }}</div>
</div>
<div class="problem_right">
<ul class="infinite-list" v-infinite-scroll="load" :infinite-scroll-immediate="false" style="overflow:auto">
<li class="problem_right_container" v-for="item in getQaLists">
<div class="title">
<span v-html="handleprant(item.title)"></span>
<el-button @click="handleZip(item.img_zip)" type="primary">下载图片</el-button>
<el-button @click="handleZip(item.trip_zip)" type="primary">下载行程</el-button>
</div>
<div class="desc_container" v-for="list in item.qaQuestions">
<div style="font-weight: 700;color: #46a6ff;" class="desc" v-html="handleprant(list.title)"></div>
<div class="desc" v-html="handleprantHtml(list.content)"></div>
</div>
</li>
</ul>
</div>
</div>
</div>
</template>
<script>
import { getQaCityList, getQaList } from '@/api/qa'
export default {
data() {
return {
getQaCityList: [],
getQaLists: [],
dataForm: {
keyword: '',
city_id: ''
}
}
},
created() {
getQaCityList().then(res => {
this.getQaCityList = res.data
})
},
watch: {
'dataForm.keyword': function (newVal) {
if (newVal) {
this.onSubmit();
}
}
},
methods: {
handleQacityl(val) {
getQaList({ city_id: val }).then(res => {
this.getQaLists = res.data.data
})
},
handleZip(url) {
if (url) {
window.open(url)
} else {
this.$message({
showClose: true,
message: '暂无下载链接'
})
}
},
load() {
console.log('load')
},
handleprant(val) {
if (!val) return ''; // 处理空值情况,避免返回 undefined 或其他非字符串值
let replaceReg = new RegExp(this.dataForm.keyword, "ig");
let replaceString = `<span style="color: #fff;background-color: #FC0421FF;">${this.dataForm.keyword}</span>`;
return val.replace(replaceReg, replaceString);
},
handleprantHtml(val) {
if (!val) return '';
let p = this.dataForm.keyword;
let regexp = new RegExp(p, "g");
let replacedHtml = val.replace(/(?<=>)[^>]+(?=<[/]?\w+.*>)/g, (v) => {
return v.replace(regexp, `<span style='color: #fff;background-color: #FC0421FF;'>${p}</span>`);
});
// 检查是否有替换发生
if (replacedHtml === val) {
// 如果没有替换发生则调用handleprant
return this.handleprant(val);
}
return replacedHtml;
},
onSubmit() {
getQaList(this.dataForm).then(res => {
this.getQaLists = res.data.data
})
}
}
}
</script>
<style lang="scss" scoped>
@import "~@/assets/fonts/font.css";
body {
font-family: PingFang !important;
}
.infinite-list {
list-style-type: none;
height: calc(100vh - 154px);
padding: 0;
margin: 0;
}
.desc_container {
& + .desc_container {
margin-top: 10px;
padding-top: 10px;
}
.desc_title {
font-size: 18px;
font-weight: 500;
color: #333333;
line-height: 25px;
margin-bottom: 10px;
}
.desc_content {
font-size: 14px;
font-weight: 300;
}
}
.problem {
.problem_form {
margin-top: 10px;
display: flex;
justify-content: center;
}
.problem_container {
display: flex;
.problem_left {
font-family: PingFang, sans-serif;
font-weight: 300;
width: 18%;
background: #fff;
padding: 0 20px;
border-right: 2px solid #46a6ff;
height: calc(100vh - 154px);
.btn {
color: #fff;
padding: 10px 20px;
cursor: pointer;
text-align: center;
background: #46a6ff;
border-radius: 10px;
& + .btn {
margin-top: 10px;
}
}
}
.problem_right {
width: 100%;
background: #fff;
padding: 0 20px;
.problem_right_container {
& + .problem_right_container {
margin-top: 20px;
}
.title {
font-size: 20px;
font-weight: 600;
margin-bottom: 10px;
color: #46a6ff;
&>:nth-child(1) {
margin-right: 40px;
}
}
.desc {
font-size: 14px;
color: #666;
line-height: 24px;
}
}
}
}
}
</style>