hookehuyr

feat(家庭功能): 添加步数排行榜功能并重构区域选择逻辑

- 在points.js中添加步数排行榜API接口
- 将上海区域信息提取到config.js中统一管理
- 在FamilyRank页面引入步数排行榜功能
- 重构CreateFamily和EditFamily页面的区域选择器,使用统一的区域数据
- 移除不再使用的syncWxStepAPI接口
/*
* @Date: 2023-12-22 10:29:37
* @LastEditors: hookehuyr hookehuyr@gmail.com
* @LastEditTime: 2025-09-08 12:24:35
* @LastEditTime: 2025-09-09 11:32:38
* @FilePath: /lls_program/src/api/points.js
* @Description: 文件描述
*/
import { fn, fetch } from './fn';
const Api = {
SYNC_WX_STEP: '/srv/?a=point&t=sync_wx_step',
COLLECT_POINT: '/srv/?a=point&t=collect',
POINT_LIST: '/srv/?a=point&t=list',
STEP_LEADERBOARD: '/srv/?a=point&t=step_leaderboard',
}
/**
* @description: 同步微信步数
* @returns
*/
export const syncWxStepAPI = (params) => fn(fetch.post(Api.SYNC_WX_STEP, params));
/**
* @description: 汇总积分到家庭
* @param {*} params
* @param {string} params.family_id - 家庭ID
......@@ -53,3 +47,29 @@ export const collectPointAPI = (params) => fn(fetch.post(Api.COLLECT_POINT, para
* @returns {string} response.data.logs[].created_time - 创建时间
*/
export const getPointListAPI = (params) => fn(fetch.get(Api.POINT_LIST, params));
/**
* @description: 查询步数排行榜
* @param {Object} params - 请求参数
* @param {string} params.county - 区县
* @returns {Object} response - 响应对象
* @returns {number} response.code - 响应状态码
* @returns {string} response.msg - 响应消息
* @returns {Object} response.data - 响应数据
* @returns {Array} response.data.yesterday - 昨天日期
* @returns {Array} response.data.families[] - 家庭列表
* @returns {string} response.data.families[].family_id - 家庭ID
* @returns {string} response.data.families[].name - 家庭名称
* @returns {string} response.data.families[].avatar_url - 头像URL
* @returns {string} response.data.families[].created_by_nickname - 创建人昵称
* @returns {number} response.data.families[].step - 步数
* @returns {number} response.data.families[].rank - 排名
* @returns {Array} response.data.current_family[] - 当前家庭列表
* @returns {string} response.data.current_family[].family_id - 家庭ID
* @returns {string} response.data.current_family[].name - 家庭名称
* @returns {string} response.data.current_family[].avatar_url - 头像URL
* @returns {string} response.data.current_family[].created_by_nickname - 创建人昵称
* @returns {number} response.data.current_family[].step - 步数
* @returns {number} response.data.current_family[].rank - 排名
*/
export const getStepLeaderboardAPI = (params) => fn(fetch.get(Api.STEP_LEADERBOARD, params));
......
......@@ -47,7 +47,6 @@
import { ref, onMounted, defineEmits, defineProps } from 'vue'
import Taro from '@tarojs/taro'
// import { syncWxStepAPI } from '@/api/points'
import { fetch } from '@/api/fn'
// 定义props
......
<!--
* @Date: 2025-08-27 17:44:53
* @LastEditors: hookehuyr hookehuyr@gmail.com
* @LastEditTime: 2025-09-04 17:59:11
* @LastEditTime: 2025-09-09 11:38:58
* @FilePath: /lls_program/src/pages/CreateFamily/index.vue
* @Description: 文件描述
-->
......@@ -176,6 +176,8 @@ import { Tips, Photograph, Right } from '@nutui/icons-vue-taro';
import BASE_URL from '@/utils/config';
// 接口信息
import { createFamilyAPI } from '@/api/family';
// 区域信息
import { SHANGHAI_REGION } from '@/utils/config';
const defaultFamilyCoverSvg = 'https://cdn.ipadbiz.cn/lls_prog/images/default-family-cover.png';
const familyName = ref('');
......@@ -192,24 +194,7 @@ const familyIntroError = ref('');
// 区域选择器相关
const showDistrictPicker = ref(false);
const districtValue = ref([]);
const districtColumns = ref([
{ text: '黄浦区', value: 310101 },
{ text: '徐汇区', value: 310104 },
{ text: '长宁区', value: 310105 },
{ text: '静安区', value: 310106 },
{ text: '普陀区', value: 310107 },
{ text: '虹口区', value: 310109 },
{ text: '杨浦区', value: 310110 },
{ text: '闵行区', value: 310112 },
{ text: '宝山区', value: 310113 },
{ text: '嘉定区', value: 310114 },
{ text: '浦东新区', value: 310115 },
{ text: '金山区', value: 310116 },
{ text: '松江区', value: 310117 },
{ text: '青浦区', value: 310118 },
{ text: '奉贤区', value: 310120 },
{ text: '崇明区', value: 310151 }
]);
const districtColumns = ref(SHANGHAI_REGION);
const familyAvatar = ref('');
const focusedIndex = ref(-1);
const inputRefs = ref([]);
......
<!--
* @Date: 2025-08-27 17:44:53
* @LastEditors: hookehuyr hookehuyr@gmail.com
* @LastEditTime: 2025-09-08 11:55:03
* @LastEditTime: 2025-09-09 11:39:20
* @FilePath: /lls_program/src/pages/EditFamily/index.vue
* @Description: 文件描述
-->
......@@ -175,6 +175,8 @@ import BASE_URL from '@/utils/config';
const defaultFamilyCoverSvg = 'https://cdn.ipadbiz.cn/lls_prog/images/default-family-cover.png';
// 获取接口信息
import { editFamilyAPI, getFamilyInfoAPI } from '@/api/family';
// 区域信息
import { SHANGHAI_REGION } from '@/utils/config';
const familyId = ref('');
const familyName = ref('');
......@@ -191,24 +193,7 @@ const familyIntroError = ref('');
// 区域选择器相关
const showDistrictPicker = ref(false);
const districtValue = ref([]);
const districtColumns = ref([
{ text: '黄浦区', value: 310101 },
{ text: '徐汇区', value: 310104 },
{ text: '长宁区', value: 310105 },
{ text: '静安区', value: 310106 },
{ text: '普陀区', value: 310107 },
{ text: '虹口区', value: 310109 },
{ text: '杨浦区', value: 310110 },
{ text: '闵行区', value: 310112 },
{ text: '宝山区', value: 310113 },
{ text: '嘉定区', value: 310114 },
{ text: '浦东新区', value: 310115 },
{ text: '金山区', value: 310116 },
{ text: '松江区', value: 310117 },
{ text: '青浦区', value: 310118 },
{ text: '奉贤区', value: 310120 },
{ text: '崇明区', value: 310151 }
]);
const districtColumns = ref(SHANGHAI_REGION);
const familyAvatar = ref('');
const focusedIndex = ref(-1);
const defaultFamilyCover = ref(defaultFamilyCoverSvg);
......
<!--
* @Date: 2025-09-01 13:07:52
* @LastEditors: hookehuyr hookehuyr@gmail.com
* @LastEditTime: 2025-09-06 12:51:49
* @LastEditTime: 2025-09-09 11:40:05
* @FilePath: /lls_program/src/pages/FamilyRank/index.vue
* @Description: 文件描述
-->
......@@ -131,6 +131,12 @@
<script setup>
import { ref, computed } from 'vue'
import BackToTop from '@/components/BackToTop.vue'
// 导入接口
import { getStepLeaderboardAPI } from '@/api/points'
import { getFamilyInfoAPI } from '@/api/family'
// 区域信息
import { SHANGHAI_REGION } from '@/utils/config'
// 当前激活的tab
const activeTab = ref('huangpu')
......
......@@ -53,3 +53,23 @@ export const THEME_COLORS = {
WARNING: '#F59E0B',
ERROR: '#EF4444'
}
// 上海区域信息
export const SHANGHAI_REGION = [
{ text: '黄浦区', value: 310101 },
{ text: '徐汇区', value: 310104 },
{ text: '长宁区', value: 310105 },
{ text: '静安区', value: 310106 },
{ text: '普陀区', value: 310107 },
{ text: '虹口区', value: 310109 },
{ text: '杨浦区', value: 310110 },
{ text: '闵行区', value: 310112 },
{ text: '宝山区', value: 310113 },
{ text: '嘉定区', value: 310114 },
{ text: '浦东新区', value: 310115 },
{ text: '金山区', value: 310116 },
{ text: '松江区', value: 310117 },
{ text: '青浦区', value: 310118 },
{ text: '奉贤区', value: 310120 },
{ text: '崇明区', value: 310151 }
]
......