This commit is contained in:
熊丽君
2021-08-06 16:05:39 +08:00
parent c50fc0f40e
commit 9084ba3a16
9 changed files with 376 additions and 12 deletions

59
src/api/search.js Normal file
View File

@ -0,0 +1,59 @@
import request from '@/utils/request';
// 一站搜
export function search(params) {
return request({
url: '/mobile/search',
method: 'post',
params
});
}
// 添加收藏
export function add(params) {
return request({
url: '/mobile/add',
params
});
}
// 取消收藏
export function cancel(params) {
return request({
url: '/mobile/delete',
params
});
}
// 编辑政策的数据回显
export function getPolicyInfo(params) {
return request({
url: '/policy/getPolicyInfo',
params
});
}
// 编辑政策解读的数据回显
export function getPolicyReadInfo(params) {
return request({
url: '/policy/getPolicyReadInfo',
params
});
}
// 获取资讯数据回显
export function getInfo(params) {
return request({
url: '/information/getInfo',
params
});
}
// 获取企业需求数据回显
export function getInfo2(params) {
return request({
url: '/enterprise/getInfo',
params
});
}
// 获取科技成果数据回显
export function getInfo3(params) {
return request({
url: '/science/getInfo',
params
});
}

View File

@ -25,6 +25,7 @@ import {
download,
handleTree
} from '@/utils/ruoyi';
import { formatRichText } from '@/utils/editor';
import Pagination from '@/components/Pagination';
//自定义表格工具扩展
import RightToolbar from '@/components/RightToolbar';
@ -37,6 +38,7 @@ Vue.prototype.selectDictLabel = selectDictLabel;
Vue.prototype.selectDictLabels = selectDictLabels;
Vue.prototype.download = download;
Vue.prototype.handleTree = handleTree;
Vue.prototype.formatRichText = formatRichText;
Vue.prototype.msgSuccess = function(msg) {
this.$message({ showClose: true, message: msg, type: 'success' });

View File

@ -78,6 +78,11 @@ export const constantRoutes = [
component: resolve => require(['@/views/login'], resolve),
name: 'login'
},
{
path: '/search',
component: resolve => require(['@/views/search'], resolve),
name: 'search'
},
{
path: '/404',
component: resolve => require(['@/views/error/404'], resolve),

52
src/utils/editor.js Normal file
View File

@ -0,0 +1,52 @@
export function formatRichText(url) {
let src = document.querySelectorAll('#text .ql-editor img');
console.log(src);
for (let i = 0; i < src.length; i++) {
const string = src[i].getAttribute('src');
const flag = string.includes('http://');
if (!flag) src[i].setAttribute('src', url + string);
}
let src2 = document.querySelectorAll('#text .ql-editor a');
for (let i = 0; i < src2.length; i++) {
const string = src2[i].getAttribute('href');
const flag = string.includes('http://');
if (!flag) src2[i].setAttribute('href', url + string);
}
// var imgReg = /<img.*?(?:>|\/>)/gi;
// var srcReg = /src=[\'\"]?([^\'\"]*)[\'\"]?/i;
// var arr = html.match(imgReg);
// // console.log(arr);
// for (let i = 0; i < arr.length; i++) {
// let src = arr[i].match(srcReg);
// //获取图片地址
// console.log(html);
// console.log(src[1]);
// if (src[1]) {
// var newContent = html.replace(
// /\<img/gi,
// `<img src="${url}${src[1]}"`
// );
// }
// }
// return this.aaa(url, newContent);
}
// function aaa(url, html) {
// console.log(url);
// console.log(html);
// var aReg = /<a.*?(?:>|\/>)/gi;
// var hrefReg = /href=[\'\"]?([^\'\"]*)[\'\"]?/i;
// var arr2 = html.match(aReg);
// for (let i = 0; i < arr2.length; i++) {
// let src = arr2[i].match(hrefReg);
// //获取图片地址
// if (src[1]) {
// var newContent = html.replace(/\<a/gi, `<a href="${url}${src[1]}"`);
// }
// // 替换src
// // if (src[0]) {
// // var t = src[0].replace(/src/i, 'href');
// // console.log(t);
// // }
// }
// return newContent;
// }

View File

View File

@ -66,11 +66,11 @@
></el-tab-pane>
<el-tab-pane label="公告" name="1415157026115424256"></el-tab-pane>
<el-tab-pane label="其他" name="1415157049267982336"></el-tab-pane>
<div class="banner_r_list" v-for="item in 5" :key="item">
<div class="text_18_333 pointer">
政策法规合肥市推动经济高速发展的情况合肥市就是垃圾了时间伏拉夫刚打色无法沙发上
<div style="min-height:290px">
<div class="banner_r_list" v-for="item in list" :key="item.id">
<div class="text_18_333 pointer">{{ item.title }}</div>
<span>{{ parseTime(item.listDate, '{m}-{d}') }}</span>
</div>
<span>07-09</span>
</div>
</el-tabs>
<!-- 资讯快报 -->

View File

@ -41,7 +41,7 @@
<el-radio-group v-model="queryParams.radio1_1" size="medium">
<el-radio-button
:label="item.id"
v-for="item in levelList2"
v-for="item in levelList_2"
:key="item.id"
>
{{ item.name }}
@ -52,8 +52,12 @@
<span class="text_col">归口:</span>
<el-radio-group v-model="queryParams.radio2" size="medium">
<el-radio-button label="">不限</el-radio-button>
<el-radio-button :label="item" v-for="item in 10" :key="item">
{{ item }}
<el-radio-button
:label="item.value"
v-for="item in attributeOptions"
:key="item.value"
>
{{ item.label }}
</el-radio-button>
</el-radio-group>
</div>
@ -145,7 +149,26 @@ export default {
name: '合肥区县'
}
],
levelList2: []
levelList_2: [],
// 归口选项
attributeOptions: [
{
value: 'KJJ',
label: '科技'
},
{
value: 'JXJ',
label: '经信'
},
{
value: 'FGW',
label: '发改'
},
{
value: 'OTHER',
label: '其他'
}
]
};
},
computed: {
@ -156,12 +179,12 @@ export default {
console.log(a, b);
if (a == 2) {
getDictListByStatus({ type: 5 }).then(({ data }) => {
this.levelList2 = data;
this.levelList_2 = data;
this.queryParams.radio1_1 = '1417717740679987200';
});
} else if (a == 3) {
getDictListByStatus({ type: 6 }).then(({ data }) => {
this.levelList2 = data;
this.levelList_2 = data;
this.queryParams.radio1_1 = '1417719159088742400';
});
}

View File

@ -47,8 +47,17 @@
<div class="img2_box">
<img src="@/assets/image/02.png" alt="" />
<div class="search">
<el-input v-model="input" placeholder="请输入搜索关键字"></el-input>
<el-button type="warning">一站搜</el-button>
<el-input
v-model.trim="input"
placeholder="请输入搜索关键字"
></el-input>
<el-button type="warning" @click="toSearch">一站搜</el-button>
<!-- <router-link
target="_blank"
:to="{ path: '/search', query: { val: input } }"
>
<el-button type="warning">一站搜</el-button>
</router-link> -->
</div>
</div>
</div>
@ -176,6 +185,15 @@ export default {
...mapGetters(['avatar'])
},
methods: {
toSearch() {
if (!this.input.length) return this.msgError('请输入搜索关键字');
this.$router.push({ path: '/search', query: { val: this.input } });
// let routerJump = this.$router.resolve({
// path: '/search',
// query: { val: this.input }
// });
// window.open(routerJump.href, '_blank');
},
handlePage() {
this.$router.push({ path: '/login' });
},

205
src/views/search.vue Normal file
View File

@ -0,0 +1,205 @@
<template>
<div class="search_page">
<div class="content">
<div class="item" v-for="(value, key, index) in list" :key="index">
<!-- 政策 -->
<div>
<!-- <el-tag effect="dark" v-if="key == 'policy'">政策</el-tag> -->
<span class="tag" v-if="key == 'policy'">政策</span>
<span class="tag" v-else-if="key == 'policyRead'">政策解读</span>
<span class="tag" v-else-if="key == 'information'">资讯快报</span>
<span class="tag" v-else-if="key == 'companyNeed'">企业需求</span>
<span class="tag" v-else-if="key == 'scienceResult'">科学成功</span>
<el-divider></el-divider>
<div class="item_i" v-for="(item, index2) in value" :key="index2">
<div>
<h4 class="pointer" @click="handleItem(key, item.id)">
{{ item.title }}
</h4>
<div class="info" v-if="key == 'policy' || key == 'policyRead'">
<div>来源{{ item.source }}</div>
<div>发布{{ item.listDate }}</div>
</div>
<div
class="info"
v-else-if="key == 'companyNeed' || key == 'scienceResult'"
>
<div>
<el-tag type="warning" size="mini" effect="dark">
{{ item.fieldName }}
</el-tag>
<el-tag type="warning" size="mini" effect="dark">
{{ item.typeName || item.labelName }}
</el-tag>
</div>
<div>发布{{ parseTime(item.createTime, '{y}-{m}-{d}') }}</div>
</div>
</div>
<el-divider></el-divider>
</div>
</div>
</div>
</div>
<el-dialog title="" :visible.sync="dialogVisible" width="70%">
<h2>{{ formData.title }}</h2>
<div class="info" v-if="type != 'information'">
<span v-if="type != 'companyNeed' && type != 'scienceResult'"
>来源{{ formData.source }}</span
>
<span v-if="type == 'companyNeed'">价格{{ formData.price }}</span>
<el-image
v-if="type == 'scienceResult'"
style="width: 100px; height: 100px"
:src="formData.picList ? formData.picList[0] : ''"
fit="cover"
:preview-src-list="formData.picList"
></el-image>
<span
>发布{{
formData.listDate || parseTime(formData.createTime, '{y}-{m}-{d}')
}}</span
>
<span v-if="token && type == 'policy'">
<el-button type="primary" size="mini">
<i class="el-icon-star-on"></i><span>收藏</span>
</el-button>
<el-button type="info" size="mini">
<i class="el-icon-star-on"></i><span>取消收藏</span>
</el-button>
</span>
</div>
<!-- <div v-html="formData.text"></div> -->
<div id="text">
<editor v-model="formData.text" :min-height="192" />
</div>
</el-dialog>
</div>
</template>
<script>
import { mapGetters } from 'vuex';
import Editor from '@/components/Editor';
import {
search,
getPolicyInfo,
getPolicyReadInfo,
getInfo,
getInfo2,
getInfo3,
add,
cancel
} from '@/api/search';
export default {
components: {
Editor
},
data() {
return {
list: {},
dialogVisible: false,
formData: {},
type: ''
};
},
computed: {
...mapGetters(['token'])
},
watch: {
dialogVisible(a, b) {
if (!a) this.formData = {};
},
formData: {
handler: function() {
this.$nextTick(() => {
this.formatRichText(this.formData.downloadUrl);
});
}
},
deep: true
},
methods: {
handleItem(key, id) {
this.type = key;
this.dialogVisible = true;
if (key == 'policy') {
// 政策
getPolicyInfo({ policyId: id }).then(({ data }) => {
this.formData = data;
});
} else if (key == 'policyRead') {
// 政策解读
getPolicyReadInfo({ readId: id }).then(({ data }) => {
this.formData = data;
});
} else if (key == 'information') {
// 资讯快报
getInfo({ id }).then(({ data }) => {
this.formData = data;
});
} else if (key == 'companyNeed') {
// 企业需求
getInfo2({ id }).then(({ data }) => {
this.formData = data;
});
} else if (key == 'scienceResult') {
// 科学成功
getInfo3({ id }).then(({ data }) => {
this.formData = data;
});
}
}
},
created() {
let { val: param } = this.$route.query;
search({ param }).then(({ data }) => {
this.list = data;
});
}
};
</script>
<style lang="scss" scoped>
.search_page {
/deep/.el-dialog__body {
padding-top: 0;
}
.el-dialog {
.info {
display: flex;
justify-content: space-between;
}
#text {
margin-top: 30px;
/deep/.ql-toolbar {
display: none;
}
/deep/.editor {
border: 0;
}
}
}
.content {
padding: 20px 30px;
.item {
margin-bottom: 40px;
.tag {
background-color: #1890ff;
color: #fff;
font-size: 18px;
padding: 10px 25px;
border-radius: 6px;
}
.item_i {
.info {
display: flex;
justify-content: space-between;
font-size: 14px;
color: #333;
.el-tag {
margin-right: 10px;
}
}
}
}
}
}
</style>