zhangsq vor 8 Monaten
Ursprung
Commit
f844505e7f

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

@@ -35,3 +35,5 @@ 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')
+//获取分享链接
+export const getShareLink = (p) => request('disk/courseauditrecord/getShareLink', p, 'get')

+ 7 - 2
src/views/myResources/myResources.vue

@@ -13,7 +13,7 @@
 			<a-col :span="18">
 				<a-input v-model:value="formState.fileName" placeholder="请输入资源名称" style="width: 150px" />
 				<a-cascader
-					style="width: 240px; margin-left: 8px"
+					style="width: 200px; margin-left: 8px"
 					v-model:value="majorIdName"
 					:options="collegeMajorOptions"
 					:fieldNames="{ label: 'name', value: 'id', children: 'children' }"
@@ -29,7 +29,7 @@
 					placeholder="请选择专业"
 				/> -->
 				<a-cascader
-					style="width: 240px; margin-left: 8px"
+					style="width: 200px; margin-left: 8px"
 					v-model:value="resourceName"
 					:options="resourceTypeOptions"
 					:fieldNames="{ label: 'name', value: 'id', children: 'children' }"
@@ -89,6 +89,7 @@
 			bordered
 			:row-key="(record) => record.id"
 			:row-selection="rowSelection"
+			:scroll="{ x: 1500, y: 300 }"
 		>
 			<template #bodyCell="{ column, text, record }">
 				<template
@@ -237,6 +238,7 @@
 		<resourceUpload
 			v-if="uploadModalVisible"
 			:isState="isState"
+			:isVerifyStatus="formState.verifyStatus"
 			:resourcesId="editResourcesId"
 			@close="uploadModalVisible = false"
 			@getList="getList"
@@ -411,6 +413,7 @@
 		{
 			title: '操作',
 			align: 'center',
+			width: 150,
 			key: 'action'
 		}
 	]
@@ -478,6 +481,8 @@
 		{
 			title: '操作',
 			align: 'center',
+			width: 150,
+			fixed: 'right',
 			key: 'action'
 		}
 	]

+ 42 - 10
src/views/myResources/resourceUpload.vue

@@ -102,13 +102,13 @@
 					<a-radio :value="1">是</a-radio>
 				</a-radio-group>
 			</a-form-item>
-			<a-form-item v-if="isState == 1" label="资源描述" name="courseDesc">
+			<a-form-item v-if="isState == 1 && isVerifyStatus != 0" label="资源描述" name="resourceDesc">
 				<a-textarea v-model:value="formState.resourceDesc" placeholder="请输入资源描述" :rows="4" />
 			</a-form-item>
-			<a-form-item v-if="isState == 1" label="上传封面" name="coverImage">
+			<a-form-item v-if="isState == 1 && isVerifyStatus != 0" label="上传封面" name="coverImage">
 				<coverUpload
 					:isedit="true"
-					:coverImageId="formState.coverImage"
+					:coverImageId="formState.coverImageId"
 					@handleChangeCover="handleChangeCover"
 					@handleRemoveCover="handleRemoveCover"
 				></coverUpload>
@@ -143,6 +143,11 @@
 			required: true,
 			default: 0
 		},
+		isVerifyStatus: {
+			type: Number,
+			required: true,
+			default: 0
+		},
 		resourcesId: {
 			type: Number,
 			required: true,
@@ -159,7 +164,7 @@
 	const action = ref('/api/webapp/dev/file/uploadMinioReturnId')
 	const formState = reactive({
 		userfileIds: null, //资源文件id
-		coverImage: null, //封面id
+		coverImageId: null, //封面id
 		// courseId: null, //课程
 		// majorType: null, //专业
 		resourceType: null, //资源类型一级
@@ -224,15 +229,24 @@
 			callback()
 		}
 	}
+	// 封面文件id
+	const handleChangeCover = (fileId) => {
+		formState.coverImageId = fileId
+	}
+
+	// 移除封面文件
+	const handleRemoveCover = () => {
+		formState.coverImageId = null
+	}
 	const rules = {
-		courseTypeName: [{ required: true, message: '请选择资源类型', trigger: 'change' }],
+		// courseTypeName: [{ required: true, message: '请选择资源类型', trigger: 'change' }],
 		collegeId: [{ required: true, message: '请选择院系', trigger: 'blur' }],
 		keywordValue: [
 			{ required: true, message: '请选择关键词', trigger: 'blur' },
 			{ validator: validateKeywords, trigger: 'blur' }
 		],
-		// majorId: [{ required: true, message: '请选择专业', trigger: 'change' }],
-		resourceType: [{ required: true, message: '请选择资源类型', trigger: 'change' }],
+		coverImageId: [{ required: true, message: '请上传封面', trigger: 'blur' }],
+		resourceType: [{ required: true, message: '请选择资源类型', trigger: 'blur' }],
 		resourceDesc: [
 			{ required: true, message: '请输入资源描述', trigger: 'blur' },
 			{ pattern: /^[\s\S]{10,500}$/, message: '描述长度应在10-500字符之间', trigger: 'blur' }
@@ -334,6 +348,10 @@
 	}
 	const changeCollegeMajor = (value, selectedOptions) => {
 		console.log('Selected:', value, selectedOptions)
+		if (!value) {
+			majorIdName.value = ''
+			return false
+		}
 		majorIdName.value = selectedOptions.map((it) => it.name).join('/')
 		formState.collegeId = value[0] || null
 		formState.collegeTwoId = value[1] || null
@@ -352,6 +370,10 @@
 	}
 	const changeCollegeResource = (value, selectedOptions) => {
 		console.log('Selected:', value, selectedOptions)
+		if (!value) {
+			resourceName.value = ''
+			return false
+		}
 		resourceName.value = selectedOptions.map((it) => it.name).join('/')
 		formState.resourceType = value[0] || null
 		formState.resourceTwoType = value[1] || null
@@ -399,10 +421,18 @@
 				.add(formData)
 				.then((res) => {
 					emit('getList')
-					Modal.success({ content: '资源上传成功' })
+					if (props.isState == 1) {
+						Modal.success({ content: '资源编辑成功' })
+					} else {
+						Modal.success({ content: '资源上传成功' })
+					}
 				})
 				.catch((err) => {
-					Modal.error({ content: '资源上传失败' })
+					if (props.isState == 1) {
+						Modal.success({ content: '资源编辑失败' })
+					} else {
+						Modal.success({ content: '资源上传失败' })
+					}
 					console.log(err)
 				})
 		} catch (error) {
@@ -420,13 +450,14 @@
 	const getDetail = () => {
 		resourceAuditApi.detail({ id: props.resourcesId }).then((res) => {
 			console.log(res.data, '资源详情')
+			formState.userfileIds = res.data.fileId
 			formState.resourceType = res.data.resourceType
 			formState.resourceTwoType = res.data.resourceTwoType
 			formState.collegeId = res.data.collegeId
 			formState.collegeTwoId = res.data.collegeTwoId
 			formState.collegeThreeId = res.data.collegeThreeId
 			majorIdName.value = res.data.collegeAllId.split(',')
-			resourceName.value.value = res.data.resourceAllType.split(',')
+			resourceName.value = res.data.resourceALLTypeName.split(',')
 			getCollegeMajor(majorIdName.value[majorIdName.value.length - 1])
 			formState.resourceDesc = res.data.resourceDesc
 			// formState.majorId = res.data.majorId
@@ -439,6 +470,7 @@
 		resourceAuditApi.recentlyRecord().then((res) => {
 			console.log(res.data, '历史表单数据')
 			formState.resourceType = res.data.resourceType
+			formState.resourceTwoType = res.data.resourceTwoType
 			formState.collegeId = res.data.collegeId
 			formState.collegeTwoId = res.data.collegeTwoId
 			formState.collegeThreeId = res.data.collegeThreeId

+ 4 - 20
src/views/resourceDetails/components/FilePreviewer.vue

@@ -1,23 +1,6 @@
 <template>
 	<div class="file-preview-container">
-		<!-- PDF预览 -->
-		<div v-if="isPDF" class="pdf-preview">
-			<iframe v-if="pdfUrl" :src="pdfUrl" class="preview-iframe" frameborder="0"></iframe>
-			<div v-else class="no-preview">无法加载PDF预览</div>
-		</div>
-
-		<!-- Office文档预览 -->
-		<div v-else-if="isOffice" class="office-preview">
-			<iframe v-if="officeUrl" :src="officeUrl" class="preview-iframe" frameborder="0"></iframe>
-			<div v-else class="no-preview">无法加载文档预览</div>
-		</div>
-
-		<!-- 不支持的文件类型 -->
-		<div v-else class="unsupported-file">
-			不支持预览此文件类型: {{ fileType }}
-			<a-button type="primary" @click="handleDownload">下载文件</a-button>
-		</div>
-
+		<iframe v-if="fileUrl" :src="fileUrl" class="preview-iframe" frameborder="0"></iframe>
 		<!-- 加载状态 -->
 		<div v-if="loading" class="loading-overlay">
 			<a-spin size="large" />
@@ -80,7 +63,8 @@
 	const pdfUrl = computed(() => {
 		if (!isPDF.value) return null
 		// 使用Google Docs Viewer进行PDF预览
-		return `https://docs.google.com/viewer?url=${encodeURIComponent(fullFileUrl.value)}&embedded=true`
+		// return `https://docs.google.com/viewer?url=${encodeURIComponent(fullFileUrl.value)}&embedded=true`
+		return props.fileUrl
 	})
 
 	// 初始化Office预览
@@ -114,7 +98,7 @@
 		position: relative;
 		width: 100%;
 		height: 100%;
-		min-height: 500px;
+		/* min-height: 500px; */
 		border: 1px solid #e8e8e8;
 		border-radius: 4px;
 		overflow: hidden;

+ 22 - 22
src/views/resourceDetails/components/ShareDialog.vue

@@ -25,28 +25,28 @@
 	// 			name: '张三',是1000元,请给我一个好评,谢谢',
 	// 			follw: 0,
 
-	// const props = defineProps({
-	// 	item: {
-	// 		type: Object,
-	// 		default: () => {}
-	// 	}
-	// 	// name: {
-	// 	// 	type: String,
-	// 	// 	default: () => ''
-	// 	// },
-	// 	// talk: {
-	// 	// 	type: String,
-	// 	// 	default: () => ''
-	// 	// },
-	// 	// follw: {
-	// 	// 	type: Number,
-	// 	// 	default: () => 0
-	// 	// },
-	// 	// callBackTalk: {
-	// 	// 	type: Array,
-	// 	// 	default: () => []
-	// 	// }
-	// })
+	const props = defineProps({
+		item: {
+			type: Object,
+			default: () => {}
+		}
+		// name: {
+		// 	type: String,
+		// 	default: () => ''
+		// },
+		// talk: {
+		// 	type: String,
+		// 	default: () => ''
+		// },
+		// follw: {
+		// 	type: Number,
+		// 	default: () => 0
+		// },
+		// callBackTalk: {
+		// 	type: Array,
+		// 	default: () => []
+		// }
+	})
 	const listUnpublishedView = ref(null)
 	const tallTag = ref(false)
 	const visible = ref(false)

+ 11 - 4
src/views/resourceDetails/components/VideoDetails.vue

@@ -45,8 +45,7 @@
 				>
 					<!-- <PDF :src="resSrc" :width="850" :height="350" /> -->
 					<FilePreviewer :fileUrl="resSrc" :fileName="resName" :fileType="fileType" />
-
-					<a-image width="200px" height="220px" :src="pdfRes" :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>
 				<div style="height: 20px"></div>
@@ -164,12 +163,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, resourcecentreDetail } from '@/api/portal'
+	import { addViewCount, detail, add, cancel, queryList, resourcecentreDetail, getShareLink } from '@/api/portal'
 	import { useRoute } from 'vue-router'
 	import sysConfig from '@/config/index'
 	import pdfRes from '@/assets/images/pdf.png'
 	import FilePreviewer from './FilePreviewer.vue'
 	import EventBus from '@/utils/EventBus'
+	import VueOfficePdf from '@vue-office/pdf'
 	// import pdfView from 'pdfvuer'
 	// import 'pdfvuer/dist/pdfvuer.css'
 
@@ -214,7 +214,13 @@
 	}
 	const handlerShareDialog = () => {
 		console.log('打开分享弹窗')
-		ShareDialogRef.value.open(itemData.value)
+		getShareLink({ id: route.query.id })
+			.then((res) => {
+				if (res.code == 200) {
+					ShareDialogRef.value.open()
+				}
+			})
+			.catch((err) => {})
 	}
 	const handlerCollection = async () => {
 		console.log('打开收藏', itemData.value)
@@ -270,6 +276,7 @@
 					})
 					console.log('应该施舍你们', tags.value)
 					//关键的资源在线地址
+					// resSrc.value = sysConfig.FILE_URL + itemData.value.fileUrl
 					resSrc.value = sysConfig.FILE_URL + itemData.value.priviewFileUrl
 					fileType.value = itemData.value.suffix
 					// imagess.value = ''+itemData.value.coverImagePath