From cab90aa1cba22a168d5eeaebae08b6ab3d83a01d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=88=90?= Date: Mon, 9 Feb 2026 13:25:13 +0800 Subject: [PATCH 1/3] 1 --- config/env.ts | 128 ++++++++++++++++++ project.config.json | 2 +- src/login_pages/index/index.tsx | 7 +- .../components/MyselfPageContent.tsx | 48 ++++--- src/other_pages/comment_reply/index.tsx | 2 +- src/services/userService.ts | 18 +-- 6 files changed, 164 insertions(+), 41 deletions(-) create mode 100644 config/env.ts diff --git a/config/env.ts b/config/env.ts new file mode 100644 index 0000000..2eb1e0b --- /dev/null +++ b/config/env.ts @@ -0,0 +1,128 @@ +import Taro from '@tarojs/taro' + +// 环境类型 +export type EnvType = 'development' | 'production' + +// 环境配置接口 +export interface EnvConfig { + name: string + apiBaseURL: string + timeout: number + enableLog: boolean + enableMock: boolean + // 客服配置 + customerService: { + corpId: string + serviceUrl: string + phoneNumber?: string + email?: string + } +} + +// 各环境配置 +const envConfigs: Record = { + + + // 开发环境 + development: { + name: '开发环境', + // apiBaseURL: 'https://tennis.bimwe.com', + apiBaseURL: 'http://localhost:9098', + timeout: 15000, + enableLog: true, + enableMock: false, + // 客服配置 + customerService: { + corpId: 'ww51fc969e8b76af82', // 企业ID + serviceUrl: 'https://work.weixin.qq.com/kfid/kfc64085b93243c5c91', + + } + }, + + + + // 生产环境1 + // production: { + // name: '生产环境1', + // apiBaseURL: 'https://tennis.bimwe.com', + // timeout: 10000, + // enableLog: false, + // enableMock: false, + // // 客服配置 + // customerService: { + // corpId: 'ww51fc969e8b76af82', // 企业ID + // serviceUrl: 'https://work.weixin.qq.com/kfid/kfc64085b93243c5c91', + + // } + // }, + + // 生产环境2 + production: { + name: '生产环境2', + apiBaseURL: 'https://youchang.qiongjingtiyu.com', + timeout: 10000, + enableLog: false, + enableMock: false, + // 客服配置 + customerService: { + corpId: 'ww9a2d9a5d9410c664', // 企业ID + serviceUrl: 'https://work.weixin.qq.com/kfid/kfcd355e162e0390684', + + } + } +} + +// 获取当前环境 +export const getCurrentEnv = (): EnvType => { + // 在小程序环境中,使用默认逻辑判断环境 + // 可以根据实际需要配置不同的判断逻辑 + + // 可以根据实际部署情况添加更多判断逻辑 + // 比如通过 Taro.getEnv() 获取当前平台环境 + + const isProd = process.env.NODE_ENV === 'production' + if (isProd) { + return 'production' + } else { + return 'development' + } +} + +// 获取当前环境配置 +export const getCurrentConfig = (): EnvConfig => { + const env = getCurrentEnv() + return envConfigs[env] +} + +// 获取指定环境配置 +export const getEnvConfig = (env: EnvType): EnvConfig => { + return envConfigs[env] +} + +// 是否为开发环境 +export const isDevelopment = (): boolean => { + return getCurrentEnv() === 'development' +} + +// 是否为生产环境 +export const isProduction = (): boolean => { + return getCurrentEnv() === 'production' +} + + + +// 环境配置调试信息 +export const getEnvInfo = () => { + const config = getCurrentConfig() + return { + env: getCurrentEnv(), + config, + taroEnv: Taro.getEnv(), + platform: Taro.getEnv() === Taro.ENV_TYPE.WEAPP ? '微信小程序' : + Taro.getEnv() === Taro.ENV_TYPE.WEB ? 'Web' : + Taro.getEnv() === Taro.ENV_TYPE.RN ? 'React Native' : '未知' + } +} + +// 导出当前环境配置(方便直接使用) +export default getCurrentConfig() \ No newline at end of file diff --git a/project.config.json b/project.config.json index 15d90c1..145631b 100644 --- a/project.config.json +++ b/project.config.json @@ -46,4 +46,4 @@ "simulatorType": "wechat", "simulatorPluginLibVersion": {}, "condition": {} -} +} \ No newline at end of file diff --git a/src/login_pages/index/index.tsx b/src/login_pages/index/index.tsx index d5c85e3..fa3ee27 100644 --- a/src/login_pages/index/index.tsx +++ b/src/login_pages/index/index.tsx @@ -1,6 +1,7 @@ import React, { useState } from "react"; import { View, Text, Button, Image } from "@tarojs/components"; import Taro, { useRouter } from "@tarojs/taro"; +import { GeneralNavbar } from "@/components"; import { wechat_auth_login, save_login_state, @@ -171,6 +172,8 @@ const LoginPage: React.FC = () => { + + {/* 主要内容 */} {/* 品牌区域 */} @@ -216,9 +219,9 @@ const LoginPage: React.FC = () => { 手机号快捷登录 - + {/* 返回首页 - + */} {/* 用户协议复选框 */} diff --git a/src/main_pages/components/MyselfPageContent.tsx b/src/main_pages/components/MyselfPageContent.tsx index 81a3296..fbffc5e 100644 --- a/src/main_pages/components/MyselfPageContent.tsx +++ b/src/main_pages/components/MyselfPageContent.tsx @@ -65,20 +65,22 @@ const MyselfPageContent: React.FC = ({ isActive = true } game_records: TennisMatch[] ): { notEndGames: TennisMatch[]; finishedGames: TennisMatch[] } => { const now = new Date().getTime(); - return game_records.reduce( - (result, cur) => { - let { end_time } = cur; - end_time = end_time.replace(/\s/, "T"); - new Date(end_time).getTime() > now - ? result.notEndGames.push(cur) - : result.finishedGames.push(cur); - return result; - }, - { - notEndGames: [] as TennisMatch[], - finishedGames: [] as TennisMatch[], - } - ); + + // 使用for + const notEndGames: TennisMatch[] = []; + const finishedGames: TennisMatch[] = []; + for (const game of game_records) { + const { end_time } = game; + const end_time_str = end_time.replace(/\s/, "T"); + new Date(end_time_str).getTime() > now + ? notEndGames.push(game) + : finishedGames.push(game); + } + + console.log("notEndGames", notEndGames); + + return { notEndGames, finishedGames }; + }, [] ); @@ -95,6 +97,8 @@ const MyselfPageContent: React.FC = ({ isActive = true } } else { games_data = await UserService.get_participated_games(user_info.id); } + + const sorted_games = games_data.sort((a, b) => { return ( new Date(a.original_start_time.replace(/\s/, "T")).getTime() - @@ -102,6 +106,8 @@ const MyselfPageContent: React.FC = ({ isActive = true } ); }); const { notEndGames, finishedGames } = classifyGameRecords(sorted_games); + console.log("notEndGames", notEndGames); + set_game_records(notEndGames); setEndedGameRecords(finishedGames); } catch (error) { @@ -250,17 +256,15 @@ const MyselfPageContent: React.FC = ({ isActive = true } setActiveTab("hosted")} > 我主办的 setActiveTab("participated")} > 我参与的 @@ -281,7 +285,7 @@ const MyselfPageContent: React.FC = ({ isActive = true } btnImg="ICON_ADD" reload={goPublish} isShowNoData={game_records.length === 0} - loadMoreMatches={() => {}} + loadMoreMatches={() => { }} collapse={true} style={{ paddingBottom: ended_game_records.length ? 0 : "90px", @@ -308,7 +312,7 @@ const MyselfPageContent: React.FC = ({ isActive = true } error={null} errorImg="ICON_LIST_EMPTY_CARD" isShowNoData={ended_game_records.length === 0} - loadMoreMatches={() => {}} + loadMoreMatches={() => { }} collapse={true} style={{ paddingBottom: "90px", overflow: "hidden" }} listLoadErrorWrapperHeight="fit-content" diff --git a/src/other_pages/comment_reply/index.tsx b/src/other_pages/comment_reply/index.tsx index 6a94d53..ef889cd 100644 --- a/src/other_pages/comment_reply/index.tsx +++ b/src/other_pages/comment_reply/index.tsx @@ -249,7 +249,7 @@ const CommentReply = () => { handleUserClick(e, item.user_id)} /> diff --git a/src/services/userService.ts b/src/services/userService.ts index e1bc150..4c7a7cc 100644 --- a/src/services/userService.ts +++ b/src/services/userService.ts @@ -151,6 +151,7 @@ interface BackendGameData { longitude: string; venue_type: string; surface_type: string; + distance_km: string; }; participants: { user: { @@ -206,7 +207,7 @@ export class UserService { latitude = parseFloat(game.venue_dtl.latitude) || latitude; longitude = parseFloat(game.venue_dtl.longitude) || longitude; } - const distance = this.calculate_distance(latitude, longitude); + // 处理地点信息 - 优先使用venue_dtl中的信息 let location = game.location_name || game.location || "未知地点"; @@ -227,7 +228,7 @@ export class UserService { original_start_time: game.start_time, end_time: game.end_time || "", location: location, - distance_km: parseFloat(distance.replace("km", "")) || 0, + distance_km: game.venue_dtl?.distance_km , current_players: registered_count, max_players: max_count, skill_level_min: parseInt(game.skill_level_min) || 0, @@ -303,20 +304,7 @@ export class UserService { return `${date_str} ${time_str}`; } - // 计算距离(模拟实现,实际需要根据用户位置计算) - private static calculate_distance( - latitude: number, - longitude: number - ): string { - if (latitude === 0 && longitude === 0) { - return "未知距离"; - } - // 这里应该根据用户当前位置计算实际距离 - // 暂时返回模拟距离 - const distances = ["1.2km", "2.5km", "3.8km", "5.1km", "7.3km"]; - return distances[Math.floor(Math.random() * distances.length)]; - } // 获取用户信息 static async get_user_info(user_id?: string): Promise { try { From 49935dd04910ad61e9a3c1285f627cf637ce82cb Mon Sep 17 00:00:00 2001 From: Ultrame <1019265060@qq.com> Date: Mon, 9 Feb 2026 13:53:19 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=9C=81=E5=B8=82?= =?UTF-8?q?=E5=8C=BA=E5=92=8C=E5=8D=A0=E4=BD=8D=E5=9B=BE=E7=89=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/ListCard/index.tsx | 44 +++--- src/components/ListLoadError/index.tsx | 3 +- src/components/UserInfo/index.tsx | 32 ++-- src/config/images.js | 147 +++++++++--------- .../components/MyselfPageContent.tsx | 14 +- src/services/userService.ts | 8 +- src/static/emptyStatus/publish-empty-card.png | Bin 44512 -> 0 bytes src/store/pickerOptionsStore.ts | 37 ++++- src/store/userStore.ts | 27 +++- src/user_pages/edit/index.tsx | 27 ++-- src/user_pages/other/index.tsx | 10 +- 11 files changed, 196 insertions(+), 153 deletions(-) delete mode 100644 src/static/emptyStatus/publish-empty-card.png diff --git a/src/components/ListCard/index.tsx b/src/components/ListCard/index.tsx index 55d5246..5f5eb27 100644 --- a/src/components/ListCard/index.tsx +++ b/src/components/ListCard/index.tsx @@ -5,8 +5,9 @@ import img from "../../config/images"; import { ListCardProps } from "../../../types/list/types"; import { formatGameTime, calculateDuration } from "@/utils/timeUtils"; import { navigateTo } from "@/utils/navigation"; -import images from '@/config/images' +import images from "@/config/images"; import "./index.scss"; +import { OSS_BASE } from "@/config/api"; const ListCard: React.FC = ({ id, @@ -45,7 +46,7 @@ const ListCard: React.FC = ({ className="image" mode="aspectFill" lazyLoad - defaultSource={require("@/static/emptyStatus/publish-empty-card.png")} + defaultSource={`${OSS_BASE}/front/ball/images/publish-empty-card.svg`} /> ); }; @@ -67,7 +68,9 @@ const ListCard: React.FC = ({ const containerWidthPx = screenWidth - 130; // 计算固定信息宽度 - const extraInfo = `${court_type ? `・${court_type}` : ''}${distance_km ? `・${distance_km}km` : ''}`; + const extraInfo = `${court_type ? `・${court_type}` : ""}${ + distance_km ? `・${distance_km}km` : "" + }`; // 估算字符宽度(基于 12px 字体) const getTextWidth = (text: string) => { @@ -98,7 +101,9 @@ const ListCard: React.FC = ({ let currentWidth = 0; for (let i = 0; i < location.length; i++) { const char = location[i]; - const charWidth = /[\u4e00-\u9fa5\u3000-\u303f\uff00-\uffef]/.test(char) ? 12 : 6; + const charWidth = /[\u4e00-\u9fa5\u3000-\u303f\uff00-\uffef]/.test(char) + ? 12 + : 6; if (currentWidth + charWidth > availableWidth) { break; } @@ -106,7 +111,7 @@ const ListCard: React.FC = ({ maxChars++; } - return location.slice(0, maxChars) + '...'; + return location.slice(0, maxChars) + "..."; }, [location, court_type, distance_km]); // 根据图片数量决定展示样式 @@ -220,9 +225,10 @@ const ListCard: React.FC = ({ - + - {Number(skill_level_min)?.toFixed(1)} - {Number(skill_level_max)?.toFixed(1)} + {Number(skill_level_min)?.toFixed(1)} -{" "} + {Number(skill_level_max)?.toFixed(1)} {/* 分割线 */} @@ -251,22 +257,16 @@ const ListCard: React.FC = ({ /> {/* {game_type} */} - { - venue_description && () - } - { - venue_description && - ( - - - 场馆方: - - - {venue_description} - + {venue_description && } + {venue_description && ( + + 场馆方: + + + {venue_description} - ) - } + + )} )} diff --git a/src/components/ListLoadError/index.tsx b/src/components/ListLoadError/index.tsx index daddcfa..3d6be09 100644 --- a/src/components/ListLoadError/index.tsx +++ b/src/components/ListLoadError/index.tsx @@ -24,7 +24,6 @@ const ListLoadError = (props: IProps) => { wrapperHeight = "", width = "", height = "", - scale = "", } = props; const handleReload = () => { reload && typeof reload === "function" && reload(); @@ -34,7 +33,7 @@ const ListLoadError = (props: IProps) => { {text && {text}} diff --git a/src/components/UserInfo/index.tsx b/src/components/UserInfo/index.tsx index fb6f2c1..3fb9ede 100644 --- a/src/components/UserInfo/index.tsx +++ b/src/components/UserInfo/index.tsx @@ -6,7 +6,11 @@ import "./index.scss"; import { EditModal } from "@/components"; import { UserService, PickerOption } from "@/services/userService"; import { PopupPicker } from "@/components/Picker/index"; -import { useUserActions, useNicknameChangeStatus, useLastTestResult } from "@/store/userStore"; +import { + useUserActions, + useNicknameChangeStatus, + useLastTestResult, +} from "@/store/userStore"; import { UserInfoType } from "@/services/userService"; import { useCities, @@ -82,7 +86,8 @@ const UserInfoCardComponent: React.FC = ({ }) => { const nickname_change_status = useNicknameChangeStatus(); const { setShowGuideBar } = useGlobalState(); - const { updateUserInfo, updateNickname, fetchLastTestResult } = useUserActions(); + const { updateUserInfo, updateNickname, fetchLastTestResult } = + useUserActions(); const ntrpLevels = useNtrpLevels(); // 使用全局状态中的测试结果,避免重复调用接口 const lastTestResult = useLastTestResult(); @@ -295,8 +300,8 @@ const UserInfoCardComponent: React.FC = ({ // 处理地区选择 const handle_location_change = (e: any) => { - const [country, province, city] = e; - handle_field_edit({ country, province, city }); + const [province, city, district] = e; + handle_field_edit({ province, city, district }); }; // 处理NTRP水平选择 @@ -307,8 +312,8 @@ const UserInfoCardComponent: React.FC = ({ // 处理职业选择 const handle_occupation_change = (e: any) => { - const [country, province, city] = e; - handle_field_edit("occupation", `${country} ${province} ${city}`); + const [firstVal, secondVal, thirdVal] = e; + handle_field_edit("occupation", `${firstVal} ${secondVal} ${thirdVal}`); }; const handle_edit_modal_cancel = () => { // 关闭编辑弹窗时显示 GuideBar @@ -565,12 +570,12 @@ const UserInfoCardComponent: React.FC = ({ 选择职业 ) : null} - {user_info.country || user_info.province || user_info.city ? ( + {user_info.province || user_info.city || user_info.district ? ( editable && handle_open_edit_modal("location")} > - {`${user_info.province}${user_info.city}`} + {`${user_info.city}${user_info.district}`} ) : is_current_user ? ( = ({ visible={location_picker_visible} setvisible={setLocationPickerVisible} value={ - form_data.country - ? [form_data.country, form_data.province, form_data.city] + form_data.province + ? [form_data.province, form_data.city, form_data.district] : getDefaultOption(cities) } onChange={handle_location_change} @@ -678,15 +683,12 @@ const UserInfoCardComponent: React.FC = ({ showHeader={true} title="选择 NTRP 自评水平" ntrpTested={ntrpTested} - options={ntrpLevels.map((level) => ({ - text: level, - value: level, - }))} + options={ntrpLevels} type="ntrp" img={user_info.avatar_url || ""} visible={ntrp_picker_visible} setvisible={setNtrpPickerVisible} - value={[form_data.ntrp_level || "2.5"]} + value={!form_data.ntrp_level ? ["2.5"] : [form_data.ntrp_level]} onChange={handle_ntrp_level_change} /> )} diff --git a/src/config/images.js b/src/config/images.js index 62eaddb..9f84625 100644 --- a/src/config/images.js +++ b/src/config/images.js @@ -1,74 +1,75 @@ +import { OSS_BASE } from "@/config/api"; export default { - ICON_REMOVE: require('@/static/publishBall/icon-remove.svg'), - ICON_UPLOAD: require('@/static/publishBall/icon-upload.svg'), - ICON_LOCATION: require('@/static/publishBall/icon-location.svg'), - ICON_GAMEPLAY: require('@/static/publishBall/icon-gameplay.svg'), - ICON_PERSONAL: require('@/static/publishBall/icon-personal.svg'), - ICON_CHANGDA: require('@/static/publishBall/icon-changda.svg'), - ICON_COST: require('@/static/publishBall/icon-cost.svg'), - ICON_TIPS: require('@/static/publishBall/icon-tips.svg'), - ICON_ARROW_RIGHT: require('@/static/publishBall/icon-arrow-right.svg'), - ICON_FILTER: require('@/static/list/icon-filter.svg'), - ICON_FILTER_SELECTED: require('@/static/list/icon-filter-selected.svg'), - ICON_SEARCH: require('@/static/list/icon-search.svg'), - ICON_PLAY: require('@/static/list/icon-play.svg'), - ICON_SITE: require('@/static/list/icon-site.svg'), - ICON_ARROW_DOWN: require('@/static/list/icon-arrow-down.svg'), - ICON_MENU_ITEM_SELECTED: require('@/static/list/icon-menu-item-selected.svg'), - ICON_ARROW_DOWN_WHITE: require('@/static/list/icon-arrow-down-white.svg'), - ICON_LIST_RIGHT_ARROW: require('@/static/list/icon-list-right-arrow.svg'), - ICON_ARROW_LEFT: require('@/static/detail/icon-arrow-left.svg'), - ICON_LOGO_GO: require('@/static/detail/icon-logo-go.svg'), - ICON_MAP: require('@/static/publishBall/icon-map.svg'), - ICON_STADIUM: require('@/static/publishBall/icon-stadium.svg'), - ICON_ARRORW_SMALL: require('@/static/publishBall/icon-arrow-small.svg'), - ICON_MAP_SEARCH: require('@/static/publishBall/icon-map-search.svg'), - ICON_HEART_CIRCLE: require('@/static/publishBall/icon-heartcircle.png'), - ICON_ADD: require('@/static/publishBall/icon-add.svg'), - ICON_COPY: require('@/static/publishBall/icon-arrow-right.svg'), - ICON_DELETE: require('@/static/publishBall/icon-delete.svg'), - ICON_RIGHT_MAX: require('@/static/publishBall/icon-right-max.svg'), - ICON_PLUS: require('@/static/publishBall/icon-plus.svg'), - ICON_GROUP: require('@/static/publishBall/icon-group.svg'), - ICON_PERSON: require('@/static/publishBall/icon-person.svg'), - ICON_PUBLISH: require('@/static/publishBall/icon-publish.png'), - ICON_CIRCLE_UNSELECT: require('@/static/publishBall/icon-circle-unselect.svg'), - ICON_CIRCLE_SELECT: require('@/static/publishBall/icon-circle-select-ring.svg'), - ICON_CIRCLE_SELECT_ARROW: require('@/static/publishBall/icon-circle-select-arrow.svg'), - ICON_LOGO: require('@/static/logo.svg'), - ICON_CHANGE: require('@/static/list/icon-change.svg'), - ICON_DETAIL_MAP: require('@/static/detail/icon-map.svg'), - ICON_DETAIL_ARROW_RIGHT: require('@/static/detail/icon-arrow-right.svg'), - ICON_DETAIL_NOTICE: require('@/static/detail/icon-notice.svg'), - ICON_DETAIL_APPLICATION_ADD: require('@/static/detail/icon-application-add.svg'), - ICON_DETAIL_COMMENT: require('@/static/detail/icon-comment.svg'), - ICON_DETAIL_COMMENT_LIGHT: require('@/static/detail/icon-comment-light.svg'), - ICON_DETAIL_SHARE: require('@/static/detail/icon-share-light.svg'), - ICON_GUIDE_BAR_PUBLISH: require('@/static/common/guide-bar-publish.svg'), - ICON_NAVIGATOR_BACK: require('@/static/common/navigator-back.svg'), - ICON_LIST_PLAYING_GAME: require('@/static/list/icon-paying-game.svg'), - ICON_LIST_LOAD_ERROR: require('@/static/list/icon-load-error.svg'), - ICON_LIST_RELOAD: require('@/static/list/icon-reload.svg'), - ICON_LIST_EMPTY: require('@/static/emptyStatus/publish-empty.png'), - ICON_LIST_EMPTY_CARD: require('@/static/emptyStatus/publish-empty-card.png'), - ICON_LIST_SEARCH_SEARCH: require('@/static/search/icon-search.svg'), - ICON_LIST_SEARCH_BACK: require('@/static/search/icon-back.svg'), - ICON_LIST_SEARCH_CLEAR: require('@/static/search/icon-search-clear.svg'), - ICON_LIST_SEARCH_CLEAR_HISTORY: require('@/static/search/icon-clear-history.svg'), - ICON_LIST_SEARCH_SUGGESTION: require('@/static/search/icon-search-suggestion.svg'), - ICON_LIST_INPUT_LOGO: require('@/static/list/icon-input-logo.svg'), - ICON_IMPORTANT_BTN: require('@/static/publishBall/icon-important-btn.svg'), - ICON_IMPORTANT_BLACK: require('@/static/publishBall/icon-important-black.svg'), - ICON_ARROW_RIGHT_WHITE: require('@/static/publishBall/icon-arrow-right-white.svg'), - ICON_ARROW_RIGHT_BLACK: require('@/static/publishBall/icon-arrow-right-black.svg'), - ICON_EXAMINATION: require('@/static/userInfo/examination.svg'), - ICON_ARROW_GREEN: require('@/static/userInfo/arrow-green.svg'), - ICON_COPY: require('@/static/publishBall/icon-copy.svg'), - ICON_UPLOAD_IMG: require('@/static/publishBall/icon-upload-img.svg'), - ICON_UPLOAD_SUCCESS: require('@/static/publishBall/icon-upload-success.svg'), - ICON_CLOSE: require('@/static/publishBall/icon-close.svg'), - ICON_LIST_NTPR: require('@/static/list/ntpr.svg'), - ICON_LIST_CHANGDA: require('@/static/list/icon-changda.svg'), - ICON_LIST_CHANGDA_QIuju: require('@/static/list/changdaqiuju.png'), - ICON_RELOCATE: require('@/static/list/icon-relocate.svg'), - } + ICON_REMOVE: require("@/static/publishBall/icon-remove.svg"), + ICON_UPLOAD: require("@/static/publishBall/icon-upload.svg"), + ICON_LOCATION: require("@/static/publishBall/icon-location.svg"), + ICON_GAMEPLAY: require("@/static/publishBall/icon-gameplay.svg"), + ICON_PERSONAL: require("@/static/publishBall/icon-personal.svg"), + ICON_CHANGDA: require("@/static/publishBall/icon-changda.svg"), + ICON_COST: require("@/static/publishBall/icon-cost.svg"), + ICON_TIPS: require("@/static/publishBall/icon-tips.svg"), + ICON_ARROW_RIGHT: require("@/static/publishBall/icon-arrow-right.svg"), + ICON_FILTER: require("@/static/list/icon-filter.svg"), + ICON_FILTER_SELECTED: require("@/static/list/icon-filter-selected.svg"), + ICON_SEARCH: require("@/static/list/icon-search.svg"), + ICON_PLAY: require("@/static/list/icon-play.svg"), + ICON_SITE: require("@/static/list/icon-site.svg"), + ICON_ARROW_DOWN: require("@/static/list/icon-arrow-down.svg"), + ICON_MENU_ITEM_SELECTED: require("@/static/list/icon-menu-item-selected.svg"), + ICON_ARROW_DOWN_WHITE: require("@/static/list/icon-arrow-down-white.svg"), + ICON_LIST_RIGHT_ARROW: require("@/static/list/icon-list-right-arrow.svg"), + ICON_ARROW_LEFT: require("@/static/detail/icon-arrow-left.svg"), + ICON_LOGO_GO: require("@/static/detail/icon-logo-go.svg"), + ICON_MAP: require("@/static/publishBall/icon-map.svg"), + ICON_STADIUM: require("@/static/publishBall/icon-stadium.svg"), + ICON_ARRORW_SMALL: require("@/static/publishBall/icon-arrow-small.svg"), + ICON_MAP_SEARCH: require("@/static/publishBall/icon-map-search.svg"), + ICON_HEART_CIRCLE: require("@/static/publishBall/icon-heartcircle.png"), + ICON_ADD: require("@/static/publishBall/icon-add.svg"), + ICON_COPY: require("@/static/publishBall/icon-arrow-right.svg"), + ICON_DELETE: require("@/static/publishBall/icon-delete.svg"), + ICON_RIGHT_MAX: require("@/static/publishBall/icon-right-max.svg"), + ICON_PLUS: require("@/static/publishBall/icon-plus.svg"), + ICON_GROUP: require("@/static/publishBall/icon-group.svg"), + ICON_PERSON: require("@/static/publishBall/icon-person.svg"), + ICON_PUBLISH: require("@/static/publishBall/icon-publish.png"), + ICON_CIRCLE_UNSELECT: require("@/static/publishBall/icon-circle-unselect.svg"), + ICON_CIRCLE_SELECT: require("@/static/publishBall/icon-circle-select-ring.svg"), + ICON_CIRCLE_SELECT_ARROW: require("@/static/publishBall/icon-circle-select-arrow.svg"), + ICON_LOGO: require("@/static/logo.svg"), + ICON_CHANGE: require("@/static/list/icon-change.svg"), + ICON_DETAIL_MAP: require("@/static/detail/icon-map.svg"), + ICON_DETAIL_ARROW_RIGHT: require("@/static/detail/icon-arrow-right.svg"), + ICON_DETAIL_NOTICE: require("@/static/detail/icon-notice.svg"), + ICON_DETAIL_APPLICATION_ADD: require("@/static/detail/icon-application-add.svg"), + ICON_DETAIL_COMMENT: require("@/static/detail/icon-comment.svg"), + ICON_DETAIL_COMMENT_LIGHT: require("@/static/detail/icon-comment-light.svg"), + ICON_DETAIL_SHARE: require("@/static/detail/icon-share-light.svg"), + ICON_GUIDE_BAR_PUBLISH: require("@/static/common/guide-bar-publish.svg"), + ICON_NAVIGATOR_BACK: require("@/static/common/navigator-back.svg"), + ICON_LIST_PLAYING_GAME: require("@/static/list/icon-paying-game.svg"), + ICON_LIST_LOAD_ERROR: require("@/static/list/icon-load-error.svg"), + ICON_LIST_RELOAD: require("@/static/list/icon-reload.svg"), + ICON_LIST_EMPTY: require("@/static/emptyStatus/publish-empty.png"), + ICON_LIST_EMPTY_CARD: `${OSS_BASE}/front/ball/images/publish-empty-card.svg`, + ICON_LIST_SEARCH_SEARCH: require("@/static/search/icon-search.svg"), + ICON_LIST_SEARCH_BACK: require("@/static/search/icon-back.svg"), + ICON_LIST_SEARCH_CLEAR: require("@/static/search/icon-search-clear.svg"), + ICON_LIST_SEARCH_CLEAR_HISTORY: require("@/static/search/icon-clear-history.svg"), + ICON_LIST_SEARCH_SUGGESTION: require("@/static/search/icon-search-suggestion.svg"), + ICON_LIST_INPUT_LOGO: require("@/static/list/icon-input-logo.svg"), + ICON_IMPORTANT_BTN: require("@/static/publishBall/icon-important-btn.svg"), + ICON_IMPORTANT_BLACK: require("@/static/publishBall/icon-important-black.svg"), + ICON_ARROW_RIGHT_WHITE: require("@/static/publishBall/icon-arrow-right-white.svg"), + ICON_ARROW_RIGHT_BLACK: require("@/static/publishBall/icon-arrow-right-black.svg"), + ICON_EXAMINATION: require("@/static/userInfo/examination.svg"), + ICON_ARROW_GREEN: require("@/static/userInfo/arrow-green.svg"), + ICON_COPY: require("@/static/publishBall/icon-copy.svg"), + ICON_UPLOAD_IMG: require("@/static/publishBall/icon-upload-img.svg"), + ICON_UPLOAD_SUCCESS: require("@/static/publishBall/icon-upload-success.svg"), + ICON_CLOSE: require("@/static/publishBall/icon-close.svg"), + ICON_LIST_NTPR: require("@/static/list/ntpr.svg"), + ICON_LIST_CHANGDA: require("@/static/list/icon-changda.svg"), + ICON_LIST_CHANGDA_QIuju: require("@/static/list/changdaqiuju.png"), + ICON_RELOCATE: require("@/static/list/icon-relocate.svg"), +}; diff --git a/src/main_pages/components/MyselfPageContent.tsx b/src/main_pages/components/MyselfPageContent.tsx index fbffc5e..7c9145f 100644 --- a/src/main_pages/components/MyselfPageContent.tsx +++ b/src/main_pages/components/MyselfPageContent.tsx @@ -16,7 +16,9 @@ interface MyselfPageContentProps { isActive?: boolean; } -const MyselfPageContent: React.FC = ({ isActive = true }) => { +const MyselfPageContent: React.FC = ({ + isActive = true, +}) => { const pickerOption = usePickerOption(); const { statusNavbarHeightInfo } = useGlobalState() || {}; const { totalHeight = 98 } = statusNavbarHeightInfo || {}; @@ -292,9 +294,8 @@ const MyselfPageContent: React.FC = ({ isActive = true } overflow: "hidden", }} listLoadErrorWrapperHeight="fit-content" - listLoadErrorWidth="320px" - listLoadErrorHeight="152px" - listLoadErrorScale="1.2" + listLoadErrorWidth="410px" + listLoadErrorHeight="185px" defaultShowNum={3} /> @@ -316,9 +317,8 @@ const MyselfPageContent: React.FC = ({ isActive = true } collapse={true} style={{ paddingBottom: "90px", overflow: "hidden" }} listLoadErrorWrapperHeight="fit-content" - listLoadErrorWidth="320px" - listLoadErrorHeight="152px" - listLoadErrorScale="1.2" + listLoadErrorWidth="410px" + listLoadErrorHeight="185px" defaultShowNum={3} /> diff --git a/src/services/userService.ts b/src/services/userService.ts index 4c7a7cc..fe75426 100644 --- a/src/services/userService.ts +++ b/src/services/userService.ts @@ -2,7 +2,7 @@ import { UserInfo } from "@/components/UserInfo"; import { API_CONFIG } from "@/config/api"; import httpService, { ApiResponse } from "./httpService"; import uploadFiles from "./uploadFiles"; -import * as Taro from "@tarojs/taro"; +import * as Taro from "@tarojs/taro"; import getCurrentConfig from "@/config/env"; import { clear_login_state } from "@/services/loginService"; @@ -318,7 +318,7 @@ export class UserService { if (response.code === 0) { const userData = response.data; - + return { id: userData.id || "", nickname: userData.nickname || "", @@ -347,8 +347,6 @@ export class UserService { last_location_province: userData.last_location_province || "", last_location_city: userData.last_location_city || "", }; - - } else { throw new Error(response.message || "获取用户信息失败"); } @@ -735,7 +733,7 @@ export const updateUserLocation = async ( const response = await httpService.post("/user/update_location", { latitude, longitude, - force + force, }); return response; } catch (error) { diff --git a/src/static/emptyStatus/publish-empty-card.png b/src/static/emptyStatus/publish-empty-card.png deleted file mode 100644 index 95da019f0c1ddac9cb1ec25a869c57ef5bd91508..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44512 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 F_&>{Rrp^EW diff --git a/src/store/pickerOptionsStore.ts b/src/store/pickerOptionsStore.ts index 0c7ccc4..af789a8 100644 --- a/src/store/pickerOptionsStore.ts +++ b/src/store/pickerOptionsStore.ts @@ -5,7 +5,7 @@ import { UserService } from "@/services/userService"; export interface PickerOptionState { cities: any[]; professions: any[]; - ntrpLevels: string[]; + ntrpLevels: any[]; getCities: () => Promise; getProfessions: () => Promise; } @@ -13,7 +13,40 @@ export interface PickerOptionState { export const usePickerOption = create((set) => ({ cities: [], professions: [], - ntrpLevels: ["1.5", "2.0", "2.5", "3.0", "3.5", "4.0", "4.5", "4.5+"], + ntrpLevels: [ + { + text: "1.5", + value: "1.5", + }, + { + text: "2.0", + value: "2.0", + }, + { + text: "2.5", + value: "2.5", + }, + { + text: "3.0", + value: "3.0", + }, + { + text: "3.5", + value: "3.5", + }, + { + text: "4.0", + value: "4.0", + }, + { + text: "4.5", + value: "4.5", + }, + { + text: "4.5+", + value: "4.5+", + }, + ], getCities: async () => { try { const res = await UserService.getCities(); diff --git a/src/store/userStore.ts b/src/store/userStore.ts index b7f839f..4912277 100644 --- a/src/store/userStore.ts +++ b/src/store/userStore.ts @@ -8,7 +8,9 @@ import { NicknameChangeStatus, updateNickname as updateNicknameApi, } from "@/services/userService"; -import evaluateService, { LastTimeTestResult } from "@/services/evaluateService"; +import evaluateService, { + LastTimeTestResult, +} from "@/services/evaluateService"; import { useListStore } from "./listStore"; export interface UserState { @@ -23,7 +25,6 @@ export interface UserState { fetchLastTestResult: () => Promise; } - const getTimeNextDate = (time: string) => { const date = new Date(time); date.setDate(date.getDate() + 1); @@ -51,8 +52,6 @@ export const useUser = create()((set) => ({ const cachedCity = (Taro as any).getStorageSync?.(CITY_CACHE_KEY); - - if (cachedCity && Array.isArray(cachedCity) && cachedCity.length === 2) { // 如果有缓存的城市,使用缓存,不更新 area console.log("[userStore] 检测到缓存的城市,使用缓存,不更新 area"); @@ -66,7 +65,10 @@ export const useUser = create()((set) => ({ // 只有当 area 不存在时才使用用户信息中的位置 if (!currentArea) { - const newArea: [string, string] = [userData.last_location_province||"", userData.last_location_city||""]; + const newArea: [string, string] = [ + userData.last_location_province || "", + userData.last_location_city || "", + ]; listStore.updateArea(newArea); // 保存到缓存 useUser.getState().updateCache(newArea); @@ -102,8 +104,14 @@ export const useUser = create()((set) => ({ const listStore = useListStore.getState(); const currentArea = listStore.area; // 只有当 area 不存在或与 userLastLocationProvince 不一致时才更新 - if (!currentArea || currentArea[1] !== userInfo.last_location_province) { - const newArea: [string, string] = [userInfo.last_location_province || "", userInfo.last_location_city || ""]; + if ( + !currentArea || + currentArea[1] !== userInfo.last_location_province + ) { + const newArea: [string, string] = [ + userInfo.last_location_province || "", + userInfo.last_location_city || "", + ]; listStore.updateArea(newArea); } } @@ -127,7 +135,10 @@ export const useUser = create()((set) => ({ // 如果已经有状态数据且不是强制更新,跳过,避免重复调用 if (!force) { const currentState = useUser.getState(); - if (currentState.nicknameChangeStatus && Object.keys(currentState.nicknameChangeStatus).length > 0) { + if ( + currentState.nicknameChangeStatus && + Object.keys(currentState.nicknameChangeStatus).length > 0 + ) { return; } } diff --git a/src/user_pages/edit/index.tsx b/src/user_pages/edit/index.tsx index 91fde3f..9010dff 100644 --- a/src/user_pages/edit/index.tsx +++ b/src/user_pages/edit/index.tsx @@ -44,6 +44,7 @@ const EditProfilePage: React.FC = () => { country: info?.country ?? "", province: info?.province ?? "", city: info?.city ?? "", + district: info?.district ?? "", }; }; const [form_data, setFormData] = useState(getInitialFormData()); @@ -85,6 +86,7 @@ const EditProfilePage: React.FC = () => { country: info?.country ?? "", province: info?.province ?? "", city: info?.city ?? "", + district: info?.district ?? "", }); } @@ -358,11 +360,11 @@ const EditProfilePage: React.FC = () => { }); return; } - const [country, province, city] = e; + const [province, city, district] = e; handle_field_edit({ - country: String(country ?? ""), province: String(province ?? ""), city: String(city ?? ""), + district: String(district ?? ""), }); }; @@ -660,15 +662,17 @@ const EditProfilePage: React.FC = () => { - {form_data.country || form_data.province || form_data.city - ? `${form_data.country} ${form_data.province} ${form_data.city}` + {form_data.province || + form_data.city || + form_data.district + ? `${form_data.province} ${form_data.city} ${form_data.district}` : "选择所在地区"} { visible={location_picker_visible} setvisible={setLocationPickerVisible} value={ - form_data.country - ? [form_data.country, form_data.province, form_data.city] + form_data.province + ? [form_data.province, form_data.city, form_data.district] : getDefaultOption(cities) } onChange={handle_location_change} @@ -899,15 +903,12 @@ const EditProfilePage: React.FC = () => { title="选择 NTRP 自评水平" confirmText="保存" ntrpTested={ntrpTested} - options={ntrpLevels.map((level) => ({ - text: level, - value: level, - }))} + options={ntrpLevels} type="ntrp" // img={(user_info as UserInfoType)?.avatar_url} visible={ntrp_picker_visible} setvisible={setNtrpPickerVisible} - value={[form_data.ntrp_level || "2.5"]} + value={!form_data.ntrp_level ? ["2.5"] : [form_data.ntrp_level]} onChange={handle_ntrp_level_change} /> )} diff --git a/src/user_pages/other/index.tsx b/src/user_pages/other/index.tsx index 0dd9222..037a915 100644 --- a/src/user_pages/other/index.tsx +++ b/src/user_pages/other/index.tsx @@ -329,9 +329,8 @@ const OtherUserPage: React.FC = () => { overflow: "hidden", }} listLoadErrorWrapperHeight="fit-content" - listLoadErrorWidth="320px" - listLoadErrorHeight="152px" - listLoadErrorScale="1.2" + listLoadErrorWidth="410px" + listLoadErrorHeight="185px" defaultShowNum={3} /> @@ -375,9 +374,8 @@ const OtherUserPage: React.FC = () => { collapse={true} style={{ paddingBottom: "90px", overflow: "hidden" }} listLoadErrorWrapperHeight="fit-content" - listLoadErrorWidth="320px" - listLoadErrorHeight="152px" - listLoadErrorScale="1.2" + listLoadErrorWidth="410px" + listLoadErrorHeight="185px" defaultShowNum={3} /> From 22965eedf37b03ca4b6fc97710953000d3542ded Mon Sep 17 00:00:00 2001 From: Ultrame <1019265060@qq.com> Date: Mon, 9 Feb 2026 16:36:15 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E4=B8=AA=E4=BA=BA=E7=AE=80=E4=BB=8B?= =?UTF-8?q?=E5=92=8C=E6=98=B5=E7=A7=B0=E4=BF=AE=E6=94=B9=E5=90=8E=E6=98=BE?= =?UTF-8?q?=E7=A4=BA=E5=BA=95=E9=83=A8=E5=AF=BC=E8=88=AA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- project.config.json | 2 +- src/components/UserInfo/index.tsx | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/project.config.json b/project.config.json index 145631b..15d90c1 100644 --- a/project.config.json +++ b/project.config.json @@ -46,4 +46,4 @@ "simulatorType": "wechat", "simulatorPluginLibVersion": {}, "condition": {} -} \ No newline at end of file +} diff --git a/src/components/UserInfo/index.tsx b/src/components/UserInfo/index.tsx index 3fb9ede..788b945 100644 --- a/src/components/UserInfo/index.tsx +++ b/src/components/UserInfo/index.tsx @@ -134,6 +134,7 @@ const UserInfoCardComponent: React.FC = ({ location_picker_visible, ntrp_picker_visible, occupation_picker_visible, + edit_modal_visible, ]; const allPickersClosed = visibles.every((item) => !item); // 所有选择器都关闭时,显示 GuideBar;否则隐藏 @@ -143,6 +144,7 @@ const UserInfoCardComponent: React.FC = ({ location_picker_visible, ntrp_picker_visible, occupation_picker_visible, + edit_modal_visible, ]); // 职业数据