// 引入公共资源(原生小程序中需确保路径正确,若为工具类可直接 require,若为静态资源需用绝对路径) const common_vendor = require("../../common/vendor.js"); const common_assets = require("../../common/assets.js"); const request = require('../../api/request.js'); // 定义舞蹈列表数据(原生小程序用普通数组存储,无需 ref 响应式包装) const danceList = [ { id: 0, name: "街舞", category: "STORE", description: "街舞是一种充满活力和创意的舞蹈形式,起源于美国街头文化。它以自由的风格、强烈的节奏感和个性化的表达而闻名,是年轻人展现自我、释放激情的绝佳方式。", history: "街舞起源于20世纪70年代的美国纽约,最初是非洲裔和拉丁裔青年在街头聚会时的即兴舞蹈。随着嘻哈文化的发展,街舞逐渐形成了Breaking、Popping、Locking、Hip-hop等多种风格,并传播到世界各地。", features: "街舞具有动作多样化、变化快的特点,强调个人风格和即兴创作。舞蹈动作力度强、节奏感明显,融合了体操、武术等元素。舞者可以自由发挥创意,展现独特的个性和态度。", tips: "学习街舞需要循序渐进,先掌握基本的律动和步伐,再学习复杂的技巧动作。要多听音乐培养节奏感,勤加练习提高身体协调性。最重要的是要有自信,敢于表达自己的风格。" }, { id: 1, name: "芭蕾舞", category: "ACTIVITY", description: "芭蕾舞是一种优雅高贵的古典舞蹈,注重技巧性和艺术表现力。它以严格的动作规范、优美的身体线条和深刻的艺术内涵而著称,是舞蹈艺术的瑰宝。", history: "芭蕾舞起源于15世纪的意大利宫廷,后在法国路易十四时期得到大力发展。18世纪传入俄国后达到艺术高峰,产生了《天鹅湖》、《胡桃夹子》等经典作品。现代芭蕾在保持古典精髓的同时,融入了更多创新元素。", features: "芭蕾舞动作规范严格,要求舞者具备良好的身体条件和扎实的基本功。舞蹈注重身体线条的延伸和姿态的优美,强调轻盈飘逸的质感。每个动作都有严格的标准,需要长期训练才能达到专业水准。", tips: "学习芭蕾需要从基本功开始,包括把杆练习、中间练习等。要注重身体姿态的正确性,培养良好的舞蹈感觉。坚持每天练习,逐步提高柔韧性、力量和协调性。同时要培养音乐感和艺术表现力。" }, { id: 2, name: "机械舞", category: "STORE", description: "机械舞是街舞的一种风格,通过肌肉的快速收缩与放松产生震动效果,模拟机器人的动作。它以独特的视觉效果和精确的身体控制而著称,是技巧性很强的舞蹈形式。", history: "机械舞起源于20世纪70年代的美国加州,由舞者Boogaloo Sam创立。最初受到机器人和动画片的启发,后来发展成为街舞文化的重要组成部分。80年代通过电视节目传播到世界各地,成为流行的舞蹈风格。", features: '机械舞的核心是通过肌肉的控制产生"Pop"的效果,使身体看起来像机器人一样僵硬而有节奏。舞蹈要求精确的时间掌控和身体各部位的独立控制,动作具有很强的视觉冲击力和娱乐性。', tips: "学习机械舞要从基础的肌肉控制开始,练习如何让身体各部位产生震动效果。要培养对音乐节拍的敏感度,掌握准确的时间点。多观察机器人的动作特点,模仿其僵硬而精确的运动方式。" }, { id: 3, name: "古典舞", category: "ACTIVITY", description: "中国古典舞承载着深厚的文化底蕴,展现东方舞蹈的独特魅力。它融合了武术、戏曲等传统艺术元素,以身韵结合、意境深远而著称,是中华文化的重要载体。", history: "中国古典舞有着悠久的历史,可以追溯到古代宫廷舞蹈和民间舞蹈。经过历代艺术家的传承和发展,形成了独特的艺术风格。现代古典舞在保持传统精髓的基础上,融入了现代舞蹈技巧,展现出新的艺术魅力。", features: '古典舞注重"形神兼备,身心并用",强调内在气质的培养。动作流畅优美,富有诗意,讲究"圆、游、变、幻"的运动规律。舞蹈融合了"身法、身韵、技巧"三大要素,体现了中华文化的深厚底蕴。', tips: '学习古典舞要注重基本功训练,包括身体的柔韧性、协调性和表现力。要理解舞蹈的文化内涵,培养对传统文化的感悟。练习时要注意动作的韵律感,追求"形神兼备"的艺术境界。' }, { id: 4, name: "拉丁舞", category: "STORE", description: "拉丁舞热情奔放,充满异域风情,是社交舞蹈的重要组成部分。它以动感的音乐、激情的动作和强烈的表现力而著称,能够充分展现舞者的魅力和活力。", history: "拉丁舞起源于拉丁美洲,融合了欧洲、非洲和美洲原住民的舞蹈元素。20世纪初传入欧美后,逐渐发展成为国际标准舞的重要组成部分。现在包括恰恰、桑巴、伦巴、牛仔、斗牛五个舞种。", features: "拉丁舞动作热情奔放,充满活力,音乐节奏明快富有感染力。舞蹈注重身体线条和肌肉控制,强调胯部和腰部的灵活运用。具有很强的社交属性,适合双人配合表演。", tips: "学习拉丁舞要从基本步伐开始,掌握各个舞种的特点和风格。要培养对音乐的感受力,学会用身体表达音乐的情感。注重身体协调性的训练,特别是胯部和腰部的灵活性。要敢于表达,展现自信和热情。" }, { id: 5, name: "摩登舞", category: "ACTIVITY", description: "摩登舞优雅端庄,是标准舞的重要组成部分,展现绅士淑女风范。它以规范的动作、优美的姿态和高雅的气质而著称,是社交场合的经典舞蹈形式。", history: "摩登舞起源于欧洲宫廷舞蹈,经过几个世纪的发展演变,形成了现在的标准形式。包括华尔兹、探戈、狐步、快步、维也纳华尔兹五个舞种。20世纪初开始在世界范围内推广,成为国际标准舞的重要组成部分。", features: "摩登舞动作优雅端庄,姿态标准规范,强调双人配合的默契程度。舞蹈音乐优美,富有艺术感染力,注重礼仪和绅士淑女风范。要求舞者具备良好的身体姿态和高雅的气质。", tips: "学习摩登舞要注重基本姿态的训练,保持挺拔优雅的身体线条。要培养与舞伴的默契配合,学会引带和跟随。注重音乐感的培养,理解不同舞种的风格特点。要注意礼仪修养,展现绅士淑女的风范。" } ]; // 原生小程序 Page 构造器(核心:数据、生命周期、方法) Page({ // 1. 页面初始数据(对应 Vue 的 ref 数据,需用 this.data 访问,this.setData 更新) data: { currentDance: null, // 当前选中的舞蹈详情 danceIndex: 0, // 当前舞蹈在列表中的索引 wallpaperUrl: "", // 壁纸地址 appId: "", // 应用 ID // 引入静态资源(原生小程序中需确保 assets 内的资源路径正确,此处与原代码保持一致) commonAssets: common_assets }, // 2. 页面加载生命周期(对应原代码的 onLoad,接收页面参数 options) onLoad(options) { // 日志打印(替换原框架的 log 方法,使用微信原生 console.log) console.log("at pages/index/detail.js: onLoad", "接收到的参数:", options); // 提取 app_id(逻辑与原代码一致,适配原生小程序 API) try { if (options && options.app_id) { this.setData({ appId: options.app_id }); // 原生用 setData 更新数据 } else { // 原生小程序获取当前页面栈:getCurrentPages() 直接调用(无需通过 vendor) const pages = getCurrentPages(); if (pages && pages.length) { const curPage = pages[pages.length - 1]; // 最后一个页面即当前页 if (curPage && curPage.options && curPage.options.app_id) { this.setData({ appId: curPage.options.app_id }); } else if (curPage && curPage.__route__) { const route = curPage.__route__; const idx = route.indexOf('?'); if (idx !== -1) { const qs = route.substring(idx + 1); const parts = qs.split('&'); for (let k = 0; k < parts.length; k++) { const [key, value] = parts[k].split('='); if (key === 'app_id') { this.setData({ appId: decodeURIComponent(value || '') }); break; } } } } } } } catch (e) { console.error("提取 app_id 失败:", e); } // 处理壁纸地址逻辑 if (options.url === "1") { // 原生小程序参数默认是字符串,需注意类型匹配 this.setData({ wallpaperUrl: options.url }); return; } // 处理舞蹈详情逻辑(根据 options.index 选择当前舞蹈) if (options.index !== undefined) { const index = parseInt(options.index); this.setData({ danceIndex: index, currentDance: danceList[index] // 从预定义列表中获取对应舞蹈 }); } else { // 无索引时默认显示第一个舞蹈 this.setData({ currentDance: danceList[0] }); } }, // 3. 其他可选生命周期(如需扩展,可在此添加,如 onShow、onReady 等) onShow() { // 页面显示时的逻辑(如重新获取数据等,根据需求添加) }, // 4. 自定义方法(如需添加交互逻辑,可在此定义,如切换舞蹈、跳转等) // 示例:切换到下一个舞蹈 switchToNextDance() { const { danceIndex } = this.data; const nextIndex = (danceIndex + 1) % danceList.length; // 循环切换 this.setData({ danceIndex: nextIndex, currentDance: danceList[nextIndex] }); }, handleContact() { const accountInfo = wx.getAccountInfoSync(); request('wechat/template', 'post', { app_id: accountInfo.miniProgram.appId }).then((res) => { // return wx.requestSubscribeMessage({ tmplIds: [res.template_id], success: (res) => { wx.navigateTo({ url: `/pages/contact/index` }); }, fail: (err) => { console.log(err); } }); }) } });