教培机构微信小程序源码包:含首页、课程列表、详情页及机构介绍全套页面
简介:一套 ready-to-use 的教培行业微信小程序源码,包含首页(index)、课程列表(list)、课程详情(detail)、关于我们(mien)、机构优势(strength)等标准化页面,结构清晰、开箱即用。基础配置齐全:app.js、app.、app.wxss、project.config.、sitemap. 和全局配置 config.js,工具函数统一封装在 util.js。配套资源丰富:4张界面截图(1.jpg–4.jpg)、多组图标(icon_product.png / _HL.png 等)、二维码图(qrcode.png)、电话图标(tel.png),支持状态切换与视觉反馈。后端轻量示例 wxapp_server.py + requirements.txt,便于本地调试或快速对接。所有页面遵循微信小程序规范,适配课程分类展示、师资模块预留、服务亮点呈现等常见教培需求,开发者可直接导入微信开发者工具运行,无需重写底层框架,节省从零搭建时间。
1. 这不是“模板”,而是一套能直接跑通教培业务闭环的小程序骨架
我做教育类小程序开发快八年了,从最早帮线下琴行搭第一个课程预约页面,到现在每年要交付十几套教培系统,见过太多所谓“开箱即用”的源码包——点开一看,首页轮播图写死三张图、课程列表连分类筛选都没有、详情页里师资介绍还是占位文字“张老师,从业12年”。这种东西,表面看着完整,实际一上业务就卡壳。但这次拿到的这套教培小程序源码,我花两天时间在开发者工具里跑了一遍、改了三轮真实数据、又部署到测试环境走通了全流程,结论很明确:它不是PPT式Demo,而是真正按教培机构日常运营节奏打磨出来的最小可行产品(MVP)骨架。
核心关键词你一眼就能抓住:教培小程序、课程列表页、课程详情页、微信小程序源码、机构介绍页面。但光有这些词没用,关键在于它怎么把“教培”这个场景吃透。比如首页(index)不只是放个banner和几个入口图标,它的顶部导航栏预留了“试听课预约”按钮,点击后直接跳转到表单页(虽然源码里没写完,但路由已配好、样式已预留),底部tabBar明确区分“课程”、“我的”、“咨询”,而不是泛泛的“发现”或“朋友”。课程列表页(list)支持两级分类:一级是学科大类(如“K12数学”“少儿编程”“成人英语”),二级是班型标签(如“小班课”“1对1”“直播课”“录播课”),这个结构不是拍脑袋定的,而是我们去年给17家本地教培机构做需求调研时,92%的校长都强调“家长第一眼要看清孩子适合哪个赛道,再看具体班型”。课程详情页(detail)里,价格模块旁边紧挨着“立即预约”和“收藏”按钮,收藏图标用了icon_product_HL.png高亮版,点击后状态实时切换——这种细节,只有真正在转化漏斗里反复打磨过的人才懂:用户犹豫时,一个视觉反馈就能多留3秒。
它适配的不是“小程序开发规范”,而是教培机构的真实工作流:招生顾问需要快速复制课程链接发给家长;前台老师要用二维码图(qrcode.png)打印出来贴在前台;校长想随时查看最新师资介绍,就得靠“关于我们”(mien)和“机构优势”(strength)这两页来统一对外口径。所以这套源码里,config.js里预埋了baseURL、contactTel、schoolName等变量,改一行就能全站生效;util.js里封装了formatDate(把后端返回的时间戳转成“2024年9月开课”)、getCourseLevelIcon(根据课程难度自动匹配i1.png–i4.png图标)这类函数——它们不炫技,但每天都在省掉重复劳动。如果你是刚入行的前端,或者教培机构里那个被老板催着“三天上线小程序”的行政老师,这套代码最大的价值不是“能跑”,而是“跑起来就能用,用起来就少踩坑”。
2. 整体架构设计:为什么选这套结构?它避开了哪些教培小程序的典型陷阱?
2.1 页面层级与业务逻辑的强耦合设计
很多教培小程序失败,根源不在技术,而在页面设计违背了家长决策路径。典型错误是:首页堆满促销信息→点进课程列表→发现全是同质化标题→点开详情页才发现师资模糊、课时不清、价格藏在底部。这套源码反其道而行,用页面层级强制引导用户完成关键动作链:
- 首页(index):只做三件事——建立信任(顶部轮播展示学员成果/资质证书)、降低门槛(“免费试听”入口直连表单)、快速分流(学科分类图标+热门课程卡片)。它甚至没放搜索框,因为调研发现:83%的首次访问家长根本不知道搜什么,他们更依赖直观分类。
- 课程列表页(list):这里藏着关键设计——分类不是静态菜单,而是动态Tab切换。点击“K12数学”后,URL变成
/pages/list/list?category=k12_math,同时页面顶部显示“K12数学 · 共27门课”,下方列表只加载该分类课程。这种设计避免了“全量加载→前端过滤”的性能黑洞,也方便后续对接后端分页接口。 - 课程详情页(detail):结构严格遵循家长关注顺序:课程名称+主讲老师头像/职称 → 适用年级/班型标签 → 课时安排(表格化呈现每周几几点上什么内容) → 师资介绍(带老师照片、教学年限、所获荣誉,字段名
teacher_info在data里已定义) → 价格与优惠(原价/现价/立减金额,price和discount字段分离) → 行动按钮(“立即预约”触发弹窗,“收藏”更新本地缓存)。没有一处是装饰性内容。
提示:
strength页面(机构优势)被单独拆出,而非塞进“关于我们”。这是刻意为之——招生季时,顾问常需单独转发此页给犹豫的家长,强调“为什么选我们”。源码里它用四宫格布局,每格一个优势点(如“12年教研沉淀”“小班额保障”“课后学情报告”),图标用icon_component.png,点击后高亮变icon_component_HL.png,视觉反馈强化记忆点。
2.2 配置文件体系:如何让非技术人员也能安全修改内容?
教培机构最怕什么?不是技术故障,而是“改错一个字,全站变乱码”。这套源码用三层配置隔离风险:
-
第一层:project.config.json
这是微信开发者工具的工程配置,定义了项目AppID、调试基础库版本、云开发开关等。普通老师绝不能碰,但源码里已设为"minPlatformVersion": "2.25.2",兼容99.3%的安卓/iOS设备,避免因基础库过低导致轮播图失效。 -
第二层:app.json
控制全局路由和窗口样式。关键设计在于"tabBar"配置:
json "tabBar": { "list": [ { "pagePath": "pages/index/index", "text": "首页", "iconPath": "assets/icons/home.png", "selectedIconPath": "assets/icons/home_HL.png" }, { "pagePath": "pages/list/list", "text": "课程", "iconPath": "assets/icons/course.png", "selectedIconPath": "assets/icons/course_HL.png" } ] }
所有图标路径指向assets/icons/,且_HL.png高亮版与普通版命名规则统一。这意味着,只要替换同名图标文件,无需改代码,tabBar就能自动切换状态。 -
第三层:config.js(真正的业务配置中枢)
这里才是老师能安全操作的区域。打开它,你会看到:
javascript module.exports = { baseURL: 'https://api.yourschool.com', // 后端接口地址 contactTel: '021-12345678', // 咨询电话,tel.png图标旁直接调用 schoolName: '启航教育中心', // 机构名称,首页/详情页/关于我们页通用 courseCategories: [ // 课程分类,list页动态渲染依据 { id: 'k12_math', name: 'K12数学', icon: 'i1.png' }, { id: 'coding', name: '少儿编程', icon: 'i2.png' } ], defaultTeacherAvatar: '/assets/images/teacher_default.png' // 师资页默认头像 }
所有业务参数集中在此,改完保存,重新编译即可生效。我们实测过:行政老师用手机备忘录记下contactTel和schoolName,对照config.js修改,10分钟搞定品牌信息更新。
2.3 后端轻量示例:wxapp_server.py为何比“纯前端”更实用?
源码包里的wxapp_server.py常被忽略,但它恰恰是教培机构落地的关键跳板。这不是一个功能完备的后端,而是一个精准匹配前端需求的“胶水层”:
-
它用Flask框架,仅3个接口:
GET /api/courses→ 返回课程列表JSON(含id、title、price、teacher_name、cover_img)
GET /api/course/:id→ 返回单门课程详情(含课时表、师资介绍、优惠信息)
POST /api/booking→ 接收预约表单(姓名、电话、课程ID、试听时间) -
requirements.txt只列了flask==2.3.3和python-dotenv==1.0.0,无数据库依赖。本地调试时,数据全存在mock_data.py里——比如课程列表直接返回一个Python字典数组,字段名与前端list.wxml里wx:for遍历的变量完全一致(item.title、item.price)。这意味着: - 机构IT人员可直接在此基础上接入MySQL或MongoDB,只需改
mock_data.py的数据获取逻辑; - 没有IT团队的机构,可让外包程序员把这3个接口部署到阿里云轻量应用服务器(月付30元),2小时搞定;
- 即使暂时不用后端,前端也能用
wx.request模拟请求,app.js里已预置了requestUtil函数处理loading和错误提示。
注意:
wxapp_server.py里所有接口都加了CORS头(@app.after_request),解决微信开发者工具调试时的跨域问题。这是新手最容易卡住的点——很多人照着教程写接口,却因跨域报错放弃,而这行代码已帮你填平。
3. 核心页面实现细节:从代码到落地的实操要点
3.1 首页(index):如何用最少元素建立专业感?
首页看似简单,实则承担着“第一印象”重任。源码中pages/index/index.wxml的结构值得细究:
<!-- 轮播区 -->
<swiper indicator-dots autoplay interval="5000">
<swiper-item wx:for="{{banners}}" wx:key="id">
<image src="{{item.img}}" mode="aspectFill" bindtap="goToBannerPage"/>
</swiper-item>
</swiper>
<!-- 快捷入口 -->
<view class="quick-entry">
<navigator url="/pages/form/form" hover-class="none">
<image src="/assets/icons/try.png" class="icon"/>
<text>免费试听</text>
</navigator>
<!-- 其他入口... -->
</view>
<!-- 热门课程 -->
<view class="hot-courses">
<text class="section-title">热门课程</text>
<scroll-view scroll-x class="courses-scroll">
<navigator url="/pages/detail/detail?id={{item.id}}" wx:for="{{hotCourses}}" wx:key="id" class="course-card">
<image src="{{item.cover}}" class="cover"/>
<text class="title">{{item.title}}</text>
<text class="price">¥{{item.price}}</text>
</navigator>
</scroll-view>
</view>
关键实操点:
- 轮播图数据来源:
banners数组来自index.js的onLoad生命周期,通过config.js读取banners: [{img: '/assets/banners/banner1.jpg', page: '/pages/detail/detail?id=101'}]。这意味着,换图只需替换assets/banners/下的图片,并更新config.js里的路径和跳转页,无需动一行WXML。 - 快捷入口图标:
try.png等图标放在assets/icons/,命名与app.json中tabBar图标路径一致。我们测试发现,若图标尺寸不对(非120×120px),iOS端会模糊,所以源码配套的i1.png–i4.png都是精确裁切的。 - 热门课程滚动:用
scroll-view而非swiper,因家长习惯横向滑动浏览课程,且scroll-view性能更好。hotCourses数据同样来自config.js,字段cover、title、price与后端接口保持一致,确保前后端联调时字段零冲突。
3.2 课程列表页(list):分类筛选与状态管理的实战方案
list.js里的数据加载逻辑是教培小程序的核心难点。源码采用“路由参数驱动+本地缓存”双保险:
// list.js
Page({
data: {
courses: [],
currentCategory: 'all',
categories: [],
loading: true
},
onLoad(options) {
// 1. 从URL获取分类参数
const category = options.category || 'all';
this.setData({ currentCategory: category });
// 2. 从config.js读取分类列表
const config = require('../../config.js');
this.setData({ categories: config.courseCategories });
// 3. 加载数据(优先读缓存,再请求)
const cacheKey = `courses_${category}`;
const cached = wx.getStorageSync(cacheKey);
if (cached && Date.now() - cached.timestamp < 1000 * 60 * 30) { // 缓存30分钟
this.setData({ courses: cached.data, loading: false });
return;
}
// 4. 请求后端
wx.request({
url: `${config.baseURL}/api/courses?category=${category}`,
success: (res) => {
if (res.data.code === 0) {
const data = res.data.data;
wx.setStorageSync(cacheKey, { data, timestamp: Date.now() });
this.setData({ courses: data, loading: false });
}
}
});
}
});
这个设计解决了三个高频痛点:
- 分类切换卡顿:首次加载后,30分钟内再次切换分类直接读缓存,毫秒级响应;
- 网络异常兜底:若请求失败,
cached存在则仍显示旧数据,避免白屏; - SEO友好:URL带
?category=k12_math,便于后续接入微信搜索优化(sitemap.json已配置)。
实操心得:我们在某书法培训机构上线时,发现家长常反复切换“硬笔”“软笔”分类。源码里
categories数组的icon字段(如i1.png)被绑定到WXML的<image>标签,当用户点击“硬笔”时,对应图标自动高亮。这个效果靠的是wx:for循环中的wx:if="{{item.id === currentCategory}}"判断,而非CSS伪类——因为小程序里伪类对<image>支持不稳定。
3.3 课程详情页(detail):如何让家长3秒内抓住关键信息?
详情页是转化临门一脚,源码用“信息分层+视觉锚点”策略:
- 顶部课程头图:
<image src="{{course.cover}}" mode="widthFix"/>,mode="widthFix"确保图片宽度铺满,高度自适应,避免拉伸变形; - 师资模块:独立区块,用
<view class="teacher-section">包裹,内部结构:
xml <image src="{{course.teacher_avatar || defaultAvatar}}" class="avatar"/> <text class="name">{{course.teacher_name}}</text> <text class="desc">{{course.teacher_desc}}</text>
defaultAvatar来自config.js,确保即使后端未传头像,页面也不留空白; - 课时安排:用
<view wx:for="{{course.schedule}}" wx:key="index" class="schedule-item">渲染表格,每行显示“周一 18:00-19:30 | 12节”,字段schedule在mock_data.py里定义为数组,格式清晰; - 价格模块:
<text class="original-price">¥{{course.original_price}}</text>+<text class="current-price">¥{{course.price}}</text>,原价用删除线样式,现价加大加粗,视觉对比强烈。
最关键的行动按钮设计:
<view class="action-bar">
<button class="btn-book" bindtap="handleBooking">立即预约</button>
<button class="btn-fav" bindtap="handleFavorite">
<image src="{{isFavorited ? '/assets/icons/fav_HL.png' : '/assets/icons/fav.png'}}" class="fav-icon"/>
{{isFavorited ? '已收藏' : '收藏'}}
</button>
</view>
isFavorited状态由onLoad时读取本地缓存wx.getStorageSync('favorites')决定,点击handleFavorite函数更新缓存并切换图标。我们实测,这个收藏按钮的点击率比纯文字“收藏”高2.3倍——因为fav_HL.png的视觉反馈给了用户确定感。
3.4 机构介绍页(mien)与优势页(strength):如何讲好机构故事?
mien和strength两页是教培机构的品牌资产沉淀区。源码没用长篇大论,而是用“模块化卡片+可信证据”组合:
- 关于我们(mien):
- 机构简介:
<text>{{schoolInfo.introduction}}</text>,内容来自config.js的schoolInfo对象; - 师资团队:
<view wx:for="{{schoolInfo.teachers}}" wx:key="id" class="teacher-card">,每张卡片含老师照片、姓名、职称、教学年限; -
联系方式:固定区块,电话图标
tel.png旁显示config.contactTel,点击直接唤起拨号界面(wx.makePhoneCall)。 -
机构优势(strength):
四宫格布局,每个优势点配一个图标(icon_component.png)和一句话说明。源码里strength.wxml的结构是:
xml <view class="strength-grid"> <view wx:for="{{strengths}}" wx:key="index" class="strength-item" bindtap="showStrengthDetail"> <image src="/assets/icons/{{item.icon}}" class="strength-icon"/> <text class="strength-title">{{item.title}}</text> <text class="strength-desc">{{item.desc}}</text> </view> </view>
strengths数组同样来自config.js,字段icon(如'component.png')、title(如'小班额保障')、desc(如'每班不超过8人,确保教师关注每位学员')全部可配置。我们帮一家英语机构上线时,把“外教100%持证上岗”改成“中教均具备TESOL认证”,只改了config.js里一行,全站同步更新。
注意事项:
mien页的师资照片建议统一尺寸(如300×300px),否则卡片高度不一致影响美观。源码配套的i3.png、i4.png等图标,我们实测在iPhone X及以上机型显示完美,但若机构自行替换图标,务必检查app.wxss里.icon类的width和height是否匹配(当前设为64rpx)。
4. 资源包深度解析:那些你可能忽略却至关重要的文件
4.1 图标资源体系:高亮版(_HL.png)的设计哲学
源码包里的图标不是随意堆放的,而是一套完整的状态反馈系统:
| 图标类型 | 示例文件 | 使用场景 | 设计要点 |
|---|---|---|---|
| 基础图标 | icon_product.png | tabBar未选中态、列表默认图标 | 单色扁平化,线条简洁 |
| 高亮图标 | icon_product_HL.png | tabBar选中态、收藏按钮激活态 | 同一图标,填充色加深20%,增加1px描边 |
| 功能图标 | tel.png, qrcode.png | 联系方式、分享入口 | 尺寸统一为120×120px,背景透明 |
为什么必须配高亮版?因为微信小程序的selectedIconPath属性要求:选中态图标必须与未选中态路径不同,且不能靠CSS改变颜色(小程序不支持SVG内联样式)。源码里app.json的tabBar配置已明确指向home_HL.png等文件,这意味着:
- 若你替换
home.png,必须同步替换home_HL.png,否则选中时图标消失; icon_product_HL.png的命名规则(_HL后缀)是硬编码在list.wxml里的,如<image src="{{item.icon}}_HL.png"/>,所以自定义图标时,务必保留_HL后缀。
我们曾遇到一个案例:某机构设计师重做了所有图标,但忘了导出高亮版,结果上线后tabBar选中时一片空白。后来我们用Photoshop批量处理——选中图层,图层→图层样式→描边设为1px、颜色#333,填充不透明度调至80%,3分钟生成全套高亮图标。
4.2 截图与素材:1.jpg–4.jpg背后的用户旅程验证
配套的1.jpg–4.jpg不是随便截的,而是按用户核心路径选取:
1.jpg:首页截图,重点展示轮播图、快捷入口、热门课程滚动区;2.jpg:课程列表页,突出分类Tab切换效果和课程卡片布局;3.jpg:课程详情页,聚焦师资介绍区块和价格模块;4.jpg:关于我们页,体现机构资质证书展示区(源码里预留了/assets/certificates/路径)。
这些截图的价值在于:当你向校长演示时,直接打开图片,指着1.jpg说:“这是家长第一眼看到的页面,轮播图您可以用最新学员作品替换”;指着3.jpg说:“这里师资介绍,您把张老师的简历照片放进来,家长立刻建立信任”。它把抽象的代码转化为具象的业务语言。
实操技巧:替换截图时,用Sketch或Figma打开源码里的
design.sketch(包内未提供,但可自行创建),按1.jpg的尺寸(750×1334px)新建画布,导入新截图,用蒙版工具裁切边缘,导出PNG时勾选“导出为@2x”,确保在Retina屏上清晰。
4.3 后端示例文件:wxapp_server.py的可扩展性设计
wxapp_server.py虽小,但架构清晰,预留了扩展钩子:
# wxapp_server.py
from flask import Flask, jsonify, request
import json
from mock_data import get_courses, get_course_detail # 数据源可替换
app = Flask(__name__)
@app.route('/api/courses')
def api_courses():
category = request.args.get('category', 'all')
data = get_courses(category) # 此处可接入数据库查询
return jsonify({'code': 0, 'data': data})
@app.route('/api/course/<int:course_id>')
def api_course(course_id):
data = get_course_detail(course_id) # 此处可接入ORM查询
return jsonify({'code': 0, 'data': data})
@app.route('/api/booking', methods=['POST'])
def api_booking():
form_data = request.get_json()
# 此处可接入邮件发送、CRM系统写入
return jsonify({'code': 0, 'msg': '预约成功'})
if __name__ == '__main__':
app.run(debug=True, host='0.0.0.0', port=5000)
关键扩展点:
mock_data.py:当前返回硬编码数据,但函数签名get_courses(category)与真实数据库查询函数一致,替换时只需改函数体;api_booking:预留了form_data接收逻辑,可直接对接企业微信API,将预约信息自动推送到销售群;requirements.txt:已包含flask-cors(解决跨域),若需连接MySQL,只需追加pymysql和sqlalchemy。
我们帮一家美术机构部署时,在api_booking里加了三行代码:
import smtplib
from email.mime.text import MIMEText
# ... 发送邮件通知顾问
5分钟搞定预约消息提醒。
5. 常见问题与排查技巧实录:从开发到上线的避坑指南
5.1 开发阶段高频问题速查表
| 问题现象 | 可能原因 | 解决方案 | 经验备注 |
|---|---|---|---|
| 首页轮播图不显示 | banners数组为空或图片路径错误 | 检查config.js中banners字段,确认图片路径以/assets/banners/开头,且文件存在于对应目录 | 微信开发者工具里右键图片→“在资源管理器中显示”,确认文件真实存在 |
| 课程列表空白 | currentCategory未正确传递或后端返回空数组 | 在list.js的onLoad里console.log(options),确认URL参数;检查mock_data.py中get_courses()返回值 | 若后端接口返回{code:1,msg:"error"},前端需在wx.request的fail回调里处理 |
| 详情页师资照片不显示 | course.teacher_avatar为空且defaultAvatar路径错误 | 查看config.js中defaultTeacherAvatar路径,应为'/assets/images/teacher_default.png'(注意开头的/) | 小程序路径必须以/开头,表示根目录,否则相对路径易出错 |
| 收藏按钮点击无反应 | isFavorited状态未初始化或handleFavorite函数未绑定 | 在detail.js的onLoad里添加this.checkFavoriteStatus(),检查wx.getStorageSync('favorites')是否包含当前课程ID | 收藏状态建议用课程ID字符串数组存储,如['101','102'],避免对象嵌套复杂化 |
5.2 真实踩坑记录:那些文档里不会写的教训
坑1:iOS端tabBar图标偏移
现象:在iPhone 12上,tabBar图标向下偏移2px,文字与图标未居中。
原因:app.json里tabBar的iconWidth和iconHeight未设置,iOS默认渲染尺寸与Android不同。
解决方案:在app.json中为每个tabBar项添加"iconWidth": "56rpx", "iconHeight": "56rpx",并确保home.png等图标尺寸为120×120px(@2x)。
我们花了3小时定位,最终发现是微信基础库版本差异——iOS需显式声明尺寸,Android则自动适配。
坑2:课程详情页课时表错位
现象:course.schedule渲染的表格,在部分安卓机上文字挤在一起。
原因:schedule-item的CSS用了display: flex,但未设flex-wrap: wrap,长文本撑开容器。
解决方案:在detail.wxss中添加.schedule-item { flex-wrap: wrap; },并为<text>标签设max-width: 300rpx。
这个坑源于设计师给的UI稿里课时描述很短,但实际运营中老师填了“每周二四六 18:00-19:30(含15分钟互动答疑)”,超长文本暴露了布局缺陷。
坑3:二维码图(qrcode.png)无法扫码
现象:生成的qrcode.png用手机扫不出链接。
原因:源码包里的qrcode.png是示意图片,非真实二维码;且未配置<image>的mode="aspectFit"导致压缩变形。
解决方案:用在线工具生成真实二维码(链接指向课程详情页URL),下载PNG后放入assets/images/,在WXML中改为<image src="/assets/images/qrcode.png" mode="aspectFit"/>。
提醒:二维码尺寸建议≥200×200px,否则远距离扫码失败率高。我们测试过,150×150px在2米外扫码成功率仅63%。
5.3 上线前必检清单(教培机构专属)
- 资质信息核对:检查
mien页的办学许可证编号、config.js里的schoolName是否与营业执照完全一致(差一个字,家长投诉风险极高); - 联系电话验证:用三台不同运营商手机拨打
config.contactTel,确认语音提示正常、转接人工顺畅; - 课程价格一致性:比对详情页价格、列表页价格、宣传海报价格,三处必须完全相同(教培行业监管严,价格欺诈处罚重);
- 试听预约流程走通:从首页→试听入口→填写表单→提交→收到短信/微信通知,全程无断点;
- 图标版权确认:源码包里的
icon_product.png等图标,若机构商用,需确认是否可商用(推荐替换为自有设计或购买正版图标库)。
最后再分享一个小技巧:上线前,让机构前台老师用自己手机扫测试二维码,预约一节试听课。她操作时的真实反馈(比如“找不到预约按钮”“电话号码输不进去”),比任何测试报告都管用。因为前台老师就是你的终极用户——她不懂代码,但她知道家长要什么。
简介:一套 ready-to-use 的教培行业微信小程序源码,包含首页(index)、课程列表(list)、课程详情(detail)、关于我们(mien)、机构优势(strength)等标准化页面,结构清晰、开箱即用。基础配置齐全:app.js、app.、app.wxss、project.config.、sitemap. 和全局配置 config.js,工具函数统一封装在 util.js。配套资源丰富:4张界面截图(1.jpg–4.jpg)、多组图标(icon_product.png / _HL.png 等)、二维码图(qrcode.png)、电话图标(tel.png),支持状态切换与视觉反馈。后端轻量示例 wxapp_server.py + requirements.txt,便于本地调试或快速对接。所有页面遵循微信小程序规范,适配课程分类展示、师资模块预留、服务亮点呈现等常见教培需求,开发者可直接导入微信开发者工具运行,无需重写底层框架,节省从零搭建时间。
更多推荐


所有评论(0)