ソースを参照

还是没有pdf

于添 8 ヶ月 前
コミット
ff09672bc6

+ 1 - 1
.env.development

@@ -7,7 +7,7 @@ VITE_TITLE = Snowy
 # 接口地址
 VITE_API_BASEURL = http://192.168.31.14:9003
 VITE_FILEURL = http://192.168.1.245:10005/education/
-# VITE_API_BASEURL = http://192.168.31.14:9003
+VITE_API_BASEURL = http://192.168.31.14:9003
 # VITE_API_BASEURL = http://192.168.31.6:9003
 
 # 本地端口

+ 1 - 1
pnpm-lock.yaml

@@ -5112,7 +5112,7 @@ snapshots:
     dependencies:
       is-arguments: 1.2.0
       is-date-object: 1.1.0
-      is-regex: 1.1.4
+      is-regex: 1.2.1
       object-is: 1.1.6
       object-keys: 1.1.1
       regexp.prototype.flags: 1.5.4

+ 4 - 0
src/api/portal/index.js

@@ -31,3 +31,7 @@ export const deleteComment = (p) => request('disk/comment/delete', p, 'post')
 export const pageComment = (p) => request('disk/comment/page', p, 'get')
 //点赞
 export const giveComment = (p) => request('disk/comment/give', p, 'get')
+//取消点赞
+export const giveCancelComment = (p) => request('disk/comment/giveCancel', p, 'get')
+//资源中心的详情
+export const resourcecentreDetail = (p) => request('disk/resourcecentre/detail', p, 'get')

+ 3 - 3
src/router/portal.js

@@ -29,19 +29,19 @@ const portal = [
 	{
 		name: 'portal',
 		path: '/portal',
-		component: () => import('@/portal/index.vue'),
+		component: () => import('@/views/portal/index.vue'),
 		children: [
 			{
 				name: 'portal.resourceCenter',
 				path: '/portal/resourceCenter',
 				hide: true,
-				component: () => import('@/resourceCenter/index.vue')
+				component: () => import('@/views/resourceCenter/index.vue')
 			},
 			{
 				name: 'portal.resourceDetails',
 				path: '/portal/resourceDetails',
 				hide: true,
-				component: () => import('@/resourceDetails/index.vue')
+				component: () => import('@/views/resourceDetails/index.vue')
 			},
 			{
 				name: 'portal.personalResources',

+ 0 - 2
src/views/portal/index.vue

@@ -62,8 +62,6 @@
 		// 	images.value = 'http://192.168.1.245:10005/education/2025/7/2/1940361083973906434.jpg'
 		// }, 10000)
 	})
-	EventBus.off('openResourceDetails', handleOpenResourceDetails)
-	EventBus.on('openResourceDetails', handleOpenResourceDetails)
 </script>
 
 <style scoped>

+ 42 - 6
src/views/resourceCenter/components/ResourceList.vue

@@ -12,7 +12,7 @@
 
 			<a-input-search
 				v-model:value="currentPage.queryInfo"
-				placeholder="输入资源关键词"
+				placeholder="输入资源关键词"
 				style="width: 200px"
 				@search="onSearch"
 			/>
@@ -21,8 +21,21 @@
 			<a-col :span="8" v-for="(item, index) in resources" :key="index">
 				<div style="border-radius: 10px 10px 5px 5px; border: 1px solid #dcdcdc">
 					<div style="display: flex; position: relative">
-						<div class="resource" @click="handleItem(item)">
-							<a-image
+						<div
+							class="resource"
+							@click="handleItem(item)"
+							:style="{
+								backgroundSize: 'cover',
+								backgroundPosition: 'center',
+								backgroundImage:
+									'url(' +
+									(item.coverImagePath != '' && sysConfig.FILE_URL + item.coverImagePath
+										? sysConfig.FILE_URL + item.coverImagePath
+										: '') +
+									')'
+							}"
+						>
+							<!-- <a-image
 								style="width: 100%; height: 100%"
 								:src="
 									item.coverImagePath != '' && sysConfig.FILE_URL + item.coverImagePath
@@ -31,7 +44,7 @@
 								"
 								alt=""
 								:preview="false"
-							></a-image>
+							></a-image> -->
 							<PlayCircleOutlined
 								:style="{ fontSize: '40px', color: 'white' }"
 								style="position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%)"
@@ -219,8 +232,31 @@
 		justify-content: center;
 		align-items: center;
 		cursor: pointer;
+		position: relative;
+		overflow: hidden;
+	}
+	.resource::before {
+		content: '';
+		position: absolute;
+		top: 0;
+		left: 0;
+		width: 100%;
+		height: 100%;
+		background-color: transparent;
+		transition: background-color 0.6s ease;
+		z-index: 1;
 	}
-	.resource:hover {
-		background: #0000008c;
+
+	.resource:hover::before {
+		background-color: rgba(0, 0, 0, 0.4); /* 悬停变暗 */
+	}
+
+	/* 图标或其他内容要放在最上层 */
+	.resource > * {
+		position: relative;
+		z-index: 2;
 	}
+	/* .resource:hover {
+		background-color: #ffffff8c;
+	} */
 </style>

+ 15 - 3
src/views/resourceCenter/components/SidebarRecommend.vue

@@ -3,7 +3,19 @@
 		<div class="recommend-container">
 			<h3>资源推荐</h3>
 			<div v-for="(item, index) in recommendations" :key="index" class="recommend-item" @click="handlerItem(item)">
-				<div class="item"></div>
+				<div
+					class="item"
+					:style="{
+						backgroundSize: 'cover',
+						backgroundPosition: 'center',
+						backgroundImage:
+							'url(' +
+							(item.coverImagePath != '' && sysConfig.FILE_URL + item.coverImagePath
+								? sysConfig.FILE_URL + item.coverImagePath
+								: '') +
+							')'
+					}"
+				></div>
 				<div style="display: flex; flex-direction: column; justify-content: space-between; margin-left: 10px">
 					<span style="font-weight: bold; font-size: 12px; margin-top: 5px">{{ item.fileName }}</span>
 					<div style="display: flex; justify-content: center; align-items: space-between">
@@ -29,6 +41,7 @@
 	const emit = defineEmits(['handlerItem'])
 	import { list } from '@/api/portal'
 	import tool from '@/utils/tool'
+	import sysConfig from '@/config/index'
 	const currentPage = reactive({
 		current: 1,
 		size: 6
@@ -147,8 +160,7 @@
 		color: #666;
 	}
 	.item {
-		width: 100px;
+		min-width: 100px;
 		height: 70px;
-		background-color: rgba(5, 5, 5, 0.219);
 	}
 </style>

+ 31 - 5
src/views/resourceDetails/components/TallItem.vue

@@ -20,8 +20,8 @@
 								<span style="margin-left: 5px">{{ props.item.childSize }}</span>
 							</div>
 							<div style="margin-left: 15px">
-								<!-- <LikeFilled /> -->
-								<LikeOutlined style="cursor: pointer" @click="handerfollw" />
+								<LikeFilled v-if="item.giveNumSelf > 0" style="cursor: pointer" @click="handerfollwDecrease" />
+								<LikeOutlined v-if="item.giveNumSelf == 0" style="cursor: pointer" @click="handerfollw" />
 								<span style="margin-left: 5px">{{ props.item.giveNum }}</span>
 							</div>
 						</div>
@@ -48,8 +48,12 @@
 								<span style="margin-left: 5px">10</span>
 							</div> -->
 								<div style="margin-left: 15px">
-									<!-- <LikeFilled /> -->
-									<LikeOutlined style="cursor: pointer" @click="handerfollwChild(item)" />
+									<LikeFilled
+										v-if="item.giveNumSelf > 0"
+										style="cursor: pointer"
+										@click="handerfollwChildDecrease(item)"
+									/>
+									<LikeOutlined v-if="item.giveNumSelf == 0" style="cursor: pointer" @click="handerfollwChild(item)" />
 									<span style="margin-left: 5px">{{ item.giveNum }}</span>
 								</div>
 							</div>
@@ -74,7 +78,17 @@
 	import { ref } from 'vue'
 	import TabSwitcher from './TabSwitcher.vue'
 	import EventBus from '@/utils/EventBus'
-	import { addViewCount, detail, add, cancel, queryList, pageComment, addComment, giveComment } from '@/api/portal'
+	import {
+		addViewCount,
+		detail,
+		add,
+		cancel,
+		queryList,
+		pageComment,
+		addComment,
+		giveComment,
+		giveCancelComment
+	} from '@/api/portal'
 	const emit = defineEmits(['selectTab'])
 
 	// id: 1,
@@ -111,6 +125,8 @@
 		console.log('查询内容', form)
 		tallTag.value == true ? (tallTag.value = false) : (tallTag.value = true)
 		EventBus.emit('closeInput', null, props.item.id)
+
+		EventBus.emit('upDataDetailsNum')
 		//....
 
 		// listUnpublishedView.value.setData(tableData.value)
@@ -126,10 +142,20 @@
 		await giveComment({ id: props.item.id })
 		EventBus.emit('onGetPageComment')
 	}
+	const handerfollwDecrease = async () => {
+		await giveCancelComment({ id: props.item.id })
+		EventBus.emit('onGetPageComment')
+	}
+	//增加
 	const handerfollwChild = async (item) => {
 		await giveComment({ id: item.id })
 		EventBus.emit('onGetPageComment')
 	}
+	//减少
+	const handerfollwChildDecrease = async (item) => {
+		await giveCancelComment({ id: item.id })
+		EventBus.emit('onGetPageComment')
+	}
 	const handerPublish = () => {
 		tallTag.value = false
 		emit('publish', { resourceId: props.id, id: props.item.id, talk: talk.value })

+ 2 - 1
src/views/resourceDetails/components/TallList.vue

@@ -6,7 +6,7 @@
 				<span class="tallListInfo">文明上网理性发言,请遵守评论服务协议</span>
 			</div>
 			<!-- 切换 -->
-			<div>
+			<div v-if="false">
 				<div style="display: flex">
 					<div style="display: flex; flex-direction: column; margin-left: 10px; margin-right: 10px">
 						<div
@@ -188,6 +188,7 @@
 			.then((res) => {
 				getPageComment()
 				talk.value = ''
+				EventBus.emit('upDataDetailsNum')
 			})
 			.catch((err) => {
 				console.log(err)

+ 38 - 6
src/views/resourceDetails/components/VideoDetails.vue

@@ -5,7 +5,7 @@
 		<div class="user-info-container">
 			<div class="video-info" style="width: 850px">
 				<div
-					v-if="videoFormat == 'jpg' || videoFormat == 'bmp' || videoFormat == 'png' || videoFormat == 'jepg'"
+					v-if="videoFormat == 'jpg' || videoFormat == 'bmp' || videoFormat == 'png' || videoFormat == 'jpeg'"
 					style="width: 850px; height: 350px"
 				>
 					<!-- <img :src="imgs + itemData.coverImagePath" style="width: 100%; height: 100%" /> -->
@@ -45,7 +45,7 @@
 				>
 					<!-- <PDF :src="resSrc" :width="850" :height="350" /> -->
 
-					<a-image width="200px" height="220px" :src="pdf" :preview="false" @click="handleDownload(resSrc)" />
+					<a-image width="200px" height="220px" :src="pdfRes" :preview="false" @click="handleDownload(resSrc)" />
 					<!-- <a-button type="primary" @click="handleDownload(resSrc)">去预览</a-button> -->
 				</div>
 
@@ -69,12 +69,12 @@
 								</div>
 								<div class="liene"></div>
 								<div class="metric-item">
-									<span>1000</span>
+									<span>{{ talkNum }}</span>
 									<span>评论</span>
 								</div>
 								<div class="liene"></div>
 								<div class="metric-item">
-									<span>1000</span>
+									<span>{{ collectNum }}</span>
 									<span>收藏</span>
 								</div>
 							</div>
@@ -164,10 +164,13 @@
 	// import PDF from 'vue-pdf'
 	import { Tag, Typography, Space, message } from 'ant-design-vue'
 	import ShareDialog from './ShareDialog.vue'
-	import { addViewCount, detail, add, cancel, queryList } from '@/api/portal'
+	import { addViewCount, detail, add, cancel, queryList, resourcecentreDetail } from '@/api/portal'
 	import { useRoute } from 'vue-router'
 	import sysConfig from '@/config/index'
-	import pdf from '@/assets/images/pdf.png'
+	import pdfRes from '@/assets/images/pdf.png'
+	import EventBus from '@/utils/EventBus'
+	// import pdfView from 'pdfvuer'
+	// import 'pdfvuer/dist/pdfvuer.css'
 
 	// const props = defineProps({
 	// 	itemData: {
@@ -189,6 +192,9 @@
 	const videoDuration = ref('59:34')
 	const videoSize = ref('598M')
 	const releaseTime = ref('2025-10-01 11:33:59')
+
+	const talkNum = ref(0)
+	const collectNum = ref(0)
 	// const courseDescription = ref(
 	// 	'“我们正步入一个数据或许比软件更重要的新时代。——Tim O’ Reilly” 运用数据是精准刻画事物、呈现发展规律的主要手段,分析数据展示规律,把思想变得更精细!——“弹指之间·享受创新”,通过4周学习,你将掌握利用Python语言表示、清洗、统计和展示数据的能力。'
 	// )
@@ -210,9 +216,11 @@
 			if (starTag.value == true) {
 				await cancel({ resourceId: id })
 				message.success('取消收藏')
+				upDataDetailsNum()
 			} else {
 				await add({ resourceId: id })
 				message.success('收藏成功')
+				upDataDetailsNum()
 			}
 			queryList({ resourceId: id })
 				.then((ress) => {
@@ -264,6 +272,19 @@
 			})
 			.catch((err) => {})
 	}
+
+	const upDataList = (item) => {
+		console.log('upDataList', item)
+		resourcecentreDetail({ id: item.id })
+			.then((res) => {
+				if (res.code == 200) {
+					talkNum.value = res.data.commentNum
+					collectNum.value = res.data.collectNum
+				}
+			})
+			.catch((err) => {})
+	}
+
 	onMounted(() => {
 		getList()
 		const id = route.query.id
@@ -280,12 +301,23 @@
 					console.log(err)
 				})
 			getData({ id: id })
+			upDataList({ id: id })
 		}
 	})
 
+	const upDataDetailsNum = () => {
+		const id = route.query.id
+		if (id != undefined && id != '') {
+			upDataList({ id: id })
+		}
+	}
+
 	defineExpose({
 		setData
 	})
+
+	EventBus.off('upDataDetailsNum', upDataDetailsNum)
+	EventBus.on('upDataDetailsNum', upDataDetailsNum)
 </script>
 
 <style scoped>

+ 1 - 1
vite.config.js

@@ -52,7 +52,7 @@ export default defineConfig(({ command, mode }) => {
 			port: envConfig.VITE_PORT,
 			proxy: {
 				'/api': {
-					target: 'http://192.168.31.81:9003',
+					target: 'http://192.168.31.14:9003',
 					ws: false,
 					changeOrigin: true
 					// rewrite: (path) => path.replace(/^\/api/, '')