goodsTopic_jj.vue 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693
  1. <template>
  2. <view class="container">
  3. <nav-bar title="考前专题" class="navbar"></nav-bar>
  4. <!-- 顶部宣传横幅 -->
  5. <view class="banner">
  6. <!-- 轮播图组件 -->
  7. <swiper
  8. class="banner-swiper"
  9. :indicator-dots="true"
  10. :autoplay="true"
  11. :interval="5000"
  12. :duration="500"
  13. indicator-color="rgba(255,255,255,0.5)"
  14. indicator-active-color="#ffffff"
  15. circular
  16. >
  17. <swiper-item v-for="(item, index) in bannerList" :key="index">
  18. <image
  19. :src="item.bimgUrl"
  20. class="banner-img"
  21. mode="widthFix"
  22. @click="goToCourse(item,0)"
  23. ></image>
  24. </swiper-item>
  25. </swiper>
  26. <!-- <view class="banner-bg"></view> -->
  27. <!-- <view class="banner-content">
  28. <text class="banner-title">专业建筑工程考试培训平台</text>
  29. <text class="banner-desc">深耕建工培训15年 · 累计服务学员超100万 · 高通过率有保障</text>
  30. </view>
  31. <view class="banner-wave">
  32. 深耕建工培训15年 · 累计服务学员超100万 · 高通过率有保障
  33. </view> -->
  34. </view>
  35. <!-- 课程主体内容 -->
  36. <view class="course-container">
  37. <view class="titles">
  38. <image class="timg" src="@/static/topic/icon_left.png" alt="" />
  39. <text class="scheme">进击取证</text>
  40. <image class="timg" src="@/static/topic/icon_right.png" alt="" />
  41. </view>
  42. <view class="min_title">一站式解决方案,领跑新考季</view>
  43. <view class="course-row">
  44. <!-- 课程卡片 -->
  45. <view
  46. class="course-col"
  47. v-for="(course, index) in filteredCourseList"
  48. :key="index"
  49. >
  50. <view class="course-card" :class="`type-${course.typeId}`">
  51. <view class="course-img-box">
  52. <image :src="course.imgUrl" :alt="course.name" class="course-img" mode="aspectFill"></image>
  53. <view class="course-tag" :style="{ backgroundColor: `var(--theme-color)` }">
  54. <text>{{ course.tagText }}</text>
  55. </view>
  56. <view class="course-stats">
  57. <text><i class="mdi mdi-account"></i> {{ course.learnCount }}</text>
  58. <text><i class="mdi mdi-star"></i> {{ course.rating }}</text>
  59. </view>
  60. </view>
  61. <view class="course-content">
  62. <view class="course-title" :style="{ color: `var(--theme-color)` }">
  63. <i :class="course.iconClass"></i>
  64. <text>{{ course.name }}</text>
  65. <text style="margin-left: 5px;">{{ course.cname }}</text>
  66. </view>
  67. <view class="specialty-tags">
  68. <view class="specialty-tag" v-for="(item, idx) in course.specialties" :key="idx">
  69. <text>{{ item }}</text>
  70. </view>
  71. </view>
  72. <view class="course-footer">
  73. <view class="course-price" :style="{ color: `var(--theme-color)` }">
  74. <text>全科&nbsp;¥{{ course.price }}</text>
  75. <text class="original-price">¥{{ course.originalPrice }}</text>
  76. </view>
  77. <button class="course-btn" :style="{ backgroundColor: `var(--theme-color)` }" @click="goToCourse(course,1)">
  78. 立即报名
  79. </button>
  80. </view>
  81. <view class="course-footer" v-if="course.price2">
  82. <view class="course-price" :style="{ color: `var(--theme-color)` }">
  83. <text>单科实务&nbsp;¥{{ course.price2 }}</text>
  84. <text class="original-price">¥{{ course.originalPrice2 }}</text>
  85. </view>
  86. <button class="course-btn" :style="{ backgroundColor: `var(--theme-color)` }" @click="goToCourse(course,2)">
  87. 立即报名
  88. </button>
  89. </view>
  90. </view>
  91. </view>
  92. </view>
  93. <!-- 无匹配课程提示 -->
  94. <view class="empty-col" v-if="filteredCourseList.length === 0">
  95. <view class="empty-view">
  96. <text class="empty-text">未找到匹配的课程,请尝试其他关键词</text>
  97. </view>
  98. </view>
  99. </view>
  100. </view>
  101. <!-- 回到顶部按钮 -->
  102. <view
  103. class="back-to-top"
  104. :class="{ visible: isScrolled }"
  105. @click="backToTop"
  106. >
  107. <i class="mdi mdi-arrow-up"></i>
  108. </view>
  109. </view>
  110. </template>
  111. <script>
  112. export default {
  113. data() {
  114. return {
  115. // 滚动状态
  116. isScrolled: false,
  117. // 搜索关键词
  118. searchKeyword: '',
  119. // 选中的课程类型
  120. selectedCourseType: '',
  121. // picker索引
  122. pickerIndex: 0,
  123. // 轮播图数据(800:768比例)
  124. bannerList: [],
  125. // 课程类型列表
  126. courseTypes: [
  127. '一级建造师', '二级建造师', '监理工程师', '注册安全工程师',
  128. // '水利质量检测员',
  129. '中级经济师', '社会工作者(初级)',
  130. '社会工作者(中级)',
  131. // '社区工作者'
  132. ],
  133. // 课程数据
  134. courseList: [
  135. {
  136. typeId: 1,
  137. name: '一级建造师',
  138. cname:'精英优享班',
  139. imgUrl: require("@/static/topic/course_yj.png"),
  140. bimgUrl: require("@/static/topic/banner_1.png"),
  141. topath0:'https://h.xyyxt.net/pages/course/index?educationId=3&projectId=5&businessId=6',
  142. topath1:'https://h.xyyxt.net/pages/course/index?educationId=3&projectId=5&businessId=6',
  143. topath2:'https://h.xyyxt.net/pages/course/index?educationId=3&projectId=5&businessId=6',
  144. tagText: '热门',
  145. learnCount: '8.8万人学习',
  146. rating: '97%好评',
  147. price: 3580,
  148. originalPrice: 4380,
  149. price2: 1080,
  150. originalPrice2: 1980,
  151. iconClass: 'mdi mdi-account-hard-hat',
  152. specialties: ['管理', '法规', '经济', '建筑', '市政', '机电', '公路', '水利', '港口与航道']
  153. },
  154. {
  155. typeId: 2,
  156. name: '二级建造师',
  157. cname:'精英优享班',
  158. imgUrl: require("@/static/topic/course_ej.png"),
  159. bimgUrl: require("@/static/topic/banner_2.png"),
  160. topath0:'https://h.xyyxt.net/pages/course/index?educationId=3&projectId=5&businessId=7',
  161. topath1:'https://h.xyyxt.net/pages/course/index?educationId=3&projectId=5&businessId=7',
  162. topath2:'https://h.xyyxt.net/pages/course/index?educationId=3&projectId=5&businessId=7',
  163. tagText: '推荐',
  164. learnCount: '3.6万人学习',
  165. rating: '95%好评',
  166. price: 2280,
  167. originalPrice: 3280,
  168. price2: 980,
  169. originalPrice2: 1680,
  170. iconClass: 'mdi mdi-account-tie',
  171. specialties: ['管理', '法规', '建筑', '市政', '机电', '公路', '水利']
  172. },
  173. {
  174. typeId: 3,
  175. name: '监理工程师',
  176. cname:'精英优享班',
  177. imgUrl: require("@/static/topic/course_jl.png"),
  178. topath0:'https://h.xyyxt.net/pages/course/index?educationId=3&projectId=938&businessId=1803',
  179. topath1:'https://h.xyyxt.net/pages/course/index?educationId=3&projectId=938&businessId=1803',
  180. topath2:'https://h.xyyxt.net/pages/course/index?educationId=3&projectId=938&businessId=1803',
  181. tagText: '精品',
  182. learnCount: '2.2万人学习',
  183. rating: '95%好评',
  184. price: 2580,
  185. originalPrice: 3380,
  186. price2: 1080,
  187. originalPrice2: 1880,
  188. iconClass: 'mdi mdi-clipboard-check',
  189. specialties: ['管理', '概论', '土建三控', '土建案例', '交通三控', '交通案例', '水利三控', '水利案例']
  190. },
  191. {
  192. typeId: 4,
  193. name: '注册安全工程师',
  194. cname:'精英优享班',
  195. imgUrl: require("@/static/topic/course_aq.png"),
  196. topath0:'https://h.xyyxt.net/pages/course/index?educationId=3&projectId=937&businessId=1802',
  197. topath1:'https://h.xyyxt.net/pages/course/index?educationId=3&projectId=937&businessId=1802',
  198. topath2:'https://h.xyyxt.net/pages/course/index?educationId=3&projectId=937&businessId=1802',
  199. tagText: '必学',
  200. learnCount: '6.5万人学习',
  201. rating: '94%好评',
  202. price: 3680,
  203. originalPrice: 4580,
  204. price2: 1280,
  205. originalPrice2: 2080,
  206. iconClass: 'mdi mdi-shield-check',
  207. specialties: ['管理', '法规', '技术基础', '其他安全', '化工安全', '建筑施工安全', '矿山安全', '金属冶炼安全', '煤矿安全', '道路运输安全']
  208. },
  209. // {
  210. // typeId: 5,
  211. // name: '水利质量检测员',
  212. // imgUrl: require("@/static/topic/course_sl.png"),
  213. // tagText: '新课',
  214. // learnCount: '4.3万人学习',
  215. // rating: '99%好评',
  216. // price: 2580,
  217. // originalPrice: 3580,
  218. // iconClass: 'mdi mdi-water',
  219. // specialties: ['基础知识', '混凝土工程', '岩土工程', '金属结构', '机械电气', '量测']
  220. // },
  221. {
  222. typeId: 6,
  223. name: '中级经济师',
  224. cname:'精英优享班',
  225. imgUrl: require("@/static/topic/course_jj.png"),
  226. topath0:'https://h.xyyxt.net/pages/course/index?educationId=3&projectId=939&businessId=1804',
  227. topath1:'https://h.xyyxt.net/pages/course/index?educationId=3&projectId=939&businessId=1804',
  228. topath2:'https://h.xyyxt.net/pages/course/index?educationId=3&projectId=939&businessId=1804',
  229. tagText: '特惠',
  230. learnCount: '3.8万人学习',
  231. rating: '97%好评',
  232. price: 2280,
  233. originalPrice: 3380,
  234. price2: 1280,
  235. originalPrice2: 2080,
  236. iconClass: 'mdi mdi-currency-cny',
  237. specialties: ['经济基础', '工商管理', '人力资源', '金融专业', '财政税收', '建筑与房地产', '知识产权', '保险经济', '运输经济', '旅游经济', '农业经济']
  238. },
  239. {
  240. typeId: 7,
  241. name: '社会工作者(初级)',
  242. cname:'通过无忧班',
  243. imgUrl: require("@/static/topic/course_sg1.png"),
  244. topath0:'https://h.xyyxt.net/pages/course/index?educationId=3&projectId=940&businessId=1806',
  245. topath1:'https://h.xyyxt.net/pages/course/index?educationId=3&projectId=940&businessId=1806',
  246. tagText: '入门',
  247. learnCount: '6.1万人学习',
  248. rating: '95%好评',
  249. price: 1280,
  250. originalPrice: 2280,
  251. iconClass: 'mdi mdi-humanitarian',
  252. specialties: ['综合能力', '实务']
  253. },
  254. {
  255. typeId: 8,
  256. name: '社会工作者(中级)',
  257. cname:'通过无忧班',
  258. imgUrl: require("@/static/topic/course_sg2.png"),
  259. topath0:'https://h.xyyxt.net/pages/course/index?educationId=3&projectId=940&businessId=1807',
  260. topath1:'https://h.xyyxt.net/pages/course/index?educationId=3&projectId=940&businessId=1807',
  261. tagText: '进阶',
  262. learnCount: '1.5万人学习',
  263. rating: '92%好评',
  264. price: 1580,
  265. originalPrice: 2580,
  266. iconClass: 'mdi mdi-human-male-female',
  267. specialties: ['综合能力', '法规与政策', '实务']
  268. },
  269. // {
  270. // typeId: 9,
  271. // name: '社区工作者',
  272. // imgUrl: require("@/static/topic/course_sq.png"),
  273. // tagText: '基础',
  274. // learnCount: '5.7万人学习',
  275. // rating: '99%好评',
  276. // price: 1580,
  277. // originalPrice: 2580,
  278. // iconClass: 'mdi mdi-home-group',
  279. // specialties: ['基础知识', '职业技能']
  280. // }
  281. ],
  282. // 筛选后的课程列表
  283. filteredCourseList: []
  284. }
  285. },
  286. onReady() {
  287. // 初始化课程列表
  288. this.filteredCourseList = [...this.courseList]
  289. this.filteredCourseList.forEach(item=>{
  290. if(item.bimgUrl){
  291. this.bannerList.push(item);
  292. }
  293. })
  294. console.log("as",this.bannerList)
  295. // 监听滚动事件
  296. uni.onWindowResize(this.handleScroll)
  297. uni.pageScrollTo({
  298. scrollTop: 0,
  299. duration: 0
  300. })
  301. // 欢迎提示
  302. // uni.showToast({
  303. // title: '欢迎来到建工教育',
  304. // icon: 'success'
  305. // })
  306. },
  307. onShow() {
  308. // 监听页面滚动
  309. // uni.onPageScroll((e) => {
  310. // this.isScrolled = e.scrollTop > 100
  311. // })
  312. },
  313. onHide() {
  314. // 移除滚动监听
  315. // uni.offPageScroll()
  316. },
  317. methods: {
  318. // 处理滚动
  319. handleScroll() {
  320. uni.getSystemInfo({
  321. success: (res) => {
  322. this.screenHeight = res.windowHeight
  323. }
  324. })
  325. },
  326. // 回到顶部
  327. backToTop() {
  328. uni.pageScrollTo({
  329. scrollTop: 0,
  330. duration: 500
  331. })
  332. uni.showToast({
  333. title: '已回到顶部',
  334. icon: 'success'
  335. })
  336. },
  337. // 筛选课程
  338. filterCourses() {
  339. let result = [...this.courseList]
  340. // 按类型筛选
  341. if (this.selectedCourseType) {
  342. result = result.filter(course => course.name === this.selectedCourseType)
  343. }
  344. // 按关键词筛选
  345. if (this.searchKeyword) {
  346. const keyword = this.searchKeyword.toLowerCase()
  347. result = result.filter(course => {
  348. const nameMatch = course.name.toLowerCase().includes(keyword)
  349. const specialtyMatch = course.specialties.some(s => s.toLowerCase().includes(keyword))
  350. return nameMatch || specialtyMatch
  351. })
  352. }
  353. this.filteredCourseList = result
  354. // 无结果提示
  355. if (this.searchKeyword && result.length === 0) {
  356. uni.showToast({
  357. title: '未找到匹配课程',
  358. icon: 'none'
  359. })
  360. }
  361. },
  362. // 选择课程类型
  363. handleTypeChange(e) {
  364. const index = e.detail.value
  365. this.pickerIndex = index
  366. this.selectedCourseType = index === 0 ? '' : this.courseTypes[index - 1]
  367. this.filterCourses()
  368. },
  369. // 重置筛选
  370. resetFilter() {
  371. this.searchKeyword = ''
  372. this.selectedCourseType = ''
  373. this.pickerIndex = 0
  374. this.filteredCourseList = [...this.courseList]
  375. uni.showToast({
  376. title: '筛选条件已重置',
  377. icon: 'info'
  378. })
  379. },
  380. // 课程报名
  381. goToCourse(item,type) {
  382. // uni.navigateTo({
  383. // url: (type==1?item.topath1:type==2?item.topath2:item.topath0).replace('https://h.xyyxt.net','')
  384. // })
  385. window.open(type==1?item.topath1:type==2?item.topath2:item.topath0, "_self");
  386. },
  387. // 登录/注册
  388. gotoLogin() {
  389. uni.showToast({
  390. title: '登录/注册功能开发中',
  391. icon: 'none'
  392. })
  393. },
  394. // 我的课程
  395. gotoMyCourse() {
  396. uni.showToast({
  397. title: '我的课程功能开发中',
  398. icon: 'none'
  399. })
  400. },
  401. }
  402. }
  403. </script>
  404. <style scoped>
  405. /* 顶部轮播Banner */
  406. .banner {
  407. position: relative;
  408. overflow: hidden;
  409. margin-bottom: 30px;
  410. /* 按800:768比例计算高度(宽度100%,高度=宽度*768/800) */
  411. height: 0;
  412. padding-bottom: 96%; /* 768/800 = 0.96 = 96% */
  413. }
  414. .banner-swiper {
  415. position: absolute;
  416. top: 0;
  417. left: 0;
  418. width: 100%;
  419. height: 100%;
  420. }
  421. .banner-img {
  422. width: 100%;
  423. height: 100%;
  424. object-fit: cover;
  425. }
  426. /* 课程容器 */
  427. .course-container {
  428. max-width: 1200px;
  429. margin: 0 auto;
  430. padding: 0 20px 50px;
  431. }
  432. .titles {
  433. text-align: center;
  434. }
  435. .titles .timg {
  436. width: 32rpx;
  437. height: 20rpx;
  438. }
  439. .titles .scheme {
  440. font-size: 48rpx;
  441. font-weight: bold;
  442. color: #363543;
  443. margin: 0px 40rpx;
  444. }
  445. .min_title {
  446. text-align: center;
  447. margin: 13rpx 0px 50rpx;
  448. font-size: 28rpx;
  449. font-weight: 500;
  450. color: #363543;
  451. }
  452. .course-row {
  453. display: flex;
  454. flex-wrap: wrap;
  455. gap: 24px;
  456. }
  457. .course-col {
  458. flex: 1;
  459. min-width: 300px;
  460. max-width: calc(33.333% - 16px);
  461. }
  462. .empty-col {
  463. width: 100%;
  464. padding: 50rpx 0;
  465. text-align: center;
  466. }
  467. .empty-view {
  468. display: flex;
  469. flex-direction: column;
  470. align-items: center;
  471. }
  472. .empty-img {
  473. width: 100px;
  474. height: 100px;
  475. margin-bottom: 20px;
  476. }
  477. .empty-text {
  478. font-size: 16px;
  479. color: #999;
  480. }
  481. /* 课程卡片 */
  482. .course-card {
  483. border-radius: 8px;
  484. overflow: hidden;
  485. transition: all 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275);
  486. margin-bottom: 24px;
  487. background-color: white;
  488. box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
  489. }
  490. .course-card:hover {
  491. transform: translateY(-8px);
  492. box-shadow: 0 12px 24px rgba(0, 0, 0, 0.12);
  493. }
  494. .course-img-box {
  495. height: 180px;
  496. overflow: hidden;
  497. position: relative;
  498. }
  499. .course-img {
  500. width: 100%;
  501. height: 100%;
  502. transition: all 0.6s ease;
  503. }
  504. .course-card:hover .course-img {
  505. transform: scale(1.08);
  506. }
  507. .course-tag {
  508. position: absolute;
  509. top: 15px;
  510. left: 15px;
  511. z-index: 2;
  512. color: white;
  513. padding: 4px 8px;
  514. border-radius: 4px;
  515. font-size: 12px;
  516. }
  517. .course-stats {
  518. position: absolute;
  519. bottom: 0;
  520. left: 0;
  521. width: 100%;
  522. padding: 10px 15px;
  523. background: linear-gradient(transparent, rgba(0,0,0,0.6));
  524. color: white;
  525. display: flex;
  526. justify-content: space-between;
  527. align-items: center;
  528. font-size: 14px;
  529. }
  530. /* 课程内容 */
  531. .course-content {
  532. padding: 20rpx;
  533. }
  534. .course-title {
  535. font-size: 20px;
  536. font-weight: bold;
  537. margin-bottom: 12px;
  538. display: flex;
  539. align-items: center;
  540. }
  541. .course-title i {
  542. margin-right: 8px;
  543. font-size: 22px;
  544. }
  545. .specialty-tags {
  546. display: flex;
  547. flex-wrap: wrap;
  548. margin: 15px 0;
  549. }
  550. .specialty-tag {
  551. margin: 0 8px 8px 0;
  552. padding: 4px 10px;
  553. border-radius: 4px;
  554. background-color: #f0f2f5;
  555. color: #666;
  556. font-size: 12px;
  557. transition: all 0.2s ease;
  558. }
  559. .specialty-tag:hover {
  560. background-color: var(--theme-color);
  561. color: white;
  562. transform: translateY(-2px);
  563. }
  564. .course-footer {
  565. display: flex;
  566. justify-content: space-between;
  567. align-items: center;
  568. margin-top: 15px;
  569. padding-top: 15px;
  570. border-top: 1px solid #f0f2f5;
  571. }
  572. .course-price {
  573. font-size: 18px;
  574. font-weight: bold;
  575. }
  576. .original-price {
  577. font-size: 14px;
  578. color: #999;
  579. font-weight: normal;
  580. margin-left: 8px;
  581. text-decoration: line-through;
  582. }
  583. .course-btn {
  584. background-color: var(--theme-color);
  585. color: white;
  586. border: none;
  587. padding: 0rpx 16rpx;
  588. border-radius: 4rpx;
  589. transition: all 0.3s ease;
  590. }
  591. .course-btn:hover {
  592. opacity: 0.9;
  593. transform: translateY(-2px);
  594. }
  595. /* 回到顶部 */
  596. .back-to-top {
  597. position: fixed;
  598. bottom: 30px;
  599. right: 30px;
  600. width: 48px;
  601. height: 48px;
  602. border-radius: 50%;
  603. background-color: #1989fa;
  604. color: white;
  605. text-align: center;
  606. line-height: 48px;
  607. font-size: 20px;
  608. cursor: pointer;
  609. box-shadow: 0 4px 12px rgba(25, 137, 250, 0.3);
  610. transition: all 0.3s ease;
  611. opacity: 0;
  612. visibility: hidden;
  613. z-index: 999;
  614. }
  615. .back-to-top.visible {
  616. opacity: 1;
  617. visibility: visible;
  618. }
  619. .back-to-top:hover {
  620. background-color: #0e6ecd;
  621. transform: translateY(-3px);
  622. box-shadow: 0 6px 16px rgba(25, 137, 250, 0.4);
  623. }
  624. /* 响应式适配 */
  625. @media (max-width: 768px) {
  626. .banner-title {
  627. font-size: 28px;
  628. }
  629. .course-col {
  630. max-width: 100%;
  631. }
  632. .filter-row {
  633. flex-direction: column;
  634. }
  635. .filter-col-10, .filter-col-8, .filter-col-6 {
  636. flex: 100%;
  637. width: 100%;
  638. }
  639. .footer-content {
  640. flex-direction: column;
  641. }
  642. .footer-col {
  643. padding-right: 0;
  644. }
  645. }
  646. /* 全局样式 */
  647. * {
  648. margin: 0;
  649. padding: 0;
  650. box-sizing: border-box;
  651. }
  652. body {
  653. font-family: "Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "微软雅黑", Arial, sans-serif;
  654. background-color: #f5f7fa;
  655. scroll-behavior: smooth;
  656. }
  657. /* 课程类型主题色 */
  658. .type-1 { --theme-color: #1989fa; }
  659. .type-2 { --theme-color: #52c41a; }
  660. .type-3 { --theme-color: #faad14; }
  661. .type-4 { --theme-color: #f5222d; }
  662. .type-5 { --theme-color: #40a9ff; }
  663. .type-6 { --theme-color: #722ed1; }
  664. .type-7 { --theme-color: #13c2c2; }
  665. .type-8 { --theme-color: #fa8c16; }
  666. .type-9 { --theme-color: #eb2f96; }
  667. /* 引入MDI图标 */
  668. @import url('https://cdn.jsdelivr.net/npm/@mdi/font@5.9.55/css/materialdesignicons.min.css');
  669. </style>