feat(wallet): add runtime balance flow and role-gated order posting
This commit is contained in:
@@ -4,7 +4,7 @@ import { standardSchemaResolver } from "@hookform/resolvers/standard-schema"
|
||||
import { ArrowLeft, ImagePlus, X } from "lucide-react"
|
||||
import Link from "next/link"
|
||||
import { useRouter } from "next/navigation"
|
||||
import { useState } from "react"
|
||||
import { useEffect, useState } from "react"
|
||||
import { useForm } from "react-hook-form"
|
||||
import { z } from "zod"
|
||||
import { Badge } from "@/components/ui/badge"
|
||||
@@ -20,8 +20,10 @@ import {
|
||||
SelectValue,
|
||||
} from "@/components/ui/select"
|
||||
import { Textarea } from "@/components/ui/textarea"
|
||||
import { mockOrders, mockPosts } from "@/lib/mock"
|
||||
import { mockPosts } from "@/lib/mock"
|
||||
import { useRequireAuth } from "@/lib/use-require-auth"
|
||||
import { useAuthStore } from "@/store/auth"
|
||||
import { useOrderStore } from "@/store/orders"
|
||||
|
||||
const postSchema = z.object({
|
||||
title: z.string().min(2, "标题至少2个字符").max(50, "标题最多50个字符"),
|
||||
@@ -33,6 +35,9 @@ const tagOptions = ["英雄联盟", "王者荣耀", "CS2", "原神", "上分", "
|
||||
export default function NewPostPage() {
|
||||
const router = useRouter()
|
||||
const { isAuthenticated, requireAuth } = useRequireAuth()
|
||||
const currentRole = useAuthStore((state) => state.currentRole)
|
||||
const userId = useAuthStore((state) => state.user?.id)
|
||||
const orders = useOrderStore((state) => state.orders)
|
||||
const [postType, setPostType] = useState("normal")
|
||||
const [selectedTags, setSelectedTags] = useState<string[]>([])
|
||||
const [imageCount, setImageCount] = useState(0)
|
||||
@@ -53,6 +58,16 @@ export default function NewPostPage() {
|
||||
)
|
||||
}
|
||||
|
||||
useEffect(() => {
|
||||
if (currentRole !== "consumer" && postType === "show_order") {
|
||||
setPostType("normal")
|
||||
}
|
||||
}, [currentRole, postType])
|
||||
|
||||
const availableOrders = orders.filter(
|
||||
(order) => order.status === "completed" && order.consumerId === userId,
|
||||
)
|
||||
|
||||
const onSubmit = async () => {
|
||||
if (!isAuthenticated) {
|
||||
requireAuth(() => undefined)
|
||||
@@ -87,7 +102,7 @@ export default function NewPostPage() {
|
||||
</SelectTrigger>
|
||||
<SelectContent>
|
||||
<SelectItem value="normal">普通帖</SelectItem>
|
||||
<SelectItem value="show_order">秀单帖</SelectItem>
|
||||
{currentRole === "consumer" && <SelectItem value="show_order">秀单帖</SelectItem>}
|
||||
<SelectItem value="quote">引用帖</SelectItem>
|
||||
</SelectContent>
|
||||
</Select>
|
||||
@@ -101,13 +116,11 @@ export default function NewPostPage() {
|
||||
<SelectValue placeholder="选择要展示的订单" />
|
||||
</SelectTrigger>
|
||||
<SelectContent>
|
||||
{mockOrders
|
||||
.filter((order) => order.status === "completed")
|
||||
.map((order) => (
|
||||
<SelectItem key={order.id} value={order.id}>
|
||||
{order.service.title} · {order.playerName}
|
||||
</SelectItem>
|
||||
))}
|
||||
{availableOrders.map((order) => (
|
||||
<SelectItem key={order.id} value={order.id}>
|
||||
{order.service.title} · {order.playerName}
|
||||
</SelectItem>
|
||||
))}
|
||||
</SelectContent>
|
||||
</Select>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user