Files
learning-system-portal/src/views/portal/case/Index.vue
2025-08-05 14:29:24 +08:00

2808 lines
85 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 id="case-list-content">
<div style="margin-bottom:30px" class="case-banner">
<portal-header @type1="handleType" :type="queryCondition" current="case" textColor="#fff" @emitInput="emitInput" @showClass="showClass"></portal-header>
</div>
<div class="xcontent2">
<!-- 新增的案例分类 -->
<!-- <div class="xcontent2-minor" style="margin-right:36px;">
<div class="course-title-style">
<div class="imgTilte">
<div>案例分类</div>
<div>COURSE</div>
</div>
</div>
<div class="course-list">
<div class="course-one" v-for="one in treeList" :key="one.id" @click.stop="handleOptionClick(one, 1, treeList)">
<div class="course-one-content">{{ one.name }}</div>
<div class="course-two" v-for="(twoList, twoIndex) in one.children" :key="twoList.id"
@click.stop="handleOptionClick(twoList, 2, one.children)"
:class="{ courseTwoActive: twoList.id == twoId || twoList.checked }" @mouseleave.stop="leaveIndex"
@mouseenter.stop="changeIndex(twoList.id)"
>
<el-popover class="popover" popper-class='coursePopperClass' placement="right-start" width="536"
:disabled="!twoList.children.length" :open-delay="0" :close-delay="0" trigger="hover" :visible-arrow="false"
@hide="leaveIndex" @show="changeIndex(twoList.id)" transition="none">
<div class="course-two-content" slot="reference">{{ twoList.name }}</div>
<div class="course-three-box">
<div class="course-three-box-title">
{{ twoList.name }}
</div>
<div style="padding: 0 40px;display: flex;flex-wrap: wrap;">
<div :class="threeList.checked ? 'threeActive' : ''" v-for="threeList in twoList.children"
:key="threeList.id" @click.stop="handleOptionClick(threeList, 3, twoList.children)"
class="course-three">
<span>{{ threeList.name }}</span>
</div>
</div>
</div>
</el-popover>
</div>
</div>
</div>
</div> -->
<div class="xcontent2-main" style="margin-right: 30px;">
<div class="left-div">
<div class="search-div">
<div class="searchbar" v-if="tagList.length > 0">
<div style="line-height: 30px;">
<span class="item-title">搜索条件</span>
<el-tag closable v-for="(tag, tagIdx) in tagList" :key="tagIdx" @close="tagsClose(tag, tagIdx)">{{
tag.name
}}</el-tag>
</div>
</div>
<div class="search-item">
<div style="margin-top:10px; display: flex;margin-bottom:24px;">
<div style="flex:1;">
<div class="field">
<div style="line-height: 25px;padding-right: 10px;padding-left: 0;">
<!-- <img class="orgaicon" :src="`${webBaseUrl}/images/orgaimg.png`" alt=""> -->
<span class="item-title">组织领域</span>
<span class="item-line"></span>
</div>
<div style="padding:0;" :class="oneTagAll ? 'fieldactive' : ''" @click="domainall(1)">全部</div>
<div class="fieldbox">
<div :class="item.fielclass ? 'fieldactive' : ''" @click="fieldswich(item, 1)"
v-for="(item, idx) in domain" :key="'a' + idx">
{{ item.name }}
</div>
</div>
</div>
<!-- <el-checkbox-group v-model="queryCondition.orgDomain" size="mini" @change="search()">
<el-checkbox-button :label="null">全部</el-checkbox-button>
<el-checkbox-button v-for="item in domain" :key="item.code" :label="item.code"> {{ item.name}}</el-checkbox-button>
</el-checkbox-group> -->
<!-- 二级分类 -->
<!-- <div class="field" v-if="twoList.length > 0" style="margin-top: 24px;">
<div style="line-height: 25px;padding-right: 10px;padding-left: 0;">
<span class="item-title">二级分类</span>
<span class="item-line"></span>
</div>
<div style="padding:0;" :class="twoTagAll ? 'fieldactive' : ''" @click="domainall(2)">全部</div>
<div class="fieldbox">
<div :class="item.fielclass ? 'fieldactive' : ''" @click="fieldswich(item, 2)"
v-for="(item, idx) in twoList" :key="'b' + idx">{{ item.name }}</div>
</div>
</div> -->
<!-- 三级分类 -->
<!-- <div class="field" v-if="threeList.length > 0" style="margin-top: 24px;">
<div style="line-height: 25px;padding-right: 10px;padding-left: 0;">
<span class="item-title">三级分类</span>
<span class="item-line"></span>
</div>
<div style="padding:0;" :class="threeTagAll ? 'fieldactive' : ''" @click="domainall(3)">全部</div>
<div class="fieldbox">
<div :class="item.fielclass ? 'fieldactive' : ''" @click="fieldswich(item, 3)"
v-for="(item, idx) in threeList" :key="'c' + idx">{{ item.name }}</div>
</div>
</div> -->
</div>
</div>
</div>
<!-- 专业分类 -->
<div class="search-div-collapse">
<div class="search-item">
<div style="margin-top:10px; display: flex;">
<div style="line-height: 25px;padding-right: 10px;white-space: nowrap;">
<!-- <img class="orgaicon" :src="`${webBaseUrl}/images/specimg.png`" alt=""> -->
<span class="item-title">专业分类</span>
<span class="item-line"></span>
</div>
<div style="flex:1;" id="searchBox">
<div class="field">
<div style="padding:0;" :class="speciAll ? 'fieldactive' : ''" @click="majorall()">全部</div>
<div class="fieldbox">
<div :class="item.fielclass ? 'fieldactive' : ''" @click="fieldmajor(item)"
v-for="(item, idx) in speciData" :key="'d' + idx">{{ item.name }}({{ item.explanation }})</div>
</div>
</div>
<!-- <el-radio-group style="display:flex;" v-model="queryCondition.majorType" size="mini" @change="search()">
<el-radio-button :label="null">全部</el-radio-button>
<div>
<el-radio-button v-for="item in speciData" :key="item.code" :label="item.code" > {{ item.name }} </el-radio-button>
</div>
</el-radio-group> -->
</div>
</div>
</div>
</div>
<div class="searBox" v-if="searchwd">
<el-button type="text" id="closeSearchBtn" @click="closeSearch">
{{ word }}
<i :class="showAll ? 'el-icon-arrow-up ' : 'el-icon-arrow-down'"></i>
</el-button>
</div>
</div>
<div style="height:30px;background-color:#f6f7fc;"></div>
<div class="order-div" style="border-bottom:none">
<span class="quyer-tag">
<el-button type="text" class="order-class" @click="searchexcellent('all')"
:class="{ actice: queryCondition.type == 'all' }">全部</el-button>
<el-button type="text" class="order-class" @click="searchexcellent('excellent')"
:class="{ actice: queryCondition.type == 'excellent' }">年度最佳</el-button>
<el-button type="text" class="order-class" @click="searchexcellent('recommend')"
:class="{ actice: queryCondition.type == 'recommend' }">推荐案例</el-button>
<!-- <el-button type="text" class="order-class" @click="searchexcellent('hot')"
:class="{ actice: queryCondition.type == 'hot' }">最热</el-button>
<el-button type="text" class="order-class" @click="searchexcellent('new')"
:class="{ actice: queryCondition.type == 'new' }">最新</el-button> -->
</span>
<div style="flex: 1; display: flex; justify-content: flex-end;align-items: center;">
<!-- <div style="margin-right: 20px;color: #6E7B84;font-size: 14px;">当前已检索 <span style="color:#387DF7;">
{{ caseList.count }}</span> 条数据</div> -->
<div v-if="caseTimeShow" class="pub_time" @click="searchTime">
<div class="text">发布时间</div>
<div class="triangle">
<div :style="{borderBottomColor:pubTimeNum===2?'#387DF7':'#DCDFE6'}" class="up-triangle"></div>
<div :style="{borderTopColor:pubTimeNum===1?'#387DF7':'#DCDFE6'}" class="down-triangle"></div>
</div>
</div>
<div v-if="caseTimeShow" class="pub_time" @click="searchPageView">
<div class="text">浏览量</div>
<div class="triangle">
<div :style="{borderBottomColor:pageViewNum===2?'#387DF7':'#DCDFE6'}" class="up-triangle"></div>
<div :style="{borderTopColor:pageViewNum===1?'#387DF7':'#DCDFE6'}" class="down-triangle"></div>
</div>
</div>
<el-select v-if="caseTimeShow" @change="yearsChange" v-model="years" multiple collapse-tags
style=" width: 147px; border-radius:20px !important;" placeholder="全部年份">
<el-option v-for="item in caseYears" :key="item.value" :label="item.label" :value="item.value">
</el-option>
</el-select>
<div :class="queryCondition.type == 'collect' ? 'collect_active': 'collect'" @click="searchexcellent('collect')">
<div class="png"></div>
<div class="text">收藏案例</div>
</div>
<div :class="queryCondition.type == 'time' ? 'time_active': 'time'" @click="searchexcellent('time')">
<div class="png"></div>
<div class="text">浏览记录</div>
</div>
</div>
</div>
<div class="back_num" v-if="numIsFalse">
<div class="search_div_num">
当前已检索 <span style="color:#FF4040 ;">
{{ this.caseList.count }}</span> 条数据
</div>
</div>
<div class="data-content">
<div v-for="item in this.caseList.list" :key="isTimeData?item.browsingHistoryId : item.id" class="case-list">
<div class="case-info">
<div class="case-info-cont">
<!-- <router-link :to="'/case/detail?id=' + item.id"> -->
<div @click="toCaseDetail(item.id, item.refId)" style="cursor: pointer;">
<div v-if="isTime" class="case_text">
<span style="margin-right:28px">阅读了案例</span>
<span>{{ item.eventTime }}</span>
</div>
<div class="case-info-title">
<div class="case-titdiv">
<div class="case-tittext">
<span :style="{maxWidth:item.excellentTag&&item.viewRankTags.length != 0?'400px':item.viewRankTags.length != 0?'500px':''}" class="title-line-ellipsis" :title="item.title">{{ item.title || item.contentInfo }}</span>
</div>
<div class="case-activeText">
<!-- <span v-if="item.breCommend" class="comWords"
style="background-color:rgba(232, 139, 72);"></span>
<span v-if="item.excellent" class="comWords" style="background-color:red;">最佳</span> -->
<span @click.stop="()=>{}" v-if="item.excellentTag" class="comWords" style="width: 98px;height: 24px;background: #F99000;border-radius: 2px;font-weight: 400;font-size: 12px;color: #FFFFFF;padding: 4px 10px;cursor: auto;">
{{item.excellentTag}}
</span>
<span @click.stop="toExcellent(tag)" v-if="item.viewRankTags.length != 0" v-for="tag in item.viewRankTags" class="comWords" style="width: 98px;height: 24px;background: #F99000;border-radius: 2px;font-weight: 400;font-size: 12px;color: #FFFFFF;padding: 4px 10px;">
{{tag.tagName}}
</span>
</div>
<div class="case-info-date portal-time">
<i class="el-icon-time"></i>
<time-show v-if="item.id" :time="item.sysCreateTime"></time-show>
<span v-else>该案例已被删除</span>
</div>
</div>
</div>
</div>
<!-- </router-link> -->
<div v-if="!item.id" style="height:25px;padding-top:14px "></div>
<div v-if="item.id" style="height:58px;padding-top:14px ">
<author :avatar="item.authorInfo.avatar" :name="item.authorInfo.name" :info="item.authorInfo.orgInfo"
:sex="item.authorInfo.sex" :authorTags="item.authorTags" :aid="item.authorInfo.aid">
<template>
<div v-if="item.breCommend"
style="padding-top: 6px;flex: 1;display: flex;justify-content: flex-end;color: #999;font-size: 12px;">
<span>{{ item.recommendOrgName }}推荐</span>
</div>
</template>
</author>
</div>
<!-- <router-link :to="'/case/detail?id=' + item.id"> -->
<div v-if="item.id" @click="toCaseDetail(item.id, item.refId)" style="cursor: pointer;">
<div class="keyword-text clearfix">
<div style="color:#2974D6;font-weight: 450;" v-if="item.orgDomainParent">
{{ orgDomainTranslate(item.orgDomainParent) }}
</div>
<!-- <div style="color:#2974D6;font-weight: 450;" v-if="item.orgDomain">{{ orgDomainTranslate(item.orgDomain) }}</div> -->
<div style="color:#2974D6;font-weight: 450;" v-for="(item, idx) in item.majorType" :key="idx">
{{ majorTypeTranslate(item) }}
</div>
<div v-if="item.keyword1 && item.keyword1 != 'null'">{{ item.keyword1 }}</div>
<div v-if="item.keyword2 && item.keyword2 != 'null'">{{ item.keyword2 }}</div>
<div v-if="item.keyword3 && item.keyword3 != 'null'">{{ item.keyword3 }}</div>
<div v-if="item.keyword4 && item.keyword4 != 'null'">{{ item.keyword4 }}</div>
<div v-if="item.keyword5 && item.keyword5 != 'null'">{{ item.keyword5 }}</div>
</div>
</div>
<!-- </router-link> -->
<div v-if="item.id" class="case-info-summary two-line-ellipsis" @click="toCaseDetail(item.id, item.refId)">
{{ item.summary }}
<!-- <router-link :to="'/case/detail?id='+item.id"> -->
<!-- {{displayAll(item)}} -->
<!-- </router-link> -->
<!-- <span style="color:#588afc;cursor:pointer;" v-if="item.summary.length>150" @click.stop="changeIsAll(item)"> -->
<!-- {{item.isAll?'收起':'展开'}} -->
<!-- </span> -->
</div>
<div v-if="item.id" style="display: flex;justify-content: flex-end;">
<div style="margin:8px 0;">
<interactBar @deleteFavorite="deleteFavorite" :type="3" :data="item" :comments="false" :shares="true"></interactBar>
</div>
</div>
</div>
</div>
</div>
<div v-if="this.caseList.showPagCount > queryCondition.pageSize">
<pagination :size="queryCondition.pageSize" :total="caseList.count" :page="queryCondition.pageIndex"
layout="total, prev, pager, next, jumper" @change-page="currentChange"></pagination>
</div>
</div>
<div class="pagination-div">
<!-- <span class="pag-text" @click="loadMore()" v-if="moreState == 1">加载更多</span>
<span class="pag-text-msg" v-else-if="moreState == 2">数据加载中</span>
<span class="pag-text-msg" v-else-if="moreState == 3">没有更多数据了</span> -->
<span class="notcoures" v-if="this.caseList.list.length == 0">
<img :src="`${webBaseUrl}/images/nocase.png`" alt="">
<h5>暂无案例请优先学习其它案例吧</h5>
</span>
<!-- <span class="pag-text-msg" v-else-if="isSeach">没有查询到相关内容</span> -->
</div>
<div v-if="isSeach" style="height:382px">
</div>
</div>
</div>
<!-- 打开排行榜 -->
<div class="xcontent2-minor">
<div id="fixd-box">
<router-link class="the_charts" to="/case/charts">
<div class="text">排行榜</div>
<div class="icon">></div>
</router-link>
<div>
<div class="portal-ranking ranking-bg" style="padding: 20px 15px;max-height: 222px;">
<div style="display: flex;justify-content: space-between;">
<p class="ranking-title">好评榜</p>
<el-dropdown trigger="click" @command="positiveReview">
<span class="el-dropdown-link">
{{favorableName}}<i class="el-icon-arrow-down el-icon--right"></i>
</span>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item command="total"></el-dropdown-item>
<el-dropdown-item command="quarter">季度</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</div>
<ul class="ranking-data">
<li v-for="(item, index) in Positive" :key="index" class="title-line-ellipsis"
style="cursor: pointer;margin-top:15px;line-height: 22px;">
<router-link :to="'/case/detail?id=' + item.caseId">
<span class="portal-right-text blue-one" v-if="index == 0">
<img :src="`${webBaseUrl}/images/listblue01.png`" alt="">
</span>
<span class="portal-right-text blue-tow" v-if="index == 1">
<img :src="`${webBaseUrl}/images/listblue02.png`" alt="">
</span>
<span class="portal-right-text blue-three" v-if="index == 2">
<img :src="`${webBaseUrl}/images/listblue03.png`" alt="">
</span>
<!-- <span class="portal-right-text" v-if="index == 3">
<img :src="`${webBaseUrl}/images/list04.png`" alt="">
</span>
<span class="portal-right-text" v-if="index == 4">
<img :src="`${webBaseUrl}/images/list05.png`" alt="">
</span> -->
<span class="portal-title-desc" style="font-size: 14px;">{{ item.caseTitle }}</span>
</router-link>
</li>
</ul>
</div>
<div class="portal-ranking ranking-bg1" style="padding: 20px 15px;max-height: 222px;margin-top: 20px;">
<div style="display: flex;justify-content: space-between;">
<p class="ranking-title">人气榜</p>
<el-dropdown trigger="click" @command="popularityReview">
<span class="el-dropdown-link">
{{popularityName}}<i class="el-icon-arrow-down el-icon--right"></i>
</span>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item command="total"></el-dropdown-item>
<el-dropdown-item command="quarter">季度</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</div>
<ul class="ranking-data">
<li v-for="(item, index) in Popularity" :key="index" class="title-line-ellipsis"
style="cursor: pointer;margin-top:15px;line-height: 22px;">
<router-link :to="'/case/detail?id=' + item.caseId">
<span class="portal-right-text orange-one" v-if="index == 0">
<img :src="`${webBaseUrl}/images/list-01.png`" alt="">
</span>
<span class="portal-right-text orange-tow" v-if="index == 1">
<img :src="`${webBaseUrl}/images/list02.png`" alt="">
</span>
<span class="portal-right-text orange-three" v-if="index == 2">
<img :src="`${webBaseUrl}/images/list03.png`" alt="">
</span>
<span class="portal-right-text" v-if="index == 3">
<img :src="`${webBaseUrl}/images/list04.png`" alt="">
</span>
<span class="portal-right-text" v-if="index == 4">
<img :src="`${webBaseUrl}/images/list05.png`" alt="">
</span>
<span class="portal-title-desc" style="font-size: 14px;">{{ item.caseTitle }}</span>
</router-link>
</li>
</ul>
</div>
<div v-if="recommendRank.length > 0" class="portal-ranking ranking-bg2" style="margin-top:20px;padding: 20px 15px;max-height: 222px;">
<p class="ranking-title">推荐榜</p>
<ul class="ranking-data">
<li v-for="(item, index) in recommendRank" :key="index" class="title-line-ellipsis"
style="cursor: pointer;margin-top:15px;line-height: 22px;">
<router-link :to="'/case/detail?id=' + item.caseId">
<span class="portal-right-text blue-one" v-if="index == 0">
<img :src="`${webBaseUrl}/images/listred01 .png`" alt="">
</span>
<span class="portal-right-text blue-tow" v-if="index == 1">
<img :src="`${webBaseUrl}/images/listred02.png`" alt="">
</span>
<span class="portal-right-text blue-three" v-if="index == 2">
<img :src="`${webBaseUrl}/images/listred03.png`" alt="">
</span>
<span class="portal-title-desc" style="font-size: 14px;">{{ item.caseTitle }}</span>
</router-link>
</li>
</ul>
</div>
</div>
</div>
</div>
<div style="height: 50px;"></div>
<el-dialog class="protocol" :close-on-click-modal="false" :visible.sync="protocolDialogVisible" width="30%"
:show-close="false">
<div class="protocol-title">案例查阅及使用用户协议</div>
<div class="protocol-content">
&emsp;&emsp;本专区内案例为BOE各组织沉淀的通用案例 组织案例卓越绩效案例管理案例 职级晋升案例企业文化案例等 案例内容记录作者亲历的真实的已完成的
典型工作事件提炼解决具体问题的心得思路经验方法等 仅供BOE员工查询学习交流使用未经允许不得以任何方式外传
</div>
<span slot="footer" class="dialog-footer">
<el-checkbox label="我已阅读并同意。" @change="protocolCheck" style="float: left"></el-checkbox>
<el-tooltip :disabled="!protocolConfirmButton" effect="light" content="请先勾选‘我已阅读并同意。’" placement="bottom">
<span><el-button type="primary" :disabled="protocolConfirmButton" @click="protocolConfirm">
</el-button></span>
</el-tooltip>
</span>
</el-dialog>
</div>
<portal-footer></portal-footer>
<portalFloatTools></portalFloatTools>
<!-- U课堂弹窗 -->
<div class="u-class">
<el-dialog :visible.sync="showUClass" width="833px">
<div class="ClassBoxContent">
<img src="../../../assets/images/u_class.png" alt="" class="img" />
<div class="ContentBox">
<div class="left">
<div class="title">U选小课堂</div>
<div class="jy">项目简介</div>
<div class="msg">
于22年首推是一个面向全集团员工开放的职业通识类数字化培养项目旨在帮助员工开阔眼界加厚职业素养在原有外部精选通用力课程基础上2023年引入创新专区以新鲜的话题新颖的形式带给全员丰富有趣的学习体验
</div>
<div class="bottom"></div>
</div>
<div class="right">
<div class="tyl" @click="tylClick">
<div class="tyl_title">
<img src="../../../assets/images/dc.png" alt="" class="tyl_title_img" />
<span class="tyl_title_msg">通用力专区</span>
</div>
<div class="tyl_jy">加厚职业素养轻学习快成长</div>
<div class="tyl_msg">
内容涵盖领导力市场营销职场技能财务知识法律常识人力资源经典国学人文社科
</div>
</div>
<div class="text_msg">
创新力专区课程版权已到期
</div>
<!-- <div class="cyl" @click="cylClick">
<div class="tyl_title">
<img src="../../../assets/images/cyl.png" alt="" class="tyl_title_img" />
<span class="tyl_title_msg">创新力专区</span>
</div>
<div class="tyl_jy">激发创新潜力拓视野促思考</div>
<div class="tyl_msg">
内容涵盖组合创新单点破局错位竞争分形创新第二曲线数字化元宇宙<br/>
创新力专区课程版权将于2024年4月16日到期逾期将无法继续访问请尽快完成学习
</div>
</div> -->
</div>
</div>
</div>
</el-dialog>
</div>
</div>
</template>
<script>
import { mapGetters } from "vuex";
import portalHeader from "@/components/PortalHeader.vue";
import portalFooter from "@/components/PortalFooter.vue";
import portalFloatTools from "@/components/PortalFloatTools.vue";
import interactBar from "@/components/Portal/interactBar.vue";
import timeShow from "@/components/Portal/datetimeShow.vue";
import author from "@/components/Portal/authorInfo.vue";
import apiCase from "@/api/modules/cases.js";
import apiUser from "@/api/system/user.js";
import apiSearchterm from "@/api/modules/searchterm.js";
import { deepClone } from "../../../utils";
import apiDict from "@/api/modules/dict.js";
import apiType from "@/api/modules/type.js";
import { cutFullName } from "@/utils/tools.js";
import apiPlace from "@/api/phase2/place.js"
export default {
name: "case",
components: {
portalHeader,
portalFooter,
portalFloatTools,
interactBar,
timeShow,
author,
},
data() {
return {
timeoutId: null,
isTimeData: false,
articlePageList: [],
caseTimeShow: true,
isTime: false,
numIsFalse: true,
switch: {
'total': '总',
'quarter': '季度',
},
favorableName: '季度',
popularityName: '季度',
pubTimeNum: 1,
pageViewNum: 0,
twoId:'',
treeList:[],
caseType:process.env.VUE_APP_CASE_TYPE,//类型
caseYears:[],
refId: '',//消息跳转案例的id
selectList: [],//点击选中的list
twoList: [], //二级分类{type:12}
threeList: [],//三级分类{type:13}
showUClass: false,
fileBaseUrl: process.env.VUE_APP_FILE_BASE_URL,
resonimg: {},
domain: [],//组织领域
domainAll: [],//全部的组织领域
speciData: [],//专业分类
moreState: 1, // 1 加载更多 2 加载中 3无数据
isSeach: false,
searchwd: false,
showAll: true, //是否展开全部
initHeight: 40,//原始 高度
searchRecords: [],//热门搜索词
caseList: {
count: 0,
list: [],
showPagCount: 0
},
ankingList: [],//排行数据1
Popularity: [],//排行数据2
Positive: [],//排行数据3
recommendRank: [],
protocolDialogVisible: false,
protocolConfirmButton: true,
years: [],
queryCondition: {
pageIndex: 1,
pageSize: 5,
// orderField: "excellent",
majorType: '', //专业分类code
// orderAsc: false,
// isTop: true,
excellent: true,
keyWord: '',
orgDomainDtos: [],
caseType: '',
authorName: '',
notInIds: [],
type: 'all',
userId: '',
parent: '',
children: [],
name: '',
years: [],
// 随机
// notInIds: [],//重复的id
orderField: "id",
orderAsc: false,//排序
sysType1:'',
sysType2:'',
sysType3:''
},
keyWord: "",
anking: 2,
queryExpand: true, // true更多false收起
category: 0,
type2: 0,
type3: 0,
isFind: false,
fielclassjor: true,
localSessionKey: this.$xpage.constants.localCaseFiltersKey
};
},
watch: {
// years() {
// this.search(true)
// }
},
computed: {
...mapGetters(["userInfo", "portalCase"]),
word: function () {
if (this.showAll == false) {
//对文字进行处理
return "展开";
} else {
return "收起";
}
},
isMore() {
let isOk = true;
if (this.caseList.list.length === this.caseList.count) {
isOk = false;
}
return isOk;
},
tagList() { //列表属性,用于计算
let list = [];
if (this.keyWord) {
list.push({ type: '0', code: 'keyword', name: this.keyWord, checked: true })
}
this.domain.forEach(one => {
var twoChildChecked = false;//是否有下级
one.list.forEach(two => {
if (two.fielclass) {
twoChildChecked = true;
}
var threeChildChecked = false;
two.list.forEach(three => {
if (three.fielclass) {
list.push(three);
threeChildChecked = true;
}
});
if (two.fielclass && !threeChildChecked) {
list.push(two);
}
});
if (one.fielclass && !twoChildChecked) {
list.push(one);
}
})
this.speciData.forEach(item => {
if (item.fielclass) {
list.push(item);
}
});
this.treeList.forEach(one => {
var twoChildChecked = false;//是否有下级
one.children && one.children.forEach(two => {
if (two.checked) {
twoChildChecked = true;
}
var threeChildChecked = false;
two.children && two.children.forEach(three => {
if (three.checked) {
list.push(three);
threeChildChecked = true;
}
});
if (two.checked && !threeChildChecked) {
list.push(two);
}
});
if (one.checked && !twoChildChecked) {
list.push(one);
}
})
// console.log(list,'计算属性');
return list;
},
oneTagAll() {
return !this.domain.some(item => item.fielclass);
},
twoTagAll() {
return !this.twoList.some(item => item.fielclass)
},
threeTagAll() {
return !this.threeList.some(item => item.fielclass);
},
speciAll() {
return !this.speciData.some(item => item.fielclass);
}
},
beforeRouteLeave (to, from, next) {
const isScroll = 'caseDetail,caseCharts,caseExcellent'
if(!isScroll.includes(to.name)){
// console.log('我是外')
this.queryCondition.pageIndex = 1
this.search()
// window.location.reload()
// this.$destroy()
}else{
sessionStorage.setItem('pagesScroll', JSON.stringify(window.pageYOffset))
}
window.removeEventListener("scroll", this.handleScroll);
next()
},
beforeRouteEnter(to, from, next) {
if(from.name !== 'caseDetail'){
// console.log('我是内')
}
next(vm=>{
vm.$nextTick(() => {
window.scrollTo({
left: 0,
top: JSON.parse(sessionStorage.getItem("pagesScroll")),
})
sessionStorage.removeItem("pagesScroll")
vm.allRequests()
});
})
},
created() {
(() => {
const allData = {
0: {
orderField: 'id',
orderAsc: false
},
1: {
orderField: 'id',
orderAsc: true
},
2: {
orderField: 'title',
orderAsc: false
},
3: {
orderField: 'title',
orderAsc: true
},
4: {
orderField: 'sysCreateTime',
orderAsc: false
},
5: {
orderField: 'sysCreateTime',
orderAsc: true
},
6: {
orderField: 'authorId',
orderAsc: false
},
7: {
orderField: 'authorId',
orderAsc: true
},
8: {
orderField: 'authorName',
orderAsc: false
},
9: {
orderField: 'authorName',
orderAsc: true
},
}
const allArr = Object.keys(allData)
let recordsArr = JSON.parse(sessionStorage.getItem("recordsArr")) || [];
let difference = allArr.filter(element => !recordsArr.includes(element));
if (recordsArr.length === allArr.length) {
difference = [...allArr]
recordsArr = []
}
let random = Math.floor(Math.random() * difference.length)
for (let i = 0; i < difference.length; i++) {
if (i == random) {
recordsArr.push(difference[i])
break;
}
}
sessionStorage.setItem("recordsArr", JSON.stringify(recordsArr))
const dataList = (data) => {
this.queryCondition.orderField = data.orderField
this.queryCondition.orderAsc = data.orderAsc
}
dataList(allData[random])
})()
},
mounted() {
let $this = this;
// if(this.speciData.length==0){
// this.specialized();
// }
// if(this.domain.length==0){
// this.getdomain();
// }
let isBack = false;
if (window.history && window.history.pushState) {
history.pushState(null, null, document.URL); //这里有没有都无所谓,最好是有以防万一
isBack = true;
}
// console.log(isBack, 'isBack');
// Promise.all([apiType.items("org_domain"), apiCase.majorTypes()]).then(rs => {
// 90是测试环境155是生产环境
// console.log(this.caseType);
Promise.all([apiType.treeList(1,Number(this.caseType ?? 155),1), apiCase.majorTypes()]).then(rs => {
if (rs[0].code == 200) {
const {records} = rs[0].data
records.forEach(item => {
item.fielclass = false;
item.type = 'org_domain';
item.list = item.children ? item.children : []
if (Array.isArray(item.children)) {
item.list.forEach(sub => {
sub.list = sub.children ? sub.children : []
sub.fielclass = false
if (Array.isArray(sub.children)) {
sub.list.forEach(three => {
three.list = three.children ? three.children : []
three.fielclass = false
})
}
})
}
})
this.domain = records;
}
if (rs[1].status == 200) {
rs[1].result.forEach(item => {
item.fielclass = false;
item.type = 'major_type';
})
this.speciData = rs[1].result;
}
this.loadLocalFilters();
this.$nextTick(function () {
$this.initHeight = document.getElementById("searchBox").offsetHeight;
$this.closeSearch();
});
this.search();
});
if (!this.portalCase.readProtocol) {
this.protocolDialogVisible = true;
}
this.keyWord = this.$route.query.keyword;
if (this.keyWord != "") {
this.isSeach = true;
}
// 从消息多个案例跳转到本页面
this.refId = this.$route.query.recommendId;
if (this.refId) {
this.queryCondition.type = 'recommend'
}
this.loadTypeData();//加载分类
this.getAnkingData();
this.searchterm();
//打开排行榜下边的两个
this.getPopularity();
this.getPositive();
this.getQueryRecommendRank()
this.couresreso();
// window.addEventListener("scroll", this.handleScroll);
// 获取年
this.getYears();
this.allRequests()
},
beforeDestroy() {
// window.removeEventListener("scroll", this.handleScroll);
// console.log('销毁了');
},
methods: {
allRequests(){
window.addEventListener(
"scroll",
this.handleScroll
);
},
deleteFavorite(e){
this.search()
},
positiveReview(e){
this.favorableName = this.switch[e]
this.getPositive()
},
popularityReview(e){
this.popularityName = this.switch[e]
this.getPopularity()
},
handleType(msg){
// this.queryCondition.type = msg
},
handleOptionClick(treeItem){
this.treeList.forEach(one => {
one.checked = false;
if (one.id == treeItem.id) {
one.checked = true;
this.queryCondition.sysType2 = ''
this.queryCondition.sysType3 = ''
this.queryCondition.sysType1 = one.id
}
one.children.forEach(two => {
two.checked = false;
if (two.id == treeItem.id) {
two.checked = true
this.queryCondition.sysType1 = ''
this.queryCondition.sysType3 = ''
this.queryCondition.sysType2 = two.id
}
two.children.forEach(three => {
three.checked = false;
if (three.id == treeItem.id) {
three.checked = true
this.queryCondition.sysType1 = ''
this.queryCondition.sysType2 = ''
this.queryCondition.sysType3 = three.id
}
})
})
})
this.getCaseData()
},
// 移入
changeIndex(twoId) {
this.twoId = twoId
},
// 移除
leaveIndex() {
this.twoId = ''
},
// 加载分类
async loadTypeData() {
try {
const { result, status } = await apiType.tree(1);
if (status === 200) {
result.forEach(one => {
one.checked = false;
if(!one.children) one.children = []
one.children && one.children.forEach(two => {
two.checked = false;
if(!two.children) two.children = []
two.children && two.children.forEach(three => {
three.checked = false;
if(!three.children) three.children = []
})
})
})
this.treeList = result
}
} catch (error) {
// console.log(error);
}
},
getYears() {
apiCase.caseYears().then(res => {
if (res.status == 200) {
const { result } = res;
// console.log(result);
this.caseYears = result.map(year => ({
value: year,
label: year,
}))
}
})
},
// 查看率的时间
toCaseDetail(id, refId) {
if(!id){
this.$message.error('该案例已被删除')
return
}
apiCase.details(id,true).then(res=>{
if (res.status == 200) {
if (refId) {
apiCase.startReadTimer(refId)
}
this.$router.push({ path: '/case/detail', query: { id } });
}else{
this.$message.error(res.message);
}
})
},
toExcellent(item){
this.$router.push({path:'/case/excellent',query:{majorId:item.majorId,majorName:item.majorName,riseRankTime:item.riseRankTime.split(' ')[0]}})
},
tylClick() {
window.open("https://m.qingxuetang.com/x/?appId=qxtcorp306130");
},
cylClick() {
window.open("https://u.boe.com/pc/course?keyword=创新力专区");
},
showClass(flag) {
if (flag) {
this.showUClass = flag;
}
},
saveLocalFilters() {
let typeCodeList = [];
this.tagList.forEach(item => {
typeCodeList.push({
type: item.type,
code: item.code,
name: item.name
})
});
let typeCodeString = JSON.stringify(typeCodeList);
sessionStorage.setItem(this.localSessionKey, typeCodeString);
},
loadLocalFilters(t) {
let hasData = sessionStorage.getItem(this.localSessionKey);
if (hasData) {
let typeCodeList = JSON.parse(hasData);
typeCodeList.forEach(item => {
if (item.type == '0') {
this.keyWord = item.name;
} else if (item.type == 'major_type') {
this.speciData.some(m => {
if (m.code == item.code) {
m.fielclass = true;
return true;
}
return false;
})
} else if (item.type == 'org_domain') {
this.domain.some(m => {
if (m.code == item.code) {
m.fielclass = true;
return true;
}
return false;
})
}
})
}
},
majorall() {
this.queryCondition.majorType = '';
this.speciData.forEach(item => {
item.fielclass = false;
})
this.search(true);
},
// 组织领域全部
domainall(type) {
// console.log(this.selectList, 999);
if (type == 1) {
// 清空一下所有的
this.domain.forEach(item => {
item.fielclass = false;
item?.list?.forEach(sub => {
sub.fielclass = false;
sub?.list.forEach(subsub => {
subsub.fielclass = false;
})
})
})
this.twoList = [];
this.threeList = [];
} else if (type == 2) {
this.twoList.forEach(item => {
item.fielclass = false;
})
// 清空当前元素的三级的
this.domain.forEach(item => {
if (this.selectList.code == item.code) {
item?.list?.forEach(sub => {
sub?.list?.forEach(three => {
three.fielclass = false
});
})
}
})
this.threeList = [];
} else if (type == 3) {
this.threeList.forEach(item => {
item.fielclass = false;
})
}
this.search(true);
},
fieldmajor(item) {//专业分类
item.fielclass = !item.fielclass;
this.search(true);
},
//组织领域
fieldswich(item, level) {
item.fielclass = !item.fielclass;
// 清空下边的为false的时候
if (!item.fielclass) {
if (Array.isArray(item.list)) {
item.list.forEach(subItem => {
subItem.fielclass = false;
if (subItem.list) {
subItem.list.forEach(sub => {
sub.fielclass = false;
})
}
});
}
if (level == 1) {
this.twoList = [];
this.threeList = [];
}
if (level == 2) {
this.threeList = [];
}
this.search(true);
return;
}
if (level === 1) {
this.twoList = [];
this.threeList = [];
this.twoList.push(...item.list);
// 全选根据他判断清楚三级
this.selectList = item
} else if (level === 2) {
this.threeList = [];
this.threeList.push(...item.list);
} else if (level === 3) {
}
this.search(true);
},
banJump() {
if (this.resonimg.JumpUrl) {
window.open(this.resonimg.JumpUrl);
}
},
couresreso() {
let key = 'case';
apiPlace.detail(key).then(res => {
let lmj = JSON.parse(res.result.content)
this.resonimg = lmj[0]
})
},
specialized() {
let $this = this;
apiCase.majorTypes().then(res => {
if (res.status == 200) {
if (res.status == 200) {
res.result.forEach(item => {
item.fielclass = false;
item.type = 'major_type';
})
}
this.speciData = res.result;
this.loadLocalFilters(1);
//this.Profess=res.result;
this.$nextTick(function () {
$this.initHeight = document.getElementById("searchBox").offsetHeight;
$this.closeSearch();
});
}
})
},
// jumcasedet(item) {
// this.$router.push({ path: '/case/detail', query: { id: item.id } });
// },
// debounce(func, wait) {
// // 非立即执行
// let timeout;
// return function () {
// let context = this;
// let args = arguments;
// if (timeout) clearTimeout(timeout);
// timeout = setTimeout(() => {
// func.apply(context, args);
// }, wait);
// };
// },
//展示全部
displayAll(item) {
if (!item.isAll && item.summary && item.summary.length > 150) {
return item.summary.slice(0, 150) + "...";
}
return item.summary;
},
changeIsAll(item) {
item.isAll = !item.isAll;
},
closeSearch() {
this.showAll = !this.showAll;
var searchBoxHeght = document.getElementById("searchBox");
//console.log(this.initHeight,'this.initHeight');
if (this.initHeight > 100) {
this.searchwd = true;
}
//console.log(het,'het');
if (this.showAll) {
//searchBoxHeght.style.height = "auto";
searchBoxHeght.style.maxHeight = this.initHeight + "px";
} else {
searchBoxHeght.style.maxHeight = 70 + "px";
}
},
getAnkingData() {
apiCase.usernameList(5).then(res => {
if (res.status == 200) {
this.ankingList = res.result;
}
});
},
// getPopularity() {
// apiCase.queryPraises(5).then(res => {
// if (res.status == 200) {
// this.Popularity = res.result;
// // console.log(this.Popularity)
// }
// });
// },
// getPositive() {
// apiCase.queryComments(5).then(res => {
// if (res.status == 200) {
// this.Positive = res.result;
// console.log(res);
// }
// });
// },
// 无用
async getdomain() {
let key = "org_domain";
await apiDict.items("org_domain").then(res => {
if (res.status == 200) {
res.result.forEach(item => {
item.fielclass = false;
item.type = key;
})
this.domain = res.result;
this.loadLocalFilters(2);
// if(res.result.length > 0) {
// this.orgDomainLevel(res.result)
// }
}
});
},
//删除,不再使用
// getProfess() {
// let key = "major_type";
// apiDict.items(key).then(res => {
// if (res.status == 200) {
// this.Profess = res.result;
// }
// });
// },
// orgDomainLevel(organization) {
// this.orgData = [];
// organization.forEach(item=>{
// this.orgData.push(item);
// if(item.list && item.list != "" && item.list.length > 0){
// item.list.forEach(it =>{
// this.orgData.push(it);
// })
// }
// })
// },
orgDomainTranslate(code) { // 组织领域翻译
if (code == '') {
return
}
//console.log(code,'code')
//console.log(this.domain,'this.domain')
let name = '';
let data = this.domain.find(item => {
return item.code == code;
});
if (data) {
name = data.name;
}
return name;
},
majorTypeTranslate(code) { // 专业分类翻译
let name = '';
let data = this.speciData.find(item => item.code == code);
if (data) {
name = data.name;
}
return name;
},
emitInput(val) {
this.keyWord = val;
this.isSeach = true;
this.search(true);
},
searchTime(){
this.pubTimeNum++
if(this.pubTimeNum>2){
this.pubTimeNum = 0;
}
if(this.pubTimeNum != 0){
this.pageViewNum = 0;
}
this.queryCondition.orderField = 'sysCreateTime'
this.queryCondition.orderAsc = this.pubTimeNum == 2 ? true : this.pubTimeNum == 1 ? false : ''
this.search(true);
},
searchPageView(){
this.pageViewNum++
if(this.pageViewNum>2){
this.pageViewNum = 0;
}
if(this.pageViewNum != 0){
this.pubTimeNum = 0;
}
this.queryCondition.orderField = 'views'
this.queryCondition.orderAsc = this.pageViewNum == 2 ? true : this.pageViewNum == 1 ? false : ''
this.search(true);
},
yearsChange(e){
this.search(true)
},
searchexcellent(num) {
this.isTimeData = false
this.isTime = false
this.caseTimeShow = true
this.pubTimeNum = 0
this.pageViewNum = 0
this.queryCondition.orderField = ''
this.queryCondition.orderAsc = ''
// if(this.queryCondition.type==num){
// this.queryCondition.excellent =false;
// this.queryCondition.type = '';
// this.search(true)
// return
// }
this.queryCondition.excellent =false;
this.queryCondition.type = num;
this.years = []
if(num == 'excellent'){
this.queryCondition.excellent =true;
this.queryCondition.type = num;
}
if(num == 'all' || num == 'recommend'){
this.pubTimeNum = 1
this.queryCondition.orderField = 'sysCreateTime'
this.queryCondition.orderAsc = false
}
if(num == 'time'){
this.isTime = true
this.caseTimeShow = false
this.isTimeData = true
}
if(num == 'collect'){
this.caseTimeShow = false
}
if (this.timeoutId) {
clearTimeout(this.timeoutId);
this.timeoutId = null;
}
this.search(true);
// this.getCaseData();
},
// searchData(num) {
// // if(num == 1){
// // this.queryCondition.excellent = !this.queryCondition.excellent;
// // this.getCaseData();
// // }
// this.queryCondition.pageIndex = 1;
// this.queryCondition.type = num;
// this.getCaseData();
// },
// 滚动请求
handleScroll() {
let innerw = document.querySelector("#fixd-box");
// let innerHeight = document.querySelector("#case-list-content")
// .clientHeight;
// let outerHeight = document.documentElement.clientHeight;
let outerWidth = innerw.clientWidth;
let scrollTop = document.documentElement.scrollTop;
// if (outerHeight + scrollTop + 350 >= innerHeight) {
// if (this.moreState == 1) {
// this.debounce(this.loadMore(), 5000);
// }
// }
if (scrollTop > 260) {
document.querySelector("#fixd-box").style.cssText =
"position: fixed;top: 10px;width:" + outerWidth + "px";
} else {
document.querySelector("#fixd-box").style.cssText = "position: static";
}
},
useHotword(item) {
this.keyWord = item.keyword;
this.search();
},
searchterm() {
apiSearchterm.list(5, 3).then(res => {
if (res.status === 200) {
this.searchRecords = res.result;
}
});
},
// 监听滚动发请求
// loadMore() {
// this.queryCondition.pageIndex += 1;
// this.getCaseData();
// },
protocolCheck(obj) {
this.protocolConfirmButton = !obj;
},
protocolConfirm() {
this.protocolDialogVisible = false;
this.$store.dispatch("portal/SetReadProtocol", true);
},
// handleSizeChange(item) {
// this.queryCondition.pageSize = item;
// },
// handleCurrentChange(item) {
// this.queryCondition.pageIndex = item;
// },
getAllFielclass() { //获取全部选中的标签
let newlist = JSON.parse(JSON.stringify(this.domain))
return newlist.filter(one => {
one.list = one.list.filter(two => {
// if (!two.fielclass) {
// one.list = []
// }
two.list = two.list.filter(three => {
// if (!three.fielclass) {
// two.list = []
// }
return three.fielclass;
})
return two.fielclass;
});
return one.fielclass
})
},
// 改变分页
currentChange(val) {
this.caseList.showPagCount = 0
this.queryCondition.pageIndex = val
this.search()
},
// 查询
search(num = false) {
// 记录查询的数据
if (this.keyWord) {
apiSearchterm.save({ keyword: this.keyWord, type: 3 });
}
if (!this.isFind) {
this.isFind = true;
}
if (num) {
this.caseList.showPagCount = 0
this.queryCondition.pageIndex = 1;
}
if (this.keyWord != this.queryCondition.keyWord) {
this.queryCondition.keyWord = this.keyWord;
}
if (this.queryCondition.majorType == 0) {
this.queryCondition.majorType = ''
}
this.getCaseData();
},
async getCaseData() {
this.saveLocalFilters();//存储本地刷新有记录
let majorTypeList = [];
let allFielclass = JSON.parse(JSON.stringify(this.getAllFielclass()));
// 获取树状id
this.queryCondition.orgDomainDtos = allFielclass.map(item => {
item.list = item.list.map(two => {
two.list = two.list.map(three => {
return {
parent: three.code
}
})
return {
parent: two.code,
children: two.list || []
}
})
return {
parent: item.code,
children: item.list || []
}
})
// console.log(JSON.stringify(this.queryCondition.orgDomainDtos));
// 专业分类的id
this.tagList.forEach(tag => {
if (tag.type == '0') {
this.queryCondition.keyWord = tag.name;
} else if (tag.type == 'major_type') {
majorTypeList.push(tag.code);
}
});
this.queryCondition.majorType = majorTypeList.join(',');
//设置年
this.queryCondition.years = this.years.map(item => parseInt(item))
// 设置最佳案例为true或是false
if (this.queryCondition.type == 'excellent') {
this.queryCondition.excellent = true;
} else {
this.queryCondition.excellent = false;
}
//this.getTags();
// if (this.queryCondition.pageIndex == 1) {
// this.caseList.list = [];
// }
this.moreState = 2;
// this.queryCondition.pubTimeNum = this.pubTimeNum
// this.queryCondition.pageViewNum = this.pageViewNum
this.numIsFalse = true
if(this.queryCondition.type == 'collect'){
const params = {
pageIndex:this.queryCondition.pageIndex,
pageSize:5,
orderField:this.queryCondition.orderField,
orderAsc:this.queryCondition.orderAsc
}
await apiCase.queryFavoriteCaseOfIndex(params).then(res=>{
if(res.status == 200){
if(res.result.list.length > 0){
this.isSeach = false;
res.result.list.forEach(item => {
item.majorType = item.majorType ? item.majorType.split(",") : [];
item.isAll = false;
item.authorInfo = {
aid: "",
name: "",
orgInfo: "",
avatar: "",
sex: null
};
});
res.result.list.forEach(item=>{
item.viewRankTags = item.viewRankTags?.slice(0,2)||[]
})
this.caseList.list = res.result.list
this.getCaseUserData(res.result.list);
// 给所有的赋值
this.caseList.count = res.result.count;
this.caseList.showPagCount = res.result.count;
this.timeoutId = setTimeout(() => {
this.numIsFalse = false
}, 3000);
}
}
})
return
}
if(this.queryCondition.type=='time'){
// const data = {
// pageIndex: this.queryCondition.pageIndex,
// pageSize: 5,
// contentType: 3,
// aid: this.userInfo.aid||'965342027497607168',
// hidden: '',
// eventKey: 'readCase'
// }
// await apiCase.queryViewRecord(data).then(res=>{
// if(res.status == 200){
// if(res.result.list.length > 0){
// let ids = res.result.list.map(item=>item.contentId);
// const noReapetIds = [...new Set(ids)];
// this.articlePageList = res.result.list;
// this.getCase(noReapetIds,res.result.list)
// this.caseList.count = res.result.count;
// this.caseList.showPagCount = res.result.count;
// }
// }
// })
const params = {
pageIndex: this.queryCondition.pageIndex,
}
await apiCase.browsingHistory(params).then(res=>{
if(res.status == 200){
if(res.result.list.length > 0){
this.isSeach = false;
res.result.list.forEach(item => {
item.majorType = item.majorType ? item.majorType.split(",") : [];
item.isAll = false;
item.authorInfo = {
aid: "",
name: "",
orgInfo: "",
avatar: "",
sex: null
};
});
res.result.list.forEach(item=>{
item.viewRankTags = item.viewRankTags?.slice(0,2)||[]
})
this.caseList.list = res.result.list
this.getCaseUserData(res.result.list);
this.caseList.count = res.result.count;
this.caseList.showPagCount = res.result.count;
this.timeoutId = setTimeout(() => {
this.numIsFalse = false
}, 3000);
}
}
})
return
}
await apiCase.queryListV2(this.queryCondition).then((res) => {
if (res.status == 200) {
if (res.result.list.length > 0) {
this.isSeach = false;
res.result.list.forEach(item => {
item.majorType = item.majorType ? item.majorType.split(",") : [];
item.isAll = false;
item.authorInfo = {
aid: "",
name: "",
orgInfo: "",
avatar: "",
sex: null
};
});
// this.caseList.list.push(...res.result.list);
this.moreState = 1;
if (res.result.count === res.result.list.length) {
this.moreState = 3;
}
} else {
this.moreState = 3;
}
if(res.result.list.length ===0){
this.moreState = 3;
this.isSeach = false;
}
console.log(res?.result?.list ,'有没有数据1');
res.result.list.forEach(item=>{
item.viewRankTags = item.viewRankTags?.slice(0,2)||[]
})
console.log(res?.result?.list ,'有没有数据2');
this.caseList.list = res.result.list
this.getCaseUserData(res.result.list);
// 给所有的赋值
this.caseList.count = res.result.count;
this.caseList.showPagCount = res.result.count;
this.timeoutId = setTimeout(() => {
this.numIsFalse = false
}, 3000);
} else {
this.$message.error(res.message);
}
}).catch(err => {
// console.log(err);
this.timeoutId = setTimeout(() => {
this.numIsFalse = false
}, 3000);
});
// await apiCase.queryList(this.queryCondition).then(res => {
// if (res.status == 200) {
// if (res.result.list.length > 0) {
// this.isSeach = false;
// res.result.list.forEach(item => {
// item.majorType = item.majorType.split(",");
// item.isAll = false;
// item.authorInfo = {
// aid: "",
// name: "",
// orgInfo: "",
// avatar: "",
// sex: null
// };
// });
// this.caseList.list.push(...res.result.list);
// this.caseList.count = res.result.count;
// this.getCaseUserData(res.result.list);
// this.moreState = 1;
// if (res.result.count === res.result.list.length) {
// this.moreState = 3;
// }
// } else {
// this.moreState = 3;
// }
// } else {
// this.$message.error(res.message);
// }
// })
// .catch(err => {
// console.log(err);
// });
},
getCase(ids,list){
apiCase.ids(ids).then(res=>{
if(res.status == 200) {
this.isSeach = false;
const listData = []
list.forEach((item, index) => {
res.result.some(con => {
if (con.id == item.contentId) {
item.info = con;
con.eventTime = item.eventTime
listData.push(con)
if(typeof item.info.majorType == 'string') {
item.info.majorType = item.info.majorType.split(',');
}
return true;
} else {
return false;
}
});
});
listData.forEach(item=>{
item.info = {};
item.deleted=false;
item.authorInfo = {
aid: "",
name: "",
orgInfo: "",
avatar: "",
sex: null
}
item.isAll = false;
})
setTimeout(() => {
this.numIsFalse = false
}, 3000);
this.getCaseUserData(listData);
this.caseList.list = listData
console.log(listData,'this.caseList.list')
}
})
},
// getTags() {
// this.searchTags = [];
// let caseData = deepClone(this.queryCondition);
// for (let i in caseData) {
// if (
// caseData[i] !== "" &&
// i !== "pageIndex" &&
// i !== "pageSize" &&
// i !== "orderField" &&
// i !== "orderAsc" &&
// i !== "isTop" &&
// caseData[i] !== null &&
// caseData[i] !== undefined
// ) {
// if (caseData[i] == "0") {
// return;
// }
// if(i == 'majorType'){
// this.searchTags.push({ type:'majorType',value:this.majorTypeTranslate(caseData[i])})
// }
// if(i == 'orgDomain'){
// this.searchTags.push({type:'orgDomain',value:this.orgDomainTranslate(caseData[i])})
// }
// if(i == 'keyWord'){
// this.searchTags.push({type:'keyWord',value:caseData[i]})
// }
// }
// }
// },
// 清楚数组的元素
// clear(tag) {
// if (tag.type == 'org_domain') {
// this.twoList = [];
// this.threeList = [];
// }
// if (tag.type == 1) {
// console.log(111);
// this.threeList = [];
// }
// },
tagsClose(tag, index) {
// 课程分类
if(tag.hasOwnProperty('checked')){
tag.checked = false;
this.queryCondition.sysType1 =''
this.queryCondition.sysType2 =''
this.queryCondition.sysType3 =''
}else{
// 案例分类
tag.fielclass = false;
}
if (tag.type == 0) {
this.keyWord = '';
}
// if(tag.type=='org_domain'){
// console.log(tag)
// this.domain.some((m,idx)=>{
// if(m.code=tag.code){
// m.fielclass=false;
// return true;
// }
// return false;
// })
// }else if(tag.type=='major_type'){
// this.speciData.some((m,idx)=>{
// if(m.code=tag.code){
// m.fielclass=false;
// return true;
// }
// return false;
// })
// }else if(tag.type=='keyWord'){
// this.queryCondition.keyWord = "";
// this.keyWord = "";
// }
//this.fieldData.splice(index,1);
//this.getCaseData();
this.search(true);
},
getCaseUserData(caseList) {
let ids = caseList.map((item, index) => {
return item.authorId;
});
//不能为空
if (!ids.length) return
const noReapetIds = [...new Set(ids)];
apiUser.getByIds(noReapetIds).then(res => {
if (res.status == 200) {
caseList.forEach((item, index) => {
res.result.some(author => {
if (author.aid == item.authorId) {
item.authorInfo = author;
author.orgInfo = cutFullName(author.orgInfo, 1);
return true;
} else {
return false;
}
});
});
} else {
this.$message.error(res.message);
}
});
},
getPopularity() {
// apiCase.queryPraises(5).then(res => {
// if (res.status == 200) {
// this.Popularity = res.result.slice(0,3);
// // if (res.result.length < 5) {
// // for (let i = 0; i = (5 - res.result.length); i++) {
// // this.Popularity.push({
// // authorName: '',
// // count: 1,
// // id: '',
// // title: '',
// // })
// // }
// // }
// }
// });
apiCase.queryPraisesNew(3,this.popularityName == '季度' ? 1 : 2).then(res => {
if(res.status == 200) {
this.Popularity = res.result
}
})
},
getPositive() {
// apiCase.queryComments(5).then(res => {
// if (res.status == 200) {
// this.Positive = res.result.slice(0,3);
// // if (res.result.length < 5) {
// // for (let i = 0; i = (5 - res.result.length); i++) {
// // this.Positive.push({
// // authorName: '',
// // count: 1,
// // id: '',
// // title: '',
// // })
// // }
// // }
// }
// });
apiCase.queryCommentsNew(3,this.favorableName == '季度' ? 3 : 4).then(res => {
if(res.status == 200) {
this.Positive = res.result
}
})
},
getQueryRecommendRank(){
apiCase.queryRecommendRank(3).then(res => {
if(res.status == 200) {
this.recommendRank = res.result
}
})
},
jumpRouter(item) {
// console.log(item)
this.$router.push(`/case/detail?id=${item.id}`);
}
}
};
</script>
<style scoped lang="scss">
.el-dropdown-link {
cursor: pointer;
font-weight: 400;
font-size: 14px;
color: rgba(51,51,51,0.9);
}
.el-icon--right{
margin-left: 14px !important;
}
.the_charts{
position: relative;
display: flex;
justify-content: center;
align-items: center;
margin-bottom: 10px;
font-size: 17px;
max-width: 400px;
min-width: 260px;
height: 47px;
background: #DDEDFF;
border-radius: 8px;
.text{
font-size: 17px;
color: #387DF7;
}
.icon{
position: absolute;
font-size: 17px;
color: #387DF7;
right: 25px;
top: 50%;
transform: translateY(-50%);
}
}
// 课程分类
.course-title-style {
position: relative;
height: 100px;
background-image: url('../../../../public/images/courseBg.png');
background-repeat: no-repeat;
background-size: 100% 100%;
display: flex;
align-items: center;
.imgTilte {
& div:first-child {
padding-left: 40px;
font-size: 30px;
color: #FFFFFF;
}
& div:last-child {
padding-left: 40px;
font-size: 20px;
color: #FFFFFF;
opacity: .5;
font-family: ArialMT !important;
}
}
}
// 三级列表
.course-list {
background-color: #fff;
.course-one {
position: relative;
.course-one-content {
cursor: pointer;
line-height: 38px;
height: 38px;
padding-left: 40px;
background: linear-gradient(270deg, #F0F7FF 0%, #DDEDFF 100%);
}
// 二级的高亮
.courseTwoActive {
color: #387DF7;
border-image: linear-gradient(90deg, rgba(47, 101, 236, 1), rgba(228, 236, 255, 1)) 1 1 !important;
}
.course-two {
position: relative;
border-bottom: 1px solid;
border-image: linear-gradient(333deg, rgba(243, 243, 243, 1), rgba(227, 227, 227, 1)) 1 1;
.course-two-content {
cursor: pointer;
height: 38px;
line-height: 38px;
font-size: 16px;
padding-left: 40px;
}
}
.popover {
background: linear-gradient(180deg, rgba(78, 166, 255, 0.2) 0%, rgba(78, 166, 255, 0) 100%);
}
}
}
.u-class {
::v-deep .el-dialog {
border-radius: 15px;
.el-dialog__headerbtn .el-dialog__close {
color: white;
position: absolute;
z-index: 99;
right: 15px;
}
}
::v-deep .el-dialog__body {
padding: 0px;
}
.ClassBoxContent {
width: 100%;
height: 396px;
// background: red;
border-radius: 15px;
.ContentBox {
width: 100%;
height: 100%;
position: absolute;
z-index: 9;
display: flex;
.left,
.right {
height: calc(100% - 30px);
}
.left {
padding-left: 30px;
width: 48%;
margin-top: -32px;
.title {
width: 200px;
height: 59px;
line-height: 59px;
text-align: center;
margin-left: -8px;
font-size: 38px;
color: white;
margin-top: 42.97px;
padding-top: 5px;
text-shadow: 0 6px 3px rgba(96, 85, 243, 0.4);
}
.jy {
color: white;
font-size: 20px;
margin-top: 87.53px;
font-weight: 400;
}
.msg {
margin-top: 5px;
color: rgba(255, 255, 255, 0.85);
width: 326px;
text-align: justify;
line-height: 20px;
}
.bottom {
width: 100px;
height: 1px;
background: rgba(255, 255, 255, 0.85);
margin-top: 40px;
}
}
.right {
// padding-left: 10px;
width: 50%;
.tyl {
cursor: pointer;
width: calc(100% - 20px);
background: rgba(255, 255, 255, 0.95);
box-shadow: 0px 2px 12px 0px rgba(0, 0, 0, 0.1);
border-radius: 4px;
height: 160px;
margin-top: 163px;
.tyl_title {
width: 100%;
padding-left: 20px;
padding-top: 20px;
.tyl_title_img {
width: 18px;
height: 18px;
}
.tyl_title_msg {
font-size: 20px;
margin-left: 10px;
color: #333333;
font-weight: 600;
}
}
.tyl_jy {
margin-top: 6.5px;
font-size: 14px;
font-weight: 600;
padding-left: 20px;
color: #333333;
}
.tyl_msg {
width: 350.36px;
margin-top: 13px;
margin-left: 20px;
font-size: 14px;
color: #666666;
font-weight: 400;
letter-spacing: 0;
text-align: justify;
}
}
.tyl:hover {
border: 0.96px solid rgba(140, 105, 242, 1);
box-shadow: 7px 5px 6px 0px rgba(76, 31, 221, 0.3);
}
.text_msg{
margin: 43px 0 0 222px;
font-size: 14px;
color: #000;
}
.cyl {
cursor: pointer;
width: calc(100% - 20px);
background: rgba(255, 255, 255, 0.95);
box-shadow: 0px 2px 12px 0px rgba(0, 0, 0, 0.1);
border-radius: 4px;
height: 180px;
margin-top: 10px;
.tyl_title {
width: 100%;
padding-left: 20px;
padding-top: 20px;
.tyl_title_img {
width: 18px;
height: 18px;
}
.tyl_title_msg {
font-size: 20px;
margin-left: 10px;
color: #333333;
font-weight: 600;
}
}
.tyl_jy {
margin-top: 6.5px;
font-size: 14px;
font-weight: 600;
padding-left: 20px;
color: #333333;
}
.tyl_msg {
width: 350.36px;
margin-top: 13px;
margin-left: 20px;
font-size: 14px;
color: #666666;
font-weight: 400;
letter-spacing: 0;
text-align: justify;
}
}
.cyl:hover {
border: 0.96px solid rgba(140, 105, 242, 1);
box-shadow: 7px 5px 6px 0px rgba(76, 31, 221, 0.24);
}
}
}
.img {
width: 835px;
height: 428px;
margin-left: -1px;
margin-top: -1px;
position: absolute;
top: 0px;
}
}
}
.fieldbox {
display: flex;
white-space: nowrap;
flex-wrap: wrap;
div {
padding: 0 15px;
display: inline-block;
font-size: 14px;
line-height: 25px;
color: #3d3d3d;
font-weight: 500;
}
.fieldactive {
color: #387DF7;
}
}
.field {
display: flex;
white-space: nowrap;
// flex-wrap: wrap;
div {
padding: 0 15px;
// display: inline-block;
font-size: 14px;
line-height: 25px;
color: #3d3d3d;
font-weight: 500;
}
.fieldactive {
color: #387DF7;
}
}
::v-deep .el-checkbox-button.is-checked .el-checkbox-button__inner {
box-shadow: none !important;
}
::v-deep .el-checkbox-button.is-checked .el-checkbox-button__inner {
color: #387df7 !important;
background-color: #fff !important;
}
::v-deep .el-checkbox-button--mini .el-checkbox-button__inner {
font-size: 14px;
}
::v-deep .el-checkbox-button .el-checkbox-button__inner {
border: none !important;
}
.notcoures {
text-align: center;
img {
width: 360px;
height: 226px;
}
h5 {
font-size: 14px;
color: #333333;
font-weight: 400;
}
}
.orgaicon {
width: 22px;
height: 22px;
vertical-align: middle;
margin-right: 8px;
img {
width: 100%;
height: 100%;
}
}
.course-resources {
margin-top: 26px;
img {
width: 100%;
height: 100%;
border-radius: 8px;
}
}
.case-banner {
height: 240px;
background: url('../../../../public/images/case-banner.png');
}
::v-deep .el-checkbox {
.el-checkbox__input {
.el-checkbox__inner {
border: 1px solid #3e3c3c;
}
}
}
::v-deep .el-radio-button {
margin-right: -5px;
}
::v-deep .el-button {
border-radius: 0px;
}
.case-titdiv {
line-height: 30px;
display: flex;
.case-tittext {
font-size: 18px;
font-weight: 600;
color: #333333;
max-width: 67%;
}
.case-activeText {
line-height: 27.5px;
.comWords {
color: white;
font-size: 12px;
border-radius: 2px;
padding: 2px 4px;
margin-left: 15px;
}
}
}
::v-deep .interact-bar .interact-bar-btns .interact-bar-btn {
margin-left: 0;
margin-right: 20px;
}
.clearfix:after {
content: "020";
display: block;
height: 0;
clear: both;
visibility: hidden;
}
.keyword-text {
div {
padding: 0px 8px;
margin-top: 5px;
float: left;
line-height: 24px;
font-size: 12px;
border-radius: 2px;
margin-right: 8px;
color: #2C68FF;
height: 24px;
background: rgba(44, 104, 255, 0.06);
}
}
.searBox {
text-align: center;
margin: 0px auto 0 auto;
}
#searchBox {
overflow: hidden;
}
::v-deep .title-line-ellipsis {
// width: 100%;
display: -webkit-box;
overflow: hidden;
text-overflow: ellipsis;
-webkit-box-orient: vertical;
-webkit-line-clamp: 1;
box-sizing: border-box;
word-break: break-all;
}
::v-deep .el-card__body {
padding: 0;
}
::v-deep .bacolor:nth-child(odd) {
background-color: #f6f6f6;
padding: 0 5px;
}
::v-deep .bacolor:nth-child(even) {
background-color: #fff;
padding: 0 5px;
}
::v-deep .el-card {
border: none;
border-radius: 0px;
// border: 1px solid #ebeef5;
}
::v-deep .el-radio-button__inner,
.el-radio-group {
vertical-align: top;
}
::v-deep .el-radio-button__inner {
background: none;
}
::v-deep .el-radio-button:first-child .el-radio-button__inner {
border-left: none;
// border-radius: 4px 0 0 4px;
//box-shadow: none!important;
}
::v-deep.item-title {
margin: 15px 10px 10px 0;
font-size: 16px !important;
font-weight: 400;
color: #6B7C85;
line-height: 25px;
}
.item-line {
padding-left: 2px;
height: 20px;
// background: #ddd;
}
.portal-content {
display: flex;
justify-content: space-between;
}
.searchbar {
background-color: #ffffff;
}
.fixed {
position: fixed;
top: 0px;
background-color: #f0f0f0;
z-index: 999;
height: 50px;
}
.protocol {
.protocol-title {
font-size: 20px;
font-weight: 600;
text-align: center;
margin-bottom: 25px;
}
.protocol-content {
font-size: 14px;
line-height: 25px;
}
}
.left-div {
border: none;
.quyer-tag {
// margin-left: 10px;
.order-class {
padding: 0px 12px;
color: #6E7B84;
line-height: 32px;
border-radius: 0px;
.el-icon--right {
margin-left: 0;
}
}
.actice {
border: 0px;
background: #387DF7;
color: #fff;
font-size: 14px;
border-radius: 4px;
}
}
/* 分页div */
.pagination-div {
text-align: center;
padding: 10px 0;
.pag-text {}
}
.order-div {
padding: 34px 40px 20px 40px;
background-color: #fff;
display: flex;
align-items: center;
// margin-bottom: ;
.pub_time{
display: flex;
margin-right: 25px;
align-items: center;
cursor: pointer;
.text{
font-size: 14px;
color: #333333;
}
.triangle{
margin-left: 5px;
.up-triangle{
width: 0;
height: 0;
border-left: 4px solid transparent;
border-right: 4px solid transparent;
border-bottom: 6px solid #DCDFE6;
margin-bottom: 2px;
}
.down-triangle{
width: 0;
height: 0;
border-left: 4px solid transparent;
border-right: 4px solid transparent;
border-top: 6px solid #DCDFE6;
}
}
}
.time{
position: relative;
display: flex;
justify-content: center;
align-items: center;
margin-left: 15px;
width: 116px;
height: 38px;
border-radius: 4px;
// background: #04243C;
&:hover{
// background: #387DF7;
border: 1px solid #387DF7;
.text{
// color: #fff;
}
// .png{
// background: url('../../../assets/images/case/wighttime.png') no-repeat;
// }
}
.png{
width: 18px;
height: 18px;
background: url('../../../../public/images/browse.png') no-repeat;
background-size: 100%;
margin-right: 9px;
}
.text{
font-size: 14px;
color: #333333;
}
}
.time::before {
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: #04243C;
opacity: 0.05;
z-index: 1;
border-radius: 4px;
}
.time_active{
display: flex;
justify-content: center;
align-items: center;
margin-left: 15px;
width: 116px;
height: 38px;
background: #387DF7;
border-radius: 4px;
.png{
width: 20px;
height: 20px;
background: url('../../../assets/images/case/wighttime.png') no-repeat;
background-size: 100%;
margin-right: 9px;
}
.text{
font-size: 14px;
color: #fff;
}
}
.collect{
position: relative;
display: flex;
justify-content: center;
align-items: center;
margin-left: 15px;
width: 116px;
height: 38px;
border-radius: 4px;
// background: #04243C;
&:hover{
// background: #387DF7;
border: 1px solid #387DF7;
.text{
// color: #fff;
}
// .png{
// background: url('../../../assets/images/case/wight.png') no-repeat;
// }
}
.png{
width: 18px;
height: 18px;
background: url('../../../../public/images/collect.png') no-repeat;
background-size: 100%;
margin-right: 9px;
}
.text{
font-size: 14px;
color: #333333;
}
}
.collect::before {
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: #04243C;
opacity: 0.05;
z-index: 1;
border-radius: 4px;
}
.collect_active{
display: flex;
justify-content: center;
align-items: center;
margin-left: 15px;
width: 116px;
height: 38px;
background: #387DF7;
border-radius: 4px;
.png{
width: 18px;
height: 18px;
background: url('../../../assets/images/case/wight.png') no-repeat;
background-size: 100%;
margin-right: 9px;
}
.text{
font-size: 14px;
color: #fff;
}
}
}
.back_num{
background: #FFFFFF;
display: flex;
justify-content: center;
padding: 0 40px;
.search_div_num{
display: flex;
justify-content: center;
align-items: center;
width: 100%;
height: 38px;
background: #DDEDFF;
border-radius: 4px;
border: 1px solid #387DF7;
color: #387DF7;
}
}
.data-content {
background-color: #fff;
padding: 5px 50px;
::v-deep .interact-bar-btns {
.interact-bar-btn {
text-align: right;
min-width: 78px !important;
margin-right: 0;
}
}
.case-list:last-child {
border-bottom: none;
}
.case-list {
border-bottom: 1px solid rgba(153, 153, 153, .2);
margin-top: 10px;
margin-bottom: 25px;
padding-left: 5px;
padding-right: 5px;
}
.case-image {
width: 230px;
height: 170px;
float: left;
border: 1px solid #eee;
}
.case-info {
.case-info-cont {
.case_text{
font-size: 14px;
font-weight: 400;
color: #666666;
margin-bottom: 8px;
}
.case-info-title {
font-size: 15px;
color: #333;
font-weight: 600;
height: 30px;
.case-info-date {
flex: 1;
text-align: right;
font-weight: normal;
// font-size: 12px;
// height: 30px;
// font-weight: 200;
// color: #8590a6;
i {
margin-right: 5px;
}
}
}
.case-info-summary {
margin-top: 16px;
cursor: pointer;
margin-bottom: 5px;
word-break: break-all;
line-height: 24px;
font-size: 14px;
color: #333330;
font-weight: 400;
}
.case-info-tools {
height: 30px;
.case-info-tools-auth {
float: left;
font-size: 13px;
color: #999999;
img {
margin-right: 10px;
width: 30px;
border: 1px solid #eee;
border-radius: 50%;
vertical-align: middle;
}
}
.case-info-tools-btns {
float: right;
.case-info-tools-btn {
margin: 0 0 0 15px;
}
}
}
}
}
}
.search-div {
background: #fff;
padding: 30px 40px;
.search-keyword {
line-height: 30px;
.tip {
font-size: 12px;
color: #999999;
// margin-bottom: 20px;
}
}
.search-item {
cursor: pointer;
// margin-bottom: 10px;
// padding: 10px 0;
}
// .search-item:not(:last-child) {
// // border-bottom: 1px solid #dfdfdf;
// }
}
.search-div-collapse {
display: block;
}
.search-div-expand {
display: none;
}
.search-div-more {
text-align: center;
}
}
</style>