Browse Source

refactor(components): 优化多个组件的样式和功能

-调整 AdminPanel 组件的样式,移除 max-h-[70vh] 类
- 更新 Header组件的参数类型
- 在 QRLoginButton 组件中添加日志输出
- 重构 qr-login 页面的导航栏,目前已被注释掉
master
科技小王子 1 month ago
parent
commit
d43977f0b7
  1. 89
      src/components/AdminPanel.scss
  2. 3
      src/components/AdminPanel.tsx
  3. 10
      src/components/CouponCard.scss
  4. 2
      src/components/Header.tsx
  5. 2
      src/components/QRLoginButton.tsx
  6. 39
      src/pages/index/index.tsx
  7. 30
      src/pages/qr-login/index.tsx
  8. 4
      src/pages/user/components/UserCard.tsx

89
src/components/AdminPanel.scss

@ -1,89 +0,0 @@
.admin-panel {
/* 面板动画 */
.admin-panel-content {
animation: slideUp 0.3s ease-out;
}
/* 网格布局优化 */
.admin-feature-grid {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 12px;
@media (max-width: 375px) {
grid-template-columns: 1fr;
}
}
/* 功能卡片样式 */
.admin-feature-card {
transition: all 0.2s ease;
cursor: pointer;
&:active {
transform: scale(0.95);
}
&:hover {
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
}
}
/* 图标容器 */
.admin-feature-icon {
width: 32px;
height: 32px;
display: flex;
align-items: center;
justify-content: center;
border-radius: 8px;
margin-right: 8px;
}
/* 模式切换按钮动画 */
.mode-toggle-btn {
transition: all 0.3s ease;
cursor: pointer;
&:active {
transform: scale(0.95);
}
}
/* 管理面板按钮 */
.admin-panel-btn {
transition: all 0.2s ease;
cursor: pointer;
&:active {
transform: scale(0.95);
background-color: rgba(59, 130, 246, 0.1);
}
}
}
/* 滑入动画 */
@keyframes slideUp {
from {
transform: translateY(100%);
opacity: 0;
}
to {
transform: translateY(0);
opacity: 1;
}
}
/* 遮罩层动画 */
@keyframes fadeIn {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
.admin-panel-overlay {
animation: fadeIn 0.3s ease-out;
}

3
src/components/AdminPanel.tsx

@ -3,7 +3,6 @@ import { View, Text } from '@tarojs/components';
import { Button } from '@nutui/nutui-react-taro';
import { Scan, Setting, User, Shop } from '@nutui/icons-react-taro';
import navTo from '@/utils/common';
import './AdminPanel.scss';
export interface AdminPanelProps {
/** 是否显示面板 */
@ -95,7 +94,7 @@ const AdminPanel: React.FC<AdminPanelProps> = ({
/>
{/* 面板内容 */}
<View className="fixed bottom-0 left-0 right-0 bg-white rounded-t-3xl z-50 max-h-[70vh] overflow-hidden">
<View className="fixed bottom-0 left-0 right-0 bg-white rounded-t-3xl z-50 overflow-hidden">
{/* 面板头部 */}
<View className="flex items-center justify-between p-4 border-b border-gray-100">
<View className="flex items-center">

10
src/components/CouponCard.scss

@ -38,7 +38,7 @@
&.disabled {
opacity: 0.6;
filter: grayscale(0.3);
/* filter: grayscale(0.3); 小程序不支持filter属性 */
}
.coupon-left {
@ -199,11 +199,7 @@
line-height: 1.3;
letter-spacing: -0.5px;
/* 添加文字渐变效果 */
background: linear-gradient(135deg, #1a202c 0%, #2d3748 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
/* 文字渐变效果在小程序中不支持,使用纯色替代 */
}
.coupon-validity {
@ -309,7 +305,7 @@
align-items: center;
justify-content: center;
z-index: 10;
backdrop-filter: blur(2px);
/* backdrop-filter: blur(2px); 小程序不支持backdrop-filter属性 */
.status-badge {
background: rgba(0, 0, 0, 0.7);

2
src/components/Header.tsx

@ -2,7 +2,7 @@ import {NavBar} from '@nutui/nutui-react-taro'
import {ArrowLeft} from '@nutui/icons-react-taro'
import Taro from '@tarojs/taro'
function Header(props) {
function Header(props: any) {
return (
<>
<NavBar

2
src/components/QRLoginButton.tsx

@ -1,5 +1,4 @@
import React from 'react';
import { View, Text } from '@tarojs/components';
import { Button } from '@nutui/nutui-react-taro';
import { Scan } from '@nutui/icons-react-taro';
import Taro from '@tarojs/taro';
@ -65,6 +64,7 @@ const QRLoginButton: React.FC<QRLoginButtonProps> = ({
}
};
console.log(onSuccess,'onSuccess')
const disabled = !canScan() || isLoading;
return (

39
src/pages/index/index.tsx

@ -1,6 +1,7 @@
import Header from './Header';
import BestSellers from './BestSellers';
import Taro from '@tarojs/taro';
import { View, Text } from '@tarojs/components';
import {useShareAppMessage} from "@tarojs/taro"
import {useEffect, useState} from "react";
import {getShopInfo, loginByOpenId} from "@/api/layout";
@ -242,32 +243,32 @@ function Home() {
// 如果还在加载中,显示加载页面
if (pageLoading) {
return (
<div className="flex flex-col items-center justify-center min-h-screen bg-gray-50 p-4">
<div className="text-center">
<div className="mb-6">
<div className="animate-spin rounded-full h-16 w-16 border-b-2 border-blue-500 mx-auto"></div>
</div>
<div className="text-lg text-gray-700 mb-4">...</div>
<div className="text-sm text-gray-500 mb-6 space-y-1">
<div>: {initStatus.shopInfo ? '✅ 完成' : '⏳ 加载中'}</div>
<div>: {initStatus.userAuth ? '✅ 完成' : '⏳ 检查中'}</div>
<div>: {initStatus.userLogin ? '✅ 完成' : '⏳ 登录中'}</div>
</div>
<View className="flex flex-col items-center justify-center min-h-screen bg-gray-50 p-4">
<View className="text-center">
<View className="mb-6">
<View className="animate-spin rounded-full h-16 w-16 border-b-2 border-blue-500 mx-auto"></View>
</View>
<View className="text-lg text-gray-700 mb-4">...</View>
<View className="text-sm text-gray-500 mb-6 space-y-1">
<Text>: {initStatus.shopInfo ? '✅ 完成' : '⏳ 加载中'}</Text>
<Text>: {initStatus.userAuth ? '✅ 完成' : '⏳ 检查中'}</Text>
<Text>: {initStatus.userLogin ? '✅ 完成' : '⏳ 登录中'}</Text>
</View>
{/* 如果加载时间过长,显示帮助按钮 */}
<div className="space-y-3">
<button
<View className="space-y-3">
<View
className="px-4 py-2 bg-blue-500 text-white rounded-lg text-sm"
onClick={() => showNetworkDiagnosis(BaseUrl)}
>
</button>
<div className="text-xs text-gray-400">
</View>
<View className="text-xs text-gray-400">
</div>
</div>
</div>
</div>
</View>
</View>
</View>
</View>
);
}

30
src/pages/qr-login/index.tsx

@ -1,7 +1,7 @@
import React, { useState } from 'react';
import { View, Text } from '@tarojs/components';
import { NavBar, Card, Divider, Button } from '@nutui/nutui-react-taro';
import { ArrowLeft, Scan, Success, Failure, Tips } from '@nutui/icons-react-taro';
import { Card, Divider, Button } from '@nutui/nutui-react-taro';
import { Scan, Success, Failure, Tips } from '@nutui/icons-react-taro';
import Taro from '@tarojs/taro';
import QRLoginScanner from '@/components/QRLoginScanner';
import { useUser } from '@/hooks/useUser';
@ -49,9 +49,9 @@ const QRLoginPage: React.FC = () => {
};
// 返回上一页
const handleBack = () => {
Taro.navigateBack();
};
// const handleBack = () => {
// Taro.navigateBack();
// };
// 清除历史记录
const clearHistory = () => {
@ -65,16 +65,16 @@ const QRLoginPage: React.FC = () => {
return (
<View className="qr-login-page min-h-screen bg-gray-50">
{/* 导航栏 */}
<NavBar
title="扫码登录"
leftShow
onBackClick={handleBack}
leftText={<ArrowLeft />}
className="bg-white"
/>
{/*<NavBar*/}
{/* title="扫码登录"*/}
{/* leftShow*/}
{/* onBackClick={handleBack}*/}
{/* leftText={<ArrowLeft />}*/}
{/* className="bg-white"*/}
{/*/>*/}
{/* 主要内容 */}
<View className="p-4 space-y-4">
<View className="p-4">
{/* 用户信息卡片 */}
<Card className="bg-white rounded-lg shadow-sm">
<View className="p-4">
@ -109,7 +109,7 @@ const QRLoginPage: React.FC = () => {
<Tips className="text-orange-500 mr-2" />
<Text className="font-medium text-gray-800">使</Text>
</View>
<View className="space-y-2 text-sm text-gray-600">
<View className="text-sm text-gray-600">
<Text className="block">1. </Text>
<Text className="block">2. "扫码登录"</Text>
<Text className="block">3. 使</Text>
@ -134,7 +134,7 @@ const QRLoginPage: React.FC = () => {
</Button>
</View>
<View className="space-y-3">
<View>
{loginHistory.map((record, index) => (
<View key={record.id}>
<View className="flex items-center justify-between">

4
src/pages/user/components/UserCard.tsx

@ -1,7 +1,6 @@
import {Button} from '@nutui/nutui-react-taro'
import {Avatar, Tag} from '@nutui/nutui-react-taro'
import {View, Text} from '@tarojs/components'
import {Scan} from '@nutui/icons-react-taro';
import {getUserInfo, getWxOpenId} from '@/api/layout';
import Taro from '@tarojs/taro';
import {useEffect, useState, forwardRef, useImperativeHandle} from "react";
@ -26,6 +25,7 @@ const UserCard = forwardRef<any, any>((_, ref) => {
// 扫码登录Hook
const { startScan, isLoading: isScanLoading } = useQRLogin();
console.log(isScanLoading,'>isScanLoading>>>>')
// 管理员模式Hook
const { isAdminMode, toggleAdminMode } = useAdminMode();
@ -189,6 +189,8 @@ const UserCard = forwardRef<any, any>((_, ref) => {
}
};
console.log(handleQRLogin,'handleQRLogin()')
// 打开管理员面板
const handleOpenAdminPanel = () => {
setShowAdminPanel(true);

Loading…
Cancel
Save