goodsTopic_jj.vue 21 KB

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