Ver Fonte

都好使了

于添 há 6 meses atrás
pai
commit
684047a02a

+ 1 - 0
package.json

@@ -49,6 +49,7 @@
 		"jsbarcode": "^3.11.5",
 		"lodash-es": "4.17.21",
 		"mavon-editor": "^3.0.1",
+		"moment": "^2.30.1",
 		"nprogress": "0.2.0",
 		"pinia": "2.0.33",
 		"qrcode": "1.5.1",

+ 22 - 0
src/utils/tool.js

@@ -225,5 +225,27 @@ tool.truncateString = (str, maxLength) =>{
 	}
 	return str;
 }
+/**
+ * 将毫秒转换为时分秒格式
+ * @param {number} milliseconds - 毫秒数
+ * @returns {string} 格式化后的时间字符串 HH:mm:ss
+ */
+tool.formatMillisecondsToTime = (milliseconds) =>{
+	// 确保输入是数字
+	if (isNaN(milliseconds) || milliseconds < 0) {
+		return '00:00:00';
+	}
+
+	// 计算小时、分钟、秒
+	const seconds = Math.floor(milliseconds / 1000) % 60;
+	const minutes = Math.floor(milliseconds / (1000 * 60)) % 60;
+	const hours = Math.floor(milliseconds / (1000 * 60 * 60));
 
+	// 补零并格式化
+	const formatHours = hours.toString().padStart(2, '0');
+	const formatMinutes = minutes.toString().padStart(2, '0');
+	const formatSeconds = seconds.toString().padStart(2, '0');
+
+	return `${formatHours}:${formatMinutes}:${formatSeconds}`;
+}
 export default tool

+ 1 - 1
src/views/answerManagement/components/DialogView.vue

@@ -67,7 +67,7 @@ const edit = (item) => {
 		if(res.code == 200){
 			formState.pid = item.id
 			formState.hourId = item.hourId
-			recordList.value = item.recordList
+			recordList.value = item.recordChildList
 		}
 	})
 

+ 19 - 3
src/views/answerManagement/components/ListView.vue

@@ -11,7 +11,11 @@
 	>
 		<template #bodyCell="{ column, text, record }">
 			<template v-if="column.dataIndex === 'haveAnswer'">
-				<span >{{ text == 1 ? '是' : '否'}}</span>
+				<span v-if="text == 0" style="color: blue">否</span>
+				<span v-if="text == 1" style="color: red">是</span>
+			</template>
+			<template v-if="column.dataIndex === 'recordTime'">
+				<span >{{tool.formatMillisecondsToTime(text)}}</span>
 			</template>
 
 			<template v-if="column.dataIndex === 'action'">
@@ -79,13 +83,25 @@ const columns = [
 		title: '课程名',
 		dataIndex: 'courseIdName',
 		// sorter: true,
-		width: '15%'
+		width: '10%'
+	},
+	{
+		title: '问答类型',
+		dataIndex: 'infoTypeName',
+		// sorter: true,
+		width: '5%'
+	},
+	{
+		title: '视频时间',
+		dataIndex: 'recordTime',
+		// sorter: true,
+		width: '5%'
 	},
 	{
 		title: '是否回复',
 		dataIndex: 'haveAnswer',
 		// sorter: true,
-		width: '12%'
+		width: '5%'
 	},
 	{
 		title: '操作',

+ 253 - 237
src/views/courseOpen/components/DialogView.vue

@@ -1,165 +1,171 @@
 <template>
-		<a-modal v-model:visible="visible" :title="title" @ok="handleOk">
-			<a-form
-				:model="formState"
-				:rules="rules"
-				ref="formRef"
-				layout="horizontal"
-				:label-col="{ span: 7 }"
-				:wrapper-col="{ span: 12 }"
-			>
-				<a-form-item label="教室名称" name="room">
-					<a-input v-model:value="formState.room" placeholder="输入教室名称" />
-				</a-form-item>
-
-				<a-form-item label="老师" name="teacherId">
-					<a-select
-						v-model:value="formState.teacherId"
-						:fieldNames="{ label: 'name', value: 'id' }"
-						:options="userAllListOptions"
-						placeholder="请选择老师"
-						@change="changeCollegeMajor"
-					/>
-				</a-form-item>
-
-				<a-form-item label="班级" name="gradesId">
-					<a-select
-						v-model:value="formState.gradesId"
-						:fieldNames="{ label: 'gradesName', value: 'gradesId' }"
-						:options="gradesQueryListOptions"
-						placeholder="请选择班级"
-						@change="changeCollegeMajor"
-					/>
-				</a-form-item>
-
-				<a-form-item label="课程" name="courseId">
-					<a-select
-						v-model:value="formState.courseId"
-						:fieldNames="{ label: 'courseName', value: 'courseId' }"
-						:options="courseinfoAllListOptions"
-						placeholder="请选择课程"
-						@change="changeCollegeMajor"
-					/>
-				</a-form-item>
-
-				<a-form-item label="学期" name="semesterId">
-					<a-select
-						v-model:value="formState.semesterId"
-						:fieldNames="{ label: 'name', value: 'id' }"
-						:options="downListOptions"
-						placeholder="请选择学期"
-						@change="changeCollegeMajor"
-					/>
-				</a-form-item>
-
-
-				<a-form-item label="开始节次" name="startPeriod">
-<!--					<a-input v-model:value="formState.startPeriod" placeholder="输入开始节次" />-->
-					<a-input-number  v-model:value="formState.startPeriod" :min="1" :max="100" placeholder="输入开始节次" style="width: 100%;"/>
-				</a-form-item>
-				<a-form-item label="结束节次" name="endPeriod">
-<!--					<a-input v-model:value="formState.endPeriod" placeholder="输入结束节次" />-->
-					<a-input-number  v-model:value="formState.endPeriod" :min="1" :max="100" placeholder="输入结束节次" style="width: 100%;"/>
-				</a-form-item>
-
-
-				<a-form-item label="上课周期" name="scheduleTime">
-					<a-select
-						v-model:value="formState.scheduleTime"
-						:fieldNames="{ label: 'label', value: 'value' }"
-						:options="COURSE_OPEN_SCHEDULE_TIME_Options"
-						placeholder="请选择上课周期"
-						@change="changeCollegeMajor"
-					/>
-				</a-form-item>
-				<a-form-item label="单双周" name="weekType">
-					<a-select
-						v-model:value="formState.weekType"
-						:fieldNames="{ label: 'label', value: 'value' }"
-						:options="COURSE_OPEN_WEEK_TYPE_Options"
-						placeholder="请选择单双周"
-						@change="changeCollegeMajor"
-					/>
-				</a-form-item>
-				<a-form-item label="时间区间" name="date">
-					<a-range-picker
-						v-model:value="formState.date"
-						style="margin-right: 12px; width: 240px"
-					/>
-				</a-form-item>
-				<a-form-item label="状态" name="status">
-					<a-select
-						v-model:value="formState.status"
-						:fieldNames="{ label: 'label', value: 'value' }"
-						:options="COURSE_OPEN_STATUS_Options"
-						placeholder="请选择状态"
-						@change="changeCollegeMajor"
-					/>
-				</a-form-item>
-
-			</a-form>
-		</a-modal>
+	<a-modal v-model:visible="visible" :title="title" @ok="handleOk">
+		<a-form
+			:model="formState"
+			:rules="rules"
+			ref="formRef"
+			layout="horizontal"
+			:label-col="{ span: 7 }"
+			:wrapper-col="{ span: 12 }"
+		>
+			<a-form-item label="教室名称" name="room">
+				<a-input v-model:value="formState.room" placeholder="输入教室名称"/>
+			</a-form-item>
+
+			<a-form-item label="老师" name="teacherId">
+				<a-select
+					v-model:value="formState.teacherId"
+					:fieldNames="{ label: 'name', value: 'id' }"
+					:options="userAllListOptions"
+					placeholder="请选择老师"
+					@change="changeCollegeMajor"
+				/>
+			</a-form-item>
+
+			<a-form-item label="班级" name="gradesId">
+				<a-select
+					v-model:value="formState.gradesId"
+					:fieldNames="{ label: 'gradesName', value: 'gradesId' }"
+					:options="gradesQueryListOptions"
+					placeholder="请选择班级"
+					@change="changeCollegeMajor"
+				/>
+			</a-form-item>
+
+			<a-form-item label="课程" name="courseId">
+				<a-select
+					v-model:value="formState.courseId"
+					:fieldNames="{ label: 'courseName', value: 'courseId' }"
+					:options="courseinfoAllListOptions"
+					placeholder="请选择课程"
+					@change="changeCollegeMajor"
+				/>
+			</a-form-item>
+
+			<a-form-item label="学期" name="semesterId">
+				<a-select
+					v-model:value="formState.semesterId"
+					:fieldNames="{ label: 'name', value: 'id' }"
+					:options="downListOptions"
+					placeholder="请选择学期"
+					@change="changeCollegeMajor"
+				/>
+			</a-form-item>
+
+
+			<a-form-item label="开始节次" name="startPeriod">
+				<!--					<a-input v-model:value="formState.startPeriod" placeholder="输入开始节次" />-->
+				<a-input-number v-model:value="formState.startPeriod" :min="1" :max="100" placeholder="输入开始节次"
+								style="width: 100%;"/>
+			</a-form-item>
+			<a-form-item label="结束节次" name="endPeriod">
+				<!--					<a-input v-model:value="formState.endPeriod" placeholder="输入结束节次" />-->
+				<a-input-number v-model:value="formState.endPeriod" :min="1" :max="100" placeholder="输入结束节次"
+								style="width: 100%;"/>
+			</a-form-item>
+
+
+			<a-form-item label="上课周期" name="scheduleTime">
+				<a-select
+					v-model:value="formState.scheduleTime"
+					:fieldNames="{ label: 'label', value: 'value' }"
+					:options="COURSE_OPEN_SCHEDULE_TIME_Options"
+					placeholder="请选择上课周期"
+					@change="changeCollegeMajor"
+				/>
+			</a-form-item>
+			<a-form-item label="单双周" name="weekType">
+				<a-select
+					v-model:value="formState.weekType"
+					:fieldNames="{ label: 'label', value: 'value' }"
+					:options="COURSE_OPEN_WEEK_TYPE_Options"
+					placeholder="请选择单双周"
+					@change="changeCollegeMajor"
+				/>
+			</a-form-item>
+			<a-form-item label="时间区间" name="date">
+				<a-range-picker
+					v-model:value="formState.date"
+					style="margin-right: 12px; width: 240px"
+				/>
+			</a-form-item>
+			<a-form-item label="状态" name="status">
+				<a-select
+					v-model:value="formState.status"
+					:fieldNames="{ label: 'label', value: 'value' }"
+					:options="COURSE_OPEN_STATUS_Options"
+					placeholder="请选择状态"
+					@change="changeCollegeMajor"
+				/>
+			</a-form-item>
+
+		</a-form>
+	</a-modal>
 </template>
 <script setup>
 import {reactive, ref} from 'vue'
-	import resourceAuditApi from '@/api/resourceAudit.js'
-	import { downList ,userAllList,gradesQueryList,courseinfoAllList,} from '@/api/semester/index.js'
-	const collegeMajorOptions = ref([]) //院系
-	const majorIdName = ref([]) //院系回显
-	const majorOptions = ref([]) //专业
-	const semesterOptions = ref([]) //专业
-
-	const downListOptions = ref([]) //专业
-	const userAllListOptions = ref([]) //专业
-	const gradesQueryListOptions = ref([]) //专业
-	const courseinfoAllListOptions = ref([]) //专业
+import moment from 'moment'
+import dayjs from 'dayjs';
+import resourceAuditApi from '@/api/resourceAudit.js'
+import {downList, userAllList, gradesQueryList, courseinfoAllList,} from '@/api/semester/index.js'
+
+const collegeMajorOptions = ref([]) //院系
+const majorIdName = ref([]) //院系回显
+const majorOptions = ref([]) //专业
+const semesterOptions = ref([]) //专业
+
+const downListOptions = ref([]) //专业
+const userAllListOptions = ref([]) //专业
+const gradesQueryListOptions = ref([]) //专业
+const courseinfoAllListOptions = ref([]) //专业
 
 const COURSE_OPEN_SCHEDULE_TIME_Options = tool.dictList('COURSE_OPEN_SCHEDULE_TIME')
 const COURSE_OPEN_WEEK_TYPE_Options = tool.dictList('COURSE_OPEN_WEEK_TYPE')
-	const COURSE_OPEN_STATUS_Options = tool.dictList('COURSE_OPEN_STATUS')
+const COURSE_OPEN_STATUS_Options = tool.dictList('COURSE_OPEN_STATUS')
 
-	const formRef = ref() //专业
-	const mode = ref('add') //专业
-	const title = ref('添加') //专业
-	import {addItem,detail,editItem} from '@/api/courseopen'
+const formRef = ref() //专业
+const mode = ref('add') //专业
+const title = ref('添加') //专业
+import {addItem, detail, editItem} from '@/api/courseopen'
 import tool from "@/utils/tool";
 import {message} from "ant-design-vue";
-	const visible = ref(false)
 
-	const startPeriodTag = ref(false)
-	const endPeriodTag = ref(false)
+const visible = ref(false)
+
+const startPeriodTag = ref(false)
+const endPeriodTag = ref(false)
 
-const emit = defineEmits([ "handleAddItem" ])
+const emit = defineEmits(["handleAddItem"])
 
 const formState = ref({
-		id : undefined,
-		room: undefined,
-		teacherId: undefined,
-		gradesId: undefined,
-		courseId: undefined,
-		semesterId: undefined,
-		startPeriod : undefined,
-		endPeriod : undefined,
-		scheduleTime : undefined,
-		weekType : undefined,
-		status : undefined,
-		date : undefined,
-	startTime : undefined,
-	endTime : undefined,
-	})
-	const rules = {
-		room: [{ required: true, message: '请输入教室名称', trigger: 'blur' }],
-		teacherId: [{ required: true, message: '请选择老师', trigger: 'change' }],
-		gradesId: [{ required: true, message: '请选择班级', trigger: 'change' }],
-		courseId: [{ required: true, message: '请选择课程', trigger: 'change' }],
-		semesterId: [{ required: true, message: '请选择学期', trigger: 'change' }],
-		startPeriod: [{ required: true, message: '请输入开始节次', trigger: 'blur' }],
-		endPeriod: [{ required: true, message: '请输入结束节次', trigger: 'blur' }],
-		scheduleTime: [{ required: true, message: '请选择上课周期', trigger: 'change' }],
-		weekType: [{ required: true, message: '请选择单双周', trigger: 'change' }],
-		status: [{ required: true, message: '请选择状态', trigger: 'change' }],
-		date: [{ required: true, message: '请选择时间', trigger: 'change' }],
-	}
+	id: undefined,
+	room: undefined,
+	teacherId: undefined,
+	gradesId: undefined,
+	courseId: undefined,
+	semesterId: undefined,
+	startPeriod: undefined,
+	endPeriod: undefined,
+	scheduleTime: undefined,
+	weekType: undefined,
+	status: undefined,
+	date: undefined,
+	startTime: undefined,
+	endTime: undefined,
+})
+const rules = {
+	room: [{required: true, message: '请输入教室名称', trigger: 'blur'}],
+	teacherId: [{required: true, message: '请选择老师', trigger: 'change'}],
+	gradesId: [{required: true, message: '请选择班级', trigger: 'change'}],
+	courseId: [{required: true, message: '请选择课程', trigger: 'change'}],
+	semesterId: [{required: true, message: '请选择学期', trigger: 'change'}],
+	startPeriod: [{required: true, message: '请输入开始节次', trigger: 'blur'}],
+	endPeriod: [{required: true, message: '请输入结束节次', trigger: 'blur'}],
+	scheduleTime: [{required: true, message: '请选择上课周期', trigger: 'change'}],
+	weekType: [{required: true, message: '请选择单双周', trigger: 'change'}],
+	status: [{required: true, message: '请选择状态', trigger: 'change'}],
+	date: [{required: true, message: '请选择时间', trigger: 'change'}],
+}
 
 watch(
 	() => visible.value,
@@ -168,123 +174,133 @@ watch(
 			formRef.value.resetFields()
 		}
 	},
-	{ deep: true, immediate: true }
+	{deep: true, immediate: true}
 )
 watch(
 	() => formState.value.startPeriod,
 	(newVal, oldVal) => {
-		if(Number(formState.value.endPeriod)){
-			if (newVal>formState.value.endPeriod) {
+		if (Number(formState.value.endPeriod)) {
+			if (newVal > formState.value.endPeriod) {
 				message.error('开始节次不能大于结束节次')
-				startPeriodTag.value =  true
-			}else{
-				startPeriodTag.value =  false
+				startPeriodTag.value = true
+			} else {
+				startPeriodTag.value = false
 			}
 		}
 
 	},
-	{ deep: true, immediate: true }
+	{deep: true, immediate: true}
 )
 watch(
 	() => formState.value.endPeriod,
 	(newVal, oldVal) => {
-		if(Number(formState.value.startPeriod)) {
+		if (Number(formState.value.startPeriod)) {
 			if (newVal < formState.value.startPeriod) {
 				message.error('结束节次不能小于开始节次')
-				endPeriodTag.value =  true
-			}else{
-				endPeriodTag.value =  false
+				endPeriodTag.value = true
+			} else {
+				endPeriodTag.value = false
 			}
 		}
 	},
-	{ deep: true, immediate: true }
+	{deep: true, immediate: true}
 )
 
-	const open = () => {
+const open = () => {
 
-		visible.value = true
-		mode.value = 'add'
-		title.value = '添加'
-		startPeriodTag.value = false
-		endPeriodTag.value = false
-	}
+	visible.value = true
+	mode.value = 'add'
+	title.value = '添加'
+	startPeriodTag.value = false
+	endPeriodTag.value = false
+}
 const edit = (item) => {
 	visible.value = true
 	mode.value = 'edit'
 	title.value = '修改'
-	console.log('编辑内容',item)
+	console.log('编辑内容', item)
 
 	startPeriodTag.value = false
 	endPeriodTag.value = false
-	detail({id : item.id}).then((res)=>{
-		if(res.code ==200){
+	detail({id: item.id}).then((res) => {
+		if (res.code == 200) {
 			formState.value.id = item.id
-			if (res.data.startTime != null && res.data.endTime != null){
-				res.data.date = [res.data.startTime,res.data.endTime]
+
+			formState.value = res.data
+
+			formState.value = {...formState.value, id: item.id}
+			if ((res.data.startTime != null && res.data.startTime != '') && (res.data.endTime != null && res.data.endTime != '')) {
+				// res.data.date = [res.data.startTime,res.data.endTime]
+				formState.value.date = [
+					dayjs(res.data.startTime),
+					dayjs(res.data.endTime)]
 			}
-			formState.value = {id: item.id,...res.data}
 			formState.value.gradesId = Number(formState.value.gradesId)
 			// formState.value.semesterId = Number(formState.value.semesterId)
 
-			console.log('会先对象',formState.value)
+
+
+
+			console.log('会先对象', formState.value)
 			// changeCollegeMajor(formState.collegeId)
 		}
 	})
 
 }
-	const handleOk = (e) => {
-
-
-
-		if (startPeriodTag.value == false && endPeriodTag.value == false){
-			formRef.value.validate().then(()=>{
-				let json = JSON.parse(JSON.stringify(formState.value))
-
-				json.startTime = json.date[0]
-				json.endTime = json.date[1]
-				if (mode.value =='add'){
-					addItem(json).then((res)=>{
-						emit("handleAddItem")
-						visible.value = false
-					})
-				}
-				if (mode.value =='edit'){
-					editItem(json).then((res)=>{
-						emit("handleAddItem")
-						visible.value = false
-					})
-				}
-			})
-		}else{
-			message.error('开始节次或结束节次数据不正确')
-		}
+const handleOk = (e) => {
 
 
+	if (startPeriodTag.value == false && endPeriodTag.value == false) {
+		formRef.value.validate().then(() => {
+			let json = JSON.parse(JSON.stringify(formState.value))
 
-		// console.logckPoint.value = false
-	}
-	const getOrgTreeSelector = () => {
-		resourceAuditApi
-			.orgList()
-			.then((res) => {
-				console.log(res.data, '获取学院')
-				collegeMajorOptions.value = res.data
-			})
-			.catch((err) => {
-				console.log(err)
-			})
-	}
-	const getSemesterSelector = () => {
-
-		console.log('对象内容')
-		downList().then((res) => {
-				console.log(res.data, '获取学期')
-			semesterOptions.value = res.data
-			})
-			.catch((err) => {
-				console.log(err)
-			})
+			json.startTime = dayjs(json.date[0]).format('YYYY-MM-DD HH:mm:ss')
+			json.endTime = dayjs(json.date[1]).format('YYYY-MM-DD HH:mm:ss')
+
+			json.date = undefined
+			console.log('准备提交的数据是',json)
+			if (mode.value == 'add') {
+				addItem(json).then((res) => {
+					emit("handleAddItem")
+					visible.value = false
+				})
+			}
+			if (mode.value == 'edit') {
+				editItem(json).then((res) => {
+					emit("handleAddItem")
+					visible.value = false
+				})
+			}
+		})
+	} else {
+		message.error('开始节次或结束节次数据不正确')
 	}
+
+
+	// console.logckPoint.value = false
+}
+const getOrgTreeSelector = () => {
+	resourceAuditApi
+		.orgList()
+		.then((res) => {
+			console.log(res.data, '获取学院')
+			collegeMajorOptions.value = res.data
+		})
+		.catch((err) => {
+			console.log(err)
+		})
+}
+const getSemesterSelector = () => {
+
+	console.log('对象内容')
+	downList().then((res) => {
+		console.log(res.data, '获取学期')
+		semesterOptions.value = res.data
+	})
+		.catch((err) => {
+			console.log(err)
+		})
+}
 const changeCollegeMajor = (value, selectedOptions) => {
 	console.log('Selected:', value, selectedOptions)
 	// if (!value) {
@@ -311,43 +327,43 @@ const changeCollegeMajor = (value, selectedOptions) => {
 }
 const getCollegeMajor = (id) => {
 	resourceAuditApi
-		.zyselect({ collegeId: id })
+		.zyselect({collegeId: id})
 		.then((res) => {
-			console.log(res.data, '专业下拉数据',formState)
+			console.log(res.data, '专业下拉数据', formState)
 			majorOptions.value = res.data
 		})
 		.catch((err) => {
 			console.log(err)
 		})
 }
-	onMounted( ()=>{
-		getOrgTreeSelector()
-		// getSemesterSelector()
-		getPullDara()
+onMounted(() => {
+	getOrgTreeSelector()
+	// getSemesterSelector()
+	getPullDara()
 
-		console.log("都什么呢",COURSE_OPEN_SCHEDULE_TIME_Options)
-	})
+	console.log("都什么呢", COURSE_OPEN_SCHEDULE_TIME_Options)
+})
 const getPullDara = () => {
 	downList()
 		.then((res) => {
-			console.log(res.data, '专业下拉数据',formState)
+			console.log(res.data, '专业下拉数据', formState)
 			downListOptions.value = res.data
 		})
 		.catch((err) => {
 			console.log(err)
 		})
-	userAllList({eduIdentity : 1})
+	userAllList({eduIdentity: 1})
 		.then((res) => {
 
 			userAllListOptions.value = res.data
-			console.log(res.data, '老师数据',userAllListOptions.value)
+			console.log(res.data, '老师数据', userAllListOptions.value)
 		})
 		.catch((err) => {
 			console.log(err)
 		})
 	gradesQueryList()
 		.then((res) => {
-			console.log(res.data, '专业下拉数据',formState)
+			console.log(res.data, '专业下拉数据', formState)
 			gradesQueryListOptions.value = res.data
 		})
 		.catch((err) => {
@@ -355,7 +371,7 @@ const getPullDara = () => {
 		})
 	courseinfoAllList()
 		.then((res) => {
-			console.log(res.data, '专业下拉数据',formState)
+			console.log(res.data, '专业下拉数据', formState)
 			courseinfoAllListOptions.value = res.data
 		})
 		.catch((err) => {
@@ -364,5 +380,5 @@ const getPullDara = () => {
 }
 
 
-	defineExpose({ open ,edit})
+defineExpose({open, edit})
 </script>

+ 31 - 2
src/views/resourceCenter/components/ResourceList.vue

@@ -9,7 +9,11 @@
 				<div style="width: 20px"></div>
 				<TabSwitcher @selectTab="selectTab" />
 			</div>
-
+			<a-range-picker
+				v-model:value="currentPage.date"
+				@calendarChange="calendarChange"
+				style="margin-right: 12px; width: 240px"
+			/>
 			<a-input-search
 				v-model:value="currentPage.queryInfo"
 				placeholder="请输入资源关键词"
@@ -104,10 +108,15 @@
 	const total = ref(0)
 	const loading = ref(false)
 	const tabKey = ref(0)
+	const tabKeyName = ref('')
+	const dateName = ref([])
 	const currentPage = reactive({
 		current: 1,
 		size: 12,
 		queryInfo: '',
+		date : undefined,
+		startTime : undefined,
+		endTime : undefined,
 		sortflag: tabKey
 	})
 	const searchKeyword = ref('')
@@ -126,14 +135,34 @@
 		// { id: 12, title: '学术交流英语', description: '来源学校', name: '姓名', time: '05-22 10:49', look: 10000 }
 		// 更多数据...
 	])
-
+	const calendarChange = (dates, dateStrings , info ) =>{
+		console.log('修改时间',' dates ',dates,' dateStrings ',dateStrings,' info ',info)
+		// currentPage.date = dateStrings
+		// if(dateStrings[0] == '' && dateStrings[1] == ''){
+		//
+		// }
+		dateName.value = dateStrings
+		selectTab(tabKeyName.value)
+	}
 	const selectTab = (key) => {
 		console.log('现在是点了tab', key)
+		tabKeyName.value = key
 		if (key == 'latest') {
 			tabKey.value = 0
 		} else {
 			tabKey.value = 1
 		}
+		console.log('有没有',' currentPage.date ',currentPage.date,)
+		if(dateName.value[0] == ''  && dateName.value[1] == ''){
+			dateName.value = []
+			currentPage.startTime = undefined
+			currentPage.endTime = undefined
+		}else{
+			currentPage.startTime =	dateName.value[0]
+			currentPage.endTime = dateName.value[1]
+			dateName.value = []
+		}
+		currentPage.date = undefined
 		currentPage.sortflag = tabKey.value
 		currentPage.current = 1
 		currentPage.size = 12

+ 3 - 687
src/views/resourceStatistics/index.vue

@@ -1,703 +1,19 @@
 <template>
-	<div class="rresource-statistics">
-		<div class="container">
-			<h1>资源库统计分析</h1>
-
-			<!-- 摘要信息 -->
-			<div class="summary-row">
-				<div class="summary-box">
-					<h3>总资源数</h3>
-					<p>{{ summaryData.totalResources }}</p>
-				</div>
-				<div class="summary-box">
-					<h3>总存储空间</h3>
-					<p>{{ summaryData.totalStorage }}</p>
-				</div>
-				<div class="summary-box">
-					<h3>总观看人数</h3>
-					<p>{{ summaryData.totalViews }}</p>
-				</div>
-				<div class="summary-box">
-					<h3>总收藏人数</h3>
-					<p>{{ summaryData.totalFavorites }}</p>
-				</div>
-			</div>
-
-			<!-- 存储空间信息 -->
-			<div class="storage-info">
-				<h3>资源库存储空间使用情况</h3>
-				<p>当前资源库总容量:10 TB | 已使用:4.2 TB | 使用率:42%</p>
-			</div>
-
-			<!-- 筛选器 -->
-			<div class="filters">
-				<label>筛选院系:</label>
-				<a-select
-					v-model:value="filters.department"
-					style="width: 150px; margin-right: 20px"
-					@change="handleDepartmentChange"
-				>
-					<a-select-option value="all">全部院系</a-select-option>
-					<a-select-option value="aviation">航空学院</a-select-option>
-					<a-select-option value="military">军事管理系</a-select-option>
-					<a-select-option value="politics">政治工作部</a-select-option>
-					<a-select-option value="maintenance">地面维修中心</a-select-option>
-					<a-select-option value="other">其他部门</a-select-option>
-				</a-select>
-
-				<label>时间范围:</label>
-				<a-select v-model:value="filters.timeRange" style="width: 120px" @change="handleTimeChange">
-					<a-select-option value="all">全部时间</a-select-option>
-					<a-select-option value="30">最近30天</a-select-option>
-					<a-select-option value="90">最近90天</a-select-option>
-					<a-select-option value="180">最近180天</a-select-option>
-					<a-select-option value="365">最近1年</a-select-option>
-				</a-select>
-			</div>
-
-			<!-- 资源类型分布 -->
-			<div class="chart-container">
-				<h2>资源类型分布</h2>
-				<div class="chart-row">
-					<div class="chart-col">
-						<div ref="typeChartRef" class="chart"></div>
-					</div>
-					<div class="chart-col">
-						<div ref="departmentChartRef" class="chart"></div>
-					</div>
-				</div>
-			</div>
-
-			<!-- 资源可见性与热度 -->
-			<div class="chart-container">
-				<h2>资源可见性与热度</h2>
-				<div class="chart-row">
-					<div class="chart-col">
-						<div ref="visibilityChartRef" class="chart"></div>
-					</div>
-					<div class="chart-col">
-						<div ref="hotnessChartRef" class="chart"></div>
-					</div>
-				</div>
-			</div>
-
-			<!-- 文件格式分布 -->
-			<div class="chart-container">
-				<h2>文件格式分布</h2>
-				<div class="chart-row">
-					<div class="chart-col">
-						<div ref="formatChartRef" class="chart"></div>
-					</div>
-					<div class="chart-col">
-						<div ref="storageChartRef" class="chart"></div>
-					</div>
-				</div>
-			</div>
-
-			<!-- 资源使用情况分析 -->
-			<div class="chart-container">
-				<h2>资源使用情况分析</h2>
-				<div class="chart-row">
-					<div class="chart-col">
-						<div ref="viewsChartRef" class="chart"></div>
-					</div>
-					<div class="chart-col">
-						<div ref="engagementChartRef" class="chart"></div>
-					</div>
-				</div>
-			</div>
-
-			<!-- 时间趋势分析 -->
-			<div class="chart-container">
-				<h2>上传与访问时间趋势</h2>
-				<div ref="trendChartRef" class="chart-full"></div>
-			</div>
-
-			<footer>
-				<p>数据更新时间: {{ updateTime }} | 资源库统计分析系统</p>
-			</footer>
-		</div>
-	</div>
+	<StatisticalAnalysisResourceLibrary style="width: 100%"></StatisticalAnalysisResourceLibrary>
 </template>
 
 <script setup>
 	import { ref, onMounted, nextTick } from 'vue'
-	import * as echarts from 'echarts'
-
-	// 响应式数据
-	const summaryData = ref({
-		totalResources: '1,247',
-		totalStorage: '4.2 TB',
-		totalViews: '89,532',
-		totalFavorites: '15,678'
-	})
-
-	const filters = ref({
-		department: 'all',
-		timeRange: 'all'
-	})
-
-	const updateTime = ref('2025年8月19日')
-
-	// 图表引用
-	const typeChartRef = ref()
-	const departmentChartRef = ref()
-	const visibilityChartRef = ref()
-	const hotnessChartRef = ref()
-	const formatChartRef = ref()
-	const storageChartRef = ref()
-	const viewsChartRef = ref()
-	const engagementChartRef = ref()
-	const trendChartRef = ref()
-
-	// 模拟数据
-	const mockData = {
-		types: ['航空教学', '部队管理', '政治工作', '地面维修', '其他'],
-		typeCounts: [345, 278, 192, 231, 201],
-		typeStorage: [1.2, 0.8, 0.6, 0.9, 0.7],
-
-		departments: ['航空学院', '军事管理系', '政治工作部', '地面维修中心', '其他部门'],
-		departmentCounts: [412, 289, 176, 223, 147],
-		departmentStorage: [1.5, 0.9, 0.5, 0.8, 0.5],
-
-		visibility: ['公开', '非公开'],
-		visibilityCounts: [987, 260],
-
-		hotness: ['热门', '非热门'],
-		hotnessCounts: [312, 935],
-		recommended: ['已推荐', '未推荐'],
-		recommendedCounts: [187, 1060],
-
-		formats: ['mp4', 'pdf', 'docx', 'pptx', 'xlsx', 'jpg', 'avi', 'wmv', 'mkv', 'other'],
-		formatCounts: [320, 312, 135, 189, 98, 167, 56, 67, 41, 163],
-		formatStorage: [2.1, 0.3, 0.15, 0.25, 0.1, 0.08, 0.4, 0.3, 0.2, 0.12],
-		formatAvgSize: ['6.6GB', '960MB', '1.1MB', '1.3MB', '1.0MB', '500KB', '7.1GB', '4.5GB', '4.9GB', '750KB'],
-
-		engagement: ['观看', '收藏', '分享'],
-		engagementCounts: [89532, 15678, 7892],
-
-		trendLabels: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月'],
-		uploadTrend: [120, 95, 140, 110, 135, 150, 130, 80],
-		viewTrend: [8500, 7200, 9800, 9200, 10500, 11200, 10800, 12300]
-	}
-
-	// 初始化图表
-	const initCharts = () => {
-		// 资源类型分布图
-		if (typeChartRef.value) {
-			const typeChart = echarts.init(typeChartRef.value)
-			typeChart.setOption({
-				title: {
-					text: '按资源类型分类 (数量)',
-					left: 'center'
-				},
-				tooltip: {
-					trigger: 'item'
-				},
-				legend: {
-					bottom: '5%',
-					left: 'center'
-				},
-				series: [
-					{
-						type: 'pie',
-						radius: ['40%', '70%'],
-						data: mockData.types.map((name, index) => ({
-							value: mockData.typeCounts[index],
-							name
-						})),
-						emphasis: {
-							itemStyle: {
-								shadowBlur: 10,
-								shadowOffsetX: 0,
-								shadowColor: 'rgba(0, 0, 0, 0.5)'
-							}
-						}
-					}
-				]
-			})
-		}
-
-		// 院系分布图
-		if (departmentChartRef.value) {
-			const departmentChart = echarts.init(departmentChartRef.value)
-			departmentChart.setOption({
-				title: {
-					text: '按院系分布 (数量)',
-					left: 'center'
-				},
-				tooltip: {
-					trigger: 'item'
-				},
-				legend: {
-					bottom: '5%',
-					left: 'center'
-				},
-				series: [
-					{
-						type: 'pie',
-						radius: ['50%', '70%'],
-						avoidLabelOverlap: false,
-						data: mockData.departments.map((name, index) => ({
-							value: mockData.departmentCounts[index],
-							name
-						}))
-					}
-				]
-			})
-		}
-
-		// 可见性分析
-		if (visibilityChartRef.value) {
-			const visibilityChart = echarts.init(visibilityChartRef.value)
-			visibilityChart.setOption({
-				title: {
-					text: '资源公开情况',
-					left: 'center'
-				},
-				tooltip: {
-					trigger: 'axis',
-					axisPointer: {
-						type: 'shadow'
-					}
-				},
-				xAxis: {
-					type: 'category',
-					data: mockData.visibility
-				},
-				yAxis: {
-					type: 'value',
-					name: '资源数量'
-				},
-				series: [
-					{
-						name: '资源数量',
-						type: 'bar',
-						data: mockData.visibilityCounts,
-						itemStyle: {
-							color: function (params) {
-								const colors = ['#2ecc71', '#e74c3c']
-								return colors[params.dataIndex]
-							}
-						}
-					}
-				]
-			})
-		}
-
-		// 热度分析
-		if (hotnessChartRef.value) {
-			const hotnessChart = echarts.init(hotnessChartRef.value)
-			hotnessChart.setOption({
-				title: {
-					text: '资源热度分析',
-					left: 'center'
-				},
-				tooltip: {
-					trigger: 'item'
-				},
-				angleAxis: {
-					type: 'category',
-					data: ['热门资源', '推荐资源', '热门且推荐']
-				},
-				radiusAxis: {},
-				polar: {},
-				series: [
-					{
-						type: 'bar',
-						data: [312, 187, 89],
-						coordinateSystem: 'polar',
-						name: '资源数量',
-						itemStyle: {
-							color: function (params) {
-								const colors = ['#e74c3c', '#3498db', '#9b59b6']
-								return colors[params.dataIndex]
-							}
-						}
-					}
-				]
-			})
-		}
-
-		// 文件格式数量分布
-		if (formatChartRef.value) {
-			const formatChart = echarts.init(formatChartRef.value)
-			formatChart.setOption({
-				title: {
-					text: '不同文件格式的数量分布',
-					left: 'center'
-				},
-				tooltip: {
-					trigger: 'axis',
-					axisPointer: {
-						type: 'shadow'
-					}
-				},
-				grid: {
-					left: '3%',
-					right: '4%',
-					bottom: '3%',
-					containLabel: true
-				},
-				xAxis: {
-					type: 'value',
-					name: '文件数量'
-				},
-				yAxis: {
-					type: 'category',
-					data: mockData.formats
-				},
-				series: [
-					{
-						name: '文件数量',
-						type: 'bar',
-						data: mockData.formatCounts,
-						itemStyle: {
-							color: '#34495e'
-						}
-					}
-				]
-			})
-		}
+	import StatisticalAnalysisResourceLibrary from '@/views/statisticalAnalysis/statisticalAnalysisResourceLibrary/index.vue'
 
-		// 存储空间占用分布
-		if (storageChartRef.value) {
-			const storageChart = echarts.init(storageChartRef.value)
-			storageChart.setOption({
-				title: {
-					text: '不同文件格式的存储空间占用',
-					left: 'center'
-				},
-				tooltip: {
-					trigger: 'item',
-					formatter: function (params) {
-						const index = params.dataIndex
-						return `${params.name}: ${params.value} TB<br/>文件数量: ${mockData.formatCounts[index]}<br/>平均大小: ${mockData.formatAvgSize[index]}`
-					}
-				},
-				legend: {
-					bottom: '5%',
-					left: 'center'
-				},
-				series: [
-					{
-						type: 'pie',
-						radius: '50%',
-						data: mockData.formats.map((name, index) => ({
-							value: mockData.formatStorage[index],
-							name
-						})),
-						emphasis: {
-							itemStyle: {
-								shadowBlur: 10,
-								shadowOffsetX: 0,
-								shadowColor: 'rgba(0, 0, 0, 0.5)'
-							}
-						}
-					}
-				]
-			})
-		}
-
-		// 观看情况分析
-		if (viewsChartRef.value) {
-			const viewsChart = echarts.init(viewsChartRef.value)
-			viewsChart.setOption({
-				title: {
-					text: '各类资源平均观看人数',
-					left: 'center'
-				},
-				tooltip: {
-					trigger: 'axis',
-					axisPointer: {
-						type: 'shadow'
-					}
-				},
-				xAxis: {
-					type: 'category',
-					data: mockData.types
-				},
-				yAxis: {
-					type: 'value',
-					name: '平均观看人数'
-				},
-				series: [
-					{
-						name: '平均观看人数',
-						type: 'bar',
-						data: [1250, 890, 620, 980, 450],
-						itemStyle: {
-							color: '#2980b9'
-						}
-					}
-				]
-			})
-		}
-
-		// 用户参与度分析
-		if (engagementChartRef.value) {
-			const engagementChart = echarts.init(engagementChartRef.value)
-			engagementChart.setOption({
-				title: {
-					text: '资源使用情况统计',
-					left: 'center'
-				},
-				tooltip: {
-					trigger: 'axis',
-					axisPointer: {
-						type: 'shadow'
-					}
-				},
-				xAxis: {
-					type: 'category',
-					data: ['观看人数', '收藏人数', '分享次数']
-				},
-				yAxis: {
-					type: 'value',
-					name: '数量'
-				},
-				series: [
-					{
-						name: '用户参与度',
-						type: 'bar',
-						data: mockData.engagementCounts,
-						itemStyle: {
-							color: '#9b59b6'
-						}
-					}
-				]
-			})
-		}
-
-		// 时间趋势分析
-		if (trendChartRef.value) {
-			const trendChart = echarts.init(trendChartRef.value)
-			trendChart.setOption({
-				title: {
-					text: '资源上传与访问趋势 (2025年)',
-					left: 'center'
-				},
-				tooltip: {
-					trigger: 'axis'
-				},
-				legend: {
-					data: ['资源上传数量', '资源观看人数'],
-					top: '10%'
-				},
-				grid: {
-					left: '3%',
-					right: '4%',
-					bottom: '3%',
-					containLabel: true
-				},
-				xAxis: {
-					type: 'category',
-					boundaryGap: false,
-					data: mockData.trendLabels
-				},
-				yAxis: {
-					type: 'value',
-					name: '数量'
-				},
-				series: [
-					{
-						name: '资源上传数量',
-						type: 'line',
-						data: mockData.uploadTrend,
-						smooth: true,
-						itemStyle: {
-							color: '#3498db'
-						},
-						areaStyle: {
-							color: 'rgba(52, 152, 219, 0.1)'
-						}
-					},
-					{
-						name: '资源观看人数',
-						type: 'line',
-						data: mockData.viewTrend,
-						smooth: true,
-						itemStyle: {
-							color: '#e74c3c'
-						},
-						areaStyle: {
-							color: 'rgba(231, 76, 60, 0.1)'
-						}
-					}
-				]
-			})
-		}
-	}
-
-	// 筛选器处理函数
-	const handleDepartmentChange = (value) => {
-		console.log('筛选院系:', value)
-		// 这里可以添加重新加载数据的逻辑
-	}
-
-	const handleTimeChange = (value) => {
-		console.log('时间范围:', value)
-		// 这里可以添加重新加载数据的逻辑
-	}
 
 	// 组件挂载后初始化图表
 	onMounted(() => {
 		nextTick(() => {
-			initCharts()
+			// initCharts()
 		})
 	})
 </script>
 
 <style scoped>
-	.resource-statistics {
-		font-family: 'Arial', sans-serif;
-		margin: 0;
-		padding: 20px;
-		background-color: #f5f5f5;
-		color: #333;
-		min-height: 100vh;
-	}
-
-	.container {
-		max-width: 1200px;
-		margin: 0 auto;
-		background-color: white;
-		padding: 30px;
-		border-radius: 10px;
-		box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
-	}
-
-	h1,
-	h2,
-	h3 {
-		color: #2c3e50;
-		border-bottom: 2px solid #3498db;
-		padding-bottom: 10px;
-		margin-bottom: 20px;
-	}
-
-	.summary-row {
-		display: flex;
-		flex-wrap: wrap;
-		gap: 20px;
-		margin-bottom: 30px;
-	}
-
-	.summary-box {
-		flex: 1;
-		min-width: 200px;
-		background-color: #ecf0f1;
-		padding: 15px;
-		border-radius: 8px;
-		text-align: center;
-	}
-
-	.summary-box h3 {
-		margin: 0 0 10px 0;
-		color: #2c3e50;
-		border: none;
-		padding: 0;
-	}
-
-	.summary-box p {
-		margin: 0;
-		font-size: 24px;
-		font-weight: bold;
-		color: #3498db;
-	}
-
-	.storage-info {
-		background-color: #e8f4fc;
-		padding: 15px;
-		border-radius: 8px;
-		margin-bottom: 20px;
-	}
-
-	.storage-info h3 {
-		margin: 0 0 10px 0;
-		color: #2980b9;
-		border: none;
-		padding: 0;
-	}
-
-	.storage-info p {
-		margin: 0;
-		font-size: 18px;
-	}
-
-	.filters {
-		margin-bottom: 20px;
-		padding: 15px;
-		background-color: #f1f8ff;
-		border-radius: 8px;
-		display: flex;
-		align-items: center;
-		flex-wrap: wrap;
-		gap: 10px;
-	}
-
-	.filters label {
-		font-weight: bold;
-		margin-right: 10px;
-	}
-
-	.chart-container {
-		margin-bottom: 40px;
-		padding: 20px;
-		background-color: #f9f9f9;
-		border-radius: 8px;
-		box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
-	}
-
-	.chart-row {
-		display: flex;
-		flex-wrap: wrap;
-		gap: 20px;
-		margin-bottom: 30px;
-	}
-
-	.chart-col {
-		flex: 1;
-		min-width: 300px;
-	}
-
-	.chart {
-		width: 100%;
-		height: 400px;
-	}
-
-	.chart-full {
-		width: 100%;
-		height: 400px;
-	}
-
-	footer {
-		text-align: center;
-		margin-top: 40px;
-		color: #7f8c8d;
-		font-size: 14px;
-	}
-
-	footer p {
-		margin: 0;
-	}
-
-	@media (max-width: 768px) {
-		.summary-row {
-			flex-direction: column;
-		}
-
-		.chart-row {
-			flex-direction: column;
-		}
-
-		.chart-col {
-			min-width: 100%;
-		}
-
-		.filters {
-			flex-direction: column;
-			align-items: flex-start;
-		}
-	}
 </style>