一、首页功能方法
(一)初始化与核心控制方法
| 方法名 | 功能描述 |
|---|---|
init() |
初始化入口方法,重置页码并调用initShop()和initTag();绑定表单提交阻止默认行为,确保异步交互 |
initShop(data, activetag, isReset) |
核心数据请求方法,向后端发起店铺列表查询;实现加载状态控制、数据渲染触发、分页更新 |
(二)数据交互方法
| 方法名 | 功能描述 |
|---|---|
initTag() |
获取分类标签数据,调用renderTagList()渲染标签栏;标签加载失败时保底显示 "全部" 标签 |
searchShop() |
封装搜索逻辑,整合搜索框输入与标签筛选条件;调用initShop()执行查询,实现条件联动 |
(三)UI 渲染方法
| 方法名 | 功能描述 |
|---|---|
renderShopList(data, isReset) |
店铺列表渲染核心方法,根据后端返回数据生成店铺卡片;处理空数据、轮播图初始化、默认文案填充 |
renderTagList(tags, container, maxVisible) |
标签栏渲染方法,控制标签显示数量、生成 "更多" 按钮;绑定标签点击事件,实现激活状态管理 |
renderPagination() |
分页控件渲染,基于 layui 分页组件实现页码、条数控制;监听分页跳转事件,更新页码并触发数据查询 |
(四)交互控制方法
| 方法名 | 功能描述 |
|---|---|
setActiveTag(element, event) |
标签激活状态管理,移除其他标签高亮并设置当前标签激活;触发searchShop()更新筛选结果 |
resetSearch() |
重置搜索条件,清空输入框并激活 "全部" 标签;快速恢复初始展示状态 |
(五)轮播图相关方法
| 方法名 | 功能描述 |
|---|---|
initCarousels() |
店铺卡片轮播图初始化,解析轮播图 URL 并生成轮播结构;实现自动轮播(3 秒间隔)、圆点指示器绑定 |
changeCarousel(carousel, index) |
轮播图切换控制,更新图片显示状态与圆点激活状态;支持自动 / 手动切换场景 |
(六)辅助方法
| 方法名 | 功能描述 |
|---|---|
goToDetail(id) |
店铺详情跳转,拼接店铺 ID 构造跳转 URL |
toggleMoreTags(element, event) |
标签 "更多" 按钮交互,控制隐藏标签显示 / 隐藏;支持点击外部区域关闭展开的标签(预留扩展) |
二、详情页功能方法
(一)店铺基础展示与轮播
| 方法名 | 功能描述 |
|---|---|
initCarousel() |
初始化店铺轮播图,支持自动切换(3 秒间隔)、手动圆点切换、左右箭头控制 |
goToIndex()/showPrev()/showNext() |
轮播图切换逻辑,实现无缝轮播效果 |
updateShopStatus() |
实时判断店铺营业状态(对比当前时间与营业时段),动态更新状态文案 |
并通过以下代码将经纬度转换为相应位置
javascript
function getAddressFromKnownCoordinates(longitude, latitude) {
return new Promise((resolve, reject) => {
const apiKey = '2105ba620f46e78a74b47d937077308a';
const url = `https://restapi.amap.com/v3/geocode/regeo?key=${apiKey}&location=${longitude},${latitude}&output=JSON`;
fetch(url)
.then(response => response.json())
.then(data => {
if (data.status === '1' && data.regeocode) {
const addressComponent = data.regeocode.addressComponent;
resolve({
fullAddress: data.regeocode.formatted_address,
province: addressComponent.province,
city: addressComponent.city || addressComponent.province,
district: addressComponent.district,
township: addressComponent.township,
street: addressComponent.streetNumber?.street || '',
streetNumber: addressComponent.streetNumber?.number || '',
citycode: addressComponent.citycode,
adcode: addressComponent.adcode
});
} else {
reject(new Error('获取地址信息失败: ' + (data.info || '未知错误')));
}
})
.catch(error => {
reject(error);
});
});
}
(二)用户信息与权限校验
| 功能说明 | 实现逻辑 |
|---|---|
| 用户信息获取 | 通过/user/getCurrentUser接口获取当前登录用户信息,为后续互动功能提供用户 ID |
| 权限拦截 | 点赞、收藏、评分、评论等操作前校验登录状态,未登录时提示登录 |
(三)点赞互动功能
| 方法名 | 功能描述 |
|---|---|
getLikeStatusAndCount() |
获取用户对店铺的点赞状态及总点赞数 |
updateLikeUI() |
根据点赞状态更新 UI(颜色、文案切换) |
| 点赞切换逻辑 | 调用/homepage/likeToggle接口实现点赞 / 取消点赞,同步更新点赞数 |
(四)评分功能
| 方法名 | 功能描述 |
|---|---|
fetchRatingData() |
获取店铺评分总数和平均分,更新评分 UI |
| 评分状态校验 | 通过/shop/ratingCount检查用户是否已评分,避免重复评分 |
| 星级评分提交 | 支持 1-5 星评分选择,提交后更新评分数据 |
(五)收藏功能
| 方法名 | 功能描述 |
|---|---|
loadFolders() |
加载用户收藏文件夹列表,若无文件夹则跳转收藏夹新建 |
showCollectionDialog()/closeCollectionDialog() |
收藏弹窗的显示与关闭 |
collection() |
提交收藏请求,支持选择文件夹和添加收藏理由 |
createNewFolder() |
创建新文件夹,动态更新文件夹列表 |
(六)打卡功能
| 方法名 | 功能描述 |
|---|---|
checkinUploadImage() |
通过/upload接口上传打卡图片 |
checkinSubmitData() |
提交打卡内容(文字 + 图片),成功后刷新打卡列表 |
| 打卡弹窗交互 | 支持图片预览、移除,内容输入校验 |
(七)评论功能
| 方法名 | 功能描述 |
|---|---|
getReviewsByShopId() |
分页加载店铺评论,支持 "加载更多" 和追加模式 |
showAddCommentDialog() |
评论弹窗展示,支持图片上传和内容输入 |
| 评论提交逻辑 | 调用/shop/addReview发表评论,成功后重置分页并刷新列表 |
likeComment() |
评论点赞 / 取消点赞,同步更新点赞数和 UI 状态 |
(八)分享功能
| 方法名 | 功能描述 |
|---|---|
copyShopLink() |
复制店铺链接到剪贴板,提供成功提示 |
openShareModal()/closeShareModal() |
分享弹窗的打开与关闭,支持动态生成店铺链接 |
获取协议名称、ip地址及端口核心方法如下:
java
String scheme = request.getScheme();
String serverName = request.getServerName();
int serverPort = request.getServerPort();
String baseUrl;
if ((scheme.equals("http") && serverPort == 80) || (scheme.equals("https") && serverPort == 443)) {
baseUrl = scheme + "://" + serverName;
} else {
baseUrl = scheme + "://" + serverName + ":" + serverPort;
}
(九)辅助工具方法
| 方法名 | 功能描述 |
|---|---|
formatTime() |
时间格式化(YYYY-MM-DD) |
previewImage() |
图片预览弹窗,支持点击关闭 |
isTimeBetween()/timeToSeconds() |
时间区间判断,用于营业状态计算 |
三、通用优化机制
| 机制说明 | 实现方式 |
|---|---|
| 异步请求管理 | 通过isLoading状态防止重复请求,加载过程中显示 loading 提示 |
| 数据缓存与复用 | 分页数据缓存(如allCheckins),减少重复请求 |