跨域搜索

This commit is contained in:
XaoLi717 2024-08-19 15:03:07 +08:00
parent 3fa86351cf
commit 6c93c38417
5 changed files with 320 additions and 206 deletions

View File

@ -1,5 +1,5 @@
<template> <template>
<div> <div style="margin-top: 30px;height: 100%">
<abstract-group <abstract-group
:checkAll="kg.checkAll" :checkAll="kg.checkAll"
:abstractList="kg.list" :abstractList="kg.list"
@ -8,7 +8,7 @@
@changeCheckAll = "changeCheckAllTrue" @changeCheckAll = "changeCheckAllTrue"
class="abstract-group-list" class="abstract-group-list"
v-loading="loading" v-loading="loading"
/> from=""/>
</div> </div>
</template> </template>

View File

@ -1,12 +1,21 @@
<template> <template>
<div class="abstract-group"> <div class="abstract-group">
123213123123567890 <!-- v-if="props.checkbox && (props.abstractList?.length !== 0)"-->
<!-- v-if="props.checkbox && (props.abstractList?.length !== 0)">-->
<el-checkbox-group v-model="abstract" class="abstract-checkbox-group" @change="changeCheckAll" <el-checkbox-group v-model="abstract" class="abstract-checkbox-group" @change="changeCheckAll"
v-if="true"> >
<el-checkbox class="abstract-checkbox" v-for="(item,index) of props.abstractList" :key="index" :label="item"> <el-checkbox style="margin-bottom: 30px;height: 150px" class="abstract-checkbox" v-for="(item,index) of pppp" :key="index" :label="item">
<abstract-item :abstract="pppp[0]" :searchSimilar="props.searchSimilar" :showCollect="props.showCollect"
@open-collect="openCollect" :from="props.from"/>
</el-checkbox> </el-checkbox>
</el-checkbox-group> </el-checkbox-group>
<!-- <div class="abstract-list" v-if="!props.checkbox">-->
<!-- <abstract-item class="abstract" v-for="(item,index) of props.abstractList" :key="index" :abstract="item"-->
<!-- :searchSimilar="props.searchSimilar" :checkbox="props.checkbox" :showCollect="props.showCollect"-->
<!-- @open-collect="openCollect" :from="props.from"/>-->
<!-- </div>-->
<div class="abstract-checkbox-group-empty" v-if="props.abstractList?.length===0">
<span>暂无数据</span>
</div>
</div> </div>
</template> </template>
@ -16,23 +25,40 @@ import { defineProps } from 'vue';
import {SearchVO} from "@/api/search/search"; import {SearchVO} from "@/api/search/search";
defineOptions({ name: 'AbstractGroup' }) defineOptions({ name: 'AbstractGroup' })
const emit = defineEmits(['changeCheckAll','openCollect']) const emit = defineEmits(['changeCheckAll','openCollect'])
const pppp = [
{
title:"001",
publishDate:"123",
summary:"23456789",
},
{
title:"002",
publishDate:"123",
summary:"23456789",
},
{
title:"003",
publishDate:"123",
summary:"23456789",
},
]
const props = defineProps<{ const props = defineProps<{
abstractList: Array<SearchVO>, abstractList: Array<SearchVO>,
searchSimilar: { // searchSimilar: {
type:boolean, // type:boolean,
default: false // default: false
}, // },
checkAll: boolean, checkAll: boolean,
indeterminate: boolean, indeterminate: boolean,
searchCheckList: Array<any>, searchCheckList: Array<any>,
checkbox: { // checkbox: {
type: boolean, // type: boolean,
default: true // default: true
}, // },
showCollect: { // showCollect: {
type: boolean, // type: boolean,
default: false // default: false
}, // },
from: string from: string
}>() }>()
let abstract = reactive<SearchVO[]>([]) let abstract = reactive<SearchVO[]>([])
@ -64,7 +90,6 @@ onMounted(() => {
} }
if (props.searchCheckList && props.searchCheckList.length > 0) if (props.searchCheckList && props.searchCheckList.length > 0)
{ {
// abstract.value = props.searchCheckList
abstract.splice(0, abstract.length, ...props.searchCheckList); abstract.splice(0, abstract.length, ...props.searchCheckList);
} }
}) })

View File

@ -1,66 +1,49 @@
<template> <template>
<div class="abstract-item" :class="checkbox ? 'abstract-checkbox-item': 'abstract-list-item'" <div>
@click.prevent="goInfo(abstract,from)" > <div style="height: 150px;">
<div class="abstract-item-header"> <el-row :gutter="10" style="height: 30px;">
<div class="abstract-item-title"> <el-col :span="12">
<i class="abstract-item-icon" {{abstract.title}}
v-if="isFileF(abstract.title)" </el-col>
:class="fileName(abstract.title)"></i> <el-col :span="12">
<span v-html="abstract.title" :title="filterTag(abstract.title).replace(/<[^>]+>/g,'')"> 发布日期{{abstract.publishDate}}
</span> </el-col>
</div> </el-row>
<div class="abstract-time">发布日期{{abstract.publishDate}}</div> <el-row :gutter="10" style="height: 30px;">
<div class="abstract-item-handle" v-if="showCollect" @click.stop="openCollect(abstract)"><i <el-col :span="24">
class="ic-shoucang1"></i>收藏 作者: {{}}
</div> </el-col>
</div> </el-row>
<div class="abstract-item-info"> <el-row :gutter="10" style="height: 30px;">
<!-- <span :title="abstract.author">作者<i>{{abstract.author}}</i></span>--> <el-col :span="24">
<!-- <span v-if="abstract.type" :title="abstract.type">分类<i>{{abstract.type}}</i></span>--> {{abstract.summary}}
</div> </el-col>
<div class="abstract-item-desc" v-html="abstract.summary"></div> </el-row>
<div class="abstract-item-footer"> <el-row :gutter="10" style="height: 30px;">
<div class="abstract-item-tag"> <el-col :span="24">
<!-- <span>标签</span>--> 操作:
<!-- <span v-for="(tag,t) of abstract.labels" :key="t" class="tag" v-html="tag"--> <span style="margin-top: 30px" @click="outerVisible = true">查看详细信息 </span>
<!-- :title="filterTag(abstract.labels)"></span>--> </el-col>
<!-- <span v-if="!abstract.labels || abstract.labels.length===0" class="tag">暂无标签</span>--> </el-row>
</div>
<div class="abstract-item-num">
<template>
<span @click="outerVisible = true">查看详细信息 *</span>
</template>
<template>
<i></i>
<span>浏览{{abstract.readCount?abstract.readCount:0}}</span>
</template>
<!-- <template v-if="!searchSimilar">-->
<!-- <i></i>-->
<!-- <span>评论{{abstract.commentCount?abstract.commentCount:0}}</span>-->
<!-- </template>-->
</div>
</div> </div>
<div> <div>
<el-dialog <el-dialog
title="知识内容" title="知识内容"
v-model="outerVisible" v-model="outerVisible"
style="height: 100%; style="height: 90%;
width: 100%" width: 90%"
> >
<view <ViewList :list="abstract"/>
:list="viewLs"
/>
</el-dialog> </el-dialog>
</div> </div>
</div> </div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import Template from "../../../activiti/index.vue"; // import Template from "../../../activiti/index.vue";
import View from "@/views/search/view.vue"; import ViewList from "../search/view.vue"
import {computed, defineProps } from "vue"; import {computed, defineProps } from "vue";
import { useRouter } from 'vue-router'; import { useRouter } from 'vue-router';
import {SearchVO} from "@/api/search/search";
defineOptions({name:'AbstractItem'}) defineOptions({name:'AbstractItem'})
const router = useRouter(); const router = useRouter();
@ -69,15 +52,16 @@ const outerVisible = ref(false)
const viewLs = ref<Object>({}) const viewLs = ref<Object>({})
const disViw = ref(false) const disViw = ref(false)
const props = defineProps<{ const props = defineProps<{
abstract: SearchVO, // abstract: SearchVO,
abstract: object,
searchSimilar: { searchSimilar: {
type: Boolean, type: Boolean,
default: false default: false
}, },
checkbox: { // checkbox: {
type: Boolean, // type: Boolean,
default: true // default: true
}, // },
showCollect: { showCollect: {
type: Boolean, type: Boolean,
default: false default: false
@ -101,6 +85,7 @@ const isFileF = computed((v) => {
const addView = async () => { const addView = async () => {
viewLs.value = props.abstract viewLs.value = props.abstract
disViw.value = !disViw.value disViw.value = !disViw.value
console.log("disViw.value",props.abstract)
} }
const goInfo = async (row,path) => { const goInfo = async (row,path) => {
let url: { href: string } | null = null; let url: { href: string } | null = null;
@ -127,6 +112,7 @@ const openCollect = async (data) => {
} }
// //
onMounted(() => { onMounted(() => {
// console.log(props.abstract)
addView(); addView();
}) })
</script> </script>

View File

@ -1,135 +1,138 @@
<template> <template>
<section class="wrapper"> <div>
<div class="content" style="padding-top: 60px;"> <section class="wrapper">
<div class="mainwidth" v-show="true"> <div class="content" style="padding-top: 60px;">
<div class="logoimg" style=" margin-bottom: 0px;"> <div class="mainwidth" v-show="true">
<div <div class="logoimg" style=" margin-bottom: 0px;">
style="float:left;margin-left:30%;margin-right:0px; font-size: 60px;color:#4b71aa; font-weight: bold;font-style:oblique; line-height: 60px;">
<a href="http://www.ilas.com.cn/" target="_balnk" style="text-decoration:none;color:#4b71aa;">KMS</a>
</div>
<div style="float:left;color:#4b71aa; margin-left: 20px;">
<div <div
style="font-size: 25px;color:#4b71aa; font-weight: bold; margin-left: 102px; line-height: 25px;margin-top: 10px; "> style="float:left;margin-left:30%;margin-right:0px; font-size: 60px;color:#4b71aa; font-weight: bold;font-style:oblique; line-height: 60px;">
<a href="http://www.ilas.com.cn/" target="_balnk" style="text-decoration:none;color:#4b71aa;">KMS</a>
</div> </div>
<div style="color:#4b71aa;font-style:oblique; margin-top: 0px; padding-top: 0px;"> <div style="float:left;color:#4b71aa; margin-left: 20px;">
Total branch retrieval knowledge platform <div
style="font-size: 25px;color:#4b71aa; font-weight: bold; margin-left: 102px; line-height: 25px;margin-top: 10px; ">
</div>
<div style="color:#4b71aa;font-style:oblique; margin-top: 0px; padding-top: 0px;">
Total branch retrieval knowledge platform
</div>
</div>
<div style="clear: both;"></div>
</div>
<div style="margin: 0 auto;width: 75%;">
<el-form ref="form" :model="form" label-width="90px">
<div class="literature_index">
<div>
<div class="searchbox" style="margin-bottom: 20px">
<el-form-item label="检索条件">
<el-col :span="6">
<el-select v-model="searchKey2" placeholder="请选择" size="default">
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value"/>
</el-select>
</el-col>
<el-col :span="13">
<el-input v-model="searchValue2" placeholder="请输入关键字" style="width:80%" size="default"/>
</el-col>
<el-col :span="5">
<input value="检索" class="vipsearch" type="button" @click="searchList"/>
</el-col>
</el-form-item>
</div>
<div class="searchbox" style="margin-bottom: 20px">
<el-row :gutter="20">
<el-col :span="8">
<el-form-item label="每页显示">
<el-select v-model="pageSize2" placeholder="请选择" size="default">
<el-option
v-for="item in pageOpt"
:key="item.value"
:label="item.label"
:value="item.value"/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="排序选项">
<el-select v-model="sortBy2" placeholder="请选择" size="default">
<el-option
v-for="item in sortByOpt"
:key="item.value"
:label="item.label"
:value="item.value"/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="排序方式">
<el-select v-model="sortType2" placeholder="请选择" size="default">
<el-option
v-for="item in sortTypeOpt"
:key="item.value"
:label="item.label"
:value="item.value"/>
</el-select>
</el-form-item>
</el-col>
</el-row>
</div>
<div class="searchbox" style="margin-bottom: 20px">
<el-form-item label="检索方式">
<el-col :span="6">
<el-select v-model="searchBy2" placeholder="请选择" size="default">
<el-option
v-for="item in searchByOpt"
:key="item.value"
:label="item.label"
:value="item.value"/>
</el-select>
</el-col>
</el-form-item>
</div>
</div>
</div>
</el-form>
<div class="index_showinfo" v-if="mainList.length===0" >
<!-- <div class="index_showinfo" v-if="mainList.length!==0" >-->
<div class="MoveRight" style="border:1px solid #dbf1fb;width: 650px; padding: 10px;">
<div class="title1"><i class="t-ico1;"></i><em>热搜词&nbsp;&nbsp;</em></div>
<div class="floatTxt" id="tagscloud">
<div ref="tagcloudall">
<a v-for="item in tagList" :href="item.url" :key="item.key"
class="tagc1" :title="item.key"
style="left: 0px; top: 0px; z-index: 239; opacity: 4.80967;">
<font color="#1f95df">{{item.key}}({{item.recno}})</font>
</a>
</div>
</div>
</div>
<div class="sssss"></div>
<div class="checktips"
style="background:#e6f5fc;border:1px solid #dbf1fb;width: 650px; margin-left:0px; padding: 10px;border-radius:4px;">
<span class="tipstitle">温馨提示</span>
<ul class="tipslist">
<li><span>仿ILAS知识平台检索若涉及侵权联系我删除</span>
</li>
</ul>
</div>
</div> </div>
</div> </div>
<div style="clear: both;"></div>
</div> </div>
<div style="margin: 0 auto;width: 75%;"> <list :list="mainList" />
<el-form ref="form" :model="form" label-width="90px"> <div class="searchbox" style="height: 500px;background-color: #f3ffff">
<div class="literature_index">
<div>
<div class="searchbox">
<el-form-item label="检索条件">
<el-col :span="6">
<el-select v-model="searchKey2" placeholder="请选择" size="small">
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value"/>
</el-select>
</el-col>
<el-col :span="13">
<!-- <el-input v-model="form.searchValue" placeholder="请输入关键字" size="small"/>-->
<el-input v-model="searchValue2" placeholder="请输入关键字2" size="small"/>
</el-col>
<el-col :span="5">
<input value="检索" class="vipsearch" type="button" @click="searchList"/>
<!-- <input type="button" onclick="alert('还未建设,你有兴趣参与吗')" class="vipsearch" value="高级检索 "/>-->
</el-col>
</el-form-item>
</div>
<div class="searchbox">
<el-row :gutter="20">
<el-col :span="8">
<el-form-item label="每页显示">
<el-select v-model="pageSize2" placeholder="请选择" size="small">
<el-option
v-for="item in pageOpt"
:key="item.value"
:label="item.label"
:value="item.value"/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="排序选项">
<el-select v-model="sortBy2" placeholder="请选择" size="small">
<el-option
v-for="item in sortByOpt"
:key="item.value"
:label="item.label"
:value="item.value"/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="排序方式">
<el-select v-model="sortType2" placeholder="请选择" size="small">
<el-option
v-for="item in sortTypeOpt"
:key="item.value"
:label="item.label"
:value="item.value"/>
</el-select>
</el-form-item>
</el-col>
</el-row>
</div>
<div class="searchbox">
<el-form-item label="检索方式">
<el-col :span="6">
<el-select v-model="searchBy2" placeholder="请选择" size="small">
<el-option
v-for="item in searchByOpt"
:key="item.value"
:label="item.label"
:value="item.value"/>
</el-select>
</el-col>
</el-form-item>
</div>
</div>
</div>
</el-form>
<div class="index_showinfo" v-if="mainList.length===0">
<div class="MoveRight" style="border:1px solid #dbf1fb;width: 650px; padding: 10px;">
<div class="title1"><i class="t-ico1;"></i><em>热搜词&nbsp;&nbsp;</em></div>
<div class="floatTxt" id="tagscloud">
<div ref="tagcloudall">
<!-- <a ref="tagcloudall2" v-for="item in tagList" :href="item.url"-->
<!-- class="tagc1" :title="item.key"-->
<!-- style="left: 0px; top: 0px; z-index: 239; opacity: 4.80967;">-->
<!-- <font color="#1f95df">{{item.key}}({{item.recno}})</font>-->
<!-- </a>-->
</div>
</div>
</div>
<div class="sssss"></div>
<div class="checktips"
style="background:#e6f5fc;border:1px solid #dbf1fb;width: 650px; margin-left:0px; padding: 10px;border-radius:4px;">
<span class="tipstitle">温馨提示</span>
<ul class="tipslist">
<li><span>仿ILAS知识平台检索若涉及侵权联系我删除</span>
</li>
</ul>
</div>
</div>
</div> </div>
</div> </div>
<!-- <list--> </section>
<!-- :list="mainList"--> </div>
<!-- />-->
</div>
</section>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import {SearchApi,SearchVO} from "@/api/search/search"; import {SearchApi,SearchVO} from "@/api/search/search";
// import List from "@/views/search/List.vue"; import List from "@/views/search/List.vue";
defineOptions({name:'Search'}) defineOptions({name:'Search'})
@ -219,6 +222,7 @@ const searchList = async () => {
} }
const onReady = () => { const onReady = () => {
nextTick(() => { nextTick(() => {
oList.value = tagcloudall.value
if (oList.value) { if (oList.value) {
oList.value = oList.value as HTMLElement; oList.value = oList.value as HTMLElement;
oA.value = Array.from(oList.value.getElementsByTagName('a')); oA.value = Array.from(oList.value.getElementsByTagName('a'));
@ -10255,6 +10259,7 @@ const query = async () => {
} }
]; ];
tagList.value = tagListOrg.slice(0, 50); tagList.value = tagListOrg.slice(0, 50);
console.log(tagList.value)
onReady(); onReady();
}; };
const update = () => { const update = () => {
@ -10378,10 +10383,14 @@ onMounted(() => {
}) })
</script> </script>
<style scoped> <style scoped>
@import "../../assets/kms/styles/style.css"; @import "../../assets/kms/styles/style.css";
/* 机器人样式 */
.iyunwen_js_class {
top: -100px;
position: fixed !important;
}
.MoveRight { .MoveRight {
width: 766px; width: 766px;
@ -10453,18 +10462,23 @@ onMounted(() => {
border-radius: 3px; border-radius: 3px;
} }
/* #tagscloud a.tagc1{color:#666;opacity: 0.68293; padding: 5px;}
#tagscloud a.tagc2{color:#F16E50;opacity: 0.68293; padding: 5px;}
#tagscloud a.tagc3{color:#83c325;opacity: 0.68293; padding: 5px;}
#tagscloud a.tagc4{color:#0F6098;opacity: 0.68293; padding: 5px;}
#tagscloud a.tagc5{color:#006633;opacity: 0.68293; padding: 5px;} */
#tagscloud a:hover { #tagscloud a:hover {
background: #fff; background: #fff;
border: 1px solid #1f95df; border: 1px solid #1f95df;
} }
/* .label { /* .label {
display: inline-block; display: inline-block;
margin: 0 10px 0 0; margin: 0 10px 0 0;
min-width:60px; min-width:60px;
max-width:120px; max-width:120px;
text-align: right; text-align: right;
} */ } */
.literature_index { .literature_index {
width: 100%; width: 100%;

View File

@ -11,18 +11,17 @@
<input style=" height: 40px; width: 80%" :readOnly="true" v-model="infoList.summary"/> <input style=" height: 40px; width: 80%" :readOnly="true" v-model="infoList.summary"/>
</el-form-item> </el-form-item>
<el-form-item label="知识内容"> <el-form-item label="知识内容">
<editor style="width: 100%" :readOnly="true" v-model="infoList.mainContent"/> <editor style="width: 80%" :readOnly="true" v-model="infoList.mainContent"/>
</el-form-item> </el-form-item>
</el-form> </el-form>
</div> </div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import {SearchVO} from "@/api/search/search";
defineOptions({name:'View'}) defineOptions({name:'ViewList'})
const props = defineProps<{ const props = defineProps<{
list: SearchVO list: object,
}>() }>()
const infoList = reactive({ const infoList = reactive({
title: '', title: '',
@ -37,8 +36,8 @@ const infoListFc = () => {
infoList.publishDate = props.list.publishDate infoList.publishDate = props.list.publishDate
infoList.summary = props.list.summary infoList.summary = props.list.summary
infoList.mainContent = props.list.mainContent infoList.mainContent = props.list.mainContent
console.log("infoList",infoList) // console.log("infoList",infoList)
console.log("props.list",props.list) // console.log("props.list",props.list)
} }
onMounted(() => { onMounted(() => {
@ -48,6 +47,83 @@ onMounted(() => {
<style scoped> <style scoped>
/*@import url("http://at.alicdn.com/t/font_2602024_czfyrrtt7tk.css");*/ /*@import url("http://at.alicdn.com/t/font_2602024_czfyrrtt7tk.css");*/
.iconfont{
font-family: hufont!important;
font-style: normal;
margin-right: 5px;
color: #00afff;
speak: none;
font-weight: 400;
font-variant: normal;
text-transform: none;
line-height: 1;
vertical-align: baseline;
display: inline-block;
}
.ic-xiangguanziliao-copy{
font-size: 13px;
}
.list-title{
/*border-bottom: solid 1px #eee;
padding: 0 1px 8px 1px;*/
color:#00afff ;
}
.kms-view{
background: #FFFFFF;
margin: 10px auto;
}
.kms-header{
background: #FFFFFF;
box-shadow: 0px 2px 18px 1px rgba(0, 0, 0, 0.08);
border-radius: 4px 4px 4px 4px;
margin: 15px auto;
width: 90%;
}
.kms-header-title{
text-align: center;
padding: 30px 0px;
}
.kms-header-summary{
text-align: center;
color: #5d5d5d;
padding: 5px 10px 30px;
}
.kms-header-create-info{
color: #5d5d5d;
font-size: 13px;
padding: 5px 10px 30px;
display: flex;
justify-content: space-around;
width: 30%;
margin: 0 auto;
}
.kms-content{
background: #FFFFFF;
box-shadow: 0px 2px 18px 1px rgba(0, 0, 0, 0.08);
border-radius: 4px 4px 4px 4px;
margin: 15px auto;
width: 90%;
padding: 30px;
}
.list-panel{
background: #FFFFFF;
box-shadow: 0px 2px 18px 1px rgba(0, 0, 0, 0.08);
border-radius: 4px 4px 4px 4px;
margin: 15px auto;
width: 90%;
padding: 15px 20px 30px;
}
.preview-ul{
list-style: none;
width: 95%;
}
.preview-ul li{ .preview-ul li{
padding: 5px 10px; padding: 5px 10px;
cursor: pointer; cursor: pointer;
@ -57,6 +133,10 @@ onMounted(() => {
color:#409eff; color:#409eff;
} }
.version-ul{
list-style: none;
width: 95%;
}
.version-ul li{ .version-ul li{
display: flex; display: flex;
height: 50px; height: 50px;
@ -72,4 +152,13 @@ onMounted(() => {
margin: 0 15px 0 35px; margin: 0 15px 0 35px;
color: #ddd; color: #ddd;
} }
.label{
}
.time{
color:#bbb;
font-size: 12px;
padding-top: 5px;
}
</style> </style>