退出空间
diff --git a/app/space/setting/spaceRefund/page.jsx b/app/space/setting/spaceRefund/page.jsx
new file mode 100644
index 0000000..d503f25
--- /dev/null
+++ b/app/space/setting/spaceRefund/page.jsx
@@ -0,0 +1,219 @@
+"use client";
+import React, { useState, useEffect } from "react";
+import { redirect, useRouter, useSearchParams } from "next/navigation";
+import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
+import { faAngleLeft } from "@fortawesome/free-solid-svg-icons";
+import { TextArea, Divider, Button, Toast } from "antd-mobile";
+import require from "@/utils/require";
+import { getSpaceData } from "@/api/space";
+export default function SpaceRefund() {
+ //页面数据
+ const [data, setData] = useState();
+ //联系人
+ const [name, setName] = useState();
+ //联系方式
+ const [contact, setContact] = useState();
+ //备注
+ const [remark, setRemark] = useState();
+ //提交中
+ const [isSubmitting, setIsSubmitting] = useState(false);
+ const router = useRouter();
+ const searchParams = useSearchParams();
+ useEffect(() => {
+ getSpaceData(Number(id)).then((res) => {
+ if (res) {
+ const { isRefunding, noRole } = res;
+ isRefunding && router.push("/");
+ noRole && router.replace("person_space_introduce/" + id);
+ }
+ });
+ getData();
+ }, []);
+ //提交退款
+ const handleSubmit = async () => {
+ if (!name || !contact || !remark) {
+ Toast.show({
+ type: "error",
+ text1: "请完善信息后提交",
+ topOffset: 60,
+ });
+ return;
+ }
+ if (remark.length < 15) {
+ Toast.show({
+ type: "error",
+ text1: "请填写15字以上退款原因",
+ topOffset: 60,
+ });
+ return;
+ }
+ //提交数据
+ if (isSubmitting) return;
+ setIsSubmitting(true);
+ try {
+ const _data = await require("POST", "/api/zone/refund", {
+ body: {
+ zid: Number(searchParams.get("id")),
+ contact_name: name,
+ contact_phone: contact,
+ note: remark,
+ },
+ });
+ if (_data.ret === -1) {
+ Toast.show({
+ type: "error",
+ text1: _data.msg,
+ topOffset: 60,
+ });
+ return;
+ }
+ Toast.show({
+ icon: "success",
+ content: "提交成功,请关注原支付渠道通知",
+ position: "top",
+ });
+ redirect("/");
+ } catch (error) {
+ console.error(error);
+ } finally {
+ setIsSubmitting(false);
+ }
+ };
+
+ //获取页面数据
+
+ const getData = async () => {
+ try {
+ const _data = await require("POST", "/api/zone/refund_page", {
+ body: { zid: Number(searchParams.get("id")) },
+ });
+ if (_data.ret === -1) {
+ Toast.show({
+ icon: "fail",
+ content: _data.msg,
+ position: "top",
+ });
+ return;
+ }
+ setData(_data.data);
+ } catch (error) {
+ console.error(error);
+ }
+ };
+ return (
+
+
+
+ {
+ router.back();
+ }}
+ />
+
+
空间退款
+
+
+
+
+ *
+ 退款商品
+
+
{data?.name}
+
+
+
+
+ *
+ 退款价格
+
+
+ ¥{data?.price / 100}
+
+
+
+
+
+
+
+
+
+
退款须知
+
+
+ 1、当前退款内容为本空间的成员身份,退款后您将无法再次加入本空间;
+
+
+ 2、平台将在24小时内处理您的退款申请,为了退款进程的顺利,请您详细填写您的退款原因;
+
+
+ 3、一旦退款成功,退款金额将原路返回您的支付账户,请确保您的支付账户可正常接受款项;
+
+
4、您在12小时内只能进行一次自助退款,请合理利用权利;
+
5、本条款最终解释权归平台所有。
+
+
+
+
+ );
+}
diff --git a/components/UploadImgs/index.js b/components/UploadImgs/index.js
index 86ecf28..038bf67 100644
--- a/components/UploadImgs/index.js
+++ b/components/UploadImgs/index.js
@@ -9,17 +9,44 @@ export default function UploadImgs({ getImgs }) {
const [loading, setLoading] = useState(false);
const handleUploadImage = async (e) => {
let file = e.target.files[0];
- console.log("ddddd", file.type);
+
if (!file) return;
setLoading(true);
- if (file.type.indexOf("image/")!=-1) {
- const image = await uploadImage(file);
- getImgs((old) => [...old, image.id]);
- setFileList((old) => [...old, image]);
- }else if(file.type.indexOf("video/")!=-1){
- const video = await uploadVideo(file);
- getImgs((old) => [...old, video.id]);
- setFileList((old) => [...old, video]);
+ if (file.type.indexOf("image/") != -1) {
+ // const image = await uploadImage(file);
+ // getImgs((old) => [...old, image.id]);
+ const assets = [
+ ...fileList,
+ { type: "img", src: URL.createObjectURL(file) },
+ ];
+ setFileList(assets);
+ } else if (file.type.indexOf("video/") != -1) {
+ const videoD = document.getElementById("videoD");
+ const videoC = document.getElementById("videoC");
+ console.log("videoC", videoC);
+ const ctx = videoC?.getContext("2d");
+ // 设置Canvas的宽度和高度与视频一致
+ videoC.width = videoD.videoWidth;
+ videoC.height = videoD.videoHeight;
+ // 在Canvas上绘制当前视频帧
+ ctx.drawImage(videoD, 0, 0, videoC.width, videoC.height);
+ // 将Canvas转换为图片URL
+ const frameImageUrl = videoC.toDataURL();
+
+ // 输出图片URL
+ console.log(frameImageUrl);
+ console.log("ddddd", file, {
+ type: "video",
+ src: frameImageUrl,
+ });
+ // const video = await uploadVideo(file);
+ // getImgs((old) => [...old, video.id]);
+ // setFileList((old) => [...old, video]);
+ const assets = [
+ ...fileList,
+ { type: "video", src: URL.createObjectURL(file) },
+ ];
+ setFileList(assets);
}
setLoading(false);
@@ -57,7 +84,7 @@ export default function UploadImgs({ getImgs }) {
return (
+
+
+
+
);
}
diff --git a/questions.text b/questions.text
new file mode 100644
index 0000000..871aca9
--- /dev/null
+++ b/questions.text
@@ -0,0 +1,45 @@
+遇到的问题:
+1. 退出登录后,验证token有限性似乎有问题
+2. 视频上传问题
+3.
+4.
+5。
+6.
+7.
+8.
+9。
+
+待修复的问题:
+1. 空间内没加视频封面是否模糊的判断 (>>>靠后)
+2. 空间内多张图片的付费贴,需要根据可预览图片数字段展示可见图片,并模糊剩余图片 (>>>靠后)
+11. 空间内生成分享卡片页面需要在现有项目里面写 (>>>靠后)
+12. 退出空间的弹窗样式错误,确认按钮应该是灰色并且放在左边 (完成)
+13. 空间设置中,创建时间字段放错了,放成id了 (完成)
+14. 空间tab为空的时候,不需要有“查看推荐”这个按钮 (完成)
+15. 需要增加会员功能
+16. 需要支持保存图片和视频,只有会员可以保存 (>>>靠后)
+17. 搜索页面,进入空间应该先到空间介绍页,然后判断是否解锁,如果解锁就重定向到空间内 (完成)
+18. 加微信组件中/api/vas/query_wechat这个接口应该在确认用户已经解锁微信了才去调用 (完成)
+19. 主播主页,空间动态的预览图,应该根据是否已经解锁空间来决定是否模糊,以及跳转空间介绍页还是空间内 (>>>靠后)
+20. 修改密码页面,显示未获取到手机号请重新登录 (完成)(待验证!!!)
+21. 意见反馈页面没完善 (>>>靠后)
+22. 关于我们页面没完善 (完成)
+23. 账号注销页面没完善、页面改成“账号注销” (完成)(待验证!!!)
+24. 登录页面底部用户协议部分文案改成“我已阅读并同意《用户协议》、《隐私政策》” (完成)
+25. 登录页面顶部加头图:和tiefen_space_web项目相同 (完成)
+26. 登录页面和修改密码页面输入框的placeholder文本颜色不统一 (疑惑🤔)
+27. 登录页面缺少了忘记密码页面 (完成)
+28. 缺少支付相关页面
+29. 空间卡片,“付费”标签出现两次,同时缺少“创建者”标签,这两个标签需要横向排列 (完成)
+30. 切换账号之后,baseRequest没有更新 (完成)
+31. 空间设置中缺少空间内用户提交退款申请功能 (完成)(待验证!!!)
+32. 空间介绍页的空间价格目前是写死的,同时这里要判断空间价格是否为0,如果是0的话和不为0的点击事件有区别;此外,还有个退款后的用户不显示付费按钮的逻辑 (完成)(待验证!!!)
+待开发的功能:
+
+
+正在开发的功能:
+
+已完成功能:
+1. 我的页面中的关注和粉丝 (完成)
+2. 用户添加主播微信 (完成)
+3. 搜索单条的样式 (完成)
diff --git a/utils/baseRequest.js b/utils/baseRequest.js
index ce594c6..e10f179 100644
--- a/utils/baseRequest.js
+++ b/utils/baseRequest.js
@@ -12,5 +12,6 @@ export default function baseRequest() {
b_ts: b_ts,
b_token: token,
};
+ console.log("baseRequest",baseRequest)
return baseRequest;
}
diff --git a/utils/require.js b/utils/require.js
index 68141aa..8cbba94 100644
--- a/utils/require.js
+++ b/utils/require.js
@@ -1,12 +1,12 @@
import baseRequest from "./baseRequest";
import { get } from "./storeInfo";
import { Toast } from "antd-mobile";
-import { checkAuth } from "./auth";
// import { useRouter } from "next/navigation";
// import webviewBaseRequest from "@/utils/webviewBaseRequest";
-const base = baseRequest();
+
// 创建一个封装 fetch 的函数
export default function customFetch(method, url, options = {}, mid) {
+ const base = baseRequest();
// 默认选项
const defaultOptions = {
method: method,
diff --git a/utils/upload.js b/utils/upload.js
index e6f3c65..90e2889 100644
--- a/utils/upload.js
+++ b/utils/upload.js
@@ -191,7 +191,7 @@ export async function uploadImage(asset) {
//上传单个视频
export async function uploadVideo(asset) {
const auth = await getAuth(2);
- const fileType = "video";
+ const fileType = asset?.type;
const generateThumbnail = async () => {
try {
const videoCover = await VideoThumbnails.getThumbnailAsync(asset?.uri);
@@ -218,7 +218,7 @@ export async function uploadVideo(asset) {
method: "POST",
body: formData,
});
-
+ console.log("uploadResponse",uploadResponse)
if (uploadResponse.status === 200) {
const md5 = uploadResponse.headers.map.etag.substring(
1,