Forráskód Böngészése

单位/类型选择

canghailong 2 hónapja
szülő
commit
2b7b3d35e5
3 módosított fájl, 511 hozzáadás és 622 törlés
  1. 2 0
      package.json
  2. 20 14
      pnpm-lock.yaml
  3. 489 608
      src/views/resourceCenter/components/ComplexChoices.vue

+ 2 - 0
package.json

@@ -28,7 +28,9 @@
 		"@codemirror/lang-javascript": "^6.2.4",
 		"@codemirror/lang-json": "^6.0.2",
 		"@codemirror/lang-xml": "^6.1.0",
+		"@codemirror/state": "^6.5.2",
 		"@codemirror/theme-one-dark": "^6.1.3",
+		"@codemirror/view": "^6.39.4",
 		"@highlightjs/vue-plugin": "2.1.0",
 		"@tinymce/tinymce-vue": "5.0.0",
 		"@vue-office/docx": "^1.2.0",

+ 20 - 14
pnpm-lock.yaml

@@ -38,9 +38,15 @@ importers:
       '@codemirror/lang-xml':
         specifier: ^6.1.0
         version: 6.1.0
+      '@codemirror/state':
+        specifier: ^6.5.2
+        version: 6.5.2
       '@codemirror/theme-one-dark':
         specifier: ^6.1.3
         version: 6.1.3
+      '@codemirror/view':
+        specifier: ^6.39.4
+        version: 6.39.4
       '@highlightjs/vue-plugin':
         specifier: 2.1.0
         version: 2.1.0(highlight.js@11.6.0)(vue@3.2.44)
@@ -545,8 +551,8 @@ packages:
   '@codemirror/theme-one-dark@6.1.3':
     resolution: {integrity: sha512-NzBdIvEJmx6fjeremiGp3t/okrLPYT0d9orIc7AFun8oZcRk58aejkqhv6spnz4MLAevrKNPMQYXEWMg4s+sKA==}
 
-  '@codemirror/view@6.37.2':
-    resolution: {integrity: sha512-XD3LdgQpxQs5jhOOZ2HRVT+Rj59O4Suc7g2ULvZ+Yi8eCkickrkZ5JFuoDhs2ST1mNI5zSsNYgR3NGa4OUrbnw==}
+  '@codemirror/view@6.39.4':
+    resolution: {integrity: sha512-xMF6OfEAUVY5Waega4juo1QGACfNkNF+aJLqpd8oUJz96ms2zbfQ9Gh35/tI3y8akEV31FruKfj7hBnIU/nkqA==}
 
   '@ctrl/tinycolor@3.6.1':
     resolution: {integrity: sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==}
@@ -4235,14 +4241,14 @@ snapshots:
     dependencies:
       '@codemirror/language': 6.11.1
       '@codemirror/state': 6.5.2
-      '@codemirror/view': 6.37.2
+      '@codemirror/view': 6.39.4
       '@lezer/common': 1.2.3
 
   '@codemirror/commands@6.8.1':
     dependencies:
       '@codemirror/language': 6.11.1
       '@codemirror/state': 6.5.2
-      '@codemirror/view': 6.37.2
+      '@codemirror/view': 6.39.4
       '@lezer/common': 1.2.3
 
   '@codemirror/lang-css@6.3.1':
@@ -4260,7 +4266,7 @@ snapshots:
       '@codemirror/lang-javascript': 6.2.4
       '@codemirror/language': 6.11.1
       '@codemirror/state': 6.5.2
-      '@codemirror/view': 6.37.2
+      '@codemirror/view': 6.39.4
       '@lezer/common': 1.2.3
       '@lezer/css': 1.2.1
       '@lezer/html': 1.3.10
@@ -4271,7 +4277,7 @@ snapshots:
       '@codemirror/language': 6.11.1
       '@codemirror/lint': 6.8.5
       '@codemirror/state': 6.5.2
-      '@codemirror/view': 6.37.2
+      '@codemirror/view': 6.39.4
       '@lezer/common': 1.2.3
       '@lezer/javascript': 1.5.1
 
@@ -4285,14 +4291,14 @@ snapshots:
       '@codemirror/autocomplete': 6.18.6
       '@codemirror/language': 6.11.1
       '@codemirror/state': 6.5.2
-      '@codemirror/view': 6.37.2
+      '@codemirror/view': 6.39.4
       '@lezer/common': 1.2.3
       '@lezer/xml': 1.0.6
 
   '@codemirror/language@6.11.1':
     dependencies:
       '@codemirror/state': 6.5.2
-      '@codemirror/view': 6.37.2
+      '@codemirror/view': 6.39.4
       '@lezer/common': 1.2.3
       '@lezer/highlight': 1.2.1
       '@lezer/lr': 1.4.2
@@ -4301,13 +4307,13 @@ snapshots:
   '@codemirror/lint@6.8.5':
     dependencies:
       '@codemirror/state': 6.5.2
-      '@codemirror/view': 6.37.2
+      '@codemirror/view': 6.39.4
       crelt: 1.0.6
 
   '@codemirror/search@6.5.11':
     dependencies:
       '@codemirror/state': 6.5.2
-      '@codemirror/view': 6.37.2
+      '@codemirror/view': 6.39.4
       crelt: 1.0.6
 
   '@codemirror/state@6.5.2':
@@ -4318,10 +4324,10 @@ snapshots:
     dependencies:
       '@codemirror/language': 6.11.1
       '@codemirror/state': 6.5.2
-      '@codemirror/view': 6.37.2
+      '@codemirror/view': 6.39.4
       '@lezer/highlight': 1.2.1
 
-  '@codemirror/view@6.37.2':
+  '@codemirror/view@6.39.4':
     dependencies:
       '@codemirror/state': 6.5.2
       crelt: 1.0.6
@@ -5318,7 +5324,7 @@ snapshots:
       '@codemirror/lint': 6.8.5
       '@codemirror/search': 6.5.11
       '@codemirror/state': 6.5.2
-      '@codemirror/view': 6.37.2
+      '@codemirror/view': 6.39.4
 
   color-convert@2.0.1:
     dependencies:
@@ -7699,7 +7705,7 @@ snapshots:
       '@codemirror/commands': 6.8.1
       '@codemirror/language': 6.11.1
       '@codemirror/state': 6.5.2
-      '@codemirror/view': 6.37.2
+      '@codemirror/view': 6.39.4
       codemirror: 6.0.2
       vue: 3.2.44
 

+ 489 - 608
src/views/resourceCenter/components/ComplexChoices.vue

@@ -1,170 +1,60 @@
 <template>
-	<div class="filter-bar" style="background: white; padding-top: 30px;padding-left: 40px;padding-bottom: 30px;padding-right: 40px">
+	<div class="filter-bar">
 		<!-- 所选院系 -->
 		<div class="filter-group">
 			<span class="filter-group-title">所选单位:</span>
-			<!-- <a-radio-group v-model:value="selectedDept" >
-				<a-radio-button v-for="dept in selectedDepts" :key="dept" :value="dept">{{ dept }}</a-radio-button>
-			</a-radio-group> -->
-			<a-spin :spinning="spinningSelectedDepts" tip="">
-				<div style="display: flex; flex-direction: column">
-					<MyRadioButtonGroup
-						ref="Dept"
-						v-show="selectedDepts.length > 0"
-						v-model="selectedDept"
-						@change="handleSelectedDept"
-					>
-						<MyRadioButtonOffOut
-							v-for="(item, index) in selectedDepts"
-							:key="index"
-							:value="index"
-							:label="item.name"
-							:index="index"
-						></MyRadioButtonOffOut>
+			<a-spin :spinning="spinningSelectedDepts" tip>
+				<div class="radio-group-container">
+					<MyRadioButtonGroup ref="Dept" v-show="selectedDepts.length > 0" v-model="selectedDept" @change="handleSelectedDept">
+						<MyRadioButtonOffOut v-for="(item, index) in selectedDepts" :key="index" :value="index" :label="item.name" :index="index"></MyRadioButtonOffOut>
 					</MyRadioButtonGroup>
-					<div style="height: 5px"></div>
-					<MyRadioButtonGroup
-						ref="Big"
-						v-show="selectedDeptBigs.length > 0"
-						v-model="selectedDeptBig"
-						@change="handleSelectedCourses"
-					>
-						<MyRadioButton
-							v-for="(item, index) in selectedDeptBigs"
-							:key="index"
-							:value="index"
-							:label="item.name"
-							:index="index"
-						></MyRadioButton>
+					<div class="radio-group-spacing"></div>
+					<MyRadioButtonGroup ref="Big" v-show="selectedDeptBigs.length > 0" v-model="selectedDeptBig" @change="handleSelectedCourses">
+						<MyRadioButton v-for="(item, index) in selectedDeptBigs" :key="index" :value="index" :label="item.name" :index="index"></MyRadioButton>
 					</MyRadioButtonGroup>
-					<div style="height: 5px"></div>
-					<MyRadioButtonGroup
-						ref="Smail"
-						v-show="selectedDeptSmails.length > 0"
-						v-model="selectedDeptSmail"
-						@change="handleSelectedSmails"
-					>
-						<MyRadioButton
-							v-for="(item, index) in selectedDeptSmails"
-							:key="index"
-							:value="index"
-							:label="item.name"
-							:index="index"
-						></MyRadioButton>
+					<div class="radio-group-spacing"></div>
+					<MyRadioButtonGroup ref="Smail" v-show="selectedDeptSmails.length > 0" v-model="selectedDeptSmail" @change="handleSelectedSmails">
+						<MyRadioButton v-for="(item, index) in selectedDeptSmails" :key="index" :value="index" :label="item.name" :index="index"></MyRadioButton>
 					</MyRadioButtonGroup>
 				</div>
 			</a-spin>
 		</div>
-		<div style="height: 10px"></div>
-		<div class="line"></div>
-		<div style="height: 10px"></div>
-		<!-- 所属课程 -->
-		<!-- <div class="filter-group">
-			<span class="filter-group-title">所选课程:</span>
-			<MyRadioButtonGroup ref="Course" v-model="selectedCourse" @change="handleSelectedCourses1">
-				<MyRadioButton
-					v-for="(item, index) in selectedCourses"
-					:key="index"
-					:value="item"
-					:label="item"
-					:index="index"
-				></MyRadioButton>
-			</MyRadioButtonGroup>
-		</div>
-		<div style="height: 10px"></div>
-		<div class="line"></div>
-		<div style="height: 10px"></div> -->
+		<div class="spacing-line"></div>
+
 		<!-- 课程类型和课件格式(联动单选) -->
 		<div class="filter-group">
 			<span class="filter-group-title">资源类型:</span>
-			<!-- <a-radio-group v-model:value="selectedType" @change="handleTypeChange">/
-				<a-radio-button v-for="dept in selectedTypes" :key="dept" :value="dept">{{ dept }}</a-radio-button>
-			</a-radio-group> -->
-			<a-spin :spinning="spinningSelectedTypesBig" tip="">
-				<div style="display: flex; flex-direction: column">
-					<MyRadioButtonGroup
-						ref="TypeBig"
-						v-show="selectedTypesBig.length > 0"
-						v-model="selectedTypeBig"
-						@change="handleTypeChangeBig"
-					>
-						<MyRadioButton
-							v-for="(item, index) in selectedTypesBig"
-							:key="index"
-							:value="index"
-							:label="item.name"
-							:index="index"
-						></MyRadioButton>
+			<a-spin :spinning="spinningSelectedTypesBig" tip>
+				<div class="radio-group-container">
+					<MyRadioButtonGroup ref="TypeBig" v-show="selectedTypesBig.length > 0" v-model="selectedTypeBig" @change="handleTypeChangeBig">
+						<MyRadioButton v-for="(item, index) in selectedTypesBig" :key="index" :value="index" :label="item.name" :index="index"></MyRadioButton>
 					</MyRadioButtonGroup>
-					<MyRadioButtonGroup
-						ref="Type"
-						v-show="selectedTypes.length > 0"
-						v-model="selectedType"
-						@change="handleTypeChange"
-					>
-						<MyRadioButton
-							v-for="(item, index) in selectedTypes"
-							:key="index"
-							:value="index"
-							:label="item.name"
-							:index="index"
-						></MyRadioButton>
+					<MyRadioButtonGroup ref="Type" v-show="selectedTypes.length > 0" v-model="selectedType" @change="handleTypeChange">
+						<MyRadioButton v-for="(item, index) in selectedTypes" :key="index" :value="index" :label="item.name" :index="index"></MyRadioButton>
 					</MyRadioButtonGroup>
-					<MyRadioButtonGroup
-						ref="TypeSmail"
-						v-show="selectedTypesSmail.length > 0"
-						v-model="selectedTypeSmail"
-						@change="handleTypeChangeSmail"
-					>
-						<MyRadioButton
-							v-for="(item, index) in selectedTypesSmail"
-							:key="index"
-							:value="index"
-							:label="item.name"
-							:index="index"
-						></MyRadioButton>
+					<MyRadioButtonGroup ref="TypeSmail" v-show="selectedTypesSmail.length > 0" v-model="selectedTypeSmail" @change="handleTypeChangeSmail">
+						<MyRadioButton v-for="(item, index) in selectedTypesSmail" :key="index" :value="index" :label="item.name" :index="index"></MyRadioButton>
 					</MyRadioButtonGroup>
 				</div>
 			</a-spin>
 		</div>
-		<div style="height: 10px"></div>
-		<div class="line"></div>
-		<div style="height: 10px"></div>
+		<div class="spacing-line"></div>
+
 		<div class="filter-group">
 			<span class="filter-group-title">课件格式:</span>
-			<!-- <a-radio-group v-model:value="selectedFormat" @change="handleFormatChange">
-				<a-radio-button v-for="dept in selectedFormats" :key="dept" :value="dept">{{ dept }}</a-radio-button>
-			</a-radio-group> -->
-			<a-spin :spinning="spinningSelectedFormats" tip="">
+			<a-spin :spinning="spinningSelectedFormats" tip>
 				<MyRadioButtonGroup ref="Format" v-model="selectedFormat" @change="handleFormatChange">
-					<MyRadioButton
-						v-for="(item, index) in selectedFormats"
-						:key="item"
-						:value="index"
-						:label="item.fileExtendName"
-						:index="index"
-					></MyRadioButton>
+					<MyRadioButton v-for="(item, index) in selectedFormats" :key="item.id || index" :value="index" :label="item.fileExtendName" :index="index"></MyRadioButton>
 				</MyRadioButtonGroup>
 			</a-spin>
 		</div>
-		<div style="height: 10px"></div>
-		<div class="line"></div>
-		<div style="height: 10px"></div>
+		<div class="spacing-line"></div>
+
 		<!-- 已选条件 -->
 		<div class="filter-group">
 			<span class="filter-group-title">已选条件:</span>
-			<div style="display: flex; align-items: center; margin-top: 7px">
-				<a-tag
-					v-for="(tag, index) in selectedTagKeys"
-					style="display: flex; justify-content: center; align-items: center"
-					:key="index"
-					:bordered="false"
-					closable
-					@close="handleTagClose(tag, index)"
-				>
-					{{ tag.name }}
-				</a-tag>
-
+			<div class="selected-tags-container">
+				<a-tag v-for="(tag, index) in selectedTagKeys" :key="index" :bordered="false" closable @close="handleTagClose(tag, index)">{{ tag.name }}</a-tag>
 				<span v-if="selectedTagKeys.length > 0" class="clean" @click="handleTagCloseAll">清除筛选</span>
 			</div>
 		</div>
@@ -172,530 +62,521 @@
 </template>
 
 <script setup>
-	import { ref, computed } from 'vue'
-	import MyRadioButtonGroup from '../components/MyRadioButtonGroup.vue'
-	import MyRadioButton from '../components/MyRadioButton.vue'
-	import MyRadioButtonOffOut from '../components/MyRadioButtonOffOut.vue'
-	import collegeApi from '@/api/college'
-	import EventBus from '@/utils/EventBus'
-	import {
-		addViewCount,
-		detail,
-		add,
-		cancel,
-		queryList,
-		resourcecentreDetail,
-		getShareLink,
-		getQueryTreeAll,
-		getAllListFileFormat
-	} from '@/api/portal'
-
-	import orgApi from '@/api/resourceType/resourceType'
-	const selectedDept = ref('')
-	const selectedDeptBig = ref('')
-	const selectedDeptSmail = ref('')
-	const selectedCourse = ref('')
-	const selectedTypeBig = ref('')
-	const selectedType = ref('')
-	const selectedTypeSmail = ref('')
-	const selectedFormat = ref('')
-	const Dept = ref(null)
-	const Big = ref(null)
-	const Smail = ref(null)
-	const Course = ref(null)
-	const TypeBig = ref(null)
-	const Type = ref(null)
-	const TypeSmail = ref(null)
-	const Format = ref(null)
-
-	const selectedTags = ref([])
-	const selectedTagKeys = ref([])
-
-	const selectedDepts = ref([])
-	const spinningSelectedDepts = ref(false)
-	const selectedDeptBigs = ref([])
-
-	const selectedDeptBigsList = ref([])
-
-	const selectedDeptSmailsList = ref([])
-
-	const selectedDeptSmails = ref([])
-
-	const selectedCourses = ref([
-		'全部',
-		'初级飞行训练',
-		'高级飞行训练',
-		'实弹训练',
-		'低空战术飞行',
-		'跨区转场训练',
-		'空气动力学',
-		'航空气象学',
-		'航空电子设备',
-		'飞机结构与系统',
-		'空军作战指挥',
-		'战场态势感知',
-		'模拟对抗训练',
-		'军队政治工作',
-		'军事理论',
-		'战斗精神培育',
-		'机型改装训练',
-		'应急程序训练'
-	])
-	const selectedTypesBig = ref([])
-	const spinningSelectedTypesBig = ref(false)
-	const selectedTypes = ref([])
-	const selectedTypesSmail = ref([])
-	const selectedFormats = ref([])
-	const spinningSelectedFormats = ref(false)
-
-	const selectedTypesBigList = ref([])
-	const selectedTypesList = ref([])
-	const selectedTypesLists = ref([])
-	const handleSelectedDept = (e) => {
-		if (e == 0) {
-			selectedDeptBigs.value = []
-		} else {
-			selectedDeptBigs.value = selectedDeptBigsList.value[e]
-		}
-		console.log('handleSelectedDept', e,selectedDeptBigsList.value)
-		selectedDeptSmails.value = []
-		if (selectedDeptBigs.value.length > 0) {
-			Big.value.setClean(-1)
-		}
-		selectedDeptBig.value = -1
-		selectedDeptSmail.value = -1
-		updateSelectedTags()
+import { ref, onMounted } from 'vue'
+import MyRadioButtonGroup from '../components/MyRadioButtonGroup.vue'
+import MyRadioButton from '../components/MyRadioButton.vue'
+import MyRadioButtonOffOut from '../components/MyRadioButtonOffOut.vue'
+import collegeApi from '@/api/college'
+import EventBus from '@/utils/EventBus'
+import { getQueryTreeAll, getAllListFileFormat } from '@/api/portal'
+
+// 部门相关引用
+const selectedDept = ref('')
+const selectedDeptBig = ref('')
+const selectedDeptSmail = ref('')
+const Dept = ref(null)
+const Big = ref(null)
+const Smail = ref(null)
+
+// 类型相关引用
+const selectedTypeBig = ref('')
+const selectedType = ref('')
+const selectedTypeSmail = ref('')
+const TypeBig = ref(null)
+const Type = ref(null)
+const TypeSmail = ref(null)
+
+// 格式相关引用
+const selectedFormat = ref('')
+const Format = ref(null)
+
+// 已选标签
+const selectedTagKeys = ref([])
+
+// 部门数据
+const selectedDepts = ref([])
+const spinningSelectedDepts = ref(false)
+const selectedDeptBigs = ref([])
+const selectedDeptBigsList = ref([])
+const selectedDeptSmailsList = ref([])
+const selectedDeptSmails = ref([])
+
+// 课程数据(已注释)
+const selectedCourses = ref([
+	'全部',
+	'初级飞行训练',
+	'高级飞行训练',
+	'实弹训练',
+	'低空战术飞行',
+	'跨区转场训练',
+	'空气动力学',
+	'航空气象学',
+	'航空电子设备',
+	'飞机结构与系统',
+	'空军作战指挥',
+	'战场态势感知',
+	'模拟对抗训练',
+	'军队政治工作',
+	'军事理论',
+	'战斗精神培育',
+	'机型改装训练',
+	'应急程序训练'
+])
+
+// 类型数据
+const selectedTypesBig = ref([])
+const spinningSelectedTypesBig = ref(false)
+const selectedTypes = ref([])
+const selectedTypesSmail = ref([])
+const selectedTypesBigList = ref([])
+const selectedTypesList = ref([])
+const selectedTypesLists = ref(new Map()) // 使用Map替代对象,提高性能
+
+// 格式数据
+const selectedFormats = ref([])
+const spinningSelectedFormats = ref(false)
+
+/**
+ * 处理部门选择变化
+ */
+const handleSelectedDept = (e) => {
+	// 重置下级选项
+	selectedDeptBig.value = ''
+	selectedDeptSmail.value = ''
+
+	if (e === 0) {
+		selectedDeptBigs.value = []
+	} else {
+		selectedDeptBigs.value = selectedDeptBigsList.value[e] || []
 	}
-	const handleSelectedCourses = (e) => {
-		if (e == 0) {
-			selectedDeptSmails.value = []
-		} else {
-			selectedDeptSmails.value = selectedDeptSmailsList.value[e - 1]
-		}
-		console.log('handleSelectedCourses', e, selectedDeptSmails.value)
-		if (selectedDeptSmails.value.length > 0) {
-			Smail.value.setClean(-1)
-		}
-		// selectedDeptSmails.value = selectedDeptSmailsList.value[e]
-		selectedDeptSmail.value = -1
-		updateSelectedTags()
+
+	selectedDeptSmails.value = []
+
+	if (selectedDeptBigs.value.length > 0 && Big.value) {
+		Big.value.setClean(-1)
 	}
-	const handleSelectedSmails = (e) => {
-		if (e == 0) {
-			selectedDeptSmails.value = []
-		} else {
-			selectedDeptSmails.value = selectedDeptSmailsList.value[e]
-		}
-		// selectedDeptSmails.value = selectedDeptSmailsList.value[e]
-		updateSelectedTags()
+
+	selectedDeptBig.value = -1
+	selectedDeptSmail.value = -1
+
+	updateSelectedTags()
+}
+
+/**
+ * 处理二级部门选择变化
+ */
+const handleSelectedCourses = (e) => {
+	if (e === 0) {
+		selectedDeptSmails.value = []
+	} else {
+		selectedDeptSmails.value = selectedDeptSmailsList.value[e - 1] || []
 	}
-	// 处理课程类型选择变化
-	const handleTypeChangeBig = (e) => {
-		selectedTypesSmail.value = []
-		if (e == 0) {
-			selectedTypes.value = []
 
-		} else {
-			selectedTypes.value = selectedTypesBigList.value[e]
-		}
+	if (selectedDeptSmails.value.length > 0 && Smail.value) {
+		Smail.value.setClean(-1)
+	}
 
-		console.log('handleTypeChangeBig', e,selectedTypesBigList.value)
-		if (selectedTypes.value.length > 0) {
-			Type.value.setClean(-1)
-		}
-		if (selectedTypeSmail.value.length > 0) {
-			TypeSmail.value.setClean(-1)
-		}
-		selectedType.value = -1
-		selectedTypeSmail.value = -1
-		updateSelectedTags()
+	selectedDeptSmail.value = -1
+	updateSelectedTags()
+}
+
+/**
+ * 处理三级部门选择变化
+ */
+const handleSelectedSmails = (e) => {
+	updateSelectedTags()
+}
+
+/**
+ * 处理一级资源类型选择变化
+ */
+const handleTypeChangeBig = (e) => {
+	selectedTypesSmail.value = []
+
+	if (e === 0) {
+		selectedTypes.value = []
+	} else {
+		selectedTypes.value = selectedTypesBigList.value[e] || []
 	}
-	const handleTypeChange = (e) => {
-
-		let item  = selectedTypes.value[e]
-		console.log('handleTypeChange', ' e ', e, ' selectedTypes ',selectedTypes.value,selectedTypesLists.value,' item ',item , ' selectedTypesLists.value[item.id] ',selectedTypesLists.value[item.parentId])
-		if (e == 0) {
-			selectedTypesSmail.value = []
-		} else {
-			selectedTypesSmail.value = selectedTypesLists.value[item.parentId] ?selectedTypesLists.value[item.parentId] : []
-		}
-		console.log('handleTypeChange 应该显示',selectedTypesSmail.value)
-		// selectedFormat.value = undefined // 选择课程类型时,重置课件格式
-		// updateSelectedTags()
-		updateSelectedTags()
+
+	if (selectedTypes.value.length > 0 && Type.value) {
+		Type.value.setClean(-1)
 	}
-	const handleTypeChangeSmail = (e) => {
-		console.log('handleTypeChange', ' e ', e, selectedTypes.value)
-		// if (e == 0) {
-		// 	selectedTypesSmail.value = []
-		// } else {
-		// 	selectedTypesSmail.value = selectedTypesList.value[e - 1]
-		// }
-		// selectedFormat.value = undefined // 选择课程类型时,重置课件格式
-		// updateSelectedTags()
-		updateSelectedTags()
+
+	if (selectedTypesSmail.value.length > 0 && TypeSmail.value) {
+		TypeSmail.value.setClean(-1)
 	}
 
-	// 处理课件格式选择变化
-	const handleFormatChange = (e) => {
-		// selectedType.value = undefined // 选择课件格式时,重置课程类型
+	selectedType.value = -1
+	selectedTypeSmail.value = -1
+	updateSelectedTags()
+}
+
+/**
+ * 处理二级资源类型选择变化
+ */
+const handleTypeChange = (e) => {
+	if (selectedTypes.value.length === 0 || e < 0 || e >= selectedTypes.value.length) {
+		selectedTypesSmail.value = []
 		updateSelectedTags()
+		return
+	}
+
+	const item = selectedTypes.value[e]
+	if (e === 0) {
+		selectedTypesSmail.value = []
+	} else {
+		selectedTypesSmail.value = selectedTypesLists.value.get(item.id) || []
 	}
 
-	// 更新已选条件
-	const updateSelectedTags = () => {
-		selectedTags.value = []
-		selectedTagKeys.value = []
-		let queryData = {}
-		// selectedTags.value = [
-		// 	...(selectedDept.value !== '全部' ? { key: 'Dept', list: [selectedDept.value] } : []),
-		// 	...(selectedCourse.value !== '全部' ? { key: 'Course', list: [selectedCourse.value] } : []),
-		// 	...(selectedType.value !== '全部' ? { key: 'Type', list: [selectedType.value] } : []),
-		// 	...(selectedFormat.value !== '全部' ? { key: 'Format', list: [selectedFormat.value] } : [])
-		// ]
-		console.log('筛选条件第一个', selectedDept.value, selectedDepts.value)
-		console.log('筛选条件第二个', selectedDeptBig.value, selectedDeptBigs.value)
-		console.log('筛选条件第三个', selectedDeptSmail.value, selectedDeptSmails.value)
-		if (
-			selectedDept.value !== undefined &&
-			selectedDept.value !== '' &&
-			selectedDept.value > 0 &&
-			selectedDepts.value.length > 0
-		) {
-			if (selectedDepts.value[selectedDept.value]) {
-				selectedTags.value.push(...[selectedDepts.value[selectedDept.value].fileExtendName])
-				selectedTagKeys.value.push({
-					listType: 0,
-					key: 'collegeId',
-					index: selectedDept.value,
-					name: selectedDepts.value[selectedDept.value].name,
-					id: selectedDepts.value[selectedDept.value].id
-				})
-				queryData['collegeId'] = selectedDepts.value[selectedDept.value].id
-			}
+	updateSelectedTags()
+}
+
+/**
+ * 处理三级资源类型选择变化
+ */
+const handleTypeChangeSmail = (e) => {
+	updateSelectedTags()
+}
+
+/**
+ * 处理文件格式选择变化
+ */
+const handleFormatChange = (e) => {
+	updateSelectedTags()
+}
+
+/**
+ * 更新已选条件标签
+ */
+const updateSelectedTags = () => {
+	selectedTagKeys.value = []
+	const queryData = {}
+
+	// 部门筛选条件
+	if (selectedDept.value > 0 && selectedDepts.value.length > selectedDept.value) {
+		const dept = selectedDepts.value[selectedDept.value]
+		if (dept) {
+			selectedTagKeys.value.push({
+				listType: 0,
+				key: 'collegeId',
+				index: selectedDept.value,
+				name: dept.name,
+				id: dept.id
+			})
+			queryData['collegeId'] = dept.id
 		}
-		if (
-			selectedDeptBig.value !== undefined &&
-			selectedDeptBig.value !== '' &&
-			selectedDeptBig.value > 0 &&
-			selectedDeptBigs.value.length > 0
-		) {
-			if (selectedDeptBigs.value[selectedDeptBig.value]) {
-				selectedTags.value.push(...[selectedDeptBigs.value[selectedDeptBig.value].name])
-				selectedTagKeys.value.push({
-					listType: 1,
-					key: 'collegeTwoId',
-					index: selectedDeptBig.value,
-					name: selectedDeptBigs.value[selectedDeptBig.value].name,
-					id: selectedDeptBigs.value[selectedDeptBig.value].id
-				})
-				queryData['collegeTwoId'] = selectedDeptBigs.value[selectedDeptBig.value].id
-			}
+	}
+
+	if (selectedDeptBig.value > 0 && selectedDeptBigs.value.length > selectedDeptBig.value) {
+		const deptBig = selectedDeptBigs.value[selectedDeptBig.value]
+		if (deptBig) {
+			selectedTagKeys.value.push({
+				listType: 1,
+				key: 'collegeTwoId',
+				index: selectedDeptBig.value,
+				name: deptBig.name,
+				id: deptBig.id
+			})
+			queryData['collegeTwoId'] = deptBig.id
 		}
-		console.log('selectedDeptSmail', selectedDeptSmail.value, selectedDeptSmails.value)
-		if (
-			selectedDeptSmail.value !== undefined &&
-			selectedDeptSmail.value !== '' &&
-			selectedDeptSmail.value > 0 &&
-			selectedDeptSmails.value.length > 0
-		) {
-			if (selectedDeptSmails.value[selectedDeptSmail.value]) {
-				selectedTags.value.push(...[selectedDeptSmails.value[selectedDeptSmail.value].name])
-				selectedTagKeys.value.push({
-					listType: 2,
-					key: 'collegeThreeId',
-					index: selectedDeptSmail.value - 1,
-					name: selectedDeptSmails.value[selectedDeptSmail.value].name,
-					id: selectedDeptSmails.value[selectedDeptSmail.value].id
-				})
-				queryData['collegeThreeId'] = selectedDeptSmails.value[selectedDeptSmail.value].id
-			}
+	}
+
+	if (selectedDeptSmail.value > 0 && selectedDeptSmails.value.length > selectedDeptSmail.value) {
+		const deptSmail = selectedDeptSmails.value[selectedDeptSmail.value]
+		if (deptSmail) {
+			selectedTagKeys.value.push({
+				listType: 2,
+				key: 'collegeThreeId',
+				index: selectedDeptSmail.value - 1,
+				name: deptSmail.name,
+				id: deptSmail.id
+			})
+			queryData['collegeThreeId'] = deptSmail.id
 		}
+	}
 
-		if (
-			selectedTypeBig.value !== undefined &&
-			selectedTypeBig.value !== '' &&
-			selectedTypeBig.value > 0 &&
-			selectedTypesBig.value.length > 0
-		) {
-			if (selectedTypesBig.value[selectedTypeBig.value]) {
-				selectedTags.value.push(...[selectedTypesBig.value[selectedTypeBig.value].name])
-				selectedTagKeys.value.push({
-					listType: 3,
-					key: 'resourceType',
-					index: selectedTypeBig.value,
-					name: selectedTypesBig.value[selectedTypeBig.value].name,
-					id: selectedTypesBig.value[selectedTypeBig.value].id
-				})
-				queryData['resourceType'] = selectedTypesBig.value[selectedTypeBig.value].id
-			}
+	// 资源类型筛选条件
+	if (selectedTypeBig.value > 0 && selectedTypesBig.value.length > selectedTypeBig.value) {
+		const typeBig = selectedTypesBig.value[selectedTypeBig.value]
+		if (typeBig) {
+			selectedTagKeys.value.push({
+				listType: 3,
+				key: 'resourceType',
+				index: selectedTypeBig.value,
+				name: typeBig.name,
+				id: typeBig.id
+			})
+			queryData['resourceType'] = typeBig.id
 		}
-		if (
-			selectedType.value !== undefined &&
-			selectedType.value !== '' &&
-			selectedType.value > 0 &&
-			selectedTypes.value.length > 0
-		) {
-			if (selectedTypes.value[selectedType.value]) {
-				selectedTags.value.push(...[selectedTypes.value[selectedType.value].name])
-				selectedTagKeys.value.push({
-					listType: 4,
-					key: 'resourceTwoType',
-					index: selectedType.value,
-					name: selectedTypes.value[selectedType.value].name,
-					id: selectedTypes.value[selectedType.value].id
-				})
-				queryData['resourceTwoType'] = selectedTypes.value[selectedType.value].id
-			}
+	}
+
+	if (selectedType.value > 0 && selectedTypes.value.length > selectedType.value) {
+		const type = selectedTypes.value[selectedType.value]
+		if (type) {
+			selectedTagKeys.value.push({
+				listType: 4,
+				key: 'resourceTwoType',
+				index: selectedType.value,
+				name: type.name,
+				id: type.id
+			})
+			queryData['resourceTwoType'] = type.id
 		}
-		if (
-			selectedTypeSmail.value !== undefined &&
-			selectedTypeSmail.value !== '' &&
-			selectedTypeSmail.value > 0 &&
-			selectedTypesSmail.value.length > 0
-		) {
-			if (selectedTypesSmail.value[selectedTypeSmail.value]) {
-				selectedTags.value.push(...[selectedTypesSmail.value[selectedTypeSmail.value].name])
-				selectedTagKeys.value.push({
-					listType: 6,
-					key: 'resourceThreeType',
-					index: selectedTypeSmail.value,
-					name: selectedTypesSmail.value[selectedTypeSmail.value].name,
-					id: selectedTypesSmail.value[selectedTypeSmail.value].id
-				})
-				queryData['resourceThreeType'] = selectedTypesSmail.value[selectedTypeSmail.value].id
-			}
-			console.log('123123',selectedTagKeys.value)
+	}
+
+	if (selectedTypeSmail.value > 0 && selectedTypesSmail.value.length > selectedTypeSmail.value) {
+		const typeSmail = selectedTypesSmail.value[selectedTypeSmail.value]
+		if (typeSmail) {
+			selectedTagKeys.value.push({
+				listType: 6,
+				key: 'resourceThreeType',
+				index: selectedTypeSmail.value,
+				name: typeSmail.name,
+				id: typeSmail.id
+			})
+			queryData['resourceThreeType'] = typeSmail.id
 		}
-		if (
-			selectedFormat.value !== undefined &&
-			selectedFormat.value !== '' &&
-			selectedFormat.value > 0 &&
-			selectedFormats.value.length > 0
-		) {
-			if (selectedFormats.value[selectedFormat.value]) {
-				selectedTags.value.push(...[selectedFormats.value[selectedFormat.value].fileExtendName])
-				selectedTagKeys.value.push({
-					listType: 5,
-					key: 'suffix',
-					index: selectedFormat.value,
-					name: selectedFormats.value[selectedFormat.value].fileExtendName,
-					id: selectedFormats.value[selectedFormat.value].id
-				})
-				queryData['suffix'] = selectedFormats.value[selectedFormat.value].fileExtendName
-			}
+	}
+
+	// 文件格式筛选条件
+	if (selectedFormat.value > 0 && selectedFormats.value.length > selectedFormat.value) {
+		const format = selectedFormats.value[selectedFormat.value]
+		if (format) {
+			selectedTagKeys.value.push({
+				listType: 5,
+				key: 'suffix',
+				index: selectedFormat.value,
+				name: format.fileExtendName,
+				id: format.id
+			})
+			queryData['suffix'] = format.fileExtendName
 		}
-		// if (selectedCourse.value !== '全部') {
-		// 	selectedTags.value.push(...[selectedCourse.value])
-		// 	selectedTagKeys.value.push('Course')
-		// }
-
-		// if (selectedType.value !== '全部') {
-		// 	selectedTags.value.push(...[selectedType.value])
-		// 	selectedTagKeys.value.push('Type')
-		// }
-		// if (selectedFormat.value !== '全部') {
-		// 	selectedTags.value.push(...[selectedFormat.value])
-		// 	selectedTagKeys.value.push('Format')
-		// }
-		console.log('筛选条件', selectedTags.value, selectedTagKeys.value)
-
-		EventBus.emit('upLoadList', queryData)
 	}
 
-	// 删除已选条件
-	const handleTagClose = (tag, index) => {
-		// if (tag === selectedDept.value) {
-		// 	selectedDept.value = '全部'
-		// } else if (tag === selectedCourse.value) {
-		// 	selectedCourse.value = '全部'
-		// } else if (tag === selectedType.value) {
-		// 	selectedType.value = '全部'
-		// } else if (tag === selectedFormat.value) {
-		// 	selectedFormat.value = '全部'
-		// }
-		if (tag.key == 'suffix') {
-			Format.value.setClean(-1)
+	EventBus.emit('upLoadList', queryData)
+}
+
+/**
+ * 删除已选条件标签
+ */
+const handleTagClose = (tag, index) => {
+	switch (tag.key) {
+		case 'suffix':
+			if (Format.value) Format.value.setClean(-1)
 			selectedFormat.value = -1
-		}
-		if (tag.key == 'resourceTwoType') {
-			Type.value.setClean(-1)
+			break
+		case 'resourceTwoType':
+			if (Type.value) Type.value.setClean(-1)
 			selectedType.value = -1
-		}
-		if (tag.key == 'resourceThreeType') {
-
-			TypeSmail.value.setClean(-1)
+			break
+		case 'resourceThreeType':
+			if (TypeSmail.value) TypeSmail.value.setClean(-1)
 			selectedTypeSmail.value = -1
-		}
-		if (tag.key == 'resourceType') {
-			Type.value.setClean(-1)
+			break
+		case 'resourceType':
+			if (Type.value) Type.value.setClean(-1)
 			selectedType.value = -1
-			TypeBig.value.setClean(-1)
+			if (TypeBig.value) TypeBig.value.setClean(-1)
 			selectedTypeBig.value = -1
-		}
-		if (tag.key == 'collegeThreeId') {
-			Smail.value.setClean(-1)
+			break
+		case 'collegeThreeId':
+			if (Smail.value) Smail.value.setClean(-1)
 			selectedDeptSmail.value = -1
-		}
-		if (tag.key == 'collegeTwoId') {
-			Smail.value.setClean(-1)
+			break
+		case 'collegeTwoId':
+			if (Smail.value) Smail.value.setClean(-1)
 			selectedDeptSmail.value = -1
-			Big.value.setClean(-1)
+			if (Big.value) Big.value.setClean(-1)
 			selectedDeptBig.value = -1
-		}
-		if (tag.key == 'collegeId') {
-			Smail.value.setClean(-1)
+			break
+		case 'collegeId':
+			if (Smail.value) Smail.value.setClean(-1)
 			selectedDeptSmail.value = -1
-			Big.value.setClean(-1)
+			if (Big.value) Big.value.setClean(-1)
 			selectedDeptBig.value = -1
-			Dept.value.setClean(-1)
+			if (Dept.value) Dept.value.setClean(-1)
 			selectedDept.value = -1
-			TypeSmail.value.setClean(-1)
+			if (TypeSmail.value) TypeSmail.value.setClean(-1)
 			selectedTypeSmail.value = -1
-		}
-		if (tag.key == 'selectedTypeSmail') {
-
-			TypeSmail.value.setClean(-1)
-			selectedTypeSmail.value = -1
-		}
-		console.log('要删除的东西', tag)
-
-		updateSelectedTags()
+			break
 	}
-	const handleTagCloseAll = () => {
-		// if (tag === selectedDept.value) {
-		// 	selectedDept.value = '全部'
-		// } else if (tag === selectedCourse.value) {
-		// 	selectedCourse.value = '全部'
-		// } else if (tag === selectedType.value) {
-		// 	selectedType.value = '全部'
-		// } else if (tag === selectedFormat.value) {
-		// 	selectedFormat.value = '全部'
-		// }
-		Format.value.setClean(-1)
-		selectedFormat.value = -1
-
-		Type.value.setClean(-1)
-		selectedType.value = -1
-
-		Type.value.setClean(-1)
-		selectedType.value = -1
-		TypeBig.value.setClean(-1)
-		selectedTypeBig.value = -1
-		TypeSmail.value.setClean(-1)
-		selectedTypeSmail.value = -1
-		Smail.value.setClean(-1)
-		selectedDeptSmail.value = -1
-		Smail.value.setClean(-1)
-		selectedDeptSmail.value = -1
-		Big.value.setClean(-1)
-		selectedDeptBig.value = -1
-		Smail.value.setClean(-1)
-		selectedDeptSmail.value = -1
-		Big.value.setClean(-1)
-		selectedDeptBig.value = -1
-		Dept.value.setClean(-1)
-		selectedDept.value = -1
-		// console.log('要删除的东西', tag)
 
-		updateSelectedTags()
-	}
-	const handleClean = () => {
-		selectedTags.value = []
-		selectedDept.value = '全部'
-		selectedCourse.value = '全部'
-		selectedType.value = '全部'
-		selectedFormat.value = '全部'
-		selectedDeptBigs.value = []
-		// Dept.value.setClean('全部')
-		// Big.value.setClean(selectedDeptBigs.value[0])
-		// Smail.value.setClean(selectedDeptSmails.value[0])
-		// Course.value.setClean('全部')
-		// Type.value.setClean('全部')
-		// Format.value.setClean('全部')
-		spinningSelectedDepts.value = true
-		collegeApi.treeAll().then((data) => {
-			selectedDepts.value = data.data
+	updateSelectedTags()
+}
+
+/**
+ * 清除所有筛选条件
+ */
+const handleTagCloseAll = () => {
+	// 重置所有选择器
+	if (Format.value) Format.value.setClean(-1)
+	selectedFormat.value = -1
+
+	if (Type.value) Type.value.setClean(-1)
+	selectedType.value = -1
+
+	if (TypeBig.value) TypeBig.value.setClean(-1)
+	selectedTypeBig.value = -1
+
+	if (TypeSmail.value) TypeSmail.value.setClean(-1)
+	selectedTypeSmail.value = -1
+
+	if (Smail.value) Smail.value.setClean(-1)
+	selectedDeptSmail.value = -1
+
+	if (Big.value) Big.value.setClean(-1)
+	selectedDeptBig.value = -1
+
+	if (Dept.value) Dept.value.setClean(-1)
+	selectedDept.value = -1
+
+	updateSelectedTags()
+}
+
+/**
+ * 初始化数据
+ */
+const handleClean = () => {
+	// 重置选择状态
+	selectedDept.value = -1
+	selectedDeptBig.value = -1
+	selectedDeptSmail.value = -1
+	selectedTypeBig.value = -1
+	selectedType.value = -1
+	selectedTypeSmail.value = -1
+	selectedFormat.value = -1
+
+	// 重置数据数组
+	selectedDeptBigs.value = []
+	selectedDeptSmails.value = []
+	selectedTypes.value = []
+	selectedTypesSmail.value = []
+	selectedTypesBigList.value = []
+	selectedTypesList.value = []
+	selectedTypesLists.value = new Map()
+	selectedDeptBigsList.value = []
+	selectedDeptSmailsList.value = []
+
+	// 加载部门数据
+	spinningSelectedDepts.value = true
+	collegeApi
+		.treeAll()
+		.then((data) => {
+			selectedDepts.value = data.data || []
+
+			// 构建部门层级关系
 			selectedDepts.value.forEach((item) => {
-				selectedDeptBigsList.value.push(item.children)
 				if (item.children) {
-					item.children.forEach((item) => {
-						if (item.children) {
-							selectedDeptSmailsList.value.push(item.children)
+					selectedDeptBigsList.value.push(item.children)
+
+					item.children.forEach((child) => {
+						if (child.children && child.children.length>0) {
+							selectedDeptSmailsList.value.push(child.children)
 						}
 					})
+				} else {
+					selectedDeptBigsList.value.push([])
 				}
 			})
+
+			spinningSelectedDepts.value = false
+		})
+		.catch(() => {
 			spinningSelectedDepts.value = false
-			console.log('看看最小的', selectedDeptSmailsList.value)
-			// Dept.value.setClean(0)
-			// handleSelectedDept(0)
-			// handleSelectedCourses(0)
 		})
-		spinningSelectedTypesBig.value = true
-		getQueryTreeAll().then((data) => {
-			selectedTypesBig.value = data.data
-			selectedTypesBig.value.forEach((item,index) => {
-				selectedTypesBigList.value.push(item.children)
-				if (item.children) {
-					item.children.forEach((iitem,iindex) => {
 
-						if (iitem.children) {
-							selectedTypesList.value = iitem.children
+	// 加载资源类型数据
+	spinningSelectedTypesBig.value = true
+	getQueryTreeAll()
+		.then((data) => {
+			selectedTypesBig.value = data.data || []
 
-							selectedTypesLists.value[iitem.parentId] = selectedTypesList.value
+			// 构建资源类型层级关系
+			selectedTypesBig.value.forEach((item) => {
+				if (item.children) {
+					selectedTypesBigList.value.push(item.children)
+
+					item.children.forEach((child) => {
+						if (child.children) {
+							// 使用Map存储父子关系,提高查找效率
+							selectedTypesLists.value.set(child.id, child.children)
 						}
 					})
+				} else {
+					selectedTypesBigList.value.push([])
 				}
 			})
+
 			spinningSelectedTypesBig.value = false
 		})
-		console.log('有数据吗',selectedTypesLists.value)
-		spinningSelectedFormats.value = true
-		getAllListFileFormat().then((data) => {
-			selectedFormats.value = data.data
-			spinningSelectedFormats.value = false
+		.catch(() => {
+			spinningSelectedTypesBig.value = false
 		})
 
-		// selectedDepts.value.unshift({ name: '全部' })
-		// selectedDeptBigsList.value.unshift({ name: '全部' })
-		// selectedDeptSmailsList.value.unshift({ name: '全部' })
-		// console.log('看看呢', selectedDepts.value)
-		// updateSelectedTags()
-	}
+	// 加载文件格式数据
+	spinningSelectedFormats.value = true
+	getAllListFileFormat()
+		.then((data) => {
+			selectedFormats.value = data.data || []
+			spinningSelectedFormats.value = false
+		})
+		.catch(() => {
+			spinningSelectedFormats.value = false
+		})
+}
 
-	onMounted(() => {
-		// 初始化已选条件
-		handleClean()
-	})
+onMounted(() => {
+	handleClean()
+})
 </script>
 
 <style scoped>
-	.filter-bar {
-		border: 1px solid #00000011; /* 灰色细边框 */
-		padding-left: 20px;
-		padding-right: 20px;
-		padding-top: 5px;
-		padding-bottom: 20px;
-	}
-
-	.filter-group {
-		display: flex;
-	}
-	.filter-group-title {
-		color: rgba(0, 0, 0, 0.521);
-		font-size: 14px;
-		min-width: 80px;
-		margin-top: 5px;
-	}
-
-	.line {
-		width: 100%;
-		height: 0.25px;
-		background-color: #00000013;
-	}
-	.clean {
-		color: rgb(133, 183, 224);
-		cursor: pointer;
-	}
-</style>
+.filter-bar {
+	background: white;
+	padding: 30px 40px;
+	border: 1px solid #00000011;
+}
+
+.filter-group {
+	display: flex;
+	align-items: flex-start;
+}
+
+.filter-group-title {
+	color: rgba(0, 0, 0, 0.521);
+	font-size: 14px;
+	min-width: 80px;
+	margin-top: 5px;
+}
+
+.radio-group-container {
+	display: flex;
+	flex-direction: column;
+}
+
+.radio-group-spacing {
+	height: 5px;
+}
+
+.spacing-line {
+	width: 100%;
+	height: 0.25px;
+	background-color: #00000013;
+	margin: 10px 0;
+}
+
+.selected-tags-container {
+	display: flex;
+	align-items: center;
+	flex-wrap: wrap;
+	gap: 8px;
+	margin-top: 7px;
+}
+
+.clean {
+	color: rgb(133, 183, 224);
+	cursor: pointer;
+	padding: 2px 8px;
+}
+</style>