tiefen_space_app/screeens/Refund/RefundDetail/index.jsx

344 lines
12 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import {
View,
Text,
ScrollView,
KeyboardAvoidingView,
Platform,
ActivityIndicator,
} from "react-native";
import { Button, CheckBox } from "@rneui/themed";
import React, { useState, useCallback } from "react";
import { useTailwind } from "tailwind-rn";
import { useSafeAreaInsets } from "react-native-safe-area-context";
import { Divider } from "@rneui/themed";
import baseRequest from "../../../utils/baseRequest";
import Toast from "react-native-toast-message";
import { generateSignature } from "../../../utils/crypto";
import { useFocusEffect } from "@react-navigation/native";
import dayjs from "dayjs";
export default function RefundDetail({ navigation, route }) {
const tailwind = useTailwind();
const insets = useSafeAreaInsets();
const [data, setData] = useState(null);
const [isSubmitting, setIsSubmitting] = useState(false);
const [selectedIndex, setIndex] = useState(2);
const [checkAble, setCheckAble] = useState(true);
//每次focus都更新一次数据
useFocusEffect(
useCallback(() => {
const getData = async () => {
//获取环境变量
const apiUrl = process.env.EXPO_PUBLIC_API_URL;
const base = await baseRequest();
const signature = await generateSignature({
...base,
audit_id: route.params.id,
});
try {
const refundResponse = await fetch(
`${apiUrl}/api/zone/refund_info?signature=${signature}`,
{
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
...base,
audit_id: route.params.id,
}),
}
);
const refundData = await refundResponse.json();
if (refundData.ret === -1) {
Toast.show({
type: "error",
text1: refundData.msg,
topOffset: 60,
});
return;
}
setData(refundData.data);
setIndex(refundData.data.refunds_status);
setCheckAble(refundData.data.refunds_status === 1);
} catch (error) {
console.error(error);
}
};
getData();
}, [])
);
const handleSubmit = async (values) => {
setIsSubmitting(true);
//获取环境变量
const apiUrl = process.env.EXPO_PUBLIC_API_URL;
//上传表单
const base = await baseRequest();
const body = {
audit_id: route.params.id,
refunds_status: selectedIndex,
...base,
};
const signature = await generateSignature(body);
try {
const response = await fetch(
`${apiUrl}/api/zone/refund_audit?signature=${signature}`,
{
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify(body),
}
);
const responseData = await response.json();
if (responseData.ret === -1) {
Toast.show({
type: "error",
text1: responseData.msg,
topOffset: 60,
});
return;
}
setCheckAble(false);
} catch (error) {
console.error(error);
} finally {
setIsSubmitting(false);
}
};
return (
<KeyboardAvoidingView
behavior={Platform.OS == "ios" ? "padding" : "height"}
keyboardVerticalOffset={insets.bottom + 60}
style={{
paddingLeft: insets.left,
paddingRight: insets.right,
...tailwind("flex-1"),
}}
>
<ScrollView style={tailwind("px-4")}>
<View style={tailwind("my-2")}>
<View style={tailwind("bg-[#FFFFFF1A] px-4 py-2 my-2 rounded-2xl")}>
<View
style={tailwind("flex-row justify-between items-center py-2")}
>
<Text style={tailwind("text-base text-white font-medium")}>
退款价格
</Text>
<View
style={tailwind("flex-row flex-1 justify-end items-center")}
>
<Text style={tailwind("text-white")}>
¥ {data ? data?.price / 100 : "0"}
</Text>
</View>
</View>
<Divider style={tailwind("my-2")} />
<View
style={tailwind("flex-row justify-between items-center py-2")}
>
<Text style={tailwind("text-base text-white font-medium")}>
退款用户
</Text>
<View
style={tailwind("flex-row flex-1 justify-end items-center")}
>
<Text style={tailwind("text-white")}>{data?.nike_name}</Text>
</View>
</View>
<Divider style={tailwind("my-2")} />
<View
style={tailwind("flex-row justify-between items-center py-2")}
>
<Text style={tailwind("text-base text-white font-medium")}>
购买时间
</Text>
<View
style={tailwind("flex-row flex-1 justify-end items-center")}
>
<Text style={tailwind("text-white")}>
{dayjs(data?.by_time * 1000).format("YYYY-MM-DD HH:mm:ss")}
</Text>
</View>
</View>
<Divider style={tailwind("my-2")} />
<View
style={tailwind("flex-row justify-between items-center py-2")}
>
<Text style={tailwind("text-base text-white font-medium")}>
退款时间
</Text>
<View
style={tailwind("flex-row flex-1 justify-end items-center")}
>
<Text style={tailwind("text-white")}>
{dayjs(data?.refund_t * 1000).format("YYYY-MM-DD HH:mm:ss")}
</Text>
</View>
</View>
<Divider style={tailwind("my-2")} />
<View
style={tailwind("flex-row justify-between items-center py-2")}
>
<Text style={tailwind("text-base text-white font-medium")}>
退款联系人
</Text>
<View
style={tailwind("flex-row flex-1 justify-end items-center")}
>
<Text style={tailwind("text-white")}>{data?.contact_name}</Text>
</View>
</View>
<Divider style={tailwind("my-2")} />
<View
style={tailwind("flex-row justify-between items-center py-2")}
>
<Text style={tailwind("text-base text-white font-medium")}>
退款联系方式
</Text>
<View
style={tailwind("flex-row flex-1 justify-end items-center")}
>
<Text style={tailwind("text-white")}>
{data?.contact_phone}
</Text>
</View>
</View>
<Divider style={tailwind("my-2")} />
<View style={tailwind("flex-col py-2")}>
<Text style={tailwind("text-base text-white font-medium")}>
退款备注
</Text>
<View style={tailwind("p-2")}>
<Text style={tailwind("text-white")}>{data?.note}</Text>
</View>
</View>
</View>
<View style={tailwind("flex-col justify-between mt-4")}>
<Text style={tailwind("text-base text-white font-medium")}>
是否同意当前退款
</Text>
<View style={tailwind("flex-col")}>
<View style={tailwind("flex-row items-start mt-4 pr-6")}>
<CheckBox
disabled={!checkAble}
checked={
(data && [2, 3, 4].includes(data?.refunds_status)) ||
selectedIndex == 2
}
onPress={() => setIndex(2)}
checkedIcon="dot-circle-o"
uncheckedIcon="circle-o"
checkedColor={checkAble ? "#FF669E" : "#FFFFFF80"}
containerStyle={tailwind("bg-transparent p-0 m-0")}
wrapperStyle={tailwind("items-center")}
title={
<View style={tailwind("ml-4 pr-4")}>
<Text
style={{
...tailwind("text-xl mb-1 font-bold"),
color: !checkAble
? "#FFFFFF80"
: selectedIndex === 2
? "#FF669E"
: "#FFFFFF",
}}
>
同意退款
</Text>
<Text
style={{
color: !checkAble
? "#FFFFFF80"
: selectedIndex === 2
? "#FF669E"
: "#FFFFFF",
}}
>
同意退回用户的[空间成员]费用同时自动禁止用户再次购买此商品
</Text>
</View>
}
/>
</View>
<View style={tailwind("flex-row items-start mt-4 pr-6")}>
<CheckBox
disabled={!checkAble}
// checked={selectedIndex === -1}
checked={
(data && data?.refunds_status == -1) || selectedIndex == -1
}
onPress={() => setIndex(-1)}
checkedIcon="dot-circle-o"
uncheckedIcon="circle-o"
checkedColor={checkAble ? "#FF669E" : "#FFFFFF80"}
containerStyle={tailwind("bg-transparent p-0 m-0")}
wrapperStyle={tailwind("items-center")}
title={
<View style={tailwind("ml-4 pr-4")}>
<Text
style={{
...tailwind("text-xl mb-1 font-bold"),
color: !checkAble
? "#FFFFFF80"
: selectedIndex === -1
? "#FF669E"
: "#FFFFFF",
}}
>
拒绝退款
</Text>
<Text
style={{
color: !checkAble
? "#FFFFFF80"
: selectedIndex === -1
? "#FF669E"
: "#FFFFFF",
}}
>
拒绝退回用户的[空间成员]费用
</Text>
</View>
}
/>
</View>
</View>
</View>
<Button
color="#FF669E"
radius="999"
size="md"
disabled={isSubmitting || !checkAble}
disabledStyle={tailwind("bg-[#FFFFFF80]")}
disabledTitleStyle={tailwind("text-white")}
onPress={(e) => {
handleSubmit(e);
}}
titleStyle={tailwind("text-base")}
containerStyle={{
marginBottom: insets.bottom + 60,
...tailwind("mt-4"),
}}
>
{isSubmitting && <ActivityIndicator size="small" color="white" />}
{data && data?.refunds_status === 4
? "系统已自动提交"
: !checkAble
? "您已提交"
: isSubmitting
? "正在提交..."
: "提交"}
</Button>
</View>
</ScrollView>
</KeyboardAvoidingView>
);
}