index.vue 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883
  1. <template>
  2. <view class="study-record-container">
  3. <!-- 学科标签页 -->
  4. <view class="subject-tabs">
  5. <scroll-view scroll-x class="tabs-scroll" :scroll-left="tabScrollLeft">
  6. <view class="tabs-container">
  7. <view
  8. v-for="subject in subjectList"
  9. :key="subject.id"
  10. class="tab-item"
  11. :class="{ active: activeSubject === subject.id }"
  12. @click="switchSubject(subject.id)"
  13. >
  14. <view class="subject-icon">
  15. <text>{{ subject.icon }}</text>
  16. </view>
  17. <text class="subject-name">{{ subject.name }}</text>
  18. </view>
  19. </view>
  20. </scroll-view>
  21. </view>
  22. <!-- 当前学科信息 -->
  23. <view class="subject-info">
  24. <view class="info-card">
  25. <view class="subject-header">
  26. <view class="subject-title">
  27. <text class="subject-name">{{ currentSubjectInfo.name }}</text>
  28. <text class="subject-icon-large">{{ currentSubjectInfo.icon }}</text>
  29. </view>
  30. <text class="subject-description">{{ currentSubjectInfo.description }}</text>
  31. </view>
  32. <view class="course-info">
  33. <view class="info-item">
  34. <text class="label">当前课程</text>
  35. <text class="value">{{ currentCourse.courseName }}</text>
  36. </view>
  37. <view class="info-row">
  38. <view class="info-col">
  39. <text class="label">等级</text>
  40. <text class="value level-badge">{{ currentCourse.level }}</text>
  41. </view>
  42. <view class="info-col">
  43. <text class="label">版本</text>
  44. <text class="value">{{ currentCourse.version }}</text>
  45. </view>
  46. <view class="info-col">
  47. <text class="label">单元</text>
  48. <text class="value">{{ currentCourse.unit }}</text>
  49. </view>
  50. </view>
  51. </view>
  52. <!-- 学习进度 -->
  53. <view class="progress-section">
  54. <view class="progress-header">
  55. <text class="section-title">学习进度</text>
  56. <text class="progress-percent">{{ progress }}%</text>
  57. </view>
  58. <view class="progress-bar">
  59. <view class="progress-fill" :style="{ width: progress + '%' }"></view>
  60. </view>
  61. <view class="continue-study">
  62. <button class="continue-btn" @click="continueStudy">
  63. <text class="btn-text">继续学习</text>
  64. <text class="btn-icon">→</text>
  65. </button>
  66. </view>
  67. </view>
  68. </view>
  69. </view>
  70. <!-- 课程目录 -->
  71. <view class="course-directory">
  72. <view class="directory-header">
  73. <text class="section-title">以下为当前等级课程目录</text>
  74. <view class="level-badges">
  75. <view
  76. v-for="level in levels"
  77. :key="level"
  78. class="level-badge"
  79. :class="{ active: currentLevel === level }"
  80. @click="switchLevel(level)"
  81. >
  82. <text>{{ level }}</text>
  83. </view>
  84. </view>
  85. </view>
  86. <!-- 使用 z-paging 实现滚动监听 -->
  87. <z-paging
  88. ref="paging"
  89. @scroll="onScroll"
  90. @query="loadCourseData"
  91. :refresher-enabled="false"
  92. :loading-more-enabled="false"
  93. :auto="true"
  94. :fixed="false"
  95. :hide-empty-view="true"
  96. >
  97. <!-- 当前等级课程列表 -->
  98. <view
  99. v-for="(unit, unitIndex) in currentLevelCourses"
  100. :key="unit.id"
  101. :id="'unit-' + unitIndex"
  102. class="unit-container"
  103. :class="{ 'last-unit': unit.isLastUnit }"
  104. >
  105. <!-- 单元信息 -->
  106. <view class="unit-header">
  107. <text class="unit-level">{{ unit.level }}</text>
  108. <text class="unit-title">{{ unit.title }}</text>
  109. </view>
  110. <!-- 节列表 -->
  111. <view
  112. v-for="(section, sectionIndex) in unit.sections"
  113. :key="section.id"
  114. class="section-item"
  115. :class="{
  116. 'current-section': section.id === currentSectionId,
  117. 'completed': section.completed
  118. }"
  119. @click="goToSection(section)"
  120. >
  121. <view class="section-order">
  122. <text v-if="section.type === 'test'" class="test-icon">📝</text>
  123. <text v-else class="section-number">第{{ section.order }}节</text>
  124. </view>
  125. <view class="section-content">
  126. <view class="section-main">
  127. <text class="section-name">{{ section.name }}</text>
  128. <view v-if="section.completed" class="completed-badge">
  129. <text>已完成</text>
  130. </view>
  131. </view>
  132. <text v-if="section.description" class="section-description">
  133. {{ section.description }}
  134. </text>
  135. </view>
  136. <view class="section-action">
  137. <text class="action-icon">›</text>
  138. </view>
  139. </view>
  140. <!-- 最后一个单元的提示 -->
  141. <view v-if="unit.isLastUnit" class="last-unit-tip">
  142. <text class="tip-text">本级别最后一单元啦~</text>
  143. </view>
  144. </view>
  145. <!-- 查看更多 -->
  146. <view class="view-more" @click="viewMoreCourses">
  147. <text class="more-text">查看更多内容</text>
  148. <text class="more-icon">↓</text>
  149. </view>
  150. </z-paging>
  151. <!-- 当前单元提示 -->
  152. <view v-if="currentUnitTitle" class="current-unit-tip">
  153. <text>{{ currentUnitTitle }}</text>
  154. </view>
  155. </view>
  156. </view>
  157. </template>
  158. <script>
  159. export default {
  160. data() {
  161. return {
  162. // 当前选中的学科
  163. activeSubject: 'math',
  164. // 学科列表
  165. subjectList: [
  166. {
  167. id: 'chinese',
  168. name: '语文',
  169. icon: '📚',
  170. description: '语言文学与文化传承'
  171. },
  172. {
  173. id: 'math',
  174. name: '数学',
  175. icon: '🧮',
  176. description: '逻辑思维与问题解决'
  177. },
  178. {
  179. id: 'english',
  180. name: '英语',
  181. icon: '🔤',
  182. description: '国际交流与语言能力'
  183. },
  184. {
  185. id: 'physics',
  186. name: '物理',
  187. icon: '⚛️',
  188. description: '自然规律与科学探索'
  189. },
  190. {
  191. id: 'chemistry',
  192. name: '化学',
  193. icon: '🧪',
  194. description: '物质变化与实验科学'
  195. }
  196. ],
  197. // 当前课程信息
  198. currentCourse: {
  199. courseName: '数学图解母题',
  200. level: 'L1',
  201. version: '通用版',
  202. unit: '第一单元'
  203. },
  204. // 学习进度
  205. progress: 65,
  206. // 等级列表
  207. levels: ['L1', 'L2', 'L3', 'L4'],
  208. currentLevel: 'L1',
  209. // 当前等级的课程数据
  210. currentLevelCourses: [],
  211. // 当前正在学习的节ID
  212. currentSectionId: 2,
  213. // 滚动相关
  214. currentUnitTitle: '',
  215. unitPositions: [],
  216. // 标签页滚动位置
  217. tabScrollLeft: 0
  218. }
  219. },
  220. computed: {
  221. // 当前学科信息
  222. currentSubjectInfo() {
  223. return this.subjectList.find(item => item.id === this.activeSubject) || {}
  224. }
  225. },
  226. mounted() {
  227. // 初始化加载数学数据
  228. this.loadMathData()
  229. },
  230. methods: {
  231. // 切换学科
  232. switchSubject(subjectId) {
  233. this.activeSubject = subjectId
  234. // 根据学科加载数据
  235. switch(subjectId) {
  236. case 'math':
  237. this.loadMathData()
  238. break
  239. case 'chinese':
  240. this.loadChineseData()
  241. break
  242. case 'english':
  243. this.loadEnglishData()
  244. break
  245. // 其他学科...
  246. }
  247. // 滚动标签到可视区域
  248. this.scrollTabToView(subjectId)
  249. },
  250. // 滚动标签到可视区域
  251. scrollTabToView(subjectId) {
  252. const index = this.subjectList.findIndex(item => item.id === subjectId)
  253. if (index > 2) { // 如果靠后,向右滚动
  254. this.tabScrollLeft = (index - 2) * 100
  255. }
  256. },
  257. // 加载数学数据
  258. loadMathData() {
  259. this.currentCourse = {
  260. courseName: '数学图解母题',
  261. level: 'L1',
  262. version: '通用版',
  263. unit: '第一单元'
  264. }
  265. this.currentLevelCourses = [
  266. {
  267. id: 1,
  268. level: 'L1',
  269. title: '认识厘米和米',
  270. sections: [
  271. { id: 1, order: 1, name: '用尺子测量长度', description: '学习使用尺子测量物体长度', completed: true, type: 'lesson' },
  272. { id: 2, order: 2, name: '解决长度问题', description: '应用长度知识解决问题', completed: false, type: 'lesson' },
  273. { id: 3, order: 3, name: '解决长度问题', description: '深入理解长度概念', completed: false, type: 'lesson' },
  274. { id: 4, name: '单元测试', description: '检验本单元学习成果', completed: false, type: 'test' }
  275. ],
  276. isLastUnit: false
  277. },
  278. {
  279. id: 2,
  280. level: 'L2',
  281. title: '认识厘米和米',
  282. sections: [
  283. { id: 5, order: 1, name: '用尺子测量长度', description: '复习基础测量方法', completed: false, type: 'lesson' },
  284. { id: 6, order: 2, name: '解决长度问题', description: '复杂场景下的应用', completed: false, type: 'lesson' },
  285. { id: 7, order: 3, name: '解决长度问题', description: '综合能力训练', completed: false, type: 'lesson' },
  286. { id: 8, name: '单元测试', description: '进阶测试', completed: false, type: 'test' }
  287. ],
  288. isLastUnit: true
  289. }
  290. ]
  291. this.progress = 65
  292. this.currentSectionId = 2
  293. },
  294. // 加载语文数据
  295. loadChineseData() {
  296. this.currentCourse = {
  297. courseName: '语文经典阅读',
  298. level: 'L1',
  299. version: '人教版',
  300. unit: '第一单元'
  301. }
  302. this.currentLevelCourses = [
  303. {
  304. id: 11,
  305. level: 'L1',
  306. title: '诗词鉴赏',
  307. sections: [
  308. { id: 11, order: 1, name: '唐诗三百首', description: '经典唐诗赏析', completed: true, type: 'lesson' },
  309. { id: 12, order: 2, name: '宋词精选', description: '婉约派与豪放派', completed: false, type: 'lesson' },
  310. { id: 13, order: 3, name: '古文观止', description: '文言文阅读理解', completed: false, type: 'lesson' },
  311. { id: 14, name: '单元测试', description: '文学常识测试', completed: false, type: 'test' }
  312. ],
  313. isLastUnit: false
  314. }
  315. ]
  316. this.progress = 45
  317. this.currentSectionId = 12
  318. },
  319. // 加载英语数据
  320. loadEnglishData() {
  321. this.currentCourse = {
  322. courseName: '英语口语训练',
  323. level: 'L2',
  324. version: '国际版',
  325. unit: '第二单元'
  326. }
  327. this.currentLevelCourses = [
  328. {
  329. id: 21,
  330. level: 'L2',
  331. title: '日常会话',
  332. sections: [
  333. { id: 21, order: 1, name: '自我介绍', description: '学习基础自我介绍', completed: true, type: 'lesson' },
  334. { id: 22, order: 2, name: '购物对话', description: '商场购物常用英语', completed: true, type: 'lesson' },
  335. { id: 23, order: 3, name: '餐厅点餐', description: '餐厅用餐英语表达', completed: false, type: 'lesson' },
  336. { id: 24, name: '口语测试', description: '情景对话测试', completed: false, type: 'test' }
  337. ],
  338. isLastUnit: false
  339. }
  340. ]
  341. this.progress = 75
  342. this.currentSectionId = 23
  343. },
  344. // z-paging 加载数据
  345. loadCourseData(pageNo, pageSize) {
  346. // 数据已经在切换学科时加载了,这里直接完成
  347. this.$refs.paging.complete(this.currentLevelCourses)
  348. // 计算单元位置
  349. this.$nextTick(() => {
  350. this.calculateUnitPositions()
  351. })
  352. },
  353. // 计算单元位置
  354. calculateUnitPositions() {
  355. if (!this.currentLevelCourses.length) return
  356. const query = uni.createSelectorQuery().in(this)
  357. this.unitPositions = []
  358. this.currentLevelCourses.forEach((unit, index) => {
  359. query.select(`#unit-${index}`).boundingClientRect(data => {
  360. if (data) {
  361. this.unitPositions[index] = {
  362. top: data.top,
  363. title: unit.title
  364. }
  365. }
  366. }).exec()
  367. })
  368. },
  369. // 滚动事件
  370. onScroll(e) {
  371. const scrollTop = e.detail.scrollTop
  372. // 判断当前单元
  373. for (let i = this.unitPositions.length - 1; i >= 0; i--) {
  374. if (this.unitPositions[i] && scrollTop >= this.unitPositions[i].top - 100) {
  375. const newTitle = this.currentLevelCourses[i]?.title
  376. if (newTitle && newTitle !== this.currentUnitTitle) {
  377. this.currentUnitTitle = newTitle
  378. console.log('切换到单元:', newTitle)
  379. }
  380. break
  381. }
  382. }
  383. },
  384. // 切换等级
  385. switchLevel(level) {
  386. this.currentLevel = level
  387. // 这里可以根据等级重新加载数据
  388. console.log('切换到等级:', level)
  389. },
  390. // 继续学习
  391. continueStudy() {
  392. const currentSection = this.findCurrentSection()
  393. if (currentSection) {
  394. this.goToSection(currentSection)
  395. }
  396. },
  397. // 查找当前正在学习的节
  398. findCurrentSection() {
  399. for (const unit of this.currentLevelCourses) {
  400. for (const section of unit.sections) {
  401. if (section.id === this.currentSectionId) {
  402. return section
  403. }
  404. }
  405. }
  406. return null
  407. },
  408. // 进入节
  409. goToSection(section) {
  410. console.log('进入节:', section.name)
  411. // 这里实现跳转到学习页面的逻辑
  412. // uni.navigateTo({
  413. // url: `/pages/study/study?id=${section.id}`
  414. // })
  415. },
  416. // 查看更多
  417. viewMoreCourses() {
  418. console.log('查看更多内容')
  419. // 这里可以实现跳转到完整课程列表
  420. }
  421. }
  422. }
  423. </script>
  424. <style scoped>
  425. .study-record-container {
  426. min-height: 100vh;
  427. background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
  428. padding-bottom: 40rpx;
  429. }
  430. /* 学科标签页 */
  431. .subject-tabs {
  432. background: white;
  433. padding: 20rpx 0;
  434. box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.05);
  435. }
  436. .tabs-scroll {
  437. white-space: nowrap;
  438. height: 100rpx;
  439. }
  440. .tabs-container {
  441. display: inline-flex;
  442. padding: 0 30rpx;
  443. }
  444. .tab-item {
  445. display: flex;
  446. flex-direction: column;
  447. align-items: center;
  448. padding: 0 40rpx;
  449. transition: all 0.3s;
  450. }
  451. .tab-item.active {
  452. transform: translateY(-10rpx);
  453. }
  454. .subject-icon {
  455. width: 80rpx;
  456. height: 80rpx;
  457. background: #f0f2f5;
  458. border-radius: 50%;
  459. display: flex;
  460. align-items: center;
  461. justify-content: center;
  462. font-size: 40rpx;
  463. margin-bottom: 10rpx;
  464. transition: all 0.3s;
  465. }
  466. .tab-item.active .subject-icon {
  467. background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
  468. color: white;
  469. transform: scale(1.1);
  470. }
  471. .subject-name {
  472. font-size: 26rpx;
  473. color: #666;
  474. font-weight: 500;
  475. }
  476. .tab-item.active .subject-name {
  477. color: #667eea;
  478. font-weight: bold;
  479. }
  480. /* 学科信息卡片 */
  481. .subject-info {
  482. padding: 30rpx;
  483. }
  484. .info-card {
  485. background: white;
  486. border-radius: 24rpx;
  487. padding: 40rpx;
  488. box-shadow: 0 8rpx 32rpx rgba(0, 0, 0, 0.08);
  489. }
  490. .subject-header {
  491. margin-bottom: 40rpx;
  492. }
  493. .subject-title {
  494. display: flex;
  495. align-items: center;
  496. justify-content: space-between;
  497. margin-bottom: 20rpx;
  498. }
  499. .subject-name {
  500. font-size: 40rpx;
  501. font-weight: bold;
  502. color: #333;
  503. }
  504. .subject-icon-large {
  505. font-size: 48rpx;
  506. }
  507. .subject-description {
  508. font-size: 28rpx;
  509. color: #666;
  510. line-height: 1.5;
  511. }
  512. .course-info {
  513. margin-bottom: 40rpx;
  514. padding-bottom: 40rpx;
  515. border-bottom: 1rpx solid #f0f0f0;
  516. }
  517. .info-item {
  518. margin-bottom: 24rpx;
  519. }
  520. .label {
  521. display: block;
  522. font-size: 26rpx;
  523. color: #999;
  524. margin-bottom: 8rpx;
  525. }
  526. .value {
  527. font-size: 32rpx;
  528. color: #333;
  529. font-weight: 500;
  530. }
  531. .info-row {
  532. display: flex;
  533. justify-content: space-between;
  534. }
  535. .info-col {
  536. flex: 1;
  537. }
  538. .level-badge {
  539. background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
  540. color: white;
  541. padding: 8rpx 20rpx;
  542. border-radius: 20rpx;
  543. font-size: 26rpx;
  544. }
  545. /* 学习进度 */
  546. .progress-section {
  547. margin-bottom: 20rpx;
  548. }
  549. .progress-header {
  550. display: flex;
  551. justify-content: space-between;
  552. align-items: center;
  553. margin-bottom: 20rpx;
  554. }
  555. .section-title {
  556. font-size: 32rpx;
  557. font-weight: bold;
  558. color: #333;
  559. }
  560. .progress-percent {
  561. font-size: 36rpx;
  562. font-weight: bold;
  563. color: #667eea;
  564. }
  565. .progress-bar {
  566. height: 16rpx;
  567. background: #f0f2f5;
  568. border-radius: 8rpx;
  569. margin-bottom: 40rpx;
  570. overflow: hidden;
  571. }
  572. .progress-fill {
  573. height: 100%;
  574. background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
  575. border-radius: 8rpx;
  576. transition: width 0.5s ease;
  577. }
  578. .continue-study {
  579. text-align: center;
  580. }
  581. .continue-btn {
  582. background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
  583. color: white;
  584. border: none;
  585. padding: 24rpx 48rpx;
  586. border-radius: 50rpx;
  587. font-size: 32rpx;
  588. font-weight: 500;
  589. display: flex;
  590. align-items: center;
  591. justify-content: center;
  592. box-shadow: 0 8rpx 24rpx rgba(102, 126, 234, 0.3);
  593. }
  594. .btn-text {
  595. margin-right: 10rpx;
  596. }
  597. .btn-icon {
  598. font-size: 36rpx;
  599. }
  600. /* 课程目录 */
  601. .course-directory {
  602. margin: 0 30rpx;
  603. position: relative;
  604. }
  605. .directory-header {
  606. margin-bottom: 30rpx;
  607. }
  608. .level-badges {
  609. display: flex;
  610. margin-top: 20rpx;
  611. }
  612. .level-badge {
  613. padding: 12rpx 24rpx;
  614. background: #f0f2f5;
  615. border-radius: 20rpx;
  616. margin-right: 20rpx;
  617. font-size: 26rpx;
  618. color: #666;
  619. transition: all 0.3s;
  620. }
  621. .level-badge.active {
  622. background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
  623. color: white;
  624. }
  625. /* 单元容器 */
  626. .unit-container {
  627. background: white;
  628. border-radius: 20rpx;
  629. margin-bottom: 30rpx;
  630. overflow: hidden;
  631. box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.06);
  632. }
  633. .unit-container.last-unit {
  634. border: 2rpx solid #667eea;
  635. }
  636. .unit-header {
  637. background: linear-gradient(135deg, #667eea20 0%, #764ba220 100%);
  638. padding: 30rpx;
  639. border-bottom: 1rpx solid #f0f0f0;
  640. }
  641. .unit-level {
  642. background: #667eea;
  643. color: white;
  644. padding: 8rpx 20rpx;
  645. border-radius: 20rpx;
  646. font-size: 24rpx;
  647. margin-right: 20rpx;
  648. }
  649. .unit-title {
  650. font-size: 32rpx;
  651. font-weight: bold;
  652. color: #333;
  653. }
  654. /* 节项 */
  655. .section-item {
  656. padding: 30rpx;
  657. border-bottom: 1rpx solid #f0f0f0;
  658. display: flex;
  659. align-items: center;
  660. transition: all 0.3s;
  661. }
  662. .section-item:last-child {
  663. border-bottom: none;
  664. }
  665. .section-item.current-section {
  666. background: linear-gradient(135deg, #667eea10 0%, #764ba210 100%);
  667. }
  668. .section-item.completed {
  669. opacity: 0.8;
  670. }
  671. .section-item:active {
  672. background: #f0f2f5;
  673. }
  674. .section-order {
  675. width: 120rpx;
  676. flex-shrink: 0;
  677. }
  678. .test-icon {
  679. font-size: 36rpx;
  680. }
  681. .section-number {
  682. font-size: 28rpx;
  683. color: #667eea;
  684. font-weight: 500;
  685. }
  686. .section-content {
  687. flex: 1;
  688. min-width: 0;
  689. }
  690. .section-main {
  691. display: flex;
  692. align-items: center;
  693. margin-bottom: 10rpx;
  694. }
  695. .section-name {
  696. font-size: 30rpx;
  697. color: #333;
  698. font-weight: 500;
  699. flex: 1;
  700. overflow: hidden;
  701. text-overflow: ellipsis;
  702. white-space: nowrap;
  703. }
  704. .completed-badge {
  705. background: #52c41a;
  706. color: white;
  707. padding: 6rpx 16rpx;
  708. border-radius: 16rpx;
  709. font-size: 22rpx;
  710. margin-left: 20rpx;
  711. }
  712. .section-description {
  713. font-size: 26rpx;
  714. color: #999;
  715. display: block;
  716. line-height: 1.4;
  717. }
  718. .section-action {
  719. width: 60rpx;
  720. flex-shrink: 0;
  721. text-align: right;
  722. }
  723. .action-icon {
  724. font-size: 36rpx;
  725. color: #999;
  726. }
  727. /* 最后单元提示 */
  728. .last-unit-tip {
  729. padding: 30rpx;
  730. background: linear-gradient(135deg, #667eea10 0%, #764ba210 100%);
  731. text-align: center;
  732. }
  733. .tip-text {
  734. font-size: 28rpx;
  735. color: #667eea;
  736. font-weight: 500;
  737. }
  738. /* 查看更多 */
  739. .view-more {
  740. background: white;
  741. border-radius: 20rpx;
  742. padding: 30rpx;
  743. text-align: center;
  744. margin-top: 20rpx;
  745. display: flex;
  746. align-items: center;
  747. justify-content: center;
  748. }
  749. .more-text {
  750. font-size: 28rpx;
  751. color: #667eea;
  752. margin-right: 10rpx;
  753. font-weight: 500;
  754. }
  755. .more-icon {
  756. font-size: 24rpx;
  757. color: #667eea;
  758. }
  759. /* 当前单元提示 */
  760. .current-unit-tip {
  761. position: fixed;
  762. bottom: 100rpx;
  763. left: 50%;
  764. transform: translateX(-50%);
  765. background: rgba(102, 126, 234, 0.9);
  766. color: white;
  767. padding: 20rpx 40rpx;
  768. border-radius: 50rpx;
  769. font-size: 28rpx;
  770. z-index: 1000;
  771. box-shadow: 0 4rpx 20rpx rgba(102, 126, 234, 0.3);
  772. }
  773. </style>