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

488 lines
13 KiB

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