+
+ {scenarios.map((scenario) => (
+
router.push(scenario.path)}
+ >
+
+ {scenario.icon}
+ {scenario.name}
+
+ 今日:
+ {scenario.count}
+
+
+
+ {scenario.growth}
+
+
+
+ ))}
+
+
+
+
+
AI智能获客
+
+ Beta
+
-
-
- {/* 错误提示 */}
- {error && (
-
-
{error}
-
)
}
-
diff --git a/Cunkebao/app/scenarios/payment/[id]/page.tsx b/Cunkebao/app/scenarios/payment/[id]/page.tsx
new file mode 100644
index 00000000..7f5f4545
--- /dev/null
+++ b/Cunkebao/app/scenarios/payment/[id]/page.tsx
@@ -0,0 +1,377 @@
+"use client"
+
+import { useState } from "react"
+import { useRouter } from "next/navigation"
+import Image from "next/image"
+import { ChevronLeft, Download, Share2, QrCode, Copy, BarChart4, Users } from "lucide-react"
+import { Button } from "@/components/ui/button"
+import { Card, CardContent } from "@/components/ui/card"
+import { Tabs, TabsList, TabsTrigger, TabsContent } from "@/components/ui/tabs"
+import { Badge } from "@/components/ui/badge"
+import { Switch } from "@/components/ui/switch"
+import { toast } from "@/components/ui/use-toast"
+
+export default function PaymentCodeDetailPage({ params }: { params: { id: string } }) {
+ const router = useRouter()
+ const [activeTab, setActiveTab] = useState("detail")
+
+ // 模拟数据
+ const paymentCode = {
+ id: params.id,
+ name: "社群会员付款码",
+ amount: "19.9",
+ description: "加入VIP社群会员",
+ status: "active",
+ qrCodeUrl: "/placeholder.svg?height=300&width=300&query=QR%20Code",
+ paymentMethod: "wechat",
+ createTime: "2023-10-26 11:00:00",
+ totalPayments: 156,
+ totalAmount: 3104.4,
+ distribution: {
+ enabled: true,
+ type: "percentage",
+ value: "10%",
+ totalDistributed: 310.44,
+ },
+ redPacket: {
+ enabled: true,
+ amount: "5",
+ totalSent: 156,
+ totalAmount: 780,
+ },
+ autoWelcome: {
+ enabled: true,
+ message: "感谢您的支付,欢迎加入我们的VIP社群!",
+ },
+ tags: ["付款客户", "社群会员", "已成交"],
+ }
+
+ const recentPayments = [
+ { id: 1, user: "用户1", amount: "19.9", time: "2023-10-26 15:30:00", status: "success" },
+ { id: 2, user: "用户2", amount: "19.9", time: "2023-10-26 14:45:00", status: "success" },
+ { id: 3, user: "用户3", amount: "19.9", time: "2023-10-26 13:20:00", status: "success" },
+ { id: 4, user: "用户4", amount: "19.9", time: "2023-10-26 12:10:00", status: "success" },
+ { id: 5, user: "用户5", amount: "19.9", time: "2023-10-26 11:05:00", status: "success" },
+ ]
+
+ const handleStatusChange = (checked: boolean) => {
+ toast({
+ title: checked ? "付款码已启用" : "付款码已停用",
+ description: checked ? "客户现在可以通过此付款码支付" : "客户将无法通过此付款码支付",
+ })
+ }
+
+ const handleCopy = (text: string) => {
+ navigator.clipboard.writeText(text)
+ toast({
+ title: "复制成功",
+ description: "内容已复制到剪贴板",
+ })
+ }
+
+ const handleDownload = () => {
+ toast({
+ title: "下载成功",
+ description: "付款码已保存到相册",
+ })
+ }
+
+ const handleShare = () => {
+ toast({
+ title: "分享成功",
+ description: "付款码已分享",
+ })
+ }
+
+ return (
+
+ {/* 头部 */}
+
+
+ {/* 标签页 */}
+
+
+
+
+
+ 付款码
+
+
+
+ 支付记录
+
+
+
+ 高级设置
+
+
+
+ {/* 付款码详情 */}
+
+
+
+ {paymentCode.name}
+ {paymentCode.description}
+
+
+
+
+
+
+
+ ¥{paymentCode.amount}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 付款码信息
+
+
+ 付款码ID
+ {paymentCode.id}
+
+
+ 支付方式
+
+ {paymentCode.paymentMethod === "wechat"
+ ? "微信支付"
+ : paymentCode.paymentMethod === "alipay"
+ ? "支付宝"
+ : "微信和支付宝"}
+
+
+
+ 创建时间
+ {paymentCode.createTime}
+
+
+ 支付笔数
+ {paymentCode.totalPayments}
+
+
+ 支付金额
+ ¥{paymentCode.totalAmount}
+
+
+
+
+
+
+ {/* 支付记录 */}
+
+
+
+
+
最近支付记录
+
+
+
+
+ {recentPayments.map((payment) => (
+
+
+
{payment.user}
+
{payment.time}
+
+
+
¥{payment.amount}
+
+ 支付成功
+
+
+
+ ))}
+
+
+
+
+
+
+ 支付统计
+
+
+ 总支付笔数
+ {paymentCode.totalPayments}
+
+
+ 总支付金额
+ ¥{paymentCode.totalAmount}
+
+
+ 平均客单价
+
+ ¥{(paymentCode.totalAmount / paymentCode.totalPayments).toFixed(2)}
+
+
+
+ 新增客户数
+ {Math.floor(paymentCode.totalPayments * 0.9)}
+
+
+
+
+
+
+ {/* 高级设置 */}
+
+
+
+ 分销返利设置
+
+ 启用分销返利
+
+
+
+ {paymentCode.distribution.enabled && (
+
+
+ 返利类型
+
+ {paymentCode.distribution.type === "percentage" ? "比例返利" : "固定金额"}
+
+
+
+ 返利值
+ {paymentCode.distribution.value}
+
+
+ 已发放金额
+ ¥{paymentCode.distribution.totalDistributed}
+
+
+ )}
+
+
+
+
+
+ 红包奖励设置
+
+ 启用红包奖励
+
+
+
+ {paymentCode.redPacket.enabled && (
+
+
+ 红包金额
+ ¥{paymentCode.redPacket.amount}
+
+
+ 已发放数量
+ {paymentCode.redPacket.totalSent}
+
+
+ 已发放金额
+ ¥{paymentCode.redPacket.totalAmount}
+
+
+ )}
+
+
+
+
+
+ 自动欢迎语设置
+
+ 启用自动欢迎语
+
+
+
+ {paymentCode.autoWelcome.enabled && (
+
+
+
欢迎语内容
+
{paymentCode.autoWelcome.message}
+
+
+ )}
+
+
+
+
+
+ 客户标签设置
+
+ {paymentCode.tags.map((tag, index) => (
+
+ {tag}
+
+ ))}
+
+
+
+
+
+
+
+
+
+
+
+
+ )
+}
diff --git a/Cunkebao/app/scenarios/payment/[id]/payments/loading.tsx b/Cunkebao/app/scenarios/payment/[id]/payments/loading.tsx
new file mode 100644
index 00000000..f15322a8
--- /dev/null
+++ b/Cunkebao/app/scenarios/payment/[id]/payments/loading.tsx
@@ -0,0 +1,3 @@
+export default function Loading() {
+ return null
+}
diff --git a/Cunkebao/app/scenarios/payment/[id]/payments/page.tsx b/Cunkebao/app/scenarios/payment/[id]/payments/page.tsx
new file mode 100644
index 00000000..dc7c5748
--- /dev/null
+++ b/Cunkebao/app/scenarios/payment/[id]/payments/page.tsx
@@ -0,0 +1,263 @@
+"use client"
+
+import { useState } from "react"
+import { useRouter } from "next/navigation"
+import { ChevronLeft, Download, Filter, Search } from "lucide-react"
+import { Button } from "@/components/ui/button"
+import { Card, CardContent } from "@/components/ui/card"
+import { Input } from "@/components/ui/input"
+import { Badge } from "@/components/ui/badge"
+import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"
+import { DatePickerWithRange } from "@/components/ui/date-picker"
+import {
+ Pagination,
+ PaginationContent,
+ PaginationItem,
+ PaginationLink,
+ PaginationNext,
+ PaginationPrevious,
+} from "@/components/ui/pagination"
+import { toast } from "@/components/ui/use-toast"
+
+export default function PaymentRecordsPage({ params }: { params: { id: string } }) {
+ const router = useRouter()
+ const [searchTerm, setSearchTerm] = useState("")
+ const [statusFilter, setStatusFilter] = useState("all")
+ const [currentPage, setCurrentPage] = useState(1)
+ const [showFilters, setShowFilters] = useState(false)
+
+ // 模拟数据
+ const paymentRecords = Array.from({ length: 50 }, (_, i) => ({
+ id: i + 1,
+ transactionId: `WX${Date.now()}${i}`,
+ user: `用户${i + 1}`,
+ platformUserId: `oq_${Math.random().toString(36).substr(2, 9)}`,
+ amount: "19.9",
+ paymentTime: new Date(Date.now() - i * 3600000).toLocaleString(),
+ status: i % 10 === 0 ? "refunded" : "success",
+ paymentMethod: "wechat",
+ customerTags: ["付款客户", "社群会员"],
+ }))
+
+ const itemsPerPage = 10
+ const totalPages = Math.ceil(paymentRecords.length / itemsPerPage)
+ const startIndex = (currentPage - 1) * itemsPerPage
+ const endIndex = startIndex + itemsPerPage
+ const currentRecords = paymentRecords.slice(startIndex, endIndex)
+
+ const handleExport = () => {
+ toast({
+ title: "导出成功",
+ description: "支付记录已导出为Excel文件",
+ })
+ }
+
+ const getStatusBadge = (status: string) => {
+ switch (status) {
+ case "success":
+ return (
+
+ 支付成功
+
+ )
+ case "refunded":
+ return (
+
+ 已退款
+
+ )
+ case "failed":
+ return (
+
+ 支付失败
+
+ )
+ default:
+ return
{status}
+ }
+ }
+
+ return (
+
+ {/* 头部 */}
+
+
+ {/* 搜索和筛选 */}
+
+
+
+ setSearchTerm(e.target.value)}
+ className="pl-10"
+ />
+
+
+ {showFilters && (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ )}
+
+
+ {/* 统计信息 */}
+
+
+
+
+
+
总支付笔数
+
{paymentRecords.length}
+
+
+
总支付金额
+
¥{(paymentRecords.length * 19.9).toFixed(2)}
+
+
+
+
+
+
+
+ {/* 记录列表 - 移动端优化 */}
+
+
+ {currentRecords.map((record) => (
+
+
+
+
+
{record.user}
+
交易ID: {record.transactionId}
+
+ {getStatusBadge(record.status)}
+
+
+
+
+ 支付金额
+ ¥{record.amount}
+
+
+ 支付时间
+ {record.paymentTime}
+
+
+ 支付方式
+ {record.paymentMethod === "wechat" ? "微信支付" : "支付宝"}
+
+
+
+
+ {record.customerTags.map((tag, index) => (
+
+ {tag}
+
+ ))}
+
+
+
+
+
+
+
+ ))}
+
+
+ {/* 分页 */}
+
+
+
+
+ setCurrentPage(Math.max(1, currentPage - 1))}
+ className={currentPage === 1 ? "pointer-events-none opacity-50" : ""}
+ />
+
+
+ {[...Array(Math.min(5, totalPages))].map((_, i) => {
+ const pageNumber = i + 1
+ return (
+
+ setCurrentPage(pageNumber)} isActive={currentPage === pageNumber}>
+ {pageNumber}
+
+
+ )
+ })}
+
+
+ setCurrentPage(Math.min(totalPages, currentPage + 1))}
+ className={currentPage === totalPages ? "pointer-events-none opacity-50" : ""}
+ />
+
+
+
+
+
+
+ )
+}
diff --git a/Cunkebao/app/scenarios/payment/new/page.tsx b/Cunkebao/app/scenarios/payment/new/page.tsx
new file mode 100644
index 00000000..d87bbd25
--- /dev/null
+++ b/Cunkebao/app/scenarios/payment/new/page.tsx
@@ -0,0 +1,307 @@
+"use client"
+
+import { useState } from "react"
+import { useRouter } from "next/navigation"
+import { ChevronLeft, Info } from "lucide-react"
+import { Button } from "@/components/ui/button"
+import { Card, CardContent } from "@/components/ui/card"
+import { Input } from "@/components/ui/input"
+import { Label } from "@/components/ui/label"
+import { Textarea } from "@/components/ui/textarea"
+import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"
+import { Switch } from "@/components/ui/switch"
+import { RadioGroup, RadioGroupItem } from "@/components/ui/radio-group"
+import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@/components/ui/tooltip"
+import { toast } from "@/components/ui/use-toast"
+
+export default function NewPaymentCodePage() {
+ const router = useRouter()
+ const [formData, setFormData] = useState({
+ name: "",
+ amount: "",
+ description: "",
+ paymentMethod: "wechat",
+ amountType: "fixed",
+ enableDistribution: false,
+ distributionType: "percentage",
+ distributionValue: "",
+ enableRedPacket: false,
+ redPacketAmount: "",
+ enableAutoWelcome: false,
+ welcomeMessage: "",
+ tags: [],
+ })
+
+ const handleChange = (field: string, value: any) => {
+ setFormData((prev) => ({ ...prev, [field]: value }))
+ }
+
+ const handleSubmit = () => {
+ // 表单验证
+ if (!formData.name) {
+ toast({
+ title: "请输入付款码名称",
+ variant: "destructive",
+ })
+ return
+ }
+
+ if (formData.amountType === "fixed" && !formData.amount) {
+ toast({
+ title: "请输入付款金额",
+ variant: "destructive",
+ })
+ return
+ }
+
+ // 模拟API调用
+ setTimeout(() => {
+ toast({
+ title: "付款码创建成功",
+ description: "您可以在付款码列表中查看和管理",
+ })
+ router.push("/scenarios/payment")
+ }, 1000)
+ }
+
+ return (
+
+ {/* 头部 */}
+
+
+ {/* 表单内容 */}
+
+
+
+ 基本信息
+
+
+
+ handleChange("name", e.target.value)}
+ />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 固定金额:生成固定金额的付款码
+
+ 自由金额:用户可自行输入支付金额
+
+
+
+
+
+
handleChange("amountType", value)}
+ className="flex flex-col space-y-1"
+ >
+
+
+
+
+
+
+
+
+
+
+
+ {formData.amountType === "fixed" && (
+
+
+ handleChange("amount", e.target.value)}
+ />
+
+ )}
+
+
+
+
+
+
+
+
+
+ 高级设置
+
+
+
+
+
开启后,用户付款可触发分销返利
+
+
handleChange("enableDistribution", checked)}
+ />
+
+
+ {formData.enableDistribution && (
+
+
+
+
+
+
+
+
+ handleChange("distributionValue", e.target.value)}
+ />
+
+
+ )}
+
+
+
+
+
开启后,用户付款可获得红包奖励
+
+
handleChange("enableRedPacket", checked)}
+ />
+
+
+ {formData.enableRedPacket && (
+
+
+ handleChange("redPacketAmount", e.target.value)}
+ />
+
+ )}
+
+
+
+
+
开启后,用户付款成功后自动发送欢迎语
+
+
handleChange("enableAutoWelcome", checked)}
+ />
+
+
+ {formData.enableAutoWelcome && (
+
+
+
+ )}
+
+
+
+
+
+ 客户标签设置
+ 设置通过此付款码添加的客户自动打上的标签
+
+
+
+
+
+
+
+
+
+
+
+ {/* 底部操作栏 */}
+
+
+
+
+
+ )
+}
diff --git a/Cunkebao/app/scenarios/payment/page.tsx b/Cunkebao/app/scenarios/payment/page.tsx
new file mode 100644
index 00000000..2470190d
--- /dev/null
+++ b/Cunkebao/app/scenarios/payment/page.tsx
@@ -0,0 +1,278 @@
+"use client"
+
+import { useState } from "react"
+import { useRouter } from "next/navigation"
+import { ChevronLeft, Plus, Settings, QrCode, BarChart4, CreditCard, Users, Gift } from "lucide-react"
+import { Button } from "@/components/ui/button"
+import { Card, CardContent } from "@/components/ui/card"
+import { Tabs, TabsList, TabsTrigger, TabsContent } from "@/components/ui/tabs"
+import { Badge } from "@/components/ui/badge"
+
+export default function PaymentCodePage() {
+ const router = useRouter()
+ const [activeTab, setActiveTab] = useState("codes")
+
+ // 模拟数据
+ const paymentCodes = [
+ { id: 1, name: "社群会员付款码", amount: "19.9", status: "active", totalPayments: 156, totalAmount: 3104.4 },
+ { id: 2, name: "课程付款码", amount: "99", status: "active", totalPayments: 78, totalAmount: 7722 },
+ { id: 3, name: "咨询服务付款码", amount: "199", status: "active", totalPayments: 45, totalAmount: 8955 },
+ { id: 4, name: "产品购买付款码", amount: "299", status: "active", totalPayments: 32, totalAmount: 9568 },
+ ]
+
+ const statistics = {
+ today: { payments: 24, amount: 2568, customers: 22 },
+ week: { payments: 156, amount: 15420, customers: 142 },
+ month: { payments: 311, amount: 29845, customers: 289 },
+ }
+
+ const distributions = [
+ { id: 1, name: "分销返利规则1", type: "percentage", value: "10%", totalDistributed: 1245.6 },
+ { id: 2, name: "分销返利规则2", type: "fixed", value: "5元", totalDistributed: 890 },
+ ]
+
+ const redPackets = [
+ { id: 1, name: "新客红包", amount: "5", totalSent: 156, totalAmount: 780 },
+ { id: 2, name: "推广红包", amount: "10", totalSent: 89, totalAmount: 890 },
+ ]
+
+ return (
+
+ {/* 头部 */}
+
+
+ {/* 统计卡片 */}
+
+
+
+
+
数据概览
+
+ 今日
+
+
+
+
+
支付笔数
+
{statistics.today.payments}
+
+
+
支付金额
+
¥{statistics.today.amount}
+
+
+
新增客户
+
{statistics.today.customers}
+
+
+
+
+
+
+ {/* 标签页 */}
+
+
+
+
+
+ 付款码
+
+
+
+ 数据统计
+
+
+
+ 分销返利
+
+
+
+ 红包池
+
+
+
+ {/* 付款码列表 */}
+
+
+
+
+
+ {paymentCodes.map((code) => (
+
+
+
+
+
+
+
+
{code.name}
+
金额: ¥{code.amount}
+
+
+ {code.status === "active" ? "启用中" : "已停用"}
+
+
+
+
+
支付笔数
+
{code.totalPayments}
+
+
+
支付金额
+
¥{code.totalAmount}
+
+
+
+
+
+
+
+ ))}
+
+
+ {/* 数据统计 */}
+
+
+
+ 支付数据统计
+
+
+ 今日支付笔数
+ {statistics.today.payments}
+
+
+ 今日支付金额
+ ¥{statistics.today.amount}
+
+
+ 今日新增客户
+ {statistics.today.customers}
+
+
+ 本周支付笔数
+ {statistics.week.payments}
+
+
+ 本周支付金额
+ ¥{statistics.week.amount}
+
+
+ 本月支付金额
+ ¥{statistics.month.amount}
+
+
+
+
+
+
+
+
+
+
+ {/* 分销返利 */}
+
+
+
+
+
+ {distributions.map((rule) => (
+
+
+
+
{rule.name}
+ {rule.type === "percentage" ? "比例" : "固定金额"}
+
+
+ 返利值
+ {rule.value}
+
+
+ 已发放金额
+ ¥{rule.totalDistributed}
+
+
+
+
+
+
+ ))}
+
+
+ {/* 红包池 */}
+
+
+
+
+
+ {redPackets.map((packet) => (
+
+
+
+
{packet.name}
+
+ ¥{packet.amount}
+
+
+
+ 已发放数量
+ {packet.totalSent}
+
+
+ 已发放金额
+ ¥{packet.totalAmount}
+
+
+
+
+
+
+ ))}
+
+
+
+
+ )
+}
diff --git a/Cunkebao/app/scenarios/payment/stats/page.tsx b/Cunkebao/app/scenarios/payment/stats/page.tsx
new file mode 100644
index 00000000..23763d5d
--- /dev/null
+++ b/Cunkebao/app/scenarios/payment/stats/page.tsx
@@ -0,0 +1,260 @@
+"use client"
+
+import { useState } from "react"
+import { useRouter } from "next/navigation"
+import { ChevronLeft, Download, Calendar, TrendingUp, TrendingDown } from "lucide-react"
+import { Button } from "@/components/ui/button"
+import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"
+import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"
+import { Tabs, TabsList, TabsTrigger, TabsContent } from "@/components/ui/tabs"
+import { LineChartComponent, BarChartComponent, PieChartComponent } from "@/app/components/common/Charts"
+import { toast } from "@/components/ui/use-toast"
+
+export default function PaymentStatsPage() {
+ const router = useRouter()
+ const [dateRange, setDateRange] = useState("week")
+ const [activeTab, setActiveTab] = useState("overview")
+
+ // 模拟图表数据
+ const lineChartData = [
+ { name: "周一", 支付笔数: 24, 支付金额: 478.8 },
+ { name: "周二", 支付笔数: 32, 支付金额: 636.8 },
+ { name: "周三", 支付笔数: 28, 支付金额: 557.2 },
+ { name: "周四", 支付笔数: 36, 支付金额: 716.4 },
+ { name: "周五", 支付笔数: 42, 支付金额: 835.8 },
+ { name: "周六", 支付笔数: 38, 支付金额: 756.2 },
+ { name: "周日", 支付笔数: 35, 支付金额: 696.5 },
+ ]
+
+ const barChartData = [
+ { name: "社群会员付款码", 支付笔数: 156, 支付金额: 3104.4 },
+ { name: "课程付款码", 支付笔数: 78, 支付金额: 7722 },
+ { name: "咨询服务付款码", 支付笔数: 45, 支付金额: 8955 },
+ { name: "产品购买付款码", 支付笔数: 32, 支付金额: 9568 },
+ ]
+
+ const pieChartData = [
+ { name: "微信支付", value: 75 },
+ { name: "支付宝", value: 25 },
+ ]
+
+ const lineChartConfig = {
+ 支付笔数: { label: "支付笔数", color: "#3b82f6" },
+ 支付金额: { label: "支付金额", color: "#10b981" },
+ }
+
+ const barChartConfig = {
+ 支付笔数: { label: "支付笔数", color: "#3b82f6" },
+ 支付金额: { label: "支付金额", color: "#10b981" },
+ }
+
+ const pieChartConfig = {
+ 微信支付: { label: "微信支付", color: "#10b981" },
+ 支付宝: { label: "支付宝", color: "#3b82f6" },
+ }
+
+ const handleExport = () => {
+ toast({
+ title: "导出成功",
+ description: "数据统计报表已导出为Excel文件",
+ })
+ }
+
+ return (
+
+ {/* 头部 */}
+
+
+ {/* 日期范围选择 */}
+
+
+
+
+ {/* 统计卡片 */}
+
+
+
+
+
+ 311
+ +12.5% 较上期
+
+
+
+
+
+
+ ¥29,845
+ +8.3% 较上期
+
+
+
+
+
+
+ 289
+ -3.2% 较上期
+
+
+
+
+
+
+ ¥95.98
+ +5.6% 较上期
+
+
+
+
+
+ {/* 图表标签页 */}
+
+
+
+ 概览
+ 趋势
+ 分布
+
+
+
+
+
+
+
+
+
+
+
+ 支付趋势分析
+
+
+
+
+
+
+
+
+ 趋势说明
+
+
• 本周支付笔数较上周增长 12.5%
+
• 周五为支付高峰期,建议加强营销推广
+
• 周末支付量保持稳定,用户活跃度良好
+
• 平均每日支付笔数为 33.6 笔
+
+
+
+
+
+
+
+
+
+
+ 客户分布
+
+
+
新客户
+
+ 289
+ (92.9%)
+
+
+
+
老客户
+
+ 22
+ (7.1%)
+
+
+
+ 复购率
+ 7.1%
+
+
+
+
+
+
+
+ 地域分布 TOP5
+
+ {[
+ { city: "广州", count: 89, percent: 28.6 },
+ { city: "深圳", count: 67, percent: 21.5 },
+ { city: "上海", count: 45, percent: 14.5 },
+ { city: "北京", count: 38, percent: 12.2 },
+ { city: "杭州", count: 32, percent: 10.3 },
+ ].map((item, index) => (
+
+ ))}
+
+
+
+
+
+
+
+ )
+}
diff --git a/Cunkebao/app/scenarios/phone/acquired/loading.tsx b/Cunkebao/app/scenarios/phone/acquired/loading.tsx
index cec067bd..f15322a8 100644
--- a/Cunkebao/app/scenarios/phone/acquired/loading.tsx
+++ b/Cunkebao/app/scenarios/phone/acquired/loading.tsx
@@ -1,4 +1,3 @@
export default function Loading() {
return null
}
-
diff --git a/Cunkebao/app/scenarios/phone/acquired/page.tsx b/Cunkebao/app/scenarios/phone/acquired/page.tsx
index eec32fc0..0ff0759e 100644
--- a/Cunkebao/app/scenarios/phone/acquired/page.tsx
+++ b/Cunkebao/app/scenarios/phone/acquired/page.tsx
@@ -176,4 +176,3 @@ export default function PhoneAcquiredPage() {
)
}
-
diff --git a/Cunkebao/app/scenarios/phone/added/loading.tsx b/Cunkebao/app/scenarios/phone/added/loading.tsx
index cec067bd..f15322a8 100644
--- a/Cunkebao/app/scenarios/phone/added/loading.tsx
+++ b/Cunkebao/app/scenarios/phone/added/loading.tsx
@@ -1,4 +1,3 @@
export default function Loading() {
return null
}
-
diff --git a/Cunkebao/app/scenarios/phone/added/page.tsx b/Cunkebao/app/scenarios/phone/added/page.tsx
index 47bbb34d..a6523b80 100644
--- a/Cunkebao/app/scenarios/phone/added/page.tsx
+++ b/Cunkebao/app/scenarios/phone/added/page.tsx
@@ -130,4 +130,3 @@ export default function PhoneAddedPage() {