/** * 教师搜索功能模块 * 支持:按姓氏搜索、按系所搜索、按职称搜索 * 兼容 IE10+ */ (function(window, $) { 'use strict'; // ==================== 配置参数 ==================== var CONFIG = { dataUrl: '../../common/clxyjsdw.json', // 数据文件路径 $navContainer: '.troops_nav', // 导航容器 $tabContainer: '.access_r', // tab切换容器 $tabList: '.tabList', // 内容展示容器 $departmentNav: '.troops_letter', // 系所导航容器 titleCategories: [ '教授/研究员', '副教授/副研究员/高级工程师', '讲师/博士后/工程师' ] }; // ==================== 全局数据存储 ==================== var teacherData = []; // 原始教师数据 var departmentList = []; // 系所列表(去重后) var currentMode = 'name'; // 当前搜索模式:name/department/title var currentDepartment = '';// 当前选中的系所 var map = { '前沿交叉科学技术研究院': 1, '材料学系': 2, '材料加工与控制工程系': 3, '材料物理与化学系': 4, '无机非金属材料系': 5, '粉末冶金与先进陶瓷研究所': 6, '材料科学与工程': 7, '高分子材料系': 8 }; // ==================== 工具函数 ==================== /** * 比较函数 - 按字母和姓名排序 * @param {Object} a 教师对象a * @param {Object} b 教师对象b * @returns {Number} 比较结果 */ function compareByLetterAndName(a, b) { var letterA = a.properties.letter || ''; var letterB = b.properties.letter || ''; var nameA = a.title || ''; var nameB = b.title || ''; // 先按字母排序 if (letterA < letterB) return -1; if (letterA > letterB) return 1; // 字母相同则按姓名排序 if (nameA < nameB) return -1; if (nameA > nameB) return 1; return 0; } /** * 获取职称分类 * @param {Object} teacher 教师对象 * @returns {String} 职称分类 */ function getTitleCategory(teacher) { var titleSort = teacher.properties.title_sort || ''; return titleSort; } /** * 判断教师是否属于某职称分类 * @param {Object} teacher 教师对象 * @param {String} category 职称分类 * @returns {Boolean} */ function isTitleCategory(teacher, category) { return getTitleCategory(teacher) === category; } /** * 生成教师链接HTML * @param {Object} teacher 教师对象 * @returns {String} HTML字符串 */ function generateTeacherLink(teacher) { var url = teacher.url || '#'; var name = teacher.title || ''; return '