husenlin пре 1 месец
родитељ
комит
5381e141d0

+ 1 - 1
.env.development

@@ -1,4 +1,4 @@
 # 配置文档参考 https://taro-docs.jd.com/docs/next/env-mode-config
 # TARO_APP_ID="开发环境下的小程序 AppID"
 
-TARO_APP_API="http://localhost:8001/api/v1/payment"
+TARO_APP_API_BASE_URL="http://proxy.qcsj88888.com/api/v1"

+ 1 - 1
.env.production

@@ -1,3 +1,3 @@
 # TARO_APP_ID="生产环境下的小程序 AppID"
 
-TARO_APP_API=""
+TARO_APP_API_BASE_URL=""

+ 2 - 2
src/pages/login/index.tsx

@@ -53,8 +53,8 @@ export default function Login() {
         await useUserStore.getState().login(formData);
         Taro.showToast({ title: '登录成功', icon: 'success', duration: 2000 });
         Taro.switchTab({ url: '/pages/index/index' });
-      } catch (error) { 
-        Taro.showToast({ title: error.message, icon: 'error', duration: 2000 });
+      } catch (error: unknown) { 
+        Taro.showToast({ title: (error as Error).message || '登录失败', icon: 'error', duration: 2000 });
       } finally {
         setLoading(false);
       }

+ 14 - 1
src/pages/mine/index.tsx

@@ -5,6 +5,7 @@ import { Avatar, Cell, CellGroup, Button, Dialog } from '@nutui/nutui-react-taro
 import { ArrowRight, User } from '@nutui/icons-react-taro';
 import { useState } from 'react';
 import Taro from '@tarojs/taro';
+import { useUserStore } from '@/stores/user';
 
 interface UserInfo {
   name: string;
@@ -19,6 +20,7 @@ const userInfo: UserInfo = {
 export default function Mine() {
   const [statusBarHeight, setStatusBarHeight] = useState<number | undefined>(0);
   const [showLogoutConfirm, setShowLogoutConfirm] = useState<boolean>(false);
+  const [loading, setLoading] = useState<boolean>(false);
 
   useLoad(() => {
     const { statusBarHeight } = Taro.getSystemInfoSync();
@@ -33,6 +35,16 @@ export default function Mine() {
     setShowLogoutConfirm(true);
   };
 
+  function handleConfirmLogout() {
+    try {
+      setLoading(true);
+      setShowLogoutConfirm(false);
+      useUserStore.getState().logout();
+    } finally {
+      setLoading(false);
+    }
+  }
+
   return (
     <View className="mine">
       {/* 用户信息区域 */}
@@ -66,6 +78,7 @@ export default function Mine() {
           block
           className="logout-btn"
           onClick={handleLogout}
+          disabled={loading}
         >
           退出登录
         </Button>
@@ -77,7 +90,7 @@ export default function Mine() {
         confirmText="确认"
         cancelText="取消"
         footerDirection="vertical"
-        // onConfirm={handleConfirmTransfer}
+        onConfirm={handleConfirmLogout}
         onCancel={() => setShowLogoutConfirm(false)}
       ></Dialog>
     </View>

+ 33 - 12
src/pages/transfer/record/index.tsx

@@ -6,6 +6,7 @@ import { CSSProperties, useState } from "react";
 import './index.less';
 import { ArrowDown, Filter, ArrowTransfer } from "@nutui/icons-react-taro";
 import EmptyShow from "@/components/EmptyShow";
+import { listTransferApi } from "@/services/apis";
 
 const InfiniteUlStyle: CSSProperties = {
     height: '100%',
@@ -22,11 +23,21 @@ export default function TransferRecord() {
     const [refreshHasMore, setRefreshHasMore] = useState(true)
     const [refreshLoading, setRefreshLoading] = useState(false)
 
-    const [options] = useState([
-        { text: '全部状态', value: 0 },
-        { text: '转账成功', value: 1 },
-        { text: '转账失败', value: 2 },
+    const [searchData, setSearchData] = useState<{ status: string, orderNo: string, pageNo: number, pageSize: number }>({
+        status: '',
+        orderNo: '',
+        pageNo: 1,
+        pageSize: 10,
+    });
+
+    const [statusOptions] = useState([
+        { text: '全部状态', value: '' },
+        { text: '处理中', value: 'DEALING' },
+        { text: '成功', value: 'SUCCESS' },
+        { text: '失败', value: 'FAIL' },
+        { text: '退票', value: 'REFUND' },
     ])
+    
     const [options1] = useState([
         { text: '默认排序', value: 'a' },
         { text: '时间倒序', value: 'b' },
@@ -40,6 +51,7 @@ export default function TransferRecord() {
         init()
     });
 
+
     const isEmpty = refreshList.length === 0
 
     const showData = !refreshLoading && !isEmpty
@@ -47,10 +59,11 @@ export default function TransferRecord() {
 
 
     const init = () => {
-        for (let i = 0; i < 10; i++) {
-            refreshList.push(`${i}`)
-        }
-        setRefreshList([...refreshList])
+        // for (let i = 0; i < 10; i++) {
+        //     refreshList.push(`${i}`)
+        // }
+        // setRefreshList([...refreshList])
+        refresh()
     }
 
     const refreshLoadMore = async () => {
@@ -66,8 +79,12 @@ export default function TransferRecord() {
     }
 
     const refresh = async () => {
-        // await sleep(1000)
-        // toastShow('刷新成功')
+        await listTransferApi({
+            pageNo: searchData.pageNo,
+            pageSize: searchData.pageSize,
+            status: searchData.status,
+            orderNo: searchData.orderNo,
+        })
     }
 
     return (
@@ -76,6 +93,8 @@ export default function TransferRecord() {
             <View className="custom-nav" style={{ paddingTop: `${statusBarHeight}px` }}>
                 <View className="custom-title-bar">
                     <SearchBar
+                        value={searchData.orderNo}
+                        onChange={(v) => setSearchData({ ...searchData, orderNo: v })}
                         placeholder="搜索"
                         shape="round"
                         rightIn={
@@ -95,6 +114,7 @@ export default function TransferRecord() {
                                     shape="round"
                                     // fill="outline"
                                     icon={<ArrowTransfer color="white" />}
+                                    onClick={() => Taro.redirectTo({ url: '/pages/transfer/index' })}
                                 >
                                     转账
                                 </Button>
@@ -110,8 +130,9 @@ export default function TransferRecord() {
                         } as any}
                     >
                         <Menu.Item
-                            options={options}
-                            defaultValue={0}
+                            options={statusOptions}
+                            value={searchData.status}
+                            onChange={(v) => setSearchData({ ...searchData, status: v })}
                             // icon={<Star />}
                             titleIcon={<Filter />}
                         />

+ 16 - 3
src/services/apis.ts

@@ -1,14 +1,12 @@
 // src/services/api.ts
 import Taro from '@tarojs/taro';
-import { useUserStore } from '@/stores/user';
 import { LoginFormData } from '@/schemas/login';
 import humps from 'humps';
 import { Auth } from '@/utils/auth';
 import { AccountTransferSchema } from '@/schemas/account';
 
 
-const API_BASE_URL = 'http://proxy.qcsj88888.com/api/v1';
-
+const API_BASE_URL = process.env.TARO_APP_API_BASE_URL
 
 const handleExpiredLogin = () => {
     Auth.clearToken();
@@ -88,4 +86,19 @@ export const transferApi = async (data: AccountTransferSchema) => {
         },
         data,
     }, '转账失败');
+}
+
+
+export const listTransferApi = async (
+    data: { pageNo: number, pageSize: number, status?: string, orderNo?: string }
+) => {
+    return requestApi({
+        url: '/payment/account/transfer',
+        method: 'GET',
+        dataType: 'json',
+        header: {
+            "Content-Type": "application/json",
+        },
+        data,
+    }, '获取转账记录失败');
 }

+ 15 - 11
src/stores/user.ts

@@ -28,20 +28,24 @@ export const useUserStore = create<UserState>((set, get) => ({
     userName: '',
     avatar: '',
 
-    getUserInfo: () => {},
+    getUserInfo: () => { },
 
     setUserInfo: (userInfo) => set((state) => ({
         ...state,
         ...userInfo,
     })),
 
-    logout: () => set(() => ({
-        enterpriseId: '',
-        accountId: '',
-        userId: '',
-        userName: '',
-        avatar: '',
-    })),
+    logout: () => {
+        set(() => ({
+            enterpriseId: '',
+            accountId: '',
+            userId: '',
+            userName: '',
+            avatar: '',
+        }))
+        Auth.clearToken();
+        Auth.requireAuth();
+    },
 
     login: async (data) => {
         const response = await loginApi(data);
@@ -50,12 +54,12 @@ export const useUserStore = create<UserState>((set, get) => ({
 
     updateEnterpriseId: (enterpriseId) => set((state) => ({
         ...state,
-        enterpriseId
+        enterpriseId,
     })),
 
     updateAccountId: (accountId) => set((state) => ({
         ...state,
-        accountId
+        accountId,
     })),
 }));
 
@@ -66,7 +70,7 @@ const USER_INFO_KEY = 'userInfo';
 // 从本地存储加载用户信息
 export const loadUserFromStorage = () => {
     try {
-        const userInfo = Taro.getStorageSync(USER_INFO_KEY);   
+        const userInfo = Taro.getStorageSync(USER_INFO_KEY);
         if (userInfo) {
             const parsedUserInfo = JSON.parse(userInfo);
             useUserStore.getState().setUserInfo(parsedUserInfo);

+ 1 - 1
src/utils/auth.ts

@@ -45,7 +45,7 @@ export class Auth {
 
     static requireAuth(): boolean {
         if (!Auth.checkLogin()) {
-            Taro.redirectTo({
+            Taro.reLaunch({
                 url: '/pages/login/index',
                 success: () => {
                     Taro.showToast({