fix(搜索中心): 带入首页填写的搜索条件

This commit is contained in:
zyn
2023-12-18 16:31:54 +08:00
parent 04877e3299
commit d2dad52ffe
@@ -1,55 +1,65 @@
<template> <template>
<div class="standard-search"> <div class="standard-search">
<personal-center></personal-center> <personal-center />
<div class="search" style="margin: 20px 20px 0;"> <div class="search" style="margin: 20px 20px 0;">
<div
<div class="search-content" class="search-content"
@mouseenter="setShowAllSearch(true)" @mouseenter="setShowAllSearch(true)"
@mouseleave="setShowAllSearch(false)"> @mouseleave="setShowAllSearch(false)"
>
<div class="search-item"> <div class="search-item">
<div class="condition-item-title">检索方式</div> <div class="condition-item-title">检索方式</div>
<div class="search-item-content"> <div class="search-item-content">
<div <div
:class="searchForm.selectType === 'allTextSearch' ? 'selected' : ''" :class="searchForm.selectType === 'allTextSearch' ? 'selected' : ''"
@click="searchFormChange('selectType', 'allTextSearch')" @click="searchFormChange('selectType', 'allTextSearch')"
>全文检索</div> >
全文检索
</div>
<div <div
:class="searchForm.selectType === 'titleSearch' ? 'selected' : ''" :class="searchForm.selectType === 'titleSearch' ? 'selected' : ''"
@click="searchFormChange('selectType', 'titleSearch')" @click="searchFormChange('selectType', 'titleSearch')"
>标题检索</div> >
标题检索
</div>
</div> </div>
</div> </div>
<i class="icon el-icon-arrow-down" :class="{ 'icon-arrow': showAllSearch}"></i> <i class="icon el-icon-arrow-down" :class="{ 'icon-arrow': showAllSearch}" />
<div style="height: 5px;width: 100%;background-color: transparent;position: absolute;bottom: -5px;left: 0"></div> <div style="height: 5px;width: 100%;background-color: transparent;position: absolute;bottom: -5px;left: 0" />
<transition name="fade"> <transition name="fade">
<el-card class="box-card" v-show="showAllSearch"> <el-card v-show="showAllSearch" class="box-card">
<template v-for="(item,key) in searchOptions"> <template v-for="(item,key) in searchOptions">
<!-- 标准类别 --> <!-- 标准类别 -->
<template v-if="key === 'standSort'"> <template v-if="key === 'standSort'">
<!-- 资源类型非全部时 根据标准类别显示对应标准类别 --> <!-- 资源类型非全部时 根据标准类别显示对应标准类别 -->
<!-- 资源类型全部时隐藏标准类别 --> <!-- 资源类型全部时隐藏标准类别 -->
<div v-if="searchForm.standType !== ''" class="search-item card-search-item" :key="key"> <div v-if="searchForm.standType !== ''" :key="key" class="search-item card-search-item">
<div class="condition-item-title">{{ item.title }}</div> <div class="condition-item-title">{{ item.title }}</div>
<div class="search-item-content"> <div class="search-item-content">
<div v-for="(option, index) in item.options.filter(i => i.type === searchForm.standType || i.type === 'all')" <div
:key="option.value" v-for="option in item.options.filter(i => i.type === searchForm.standType || i.type === 'all')"
:class="searchForm[key].split(',').indexOf(option.value) !== -1 ? 'selected' : ''" :key="option.value"
@click="searchFormChange(key, option.value)" :class="searchForm[key].split(',').indexOf(option.value) !== -1 ? 'selected' : ''"
>{{ option.label }}</div> @click="searchFormChange(key, option.value)"
>
{{ option.label }}
</div>
</div> </div>
</div> </div>
</template> </template>
<div v-else class="search-item card-search-item" :key="key"> <div v-else :key="key" class="search-item card-search-item">
<div class="condition-item-title">{{ item.title }}</div> <div class="condition-item-title">{{ item.title }}</div>
<div class="search-item-content"> <div class="search-item-content">
<div v-for="(option, index) in item.options" <div
:key="option.value" v-for="option in item.options"
:class="searchForm[key].split(',').indexOf(option.value) !== -1 ? 'selected' : ''" :key="option.value"
@click="searchFormChange(key, option.value)" :class="searchForm[key].split(',').indexOf(option.value) !== -1 ? 'selected' : ''"
>{{ option.label }}</div> @click="searchFormChange(key, option.value)"
>
{{ option.label }}
</div>
</div> </div>
</div> </div>
</template> </template>
@@ -58,8 +68,8 @@
</div> </div>
<div class="search-input"> <div class="search-input">
<el-input placeholder="请输入查询条件" v-model="searchForm.selectValue" @keyup.enter.native="onSearch" clearable> <el-input v-model="searchForm.selectValue" placeholder="请输入查询条件" clearable @keyup.enter.native="onSearch">
<el-button slot="append" icon="el-icon-search" @click="onSearch"></el-button> <el-button slot="append" icon="el-icon-search" @click="onSearch" />
</el-input> </el-input>
</div> </div>
@@ -71,49 +81,50 @@
<div>首页</div> <div>首页</div>
</router-link> </router-link>
</div> </div>
</div> </div>
<div class="main"> <div class="main">
<loading :loading="loading">数据获取中</loading> <loading :loading="loading">数据获取中</loading>
<has-no-data tips="暂无查询结果" p-class="no-data-class" v-if="list.length === 0" /> <has-no-data v-if="list.length === 0" tips="暂无查询结果" p-class="no-data-class" />
<template v-else> <template v-else>
<div style="height: calc(100% - 56px + 20px);overflow-y: auto;"> <div style="height: calc(100% - 56px + 20px);overflow-y: auto;">
<div v-for="(item,key) in list" :key="key" class="main-box"> <div v-for="(item,key) in list" :key="key" class="main-box">
<div class="main-box-title"> <div class="main-box-title">
<div class="left"> <div class="left">
<span v-html="item.indexType === 'stand' ? '国内标准法规' : (item.indexType === 'FOREIGN' ? '国外标准法规' : (item.indexType === 'laws' ? '国内外政策' : (item.indexType === 'bussstand' ? '企业标准' : (item.indexType === 'items' ? '数据化条目' : '动态&资料'))))" class="type-tip"></span> <span class="type-tip" v-html="item.indexType === 'stand' ? '国内标准法规' : (item.indexType === 'FOREIGN' ? '国外标准法规' : (item.indexType === 'laws' ? '国内外政策' : (item.indexType === 'bussstand' ? '企业标准' : (item.indexType === 'items' ? '数据化条目' : '动态&资料'))))" />
<span style="cursor:pointer;" class="main-title" v-html="item.title" @click="jumpDetails(item)"></span> <span style="cursor:pointer;" class="main-title" @click="jumpDetails(item)" v-html="item.title" />
</div> </div>
<span class="more" @click="checkDetail(item)">详情</span> <span class="more" @click="checkDetail(item)">详情</span>
</div> </div>
<div class="main-content" v-html="item.textContent"></div> <div class="main-content" v-html="item.textContent" />
<div v-if="item.indexType !== 'items' && item.indexType !== 'msgdyinfo'" class="time"> <div v-if="item.indexType !== 'items' && item.indexType !== 'msgdyinfo'" class="time">
<div style="margin-right: 15px;">发布日期: {{ item.issue_time !== null && item.issue_time !== '' ? $moment(item.issue_time).format('YYYY-MM-DD') : '--' }} </div> <div style="margin-right: 15px;">发布日期: {{ item.issue_time !== null && item.issue_time !== '' ? $moment(item.issue_time).format('YYYY-MM-DD') : '--' }} </div>
</div> </div>
</div> </div>
</div> </div>
<pagination <pagination
:page="searchForm.page" :page="searchForm.page"
:total="total" :total="total"
@pageChange="pageChange" style="border-radius: 24px;"
@pageSizeChange="pageSizeChange" @pageChange="pageChange"
style="border-radius: 24px;"></pagination> @pageSizeChange="pageSizeChange"
/>
</template> </template>
</div> </div>
<el-dialog <el-dialog
title="查看详情" title="查看详情"
:visible.sync="isShowDetail" :visible.sync="isShowDetail"
size="800px"> size="800px"
>
<loading :loading="detailLoading">数据获取中</loading> <loading :loading="detailLoading">数据获取中</loading>
<div style="height: 500px;overflow: auto;" > <div style="height: 500px;overflow: auto;">
<div v-html="detail.textContent" style="line-height: 20px;"></div> <div style="line-height: 20px;" v-html="detail.textContent" />
<br> <br>
<br> <br>
<div v-html="detail.textItems" style="line-height: 20px;"></div> <div style="line-height: 20px;" v-html="detail.textItems" />
</div> </div>
<div slot="footer"> <div slot="footer">
<el-button class="common-button-default" size="mini" icon="el-icon-close" @click="() => {this.isShowDetail = false}">关闭</el-button> <el-button class="common-button-default" size="mini" icon="el-icon-close" @click="() => { this.isShowDetail = false }">关闭</el-button>
</div> </div>
</el-dialog> </el-dialog>
</div> </div>
@@ -122,11 +133,11 @@
<script> <script>
import PersonalCenter from '@/components/personalCenter/index.vue' import PersonalCenter from '@/components/personalCenter/index.vue'
export default { export default {
name: "index", name: 'Index',
components: { components: {
PersonalCenter PersonalCenter
}, },
data() { data () {
const searchOptions = { const searchOptions = {
// selectType: { // selectType: {
// title: '检索方式', // title: '检索方式',
@@ -207,7 +218,7 @@ export default {
CLLX: '', CLLX: '',
page: 1, page: 1,
pageSize: this.$store.getters.userInfo.configContent, pageSize: this.$store.getters.userInfo.configContent,
selectValue: '' selectValue: this.$route.params.searchValue || ''
}, },
total: 0, total: 0,
list: [], list: [],
@@ -220,7 +231,7 @@ export default {
detailLoading: false detailLoading: false
}; };
}, },
created() { created () {
this.getDicTypeListCode() this.getDicTypeListCode()
this.getData() this.getData()
}, },
@@ -246,8 +257,8 @@ export default {
this.searchForm[key] = value this.searchForm[key] = value
} else if (key === 'standType') { } else if (key === 'standType') {
this.searchForm[key] = value; this.searchForm[key] = value;
['standSort', 'NYLXCLASS', 'CLLX'].forEach(item => { [ 'standSort', 'NYLXCLASS', 'CLLX' ].forEach(item => {
this.searchForm[item] = '' this.searchForm[item] = ''
}) })
} else { } else {
if (value === '') { if (value === '') {
@@ -296,23 +307,23 @@ export default {
}) })
}, },
jumpDetails (item) { jumpDetails (item) {
let name = '',pageType = '' let name = '', pageType = ''
switch (item.indexType) { switch (item.indexType) {
case 'stand': case 'stand':
name = 'OtherStandardDetails' name = 'OtherStandardDetails'
pageType = 'INLAND_STAND' pageType = 'INLAND_STAND'
break break
// 企标 // 企标
case 'bussstand': case 'bussstand':
name = 'OtherBussStandardDetails' name = 'OtherBussStandardDetails'
pageType = 'BUSINESS_STAND' pageType = 'BUSINESS_STAND'
break break
case 'FOREIGN': case 'FOREIGN':
name = 'OtherStandardDetails' name = 'OtherStandardDetails'
pageType = 'FOREIGN_STAND' pageType = 'FOREIGN_STAND'
break break
} }
let routeUrl = this.$router.resolve({ const routeUrl = this.$router.resolve({
name, name,
params: { params: {
id: item.id, id: item.id,
@@ -325,18 +336,18 @@ export default {
this.$http._getData('sys/dictype/getDicTypeListCode', {}, {}).then(res => { this.$http._getData('sys/dictype/getDicTypeListCode', {}, {}).then(res => {
if (res.ok) { if (res.ok) {
// 能源类型 // 能源类型
this.searchOptions.NYLXCLASS.options = [...this.searchOptions.NYLXCLASS.options, ...res.data.NYLXCLASS] this.searchOptions.NYLXCLASS.options = [ ...this.searchOptions.NYLXCLASS.options, ...res.data.NYLXCLASS ]
// 适用车辆类型 // 适用车辆类型
this.searchOptions.CLLX.options = [...this.searchOptions.CLLX.options, ...res.data.ENERGYTYPES] this.searchOptions.CLLX.options = [ ...this.searchOptions.CLLX.options, ...res.data.ENERGYTYPES ]
// 标准类别 // 标准类别
if (res.data.STANDCLASSIFY) { if (res.data.STANDCLASSIFY) {
const data = res.data.STANDCLASSIFY const data = res.data.STANDCLASSIFY
const standVerify = ["GB","GB/T","QC/T","JT","JB","GA","GJB","HJ"]; const standVerify = [ 'GB', 'GB/T', 'QC/T', 'JT', 'JB', 'GA', 'GJB', 'HJ' ];
const bussstandVerify = ["ECE","EU","EC","EEC","ISO","IEC","GTR","CFR", const bussstandVerify = [ 'ECE', 'EU', 'EC', 'EEC', 'ISO', 'IEC', 'GTR', 'CFR',
"JASO","JIS","GSO","GOST","ΓOCT","TP","SASO","UAE","CONTRAN","DENATRAN", 'JASO', 'JIS', 'GSO', 'GOST', 'ΓOCT', 'TP', 'SASO', 'UAE', 'CONTRAN', 'DENATRAN',
"ABNT NBR","NBR","INMETRO","CONAMA","Normative Instruction","ADR"]; 'ABNT NBR', 'NBR', 'INMETRO', 'CONAMA', 'Normative Instruction', 'ADR' ];
const enterpriseVerify = ["Q/FT A","Q/FT B","Q/FT E","Q/FT F","Q/FT G","Q/FT M", const enterpriseVerify = [ 'Q/FT A', 'Q/FT B', 'Q/FT E', 'Q/FT F', 'Q/FT G', 'Q/FT M',
"Q/FT Q","Q/FT R","Q/FT S","Q/FT T","Q/FT V","Q/FT X","Q/FT Y","Q/FT Z","Q/QCBFC"]; 'Q/FT Q', 'Q/FT R', 'Q/FT S', 'Q/FT T', 'Q/FT V', 'Q/FT X', 'Q/FT Y', 'Q/FT Z', 'Q/QCBFC' ];
// 国内 // 国内
const standList = data.filter(item => standVerify.includes(item.label)) const standList = data.filter(item => standVerify.includes(item.label))
standList.forEach(item => item.type = 'stand') standList.forEach(item => item.type = 'stand')
@@ -347,7 +358,7 @@ export default {
const enterpriseList = data.filter(item => enterpriseVerify.includes(item.label)) const enterpriseList = data.filter(item => enterpriseVerify.includes(item.label))
enterpriseList.forEach(item => item.type = 'bussstand') enterpriseList.forEach(item => item.type = 'bussstand')
this.searchOptions.standSort.options = [...this.searchOptions.standSort.options, ...standList, ...bussstandList, ...enterpriseList] this.searchOptions.standSort.options = [ ...this.searchOptions.standSort.options, ...standList, ...bussstandList, ...enterpriseList ]
} }
} }
}) })