Преглед изворни кода

Merge branch 'dev' of http://192.168.1.245:11111/shanming/onlineEducation-front into dev

zhangsq пре 7 месеци
родитељ
комит
7896e90ad1

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

@@ -43,3 +43,5 @@ export const getQueryTreeAll = (p) => request('disk/type/treeAll', p, 'get')
 export const getTalkPageList = (p) => request('disk/comment/pageList', p, 'get')
 export const getTalkPageList = (p) => request('disk/comment/pageList', p, 'get')
 //筛查文件格式
 //筛查文件格式
 export const getAllListFileFormat = (p) => request('disk/fileformat/allList', p, 'get')
 export const getAllListFileFormat = (p) => request('disk/fileformat/allList', p, 'get')
+
+export const checkAuth = (p) => request('disk/fileformat/allList', p, 'get')

+ 27 - 0
src/api/question/tQuestionApi.js

@@ -0,0 +1,27 @@
+import { baseRequest } from '@/utils/request'
+
+const request = (url, ...arg) => baseRequest(`/api/webapp/` + url, ...arg)
+
+/**
+ * t_questionApi接口管理器
+ *
+ * @author zss
+ * @date  2025/07/08 16:24
+ **/
+export default {
+	// 获取t_question分页
+	tQuestionPage(data) {
+		return request('api/admin/question/page', data, 'post')
+	},
+	// 提交t_question表单 edit为true时为编辑,默认为新增
+	tQuestionSubmitForm(data, edit = false) {
+		return request('api/admin/question/edit', data)
+	},
+	// 删除t_question
+	tQuestionDelete(data) {
+		return request('delete', data)
+	},
+	// 获取t_question详情
+	tQuestionDetail(data) {
+		return request('detail', data, 'get')
+	}}

+ 6 - 0
src/router/portal.js

@@ -64,6 +64,12 @@ const portal = [
 				component: () => import('@/views/courseDetails/index.vue')
 				component: () => import('@/views/courseDetails/index.vue')
 			}
 			}
 		]
 		]
+	},
+	{
+		path: '/notLook',
+		name: 'notLook',
+		component: () => import('@/views/notLook/index.vue'),
+		children: []
 	}
 	}
 ]
 ]
 /**
 /**

+ 8 - 0
src/router/whiteList.js

@@ -59,6 +59,14 @@ const constRouters = [
 			title: '微信JSAPI支付'
 			title: '微信JSAPI支付'
 		}
 		}
 	},
 	},
+	{
+		path: '/notLook',
+		name: 'notLook',
+		component: () => import('@/views/notLook/index.vue'),
+		meta: {
+			title: '无权限访问'
+		}
+	},
 	{
 	{
 		path: '/share/:shareBatchNum',
 		path: '/share/:shareBatchNum',
 		name: 'Share',
 		name: 'Share',

+ 45 - 2
src/views/exm/exampaper/form.vue

@@ -39,12 +39,33 @@
             </a-form-item>
             </a-form-item>
 
 
 
 
+			<a-form-item :key="index" :label="'标题'+(index+1)+':'" required v-for="(titleItem,index) in titleItems">
+				<a-input v-model="titleItem.name" style="width: 65%"/>
+				<a-button  style="margin-left: 20px" @click="addQuestion(titleItem)">添加题目</a-button>
+				<a-button  style="margin-left: 20px;background-color: red;"  @click="titleItems.splice(index,1)" type="primary">删除</a-button>
+				<a-card class="exampaper-item-box" v-if="titleItem.questionItems.length!==0">
+					<a-form-item :key="questionIndex" :label="'题目'+(questionIndex+1)+':'"
+								  v-for="(questionItem,questionIndex) in titleItem.questionItems" style="margin-bottom: 15px">
+						<a-row>
+							<a-col :span="23">
+								<QuestionShow :qType="questionItem.questionType" :question="questionItem"/>
+							</a-col>
+							<a-col :span="1">
+								<a-button @click="titleItem.value.questionItems.splice(questionIndex,1)">删除</a-button>
+							</a-col>
+						</a-row>
+					</a-form-item>
+				</a-card>
+			</a-form-item>
+
+
+
 			<a-form-item label="建议时长:" name="suggestTime">
 			<a-form-item label="建议时长:" name="suggestTime">
-				<a-input-number id="inputNumber" width="100%" v-model:value="formData.suggestTime" :min="1" :max="180" placeholder="请输入建议时长" allow-clear/>
+				<a-input-number id="inputNumber" width="100%" v-model:value="formData.suggestTime" :min="1" :max="180" placeholder="分钟" allow-clear/>
 			</a-form-item>
 			</a-form-item>
         </a-form>
         </a-form>
         <template #footer>
         <template #footer>
-			<a-button style="margin-right: 8px" @click="onClose">添加标题</a-button>
+			<a-button style="margin-right: 8px" @click="addTitle">添加标题</a-button>
             <a-button style="margin-right: 8px" @click="onClose">关闭</a-button>
             <a-button style="margin-right: 8px" @click="onClose">关闭</a-button>
             <a-button type="primary" @click="onSubmit" :loading="submitLoading">保存</a-button>
             <a-button type="primary" @click="onSubmit" :loading="submitLoading">保存</a-button>
         </template>
         </template>
@@ -99,8 +120,30 @@
 	const gradeLevelOptions = tool.dictList('SEMESTER')
 	const gradeLevelOptions = tool.dictList('SEMESTER')
 	const susbjectOptions = tool.dictList('SUBJECT')
 	const susbjectOptions = tool.dictList('SUBJECT')
 	const paperTypeOptions = tool.dictList('PAPER_TYPE')
 	const paperTypeOptions = tool.dictList('PAPER_TYPE')
+	const titleItems =  ref([])
+	const currentTitleItem = ref(null)
+	const addTitle = () => {
+		titleItems.value.push({
+			name: '',
+			questionItems: []
+		})
+	}
+	const addQuestion = (titleItem) =>{
+		currentTitleItem.value = titleItem
+		this.questionPage.showDialog = true
+		this.search()
+	}
 	// 抛出函数
 	// 抛出函数
     defineExpose({
     defineExpose({
         onOpen
         onOpen
     })
     })
 </script>
 </script>
+<style>
+.exampaper-item-box {
+	.q-title {
+		margin: 0px 5px 0px 5px;
+	}
+	.q-item-content {
+	}
+}
+</style>

+ 72 - 18
src/views/exm/exampaper/index.vue

@@ -1,20 +1,48 @@
 <template>
 <template>
 	<a-card :bordered="false">
 	<a-card :bordered="false">
 		<!-- 搜索和操作区域 -->
 		<!-- 搜索和操作区域 -->
-		<a-row :gutter="60" style="margin-bottom: 16px">
-			<a-col>
-				<span>试卷名称:</span>
-				<a-input v-model:value="formState.name" placeholder="请输入试卷名称" style="width: 150px;" />
-			</a-col>
-			<a-col>
-				<span>学科名称:</span>
-				<a-input v-model:value="formState.fileName" placeholder="请输入学科名称" style="width: 150px" />
-			</a-col>
-			<a-col>
-				<a-button type="primary" style="margin-left: 8px" @click="handleSearch">查询</a-button>
-				<a-button style="margin-left: 8px" @click="handleReset">重置</a-button>
-			</a-col>
-		</a-row>
+
+		<a-card :bordered="false" style="margin-bottom: 10px">
+			<a-form ref="searchFormRef" name="advanced_search" class="ant-advanced-search-form" :model="formState">
+				<a-row :gutter="24">
+					<a-col :span="4">
+						<a-form-item name="name" label="ID:">
+							<a-input v-model:value="formState.id" placeholder="请输入试卷ID" style="width: 70%;"/>
+						</a-form-item>
+					</a-col>
+					<a-col :span="4">
+						<a-form-item label="学科名称:" name="subjectId">
+							<a-select
+								v-model:value="formState.subjectId"
+								:options="susbjectOptions"
+								style="width: 70%"
+								placeholder="请选择学科"
+							>
+							</a-select>
+						</a-form-item>
+					</a-col>
+					<a-col :span="4">
+						<a-form-item name="name" label="试卷名称:">
+							<a-input v-model:value="formState.name" placeholder="请输入试卷名称" style="width: 70%;"/>
+						</a-form-item>
+					</a-col>
+					<a-col :span="4">
+						<a-button type="primary" @click="table.refresh(true)" style="margin-right: 10px">
+							<template #icon><SearchOutlined /></template>
+							查询
+						</a-button>
+						<a-button class="snowy-buttom-left" @click="reset">
+							<template #icon><redo-outlined /></template>
+							重置
+						</a-button>
+					</a-col>
+				</a-row>
+			</a-form>
+		</a-card>
+
+
+
+
 
 
 		<s-table
 		<s-table
 			ref="table"
 			ref="table"
@@ -58,11 +86,17 @@
 <script setup name="exampaper">
 <script setup name="exampaper">
 	import Form from './form.vue'
 	import Form from './form.vue'
 	import tExamPaperApi from '@/api/paper/examPaperApi'
 	import tExamPaperApi from '@/api/paper/examPaperApi'
-	const formState = reactive({
+	import tool from "@/utils/tool";
+	const formState = ref({
 		id: null,
 		id: null,
-		verifyStatus: '0',
-		resourcesId: null,
+		name: null,
+		subjectId: null,
 	})
 	})
+	const gradeLevelOptions = tool.dictList('SEMESTER')
+	const susbjectOptions = tool.dictList('SUBJECT')
+	const paperTypeOptions = tool.dictList('PAPER_TYPE')
+
+	const searchFormRef = ref()
     const table = ref()
     const table = ref()
     const formRef = ref()
     const formRef = ref()
     const toolConfig = { refresh: true, height: true, columnSetting: true, striped: false }
     const toolConfig = { refresh: true, height: true, columnSetting: true, striped: false }
@@ -110,7 +144,7 @@
         }
         }
     }
     }
     const loadData = (parameter) => {
     const loadData = (parameter) => {
-        return tExamPaperApi.tExamPaperPage(parameter).then((data) => {
+        return tExamPaperApi.tExamPaperPage(Object.assign(parameter, formState.value)).then((data) => {
             return data
             return data
         })
         })
     }
     }
@@ -136,4 +170,24 @@
             table.value.clearRefreshSelected()
             table.value.clearRefreshSelected()
         })
         })
     }
     }
+
+	// 方法
+	const handleSearch = () => {
+		loadData()
+	}
+
+	const handleReset = () => {
+		searchValue.value = null
+		majorIdName.value = null
+		resourceName.value = null
+		formState.fileName = null
+		formState.resourceType = null
+		formState.resourceTwoType = null
+		formState.suffix = null
+		formState.collegeTwoId = null
+		// formState.majorId = null
+		formState.collegeId = null
+		formState.collegeThreeId = null
+		loadData()
+	}
 </script>
 </script>

+ 94 - 0
src/views/exm/question/form.vue

@@ -0,0 +1,94 @@
+<template>
+    <xn-form-container
+        :title="formData.id ? '编辑t_question' : '增加t_question'"
+        :width="700"
+        :visible="visible"
+        :destroy-on-close="true"
+        @close="onClose"
+    >
+        <a-form ref="formRef" :model="formData" :rules="formRules" layout="vertical">
+            <a-form-item label="QUESTION_TYPE:" name="questionType">
+                <a-input v-model:value="formData.questionType" placeholder="请输入QUESTION_TYPE" allow-clear />
+            </a-form-item>
+            <a-form-item label="SUBJECT_ID:" name="subjectId">
+                <a-input v-model:value="formData.subjectId" placeholder="请输入SUBJECT_ID" allow-clear />
+            </a-form-item>
+            <a-form-item label="SCORE:" name="score">
+                <a-input v-model:value="formData.score" placeholder="请输入SCORE" allow-clear />
+            </a-form-item>
+            <a-form-item label="GRADE_LEVEL:" name="gradeLevel">
+                <a-input v-model:value="formData.gradeLevel" placeholder="请输入GRADE_LEVEL" allow-clear />
+            </a-form-item>
+            <a-form-item label="DIFFICULT:" name="difficult">
+                <a-input v-model:value="formData.difficult" placeholder="请输入DIFFICULT" allow-clear />
+            </a-form-item>
+            <a-form-item label="CORRECT:" name="correct">
+                <a-input v-model:value="formData.correct" placeholder="请输入CORRECT" allow-clear />
+            </a-form-item>
+            <a-form-item label="INFO_TEXT_CONTENT_ID:" name="infoTextContentId">
+                <a-input v-model:value="formData.infoTextContentId" placeholder="请输入INFO_TEXT_CONTENT_ID" allow-clear />
+            </a-form-item>
+            <a-form-item label="STATUS:" name="status">
+                <a-input v-model:value="formData.status" placeholder="请输入STATUS" allow-clear />
+            </a-form-item>
+            <a-form-item label="DELETED:" name="deleted">
+                <a-input v-model:value="formData.deleted" placeholder="请输入DELETED" allow-clear />
+            </a-form-item>
+        </a-form>
+        <template #footer>
+            <a-button style="margin-right: 8px" @click="onClose">关闭</a-button>
+            <a-button type="primary" @click="onSubmit" :loading="submitLoading">保存</a-button>
+        </template>
+    </xn-form-container>
+</template>
+
+<script setup name="tQuestionForm">
+    import { cloneDeep } from 'lodash-es'
+    import { required } from '@/utils/formRules'
+    import tQuestionApi from '@/api/question/tQuestionApi'
+    // 抽屉状态
+    const visible = ref(false)
+    const emit = defineEmits({ successful: null })
+    const formRef = ref()
+    // 表单数据
+    const formData = ref({})
+    const submitLoading = ref(false)
+
+    // 打开抽屉
+    const onOpen = (record) => {
+        visible.value = true
+        if (record) {
+            let recordData = cloneDeep(record)
+            formData.value = Object.assign({}, recordData)
+        }
+    }
+    // 关闭抽屉
+    const onClose = () => {
+        formRef.value.resetFields()
+        formData.value = {}
+        visible.value = false
+    }
+    // 默认要校验的
+    const formRules = {
+    }
+    // 验证并提交数据
+    const onSubmit = () => {
+        formRef.value.validate().then(() => {
+            submitLoading.value = true
+            const formDataParam = cloneDeep(formData.value)
+            tQuestionApi
+                .tQuestionSubmitForm(formDataParam, formDataParam.id)
+                .then(() => {
+                    onClose()
+                    emit('successful')
+                })
+                .finally(() => {
+                    submitLoading.value = false
+                })
+        })
+    }
+    // 抛出函数
+    defineExpose({
+        onOpen
+    })
+</script>

+ 164 - 0
src/views/exm/question/index.vue

@@ -0,0 +1,164 @@
+<template>
+    <a-card :bordered="false">
+        <a-form ref="searchFormRef" name="advanced_search" :model="searchFormState" class="ant-advanced-search-form">
+            <a-row :gutter="24">
+                <a-col :span="6">
+                    <a-form-item label="QUESTION_TYPE" name="questionType">
+                        <a-input v-model:value="searchFormState.questionType" placeholder="请输入QUESTION_TYPE" />
+                    </a-form-item>
+                </a-col>
+                <a-col :span="6">
+                    <a-form-item label="SUBJECT_ID" name="subjectId">
+                        <a-input v-model:value="searchFormState.subjectId" placeholder="请输入SUBJECT_ID" />
+                    </a-form-item>
+                </a-col>
+                <a-col :span="6">
+                    <a-form-item label="GRADE_LEVEL" name="gradeLevel">
+                        <a-input v-model:value="searchFormState.gradeLevel" placeholder="请输入GRADE_LEVEL" />
+                    </a-form-item>
+                </a-col>
+                <a-col :span="6">
+                    <a-button type="primary" @click="table.refresh(true)">查询</a-button>
+                    <a-button style="margin: 0 8px" @click="reset">重置</a-button>
+                </a-col>
+            </a-row>
+        </a-form>
+        <s-table
+            ref="table"
+            :columns="columns"
+            :data="loadData"
+            :alert="options.alert.show"
+            bordered
+            :row-key="(record) => record.id"
+            :tool-config="toolConfig"
+            :row-selection="options.rowSelection"
+        >
+            <template #operator class="table-operator">
+                <a-space>
+                    <a-button type="primary" @click="formRef.onOpen()" v-if="hasPerm('tQuestionAdd')">
+                        <template #icon><plus-outlined /></template>
+                        新增
+                    </a-button>
+                    <xn-batch-delete
+                        v-if="hasPerm('tQuestionBatchDelete')"
+                        :selectedRowKeys="selectedRowKeys"
+                        @batchDelete="deleteBatchTQuestion"
+                    />
+                </a-space>
+            </template>
+            <template #bodyCell="{ column, record }">
+                <template v-if="column.dataIndex === 'action'">
+                    <a-space>
+                        <a @click="formRef.onOpen(record)" v-if="hasPerm('tQuestionEdit')">编辑</a>
+                        <a-divider type="vertical" v-if="hasPerm(['tQuestionEdit', 'tQuestionDelete'], 'and')" />
+                        <a-popconfirm title="确定要删除吗?" @confirm="deleteTQuestion(record)">
+                            <a-button type="link" danger size="small" v-if="hasPerm('tQuestionDelete')">删除</a-button>
+                        </a-popconfirm>
+                    </a-space>
+                </template>
+            </template>
+        </s-table>
+    </a-card>
+    <Form ref="formRef" @successful="table.refresh(true)" />
+</template>
+
+<script setup name="question">
+    import Form from './form.vue'
+    import tQuestionApi from '@/api/question/tQuestionApi'
+    let searchFormState = reactive({})
+    const searchFormRef = ref()
+    const table = ref()
+    const formRef = ref()
+    const toolConfig = { refresh: true, height: true, columnSetting: true, striped: false }
+    const columns = [
+        {
+            title: 'QUESTION_TYPE',
+            dataIndex: 'questionType'
+        },
+        {
+            title: 'SUBJECT_ID',
+            dataIndex: 'subjectId'
+        },
+        {
+            title: 'SCORE',
+            dataIndex: 'score'
+        },
+        {
+            title: 'GRADE_LEVEL',
+            dataIndex: 'gradeLevel'
+        },
+        {
+            title: 'DIFFICULT',
+            dataIndex: 'difficult'
+        },
+        {
+            title: 'CORRECT',
+            dataIndex: 'correct'
+        },
+        {
+            title: 'INFO_TEXT_CONTENT_ID',
+            dataIndex: 'infoTextContentId'
+        },
+        {
+            title: 'STATUS',
+            dataIndex: 'status'
+        },
+        {
+            title: 'DELETED',
+            dataIndex: 'deleted'
+        },
+    ]
+    // 操作栏通过权限判断是否显示
+    if (hasPerm(['tQuestionEdit', 'tQuestionDelete'])) {
+        columns.push({
+            title: '操作',
+            dataIndex: 'action',
+            align: 'center',
+            width: '150px'
+        })
+    }
+    const selectedRowKeys = ref([])
+    // 列表选择配置
+    const options = {
+        // columns数字类型字段加入 needTotal: true 可以勾选自动算账
+        alert: {
+            show: true,
+            clear: () => {
+                selectedRowKeys.value = ref([])
+            }
+        },
+        rowSelection: {
+            onChange: (selectedRowKey, selectedRows) => {
+                selectedRowKeys.value = selectedRowKey
+            }
+        }
+    }
+    const loadData = (parameter) => {
+        const searchFormParam = JSON.parse(JSON.stringify(searchFormState))
+        return tQuestionApi.tQuestionPage(Object.assign(parameter, searchFormParam)).then((data) => {
+            return data
+        })
+    }
+    // 重置
+    const reset = () => {
+        searchFormRef.value.resetFields()
+        table.value.refresh(true)
+    }
+    // 删除
+    const deleteTQuestion = (record) => {
+        let params = [
+            {
+                id: record.id
+            }
+        ]
+        tQuestionApi.tQuestionDelete(params).then(() => {
+            table.value.refresh(true)
+        })
+    }
+    // 批量删除
+    const deleteBatchTQuestion = (params) => {
+        tQuestionApi.tQuestionDelete(params).then(() => {
+            table.value.clearRefreshSelected()
+        })
+    }
+</script>

+ 7 - 0
src/views/myResources/UploadModal.vue

@@ -97,6 +97,13 @@
 		category: [{ required: true, message: '请选择分类', trigger: 'change' }]
 		category: [{ required: true, message: '请选择分类', trigger: 'change' }]
 	}
 	}
 
 
+	watch(
+		() => props.fileList,
+		(val) => {
+			console.log('参数都有什么啊', val)
+		}
+	)
+
 	// 上传相关数据
 	// 上传相关数据
 	const options = ref({
 	const options = ref({
 		target: `${proxy.$RESOURCE_CONFIG.baseContext}/resourceFile/uploadfile`,
 		target: `${proxy.$RESOURCE_CONFIG.baseContext}/resourceFile/uploadfile`,

+ 62 - 0
src/views/notLook/index.vue

@@ -0,0 +1,62 @@
+<template>
+	<a-result status="error" title="没有访问权限" sub-title="如有疑问请联系管理员">
+		<template #extra>
+			<!-- <a-button key="console" type="primary">Go Console</a-button> -->
+		</template>
+		<!-- <template #extra>
+			<a-button key="console" type="primary">Go Console</a-button>
+			<a-button key="buy">Buy Again</a-button>
+		</template> -->
+
+		<!-- <div class="desc">
+			<p style="font-size: 16px">
+				<strong>The content you submitted has the following error:</strong>
+			</p>
+			<p>
+				<close-circle-outlined :style="{ color: 'red' }" />
+				Your account has been frozen
+				<a>Thaw immediately &gt;</a>
+			</p>
+			<p>
+				<close-circle-outlined :style="{ color: 'red' }" />
+				Your account is not yet eligible to apply
+				<a>Apply Unlock &gt;</a>
+			</p>
+		</div> -->
+	</a-result>
+</template>
+
+<script setup>
+	import { ref, onMounted } from 'vue'
+	import { CloseCircleOutlined } from '@ant-design/icons-vue'
+	import tool from '@/utils/tool'
+	//发布按钮状态
+	const releaseVisible = ref(false)
+	const loading = ref(false) // 列表loading
+
+	const isState = ref(0) // 列表loading
+
+	// 搜索值
+	const searchValue = ref('')
+
+	const pagination = reactive({
+		pageSize: 10,
+		pageNum: 1,
+		total: 0
+	})
+	const publishedData = ref()
+	//发布确定
+
+	// 上传资源模态框
+	const uploadModalVisible = ref(false)
+
+	onMounted(() => {
+		// getListData()
+	})
+</script>
+
+<style scoped>
+	.desc p {
+		margin-bottom: 1em;
+	}
+</style>

+ 2 - 2
src/views/portal/components/Header.vue

@@ -18,12 +18,12 @@
 
 
 			<div class="header-right">
 			<div class="header-right">
 				<!-- <a-input-search placeholder="输入关键词搜索" style="width: 200px" /> -->
 				<!-- <a-input-search placeholder="输入关键词搜索" style="width: 200px" /> -->
-				<div style="display: flex">
+				<!-- <div style="display: flex">
 					<SearchOutlined :style="{ fontSize: '16px', color: '#00000083' }" />
 					<SearchOutlined :style="{ fontSize: '16px', color: '#00000083' }" />
 					<div style="width: 5px"></div>
 					<div style="width: 5px"></div>
 					<span style="font-size: 12px; color: #00000083">搜索</span>
 					<span style="font-size: 12px; color: #00000083">搜索</span>
 				</div>
 				</div>
-				<div style="width: 20px"></div>
+				<div style="width: 20px"></div> -->
 				<div style="display: flex">
 				<div style="display: flex">
 					<UserOutlined :style="{ fontSize: '16px', color: '#00000083' }" />
 					<UserOutlined :style="{ fontSize: '16px', color: '#00000083' }" />
 					<div style="width: 5px"></div>
 					<div style="width: 5px"></div>

+ 65 - 57
src/views/resourceCenter/components/ResourceList.vue

@@ -17,68 +17,69 @@
 				@search="onSearch"
 				@search="onSearch"
 			/>
 			/>
 		</div>
 		</div>
-		<a-row :gutter="[16, 16]">
-			<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)"
-							: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
-										? sysConfig.FILE_URL + item.coverImagePath
-										: ''
-								"
-								alt=""
-								:preview="false"
-							></a-image> -->
-							<PlayCircleOutlined
-								:style="{ fontSize: '40px', color: 'white' }"
-								style="position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%)"
-							/>
-						</div>
-					</div>
-					<div style="display: flex; flex-direction: column; padding: 5px 10px">
-						<span style="font-size: 16px; font-weight: bold">{{ item.fileName }}</span>
-						<span style="font-size: 12px">{{ item.collegeIdName }}</span>
-						<span style="font-size: 12px">{{ item.majorIdName }}</span>
-						<div style="display: flex; justify-content: space-between">
-							<div style="display: flex; justify-content: center; align-items: center">
-								<FieldTimeOutlined />
-								<div style="width: 5px"></div>
-								<span style="font-size: 12px">{{ item.uploadTime }}</span>
+		<a-spin :spinning="loading" tip="">
+			<a-row :gutter="[16, 16]">
+				<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)"
+								: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
+                                            ? sysConfig.FILE_URL + item.coverImagePath
+                                            : ''
+                                    "
+                                    alt=""
+                                    :preview="false"
+                                ></a-image> -->
+								<PlayCircleOutlined
+									:style="{ fontSize: '40px', color: 'white' }"
+									style="position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%)"
+								/>
 							</div>
 							</div>
+						</div>
+						<div style="display: flex; flex-direction: column; padding: 5px 10px">
+							<span style="font-size: 16px; font-weight: bold">{{ item.fileName }}</span>
+							<span style="font-size: 12px">{{ item.collegeIdName }}</span>
+							<span style="font-size: 12px">{{ item.majorIdName }}</span>
+							<div style="display: flex; justify-content: space-between">
+								<div style="display: flex; justify-content: center; align-items: center">
+									<FieldTimeOutlined />
+									<div style="width: 5px"></div>
+									<span style="font-size: 12px">{{ item.uploadTime }}</span>
+								</div>
 
 
-							<div style="display: flex; justify-content: center; align-items: center">
-								<EyeOutlined />
-								<div style="width: 5px"></div>
-								<span style="font-size: 12px">{{ item.viewCount }}</span>
+								<div style="display: flex; justify-content: center; align-items: center">
+									<EyeOutlined />
+									<div style="width: 5px"></div>
+									<span style="font-size: 12px">{{ item.viewCount }}</span>
+								</div>
 							</div>
 							</div>
 						</div>
 						</div>
-					</div>
-
-					<!-- <a-card-meta :title="item.title">
-						<template #description>
-							<p>{{ item.description }}</p>
-						</template>
-					</a-card-meta> -->
-				</div>
-			</a-col>
-		</a-row>
 
 
+						<!-- <a-card-meta :title="item.title">
+                            <template #description>
+                                <p>{{ item.description }}</p>
+                            </template>
+                        </a-card-meta> -->
+					</div>
+				</a-col>
+			</a-row>
+		</a-spin>
 		<div style="height: 20px"></div>
 		<div style="height: 20px"></div>
 		<div style="display: flex; width: 100%; align-items: center; justify-content: center">
 		<div style="display: flex; width: 100%; align-items: center; justify-content: center">
 			<a-pagination
 			<a-pagination
@@ -101,6 +102,7 @@
 	import sysConfig from '@/config/index'
 	import sysConfig from '@/config/index'
 	const queryData = ref({})
 	const queryData = ref({})
 	const total = ref(0)
 	const total = ref(0)
+	const loading = ref(false)
 	const tabKey = ref(0)
 	const tabKey = ref(0)
 	const currentPage = reactive({
 	const currentPage = reactive({
 		current: 1,
 		current: 1,
@@ -159,6 +161,7 @@
 	// })
 	// })
 
 
 	const getList = () => {
 	const getList = () => {
+		loading.value = true
 		list({ ...currentPage, ...queryData.value })
 		list({ ...currentPage, ...queryData.value })
 			.then((res) => {
 			.then((res) => {
 				console.log('下面列表获取', res)
 				console.log('下面列表获取', res)
@@ -167,9 +170,11 @@
 					total.value = res.data.total
 					total.value = res.data.total
 					currentPage.current = res.data.current
 					currentPage.current = res.data.current
 				}
 				}
+				loading.value = false
 			})
 			})
 			.catch((err) => {
 			.catch((err) => {
 				console.log(err)
 				console.log(err)
+				loading.value = false
 			})
 			})
 	}
 	}
 
 
@@ -177,6 +182,7 @@
 		currentPage.current = 1
 		currentPage.current = 1
 		currentPage.size = 12
 		currentPage.size = 12
 		queryData.value = data
 		queryData.value = data
+		loading.value = true
 		list({ ...currentPage, ...queryData.value })
 		list({ ...currentPage, ...queryData.value })
 			.then((res) => {
 			.then((res) => {
 				// console.log('外面控制的刷新列表', res)
 				// console.log('外面控制的刷新列表', res)
@@ -185,9 +191,11 @@
 					total.value = res.data.total
 					total.value = res.data.total
 					currentPage.current = res.data.current
 					currentPage.current = res.data.current
 				}
 				}
+				loading.value = false
 			})
 			})
 			.catch((err) => {
 			.catch((err) => {
 				console.log(err)
 				console.log(err)
+				loading.value = false
 			})
 			})
 	}
 	}
 	onMounted(() => {
 	onMounted(() => {

+ 3 - 0
src/views/resourceDetails/components/VideoDetails.vue

@@ -315,6 +315,9 @@
 		getList()
 		getList()
 		const id = route.query.id
 		const id = route.query.id
 		if (id != undefined && id != '') {
 		if (id != undefined && id != '') {
+			// isHaveAuth : 0 1
+			// checkAuth
+
 			queryList({ resourceId: id })
 			queryList({ resourceId: id })
 				.then((res) => {
 				.then((res) => {
 					if (res.data == true) {
 					if (res.data == true) {