Compare commits

...

3 Commits

  1. 14
      src/api/knowledge/types.ts
  2. 21
      src/store/modules/knowledge.ts
  3. 2
      src/views/knowledge/knowledge/components/KnowledgeContent.vue
  4. 11
      src/views/knowledge/knowledge/components/Navili.vue
  5. 137
      src/views/knowledge/knowledge/components/archivestype.vue
  6. 129
      src/views/knowledge/knowledge/index.vue

14
src/api/knowledge/types.ts

@ -24,7 +24,8 @@ export interface UserDetail {
//导航栏查询 //导航栏查询
export interface NaviQuery { export interface NaviQuery {
atParentId: string; atParentId: string;
userkey: String,
usertoken: String,
} }
//导航栏信息 //导航栏信息
export interface Navi{ export interface Navi{
@ -42,7 +43,8 @@ export interface Navi{
atUid:string; atUid:string;
//排序 //排序
atSort:string; atSort:string;
//该导航栏中有无card
hasCard:Boolean;
} }
export type cardList = PageResult<Graphicform[]> export type cardList = PageResult<Graphicform[]>
//卡片 //卡片
@ -156,4 +158,10 @@ interface PageResultJava<T> {
//当前页 //当前页
pageNum:number; pageNum:number;
} }
//标题下有无内容
export interface ShowTitle {
atIdAndGParentSun: string;//导航栏id
hasCard:Boolean;//是否展示
}

21
src/store/modules/knowledge.ts

@ -0,0 +1,21 @@
import { defineStore } from 'pinia'
import { ShowTitle } from '@/api/knowledge/types';
// 第一个参数是应用程序中 store 的唯一 id
export const useKnowledgeStore = defineStore('knowledge', {
state: () => {
//const knowledgeTitlesShow = ref<Array<ShowTitle>>([]);
const knowledgeTitlesShow = ref<ShowTitle[]>([]);
return {knowledgeTitlesShow};
},
getters: {
// 自动将返回类型推断为数字
getArray(state) {
return state
},
},
})

2
src/views/knowledge/knowledge/components/KnowledgeContent.vue

@ -43,7 +43,7 @@ watch(() => props.isShow, () => {
} else { } else {
pdfIframeShow.value = true pdfIframeShow.value = true
} }
console.log(pdfIframeShow.value) //console.log(pdfIframeShow.value)
} }
}) })
onMounted(() => { onMounted(() => {

11
src/views/knowledge/knowledge/components/Navili.vue

@ -1,5 +1,6 @@
<script lang='ts' setup> <script lang='ts' setup>
import { scrollTo } from '@/api/knowledge/scroll' import { scrollTo } from '@/api/knowledge/scroll'
const showli = ref(true);
const props = defineProps({ const props = defineProps({
oneli: { oneli: {
type: Object, type: Object,
@ -13,12 +14,18 @@ const props = defineProps({
active: { active: {
type: Number, type: Number,
default: 0 default: 0
},
knowledgeStore: {
type: Object,
},
fatherisReady1: {
type: Number,
} }
}) })
const liIndex = props.index + 1;
</script> </script>
<template> <template>
<li :class="{ active: active === index }" @click="scrollTo(index)"> <li :class="{ active: active === index }" @click="scrollTo(index)" v-if="showli">
{{ oneli?.atTitle }} {{ oneli?.atTitle }}
</li> </li>
</template> </template>

137
src/views/knowledge/knowledge/components/archivestype.vue

@ -1,18 +1,21 @@
<script lang='ts' setup> <script lang='ts' setup>
import { useUserStore } from "@/store/modules/user" import { useUserStore } from "@/store/modules/user"
import { ref, watch } from 'vue' import { ref, watch } from 'vue'
import { getUserDetail, getZxxyNavis, getTuijian } from '@/api/knowledge/index' import { getTuijian } from '@/api/knowledge/index'
import KnowledgeContent from '@/views/knowledge/knowledge/components/KnowledgeContent.vue' import KnowledgeContent from '@/views/knowledge/knowledge/components/KnowledgeContent.vue'
import { UserQuery, UserDetail, NaviQuery, Navi, Graphicform, PageParam } from '@/api/knowledge/types' import { UserDetail, NaviQuery, Navi, Graphicform, PageParam, ShowTitle } from '@/api/knowledge/types'
import { formatDate } from '@/api/knowledge/scroll' import { formatDate } from '@/api/knowledge/scroll'
import { useRouter } from 'vue-router'
import errimg from '@/assets/404_images/imgNotFound.png' import errimg from '@/assets/404_images/imgNotFound.png'
import { useKnowledgeStore } from "@/store/modules/knowledge"
const showArea = ref(true);
const props = defineProps({ const props = defineProps({
liContent: { liContent: {
type: Object, type: Object,
}, },
routerUrl:{ routerUrl: {
type: String, type: String,
}, },
@ -27,14 +30,12 @@ const props = defineProps({
fatherisReady: { fatherisReady: {
type: Number, type: Number,
default: 0 default: 0
} },
}) })
const userStore = useUserStore(); const userStore = useUserStore();
const { userKey, userToken } = userStore; const { userKey, userToken } = userStore;
const userDetail = ref<UserDetail>({ const userDetail = ref<UserDetail>({
// //
idcardno: ["1", "2"], idcardno: ["1", "2"],
@ -51,15 +52,12 @@ const userDetail = ref<UserDetail>({
}); });
const tuijianPage = ref<Graphicform[]>(); const tuijianPage = ref<Graphicform[]>();
/* const naviList = ref<Navi[]>(); */
/* //用户信息查询参数
const userQueryParam = reactive<UserQuery>({
userkey: userKey,
usertoken: userToken,
}); */
//navi //navi
const naviQueryParam = reactive<NaviQuery>({ const naviQueryParam = reactive<NaviQuery>({
atParentId: "",// atParentId: "",//
userkey: userKey,
usertoken: userToken,
}); });
const pageParamTuijian = reactive<PageParam>({ const pageParamTuijian = reactive<PageParam>({
total: 0, total: 0,
@ -81,75 +79,55 @@ function errorImg(e: any) {
//.once //.once
e.srcElement.onerror = null; // e.srcElement.onerror = null; //
} }
onMounted(() => {
//console.log(props.liContent?.gParentSun) watch(() => [props.fatherisReady, props.liContent, props.routerUrl], (newVal, oldVal) => {
//console.log(newVal, oldVal); // [11, 22], [1, 2]
const routerUrl = oldVal[2] as String;
const liContent = newVal[1] as any;
//console.log(newVal[1])
}); //console.log(oldVal[2])
//console.log(routerUrl)
if (routerUrl?.endsWith("index")) {//
naviQueryParam.atParentId = '16213848089876281'
pageParamTuijian.archivesTypeAtParentId = '16213848089876281'
} else if (routerUrl?.endsWith("news")) {//
naviQueryParam.atParentId = '16213847972425134'
pageParamTuijian.archivesTypeAtParentId = '16213847972425134'
}
watch(() => [props.fatherisReady, props.liContent,props.routerUrl], (newVal, oldVal) => { pageParamTuijian.gParentSun = liContent.atId;
//console.log(newVal, oldVal); // [11, 22], [1, 2] //
const routerUrl = oldVal[2] as String; if (props.liContent?.hasCard == true) {
const liContent = newVal[1] as any; //console.log(props.liContent?.hasCard)
//console.log(newVal[1])
//console.log(oldVal[2])
//console.log(routerUrl)
if (routerUrl?.endsWith("index")) {//
naviQueryParam.atParentId = '16213848089876281'
pageParamTuijian.archivesTypeAtParentId = '16213848089876281'
} else if (routerUrl?.endsWith("news")) {//
naviQueryParam.atParentId = '16213847972425134'
pageParamTuijian.archivesTypeAtParentId = '16213847972425134'
}
pageParamTuijian.gParentSun = liContent.atId;
//console.log(pageParamTuijian.gParentSun)
//
getTuijian(pageParamTuijian) getTuijian(pageParamTuijian)
.then(({ data }) => { .then(({ data }) => {
tuijianPage.value = data.list tuijianPage.value = data.list
//console.log(tuijianPage.value)
pageParamTuijian.page = data.pageNum pageParamTuijian.page = data.pageNum
pageParamTuijian.total = data.total pageParamTuijian.total = data.total
if(pageParamTuijian.total>0){ if (pageParamTuijian.total > 0) {
showCards.value = 1; showCards.value = 1;
} }
const KnowledgeStore = useKnowledgeStore();
});
})
/* watch(props.fatherisReady, (value) => { if (tuijianPage.value.length > 0) {
console.log(props); //
//childList.value = nweProps.listData KnowledgeStore.$patch((state) => {
let router = useRouter() state.knowledgeTitlesShow.push({ atIdAndGParentSun: liContent.atId, hasCard: true })
let routerUrl = toRaw(router).currentRoute.value.fullPath })
console.log(routerUrl) showArea.value = true;
if (routerUrl.endsWith("index")) {// } else {
naviQueryParam.atParentId = '16213848089876281' KnowledgeStore.$patch((state) => {
pageParamTuijian.archivesTypeAtParentId = '16213848089876281' state.knowledgeTitlesShow.push({ atIdAndGParentSun: liContent.atId, hasCard: false })
} else if (routerUrl.endsWith("news")) {//
naviQueryParam.atParentId = '16213847972425134'
pageParamTuijian.archivesTypeAtParentId = '16213847972425134'
}
pageParamTuijian.gParentSun = props.liContent?.gParentSun; })
// //showArea.value = false;
getTuijian(pageParamTuijian) }
.then(({ data }) => {
tuijianPage.value = data.list
pageParamTuijian.page = data.pageNum
pageParamTuijian.total = data.total
console.log(tuijianPage.value)
}); });
}
}) */ })
function handleCurrentChange() { function handleCurrentChange() {
@ -158,8 +136,6 @@ function handleCurrentChange() {
tuijianPage.value = data.list tuijianPage.value = data.list
pageParamTuijian.page = data.pageNum pageParamTuijian.page = data.pageNum
pageParamTuijian.total = data.total pageParamTuijian.total = data.total
console.log(tuijianPage.value)
}); });
} }
@ -169,11 +145,12 @@ const showCards = ref(0)
//dialog //dialog
const cardContentSource = ref<Graphicform>({}); const cardContentSource = ref<Graphicform>({});
const showContentBox= ref(false); // const showContentBox = ref(false); //
function showContentDialog(item:any){ function showContentDialog(item: any) {
showContentBox.value = true; showContentBox.value = true;
cardContentSource.value=item; cardContentSource.value = item;
} }
@ -186,12 +163,12 @@ function showContentDialog(item:any){
<h3>{{ props.liContent?.atTitle }}</h3> <h3>{{ props.liContent?.atTitle }}</h3>
</div> </div>
<div v-show="!showCards" style="text-align: center;padding-top: 5%;" >暂无数据</div> <div v-show="!showCards" style="text-align: center;padding-top: 5%;">暂无数据</div>
<div class="grid-tuijian" v-show="showCards"> <div class="grid-tuijian" v-show="showCards">
<div v-for="(item, index) in tuijianPage" :key="index" class="tuijian-card" @click="showContentDialog(item)"> <div v-for="(item, index) in tuijianPage" :key="index" class="tuijian-card" @click="showContentDialog(item)">
<img style="width: 140px; height: 126px;border-radius:8px;margin-top: 4px; margin-left: 4px;" <img style="width: 170px; height: 126px;border-radius:8px;margin-top: 4px; margin-left: 4px;"
referrerpolicy="no-referrer" :src="item.gThumbnail" fit="fill" loading="lazy" @error="errorImg($event)" /> referrerpolicy="no-referrer" :src="item.gThumbnail" fit="fill" loading="lazy" @error="errorImg($event)" />
<div class="card-right"> <div class="card-right">
@ -218,7 +195,7 @@ function showContentDialog(item:any){
<style> <style>
.models { .models {
width: 100%; width: 100%;
min-height: 200px; min-height: 200px;
} }
@ -232,7 +209,7 @@ function showContentDialog(item:any){
.grid-tuijian { .grid-tuijian {
/* border-top: solid 1px; */ /* border-top: solid 1px; */
display: grid; display: grid;
grid-template-columns: repeat(auto-fill, 415px); grid-template-columns: repeat(auto-fill, 484px);
gap: 10px; gap: 10px;
grid-auto-flow: row dense; grid-auto-flow: row dense;
@ -240,7 +217,7 @@ function showContentDialog(item:any){
.tuijian-card { .tuijian-card {
display: flex; display: flex;
width: 412px; width: 481px;
height: 140px; height: 140px;
padding: 3px; padding: 3px;
border-radius: 8px; border-radius: 8px;

129
src/views/knowledge/knowledge/index.vue

@ -1,5 +1,6 @@
<script lang='ts' setup> <script lang='ts' setup>
import { useUserStore } from "@/store/modules/user" import { useUserStore } from "@/store/modules/user"
import { ref } from 'vue' import { ref } from 'vue'
import { getUserDetail, getZxxyNavis, getTuijian, getCarousel } from '@/api/knowledge/index' import { getUserDetail, getZxxyNavis, getTuijian, getCarousel } from '@/api/knowledge/index'
import Archivestype from '@/views/knowledge/knowledge/components/archivestype.vue' import Archivestype from '@/views/knowledge/knowledge/components/archivestype.vue'
@ -17,7 +18,6 @@ const userStore = useUserStore();
const { userKey, userToken } = userStore; const { userKey, userToken } = userStore;
const userDetail = ref<UserDetail>({ const userDetail = ref<UserDetail>({
// //
idcardno: ["1", "2"], idcardno: ["1", "2"],
@ -35,6 +35,7 @@ const userDetail = ref<UserDetail>({
const tuijianPage = ref<Graphicform[]>(); const tuijianPage = ref<Graphicform[]>();
const naviList = ref<Navi[]>(); const naviList = ref<Navi[]>();
const naviList1 = ref<Navi[]>();
// //
const userQueryParam = reactive<UserQuery>({ const userQueryParam = reactive<UserQuery>({
userkey: userKey, userkey: userKey,
@ -43,6 +44,8 @@ const userQueryParam = reactive<UserQuery>({
//navi //navi
const naviQueryParam = reactive<NaviQuery>({ const naviQueryParam = reactive<NaviQuery>({
atParentId: "",// atParentId: "",//
userkey: userKey,
usertoken: userToken,
}); });
const pageParamTuijian = reactive<PageParam>({ const pageParamTuijian = reactive<PageParam>({
total: 0, total: 0,
@ -65,9 +68,15 @@ function errorImg(e: any) {
e.srcElement.onerror = null; // e.srcElement.onerror = null; //
} }
const fatherisReady = ref(0); const fatherisReady = ref(0);
const router = useRouter() const router = useRouter()
const routerUrl = toRaw(router).currentRoute.value.fullPath const routerUrl = toRaw(router).currentRoute.value.fullPath
onBeforeMount(() => { onBeforeMount(() => {
//
getUserDetail(userQueryParam)
.then(({ data }) => {
userDetail.value = data
});
}) })
@ -86,42 +95,23 @@ onMounted(() => {
getZxxyNavis(naviQueryParam) getZxxyNavis(naviQueryParam)
.then(({ data }) => { .then(({ data }) => {
naviList.value = data naviList.value = data
//console.log(naviList.value) }).finally(() => {
fatherisReady.value = 100;
}).finally(() => { })
fatherisReady.value = 100;
})
//
getUserDetail(userQueryParam)
.then(({ data }) => {
userDetail.value = data
//console.log(userDetail.value)
});
// //
getTuijian(pageParamTuijian) getTuijian(pageParamTuijian)
.then(({ data }) => { .then(({ data }) => {
tuijianPage.value = data.list tuijianPage.value = data.list
pageParamTuijian.page = data.pageNum pageParamTuijian.page = data.pageNum
pageParamTuijian.total = data.total pageParamTuijian.total = data.total
//console.log(tuijianPage.value)
}); });
getCarousel(pageParamTuijian) getCarousel(pageParamTuijian)
.then(({ data }) => { .then(({ data }) => {
carousel.value = data.list carousel.value = data.list
//console.log(tuijianPage.value)
}); });
});
//setTimeout(function(){ fatherisReady.value = 100;}, 3000);  //
});
function jsScroll() { function jsScroll() {
active.value = onScroll(); active.value = onScroll();
} }
@ -137,28 +127,26 @@ function handleCurrentChange() {
tuijianPage.value = data.list tuijianPage.value = data.list
pageParamTuijian.page = data.pageNum pageParamTuijian.page = data.pageNum
pageParamTuijian.total = data.total pageParamTuijian.total = data.total
//console.log(tuijianPage.value)
}); });
} }
//dialog //dialog
const cardContentSource = ref<Graphicform>({}); const cardContentSource = ref<Graphicform>({});
const showContentBox= ref(false); // const showContentBox = ref(false); //
function showContentDialog(item:any){
function showContentDialog(item: any) {
showContentBox.value = true; showContentBox.value = true;
cardContentSource.value=item; cardContentSource.value = item;
} }
</script> </script>
<template> <template>
<div class="know-main"> <div class="app-container">
<KnowledgeContent v-model:isShow="showContentBox" :contentSource="cardContentSource"></KnowledgeContent> <KnowledgeContent v-model:isShow="showContentBox" :contentSource="cardContentSource"></KnowledgeContent>
<!-- 内容区域 --> <!-- 内容区域 -->
<div class="content" style="margin-left: 10% ;padding-right: 15%;"> <div class="content">
<div class="models "> <div class="models ">
@ -167,16 +155,16 @@ function showContentDialog(item:any){
</div> </div>
<div class="grid-tuijian"> <div class="grid-tuijian">
<el-carousel indicator-position="outside" class="mycarousel" style="width: 412px;height:290px; " arrow="always"> <el-carousel indicator-position="outside" class="mycarousel" arrow="always">
<el-carousel-item v-for="(item, index) in carousel" :key="index" > <el-carousel-item v-for="(item, index) in carousel" :key="index">
<!-- <h3 text="2xl" justify="center">{{ item.gThumbnail }}</h3> -->
<img style="width: 412px; height: 300px;border-radius:16px;margin-top: 4px; margin-left: 4px;" <img style="width: 495px; height: 300px;border-radius:16px;margin-top: 4px; margin-left: 4px;"
referrerpolicy="no-referrer" :src="item.gThumbnail" fit="fill" loading="lazy" @error="errorImg($event)" /> referrerpolicy="no-referrer" :src="item.gThumbnail" fit="fill" loading="lazy" @error="errorImg($event)" />
</el-carousel-item> </el-carousel-item>
</el-carousel> </el-carousel>
<div v-for="(item, index) in tuijianPage" :key="index" class="tuijian-card" @click="showContentDialog(item)"> <div v-for="(item, index) in tuijianPage" :key="index" class="tuijian-card" @click="showContentDialog(item)">
<img style="width: 140px; height: 126px;border-radius:8px;margin-top: 4px; margin-left: 4px;" <img style="width: 170px; height: 126px;border-radius:8px;margin-top: 4px; margin-left: 4px;"
referrerpolicy="no-referrer" :src="item.gThumbnail" fit="fill" loading="lazy" @error="errorImg($event)" /> referrerpolicy="no-referrer" :src="item.gThumbnail" fit="fill" loading="lazy" @error="errorImg($event)" />
<div class="card-right"> <div class="card-right">
@ -200,58 +188,66 @@ function showContentDialog(item:any){
@current-change="handleCurrentChange" /> @current-change="handleCurrentChange" />
</div> </div>
<!-- 各知识/新闻分区 --> <!-- 各知识/新闻分区 -->
<Archivestype v-for="(item, index) in naviList" :liContent=item :index=(index) :fatherisReady="fatherisReady"
:routerUrl="routerUrl" > <template v-for="(item, index) in naviList">
</Archivestype> <Archivestype :liContent=item :index=(index) :fatherisReady="fatherisReady" :routerUrl="routerUrl"></Archivestype>
</template>
</div> </div>
<!-- 导航区域 --> <!-- 导航区域 -->
<ul class="navs"> <ul class="navs">
<li :class="{ active: active === 0 }" @click="scrollTo(0)"> <li :class="{ active: active === 0 }" @click="scrollTo(0)">
推荐 推荐
</li> </li>
<Navili v-for="(item, index) in naviList" :class="{ active: active === index+1 }" :oneli=item :index=(index+1)
:active=active @click="scrollTo(index+1)"></Navili> <template v-for="(item, index) in naviList">
<Navili :class="{ active: active === index+1 }" :oneli=item :index=(index+1) v-if="item.hasCard" :active=active
@click="scrollTo(index + 1)"></Navili>
</template>
</ul> </ul>
</div> </div>
</template> </template>
<style scoped> <style scoped>
/* 内容区的样式 */
.content { .content {
background-color: white; background-color: white;
width: 100%; width: 89.1%;
margin-left: 190px;
box-shadow: rgba(0, 0, 0, 0.24) 0px 3px 8px;
border-radius: 5px;
} }
.models {
width: 100%;
/* min-height: 500px; */
}
/* 导航栏的样式 */ /* 导航栏的样式 */
.navs { .navs {
width: 192px;
position: fixed; position: fixed;
top: 100px; height: auto;
top: 95px;
} }
.navs li { .navs li {
padding: 0 40px; text-align: center;
line-height: 2.6; line-height: 3;
font-size: 15px; font-size: 15.5px;
color: #909399; color: #909399;
background-color: white;
margin-right: 15px;
} }
.navs li:hover { .navs li:hover {
@ -265,12 +261,15 @@ function showContentDialog(item:any){
} }
.model-title { .model-title {
margin-top: -9px;
height: 30px; height: 30px;
} }
.grid-tuijian { .grid-tuijian {
display: grid; display: grid;
grid-template-columns: repeat(auto-fill, 415px); grid-template-columns: repeat(auto-fill, 484px);
gap: 10px; gap: 10px;
grid-auto-flow: row dense; grid-auto-flow: row dense;
@ -278,26 +277,27 @@ function showContentDialog(item:any){
.tuijian-card { .tuijian-card {
display: flex; display: flex;
width: 412px; width: 481px;
height: 140px; height: 140px;
padding: 3px; padding: 3px;
border-radius: 8px; border-radius: 8px;
flex-direction: row; flex-direction: row;
flex-wrap: wrap; flex-wrap: wrap;
/* border:#909399 1px solid; */
/* box-shadow: rgba(99, 99, 99, 0.2) 0px 2px 8px 0px; */
box-shadow: rgba(0, 0, 0, 0.24) 0px 3px 8px; box-shadow: rgba(0, 0, 0, 0.24) 0px 3px 8px;
} }
.mycarousel { .mycarousel {
grid-row-start: 1; grid-row-start: 1;
grid-row-end: 3; grid-row-end: 3;
border-radius: 15px; border-radius: 15px;
width: 480px;
height: 290px;
} }
.card-right { .card-right {
display: flex; display: flex;
width: 260px; width: 300px;
flex-direction: column; flex-direction: column;
flex-wrap: wrap; flex-wrap: wrap;
padding-left: 8px; padding-left: 8px;
@ -305,15 +305,6 @@ function showContentDialog(item:any){
.card-title { .card-title {
/* height: 1.5em !important;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
line-height: 25px;
height: 85px; */
height: 1.5em !important; height: 1.5em !important;
display: -webkit-box; display: -webkit-box;

Loading…
Cancel
Save