与牧同行-小程序用户端
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.

456 lines
13 KiB

  1. // pages/training/training.js
  2. Page({
  3. data: {
  4. currentTab: 0,
  5. searchKeyword: '',
  6. articleActiveCategory: 'all',
  7. videoActiveCategory: 'all',
  8. // 文章数据
  9. articles: [
  10. {
  11. id: 1,
  12. title: '微信小程序开发最佳实践',
  13. description: '深度解析小程序性能优化方案,助你打造流畅用户体验',
  14. cover: 'https://via.placeholder.com/400x300/3498db/ffffff?text=小程序',
  15. category: '技术干货',
  16. author: '张技术',
  17. readTime: 15,
  18. date: '2024-01-15',
  19. views: 2345,
  20. likes: 189,
  21. categoryId: 'tech'
  22. },
  23. {
  24. id: 2,
  25. title: '企业数字化转型的关键路径',
  26. description: '传统企业如何通过数字化实现业务增长与效率提升',
  27. cover: 'https://via.placeholder.com/400x300/2ecc71/ffffff?text=数字化',
  28. category: '商业思维',
  29. author: '李商业',
  30. readTime: 20,
  31. date: '2024-01-12',
  32. views: 1567,
  33. likes: 234,
  34. categoryId: 'business'
  35. },
  36. {
  37. id: 3,
  38. title: '高效团队管理的7个秘诀',
  39. description: '打造高绩效团队的实用方法与技巧',
  40. cover: 'https://via.placeholder.com/400x300/e74c3c/ffffff?text=管理',
  41. category: '管理技能',
  42. author: '王经理',
  43. readTime: 12,
  44. date: '2024-01-10',
  45. views: 3210,
  46. likes: 456,
  47. categoryId: 'management'
  48. },
  49. {
  50. id: 4,
  51. title: '前端工程师的职业发展路径',
  52. description: '从初级到专家,前端工程师的成长路线图',
  53. cover: 'https://via.placeholder.com/400x300/9b59b6/ffffff?text=前端',
  54. category: '职业发展',
  55. author: '赵前端',
  56. readTime: 18,
  57. date: '2024-01-08',
  58. views: 1890,
  59. likes: 345,
  60. categoryId: 'career'
  61. },
  62. {
  63. id: 5,
  64. title: '云原生架构设计与实践',
  65. description: '基于云原生技术的现代应用架构方案',
  66. cover: 'https://via.placeholder.com/400x300/1abc9c/ffffff?text=云原生',
  67. category: '技术干货',
  68. author: '钱架构',
  69. readTime: 25,
  70. date: '2024-01-05',
  71. views: 2789,
  72. likes: 512,
  73. categoryId: 'tech'
  74. },
  75. {
  76. id: 6,
  77. title: '人工智能在商业中的应用',
  78. description: 'AI技术如何赋能传统行业实现智能化升级',
  79. cover: 'https://via.placeholder.com/400x300/f39c12/ffffff?text=AI',
  80. category: '商业思维',
  81. author: '孙智能',
  82. readTime: 22,
  83. date: '2024-01-03',
  84. views: 4321,
  85. likes: 678,
  86. categoryId: 'business'
  87. }
  88. ],
  89. // 视频数据
  90. videos: [
  91. {
  92. id: 1,
  93. title: 'Vue.js 3.0 核心源码解析',
  94. cover: 'https://via.placeholder.com/400x300/3498db/ffffff?text=Vue3',
  95. duration: '45:23',
  96. instructor: {
  97. name: '前端大神',
  98. avatar: 'https://via.placeholder.com/40/3498db/ffffff?text=FS'
  99. },
  100. level: '高级',
  101. views: '12.3k',
  102. tags: ['Vue', '前端', '源码'],
  103. category: 'tech',
  104. isRecommended: true
  105. },
  106. {
  107. id: 2,
  108. title: 'React Hooks 深度解析',
  109. cover: 'https://via.placeholder.com/400x300/2ecc71/ffffff?text=React',
  110. duration: '38:45',
  111. instructor: {
  112. name: 'React专家',
  113. avatar: 'https://via.placeholder.com/40/2ecc71/ffffff?text=RE'
  114. },
  115. level: '中级',
  116. views: '8.7k',
  117. tags: ['React', 'Hooks', '前端'],
  118. category: 'tech',
  119. isRecommended: true
  120. },
  121. {
  122. id: 3,
  123. title: '产品经理必备的7个思维模型',
  124. cover: 'https://via.placeholder.com/400x300/e74c3c/ffffff?text=产品',
  125. duration: '52:12',
  126. instructor: {
  127. name: '产品专家',
  128. avatar: 'https://via.placeholder.com/40/e74c3c/ffffff?text=PM'
  129. },
  130. level: '中级',
  131. views: '15.2k',
  132. tags: ['产品', '思维', '方法论'],
  133. category: 'business',
  134. isRecommended: false
  135. },
  136. {
  137. id: 4,
  138. title: 'Python 数据分析实战',
  139. cover: 'https://via.placeholder.com/400x300/9b59b6/ffffff?text=Python',
  140. duration: '41:36',
  141. instructor: {
  142. name: '数据科学家',
  143. avatar: 'https://via.placeholder.com/40/9b59b6/ffffff?text=DS'
  144. },
  145. level: '初级',
  146. views: '23.4k',
  147. tags: ['Python', '数据分析', '实战'],
  148. category: 'tech',
  149. isRecommended: true
  150. },
  151. {
  152. id: 5,
  153. title: '高效沟通的艺术与技巧',
  154. cover: 'https://via.placeholder.com/400x300/1abc9c/ffffff?text=沟通',
  155. duration: '36:58',
  156. instructor: {
  157. name: '沟通专家',
  158. avatar: 'https://via.placeholder.com/40/1abc9c/ffffff?text=CM'
  159. },
  160. level: '初级',
  161. views: '9.8k',
  162. tags: ['沟通', '职场', '技巧'],
  163. category: 'management',
  164. isRecommended: false
  165. },
  166. {
  167. id: 6,
  168. title: 'Node.js 高性能服务开发',
  169. cover: 'https://via.placeholder.com/400x300/f39c12/ffffff?text=Node',
  170. duration: '55:42',
  171. instructor: {
  172. name: '后端架构师',
  173. avatar: 'https://via.placeholder.com/40/f39c12/ffffff?text=BE'
  174. },
  175. level: '高级',
  176. views: '6.5k',
  177. tags: ['Node.js', '后端', '性能'],
  178. category: 'tech',
  179. isRecommended: false
  180. },
  181. {
  182. id: 7,
  183. title: '职场晋升的底层逻辑',
  184. cover: 'https://via.placeholder.com/400x300/34495e/ffffff?text=晋升',
  185. duration: '33:27',
  186. instructor: {
  187. name: '职业规划师',
  188. avatar: 'https://via.placeholder.com/40/34495e/ffffff?text=CD'
  189. },
  190. level: '中级',
  191. views: '11.2k',
  192. tags: ['职场', '晋升', '规划'],
  193. category: 'career',
  194. isRecommended: true
  195. },
  196. {
  197. id: 8,
  198. title: 'JavaScript 入门到精通',
  199. cover: 'https://via.placeholder.com/400x300/e74c3c/ffffff?text=JS',
  200. duration: '1:15:30',
  201. instructor: {
  202. name: '前端导师',
  203. avatar: 'https://via.placeholder.com/40/e74c3c/ffffff?text=JS'
  204. },
  205. level: '初级',
  206. views: '45.6k',
  207. tags: ['JavaScript', '入门', '教程'],
  208. category: 'tech',
  209. isRecommended: true
  210. },
  211. {
  212. id: 9,
  213. title: '商业计划书撰写指南',
  214. cover: 'https://via.placeholder.com/400x300/1abc9c/ffffff?text=商业',
  215. duration: '28:45',
  216. instructor: {
  217. name: '商业顾问',
  218. avatar: 'https://via.placeholder.com/40/1abc9c/ffffff?text=BC'
  219. },
  220. level: '中级',
  221. views: '7.3k',
  222. tags: ['商业', '创业', '计划书'],
  223. category: 'business',
  224. isRecommended: false
  225. },
  226. {
  227. id: 10,
  228. title: '团队领导力提升训练',
  229. cover: 'https://via.placeholder.com/400x300/9b59b6/ffffff?text=领导力',
  230. duration: '49:18',
  231. instructor: {
  232. name: '领导力教练',
  233. avatar: 'https://via.placeholder.com/40/9b59b6/ffffff?text=LC'
  234. },
  235. level: '高级',
  236. views: '5.9k',
  237. tags: ['领导力', '管理', '团队'],
  238. category: 'management',
  239. isRecommended: true
  240. }
  241. ],
  242. filteredArticles: [],
  243. filteredVideos: []
  244. },
  245. onLoad() {
  246. // 初始化数据
  247. this.setData({
  248. filteredArticles: this.data.articles,
  249. filteredVideos: this.data.videos
  250. });
  251. },
  252. // 切换主选项卡
  253. switchTab(e) {
  254. const tab = parseInt(e.currentTarget.dataset.tab);
  255. this.setData({
  256. currentTab: tab,
  257. searchKeyword: ''
  258. });
  259. // 重置筛选结果
  260. if (tab === 0) {
  261. this.setData({
  262. filteredArticles: this.filterArticles('', this.data.articleActiveCategory)
  263. });
  264. } else {
  265. this.setData({
  266. filteredVideos: this.filterVideos('', this.data.videoActiveCategory)
  267. });
  268. }
  269. },
  270. // 搜索输入
  271. onSearchInput(e) {
  272. const keyword = e.detail.value;
  273. this.setData({ searchKeyword: keyword });
  274. if (this.data.currentTab === 0) {
  275. this.setData({
  276. filteredArticles: this.filterArticles(keyword, this.data.articleActiveCategory)
  277. });
  278. } else {
  279. this.setData({
  280. filteredVideos: this.filterVideos(keyword, this.data.videoActiveCategory)
  281. });
  282. }
  283. },
  284. // 选择文章分类
  285. selectArticleCategory(e) {
  286. const category = e.currentTarget.dataset.category;
  287. this.setData({ articleActiveCategory: category });
  288. this.setData({
  289. filteredArticles: this.filterArticles(this.data.searchKeyword, category)
  290. });
  291. },
  292. // 选择视频分类
  293. selectVideoCategory(e) {
  294. const category = e.currentTarget.dataset.category;
  295. this.setData({ videoActiveCategory: category });
  296. this.setData({
  297. filteredVideos: this.filterVideos(this.data.searchKeyword, category)
  298. });
  299. },
  300. // 筛选文章函数
  301. filterArticles(keyword, category) {
  302. let filtered = this.data.articles;
  303. // 按分类筛选
  304. if (category !== 'all') {
  305. const categoryMap = {
  306. 'tech': '技术干货',
  307. 'business': '商业思维',
  308. 'management': '管理技能',
  309. 'career': '职业发展'
  310. };
  311. filtered = filtered.filter(item => item.category === categoryMap[category]);
  312. }
  313. // 按关键词筛选
  314. if (keyword) {
  315. const lowerKeyword = keyword.toLowerCase();
  316. filtered = filtered.filter(item =>
  317. item.title.toLowerCase().includes(lowerKeyword) ||
  318. item.description.toLowerCase().includes(lowerKeyword) ||
  319. item.author.toLowerCase().includes(lowerKeyword) ||
  320. item.category.toLowerCase().includes(lowerKeyword)
  321. );
  322. }
  323. return filtered;
  324. },
  325. // 筛选视频函数
  326. filterVideos(keyword, category) {
  327. let filtered = this.data.videos;
  328. // 按分类筛选
  329. if (category !== 'all') {
  330. switch (category) {
  331. case 'recommend':
  332. filtered = filtered.filter(item => item.isRecommended);
  333. break;
  334. case 'tech':
  335. filtered = filtered.filter(item => item.category === 'tech');
  336. break;
  337. case 'business':
  338. filtered = filtered.filter(item => item.category === 'business');
  339. break;
  340. case 'management':
  341. filtered = filtered.filter(item => item.category === 'management');
  342. break;
  343. case 'career':
  344. filtered = filtered.filter(item => item.category === 'career');
  345. break;
  346. case 'beginner':
  347. filtered = filtered.filter(item => item.level === '初级');
  348. break;
  349. case 'advanced':
  350. filtered = filtered.filter(item => item.level === '中级' || item.level === '高级');
  351. break;
  352. }
  353. }
  354. // 按关键词筛选
  355. if (keyword) {
  356. const lowerKeyword = keyword.toLowerCase();
  357. filtered = filtered.filter(item =>
  358. item.title.toLowerCase().includes(lowerKeyword) ||
  359. item.tags.some(tag => tag.toLowerCase().includes(lowerKeyword)) ||
  360. item.instructor.name.toLowerCase().includes(lowerKeyword) ||
  361. item.level.toLowerCase().includes(lowerKeyword)
  362. );
  363. }
  364. return filtered;
  365. },
  366. // 查看文章详情
  367. viewArticleDetail(e) {
  368. const id = e.currentTarget.dataset.id;
  369. },
  370. // 播放视频
  371. playVideo(e) {
  372. const id = e.currentTarget.dataset.id;
  373. },
  374. // 下拉刷新
  375. onPullDownRefresh() {
  376. wx.showLoading({
  377. title: '刷新中...'
  378. });
  379. // 模拟网络请求
  380. setTimeout(() => {
  381. // 重置数据
  382. this.setData({
  383. filteredArticles: this.data.articles,
  384. filteredVideos: this.data.videos,
  385. articleActiveCategory: 'all',
  386. videoActiveCategory: 'all',
  387. searchKeyword: ''
  388. });
  389. wx.hideLoading();
  390. wx.stopPullDownRefresh();
  391. wx.showToast({
  392. title: '刷新成功',
  393. icon: 'success'
  394. });
  395. }, 1000);
  396. },
  397. // 上拉加载更多
  398. onReachBottom() {
  399. if (this.data.currentTab === 0) {
  400. // 文章加载更多
  401. wx.showLoading({
  402. title: '加载更多文章...'
  403. });
  404. setTimeout(() => {
  405. // 这里可以添加更多文章数据
  406. wx.hideLoading();
  407. wx.showToast({
  408. title: '没有更多了',
  409. icon: 'none'
  410. });
  411. }, 1000);
  412. } else {
  413. // 视频加载更多
  414. wx.showLoading({
  415. title: '加载更多视频...'
  416. });
  417. setTimeout(() => {
  418. // 这里可以添加更多视频数据
  419. wx.hideLoading();
  420. wx.showToast({
  421. title: '没有更多了',
  422. icon: 'none'
  423. });
  424. }, 1000);
  425. }
  426. }
  427. });