与牧同行-小程序用户端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

297 lines
9.8 KiB

  1. <!-- pages/training/training.wxml -->
  2. <view class="training-container">
  3. <!-- 顶部标题 -->
  4. <view class="header">
  5. <view class="title">在线培训</view>
  6. <view class="subtitle">专业学习资源,助您快速成长</view>
  7. <view class="header-decoration">
  8. <view class="decoration-circle circle-1"></view>
  9. <view class="decoration-circle circle-2"></view>
  10. <view class="decoration-circle circle-3"></view>
  11. </view>
  12. </view>
  13. <!-- 主选项卡切换 -->
  14. <view class="tabs">
  15. <view
  16. class="tab-item {{currentTab === 0 ? 'active' : ''}}"
  17. bindtap="switchTab"
  18. data-tab="0"
  19. >
  20. <text>文章</text>
  21. <view class="tab-highlight {{currentTab === 0 ? 'active' : ''}}"></view>
  22. </view>
  23. <view
  24. class="tab-item {{currentTab === 1 ? 'active' : ''}}"
  25. bindtap="switchTab"
  26. data-tab="1"
  27. >
  28. <text>视频</text>
  29. <view class="tab-highlight {{currentTab === 1 ? 'active' : ''}}"></view>
  30. </view>
  31. <view class="tab-slider {{currentTab === 0 ? 'left' : 'right'}}"></view>
  32. </view>
  33. <!-- 文章板块 -->
  34. <view class="content-section" wx:if="{{currentTab === 0}}">
  35. <!-- 搜索框 -->
  36. <view class="search-box">
  37. <image class="search-icon" src="/pagesB/images/sou.png"></image>
  38. <input
  39. class="search-input"
  40. placeholder="搜索文章..."
  41. placeholder-class="placeholder-style"
  42. bindinput="onSearchInput"
  43. value="{{searchKeyword}}"
  44. />
  45. <view class="search-decoration">
  46. <view class="search-wave"></view>
  47. </view>
  48. </view>
  49. <!-- 文章分类筛选 -->
  50. <scroll-view class="category-scroll" scroll-x scroll-with-animation>
  51. <view class="category-list">
  52. <view
  53. class="category-item {{articleActiveCategory === 'all' ? 'active' : ''}}"
  54. bindtap="selectArticleCategory"
  55. data-category="all"
  56. >
  57. <text>全部</text>
  58. <view class="category-indicator"></view>
  59. </view>
  60. <view
  61. class="category-item {{articleActiveCategory === 'tech' ? 'active' : ''}}"
  62. bindtap="selectArticleCategory"
  63. data-category="tech"
  64. >
  65. <text>技术干货</text>
  66. <view class="category-indicator"></view>
  67. </view>
  68. <view
  69. class="category-item {{articleActiveCategory === 'business' ? 'active' : ''}}"
  70. bindtap="selectArticleCategory"
  71. data-category="business"
  72. >
  73. <text>商业思维</text>
  74. <view class="category-indicator"></view>
  75. </view>
  76. <view
  77. class="category-item {{articleActiveCategory === 'management' ? 'active' : ''}}"
  78. bindtap="selectArticleCategory"
  79. data-category="management"
  80. >
  81. <text>管理技能</text>
  82. <view class="category-indicator"></view>
  83. </view>
  84. <view
  85. class="category-item {{articleActiveCategory === 'career' ? 'active' : ''}}"
  86. bindtap="selectArticleCategory"
  87. data-category="career"
  88. >
  89. <text>职业发展</text>
  90. <view class="category-indicator"></view>
  91. </view>
  92. </view>
  93. </scroll-view>
  94. <!-- 文章列表 -->
  95. <view class="articles-list">
  96. <view
  97. class="article-card"
  98. wx:for="{{filteredArticles}}"
  99. wx:key="id"
  100. bindtap="viewArticleDetail"
  101. data-id="{{item.id}}"
  102. animation="{{item.animation}}"
  103. >
  104. <!-- 封面图片 -->
  105. <view class="article-cover-container">
  106. <image class="article-cover" src="{{item.cover}}" mode="aspectFill"></image>
  107. <view class="cover-overlay"></view>
  108. <view class="category-tag">{{item.category}}</view>
  109. <view class="article-hover-effect"></view>
  110. </view>
  111. <!-- 文章信息 -->
  112. <view class="article-info">
  113. <view class="article-title">{{item.title}}</view>
  114. <view class="article-desc">{{item.description}}</view>
  115. <view class="article-meta">
  116. <view class="meta-item">
  117. <image class="meta-icon" src="/pages/images/tx.png"></image>
  118. <text class="meta-text">{{item.author}}</text>
  119. </view>
  120. <view class="meta-item">
  121. <text class="meta-text">{{item.date}}</text>
  122. </view>
  123. </view>
  124. <view class="article-stats">
  125. <view class="stat-item">
  126. <image class="stat-icon" src="/pagesB/images/lll.png"></image>
  127. <text>{{item.likes}}</text>
  128. </view>
  129. </view>
  130. </view>
  131. </view>
  132. </view>
  133. <!-- 空状态 -->
  134. <view class="empty-state" wx:if="{{filteredArticles.length === 0}}">
  135. <view class="empty-animation">
  136. <view class="empty-circle"></view>
  137. <view class="empty-circle circle-2"></view>
  138. <view class="empty-circle circle-3"></view>
  139. </view>
  140. <text class="empty-text">暂无相关文章</text>
  141. <text class="empty-hint">换个关键词试试吧</text>
  142. </view>
  143. </view>
  144. <!-- 视频板块 -->
  145. <view class="content-section" wx:if="{{currentTab === 1}}">
  146. <!-- 搜索框 -->
  147. <view class="search-box">
  148. <image class="search-icon" src="/pagesB/images/sou.png"></image>
  149. <input
  150. class="search-input"
  151. placeholder="搜索视频..."
  152. placeholder-class="placeholder-style"
  153. bindinput="onSearchInput"
  154. value="{{searchKeyword}}"
  155. />
  156. <view class="search-decoration">
  157. <view class="search-wave"></view>
  158. </view>
  159. </view>
  160. <!-- 视频分类筛选 -->
  161. <scroll-view class="category-scroll" scroll-x scroll-with-animation>
  162. <view class="category-list">
  163. <view
  164. class="category-item {{videoActiveCategory === 'all' ? 'active' : ''}}"
  165. bindtap="selectVideoCategory"
  166. data-category="all"
  167. >
  168. <text>全部视频</text>
  169. <view class="category-indicator"></view>
  170. </view>
  171. <view
  172. class="category-item {{videoActiveCategory === 'recommend' ? 'active' : ''}}"
  173. bindtap="selectVideoCategory"
  174. data-category="recommend"
  175. >
  176. <text>热门推荐</text>
  177. <view class="category-indicator"></view>
  178. </view>
  179. <view
  180. class="category-item {{videoActiveCategory === 'tech' ? 'active' : ''}}"
  181. bindtap="selectVideoCategory"
  182. data-category="tech"
  183. >
  184. <text>技术教程</text>
  185. <view class="category-indicator"></view>
  186. </view>
  187. <view
  188. class="category-item {{videoActiveCategory === 'business' ? 'active' : ''}}"
  189. bindtap="selectVideoCategory"
  190. data-category="business"
  191. >
  192. <text>商业知识</text>
  193. <view class="category-indicator"></view>
  194. </view>
  195. <view
  196. class="category-item {{videoActiveCategory === 'management' ? 'active' : ''}}"
  197. bindtap="selectVideoCategory"
  198. data-category="management"
  199. >
  200. <text>管理技能</text>
  201. <view class="category-indicator"></view>
  202. </view>
  203. <view
  204. class="category-item {{videoActiveCategory === 'career' ? 'active' : ''}}"
  205. bindtap="selectVideoCategory"
  206. data-category="career"
  207. >
  208. <text>职业发展</text>
  209. <view class="category-indicator"></view>
  210. </view>
  211. <view
  212. class="category-item {{videoActiveCategory === 'beginner' ? 'active' : ''}}"
  213. bindtap="selectVideoCategory"
  214. data-category="beginner"
  215. >
  216. <text>初级入门</text>
  217. <view class="category-indicator"></view>
  218. </view>
  219. <view
  220. class="category-item {{videoActiveCategory === 'advanced' ? 'active' : ''}}"
  221. bindtap="selectVideoCategory"
  222. data-category="advanced"
  223. >
  224. <text>进阶提升</text>
  225. <view class="category-indicator"></view>
  226. </view>
  227. </view>
  228. </scroll-view>
  229. <!-- 视频列表 -->
  230. <view class="videos-grid">
  231. <view
  232. class="video-card"
  233. wx:for="{{filteredVideos}}"
  234. wx:key="id"
  235. bindtap="playVideo"
  236. data-id="{{item.id}}"
  237. animation="{{item.animation}}"
  238. >
  239. <!-- 视频封面 -->
  240. <view class="video-cover-container">
  241. <image class="video-cover" src="{{item.cover}}" mode="aspectFill"></image>
  242. <view class="cover-overlay"></view>
  243. <view class="video-duration">{{item.duration}}</view>
  244. <view class="play-button">
  245. <image class="play-icon" src="/pagesB/images/bo.png"></image>
  246. <view class="play-ripple"></view>
  247. </view>
  248. <view class="video-hover-effect"></view>
  249. </view>
  250. <!-- 视频信息 -->
  251. <view class="video-info">
  252. <view class="video-title">{{item.title}}</view>
  253. <view class="video-instructor">
  254. <image class="instructor-avatar" src="/pages/images/tx.png"></image>
  255. <text class="instructor-name">{{item.instructor.name}}</text>
  256. </view>
  257. <view class="video-meta">
  258. <view class="video-meta-item">
  259. <text>2026-01-12</text>
  260. </view>
  261. <view class="video-meta-item">
  262. <text>{{item.views}}</text>
  263. </view>
  264. </view>
  265. </view>
  266. </view>
  267. </view>
  268. <!-- 空状态 -->
  269. <view class="empty-state" wx:if="{{filteredVideos.length === 0}}">
  270. <view class="empty-animation">
  271. <view class="empty-circle"></view>
  272. <view class="empty-circle circle-2"></view>
  273. <view class="empty-circle circle-3"></view>
  274. </view>
  275. <text class="empty-text">暂无相关视频</text>
  276. <text class="empty-hint">换个关键词试试吧</text>
  277. </view>
  278. </view>
  279. </view>