diff --git a/app/noticeDetail/components/MessageList/index.jsx b/app/noticeDetail/components/MessageList/index.jsx index c83eb11..b318fc6 100644 --- a/app/noticeDetail/components/MessageList/index.jsx +++ b/app/noticeDetail/components/MessageList/index.jsx @@ -5,7 +5,7 @@ import React, { useImperativeHandle, } from "react"; import { formatDate } from "../../../../utils/tools"; -// import ScrollNotice from "../ScrollNotice"; +import ScrollNotice from "../ScrollNotice"; import { useRouter } from "next/navigation"; import requireAPI from "@/utils/requireAPI"; import { connect } from "react-redux"; @@ -217,7 +217,7 @@ const MessageList = ({ mid, changeNoticeCount, refInstance, noticeCount }) => { return (
{/* 广告轮播 */} - {/* {!!scollNotice.length && } */} + {!!scollNotice.length && } {/* 官方消息 */}
diff --git a/app/space/setting/spacePaymentSetting/page.jsx b/app/space/setting/spacePaymentSetting/page.jsx index 89d1bbd..a72f6d2 100644 --- a/app/space/setting/spacePaymentSetting/page.jsx +++ b/app/space/setting/spacePaymentSetting/page.jsx @@ -1,7 +1,7 @@ "use client"; import React, { useState, useEffect, useRef, useMemo, Fragment } from "react"; -import { Switch, Space, Checkbox, Button, Toast, Radio } from "antd-mobile"; +import { Switch, Space, Checkbox, Button, Toast, Form } from "antd-mobile"; import { useRouter, useSearchParams } from "next/navigation"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { faAngleLeft } from "@fortawesome/free-solid-svg-icons"; @@ -10,11 +10,11 @@ import requireAPI from "@/utils/requireAPI"; import { get } from "@/utils/storeInfo"; import { getStreamerInfo } from "@/api/space"; const superSingles = [ - { key: 0, text: "永久" }, - { key: 1, text: "按月生效" }, - { key: 2, text: "按季度生效" }, - { key: 3, text: "按半年生效" }, - { key: 4, text: "按年生效" }, + { key: 0, index: 0, text: "永久" }, + { key: 4, index: 1, text: "按年生效" }, + { key: 3, index: 2, text: "按半年生效" }, + { key: 2, index: 3, text: "按季度生效" }, + { key: 1, index: 4, text: "按月生效" }, ]; // const superSingles = [ // { key: 0, text: "永久" }, @@ -25,62 +25,61 @@ const superSingles = [ // ]; const ListItemWithCheckbox = ({ superSingle, - formData, - setFormData, + superSinglesContr, + setSuperSinglesContr, superSingleCheckeds, + index, }) => { return (
  • {}}>
    e.stopPropagation()}> - { const newFormData = { ...formData }; newFormData.superSingle.forEach((el) => { el.enable = 0; }); - newFormData.superSingle[superSingle.key].enable = value; - // newFormData.superSingle[superSingle.key].price = 0; - // newFormData.superSingle[superSingle.key].wechatFree = false; + newFormData.superSingle[index].enable = value; + // newFormData.superSingle[index].price = 0; + // newFormData.superSingle[index].wechatFree = false; setFormData(newFormData); }} > {superSingle.text} - - {/* */} + { - const newFormData = { ...formData }; - newFormData.superSingle[superSingle.key].enable = value; - newFormData.superSingle[superSingle.key].price = 0; - newFormData.superSingle[superSingle.key].wechatFree = false; - setFormData(newFormData); + const newSuperSinglesContr = [...superSinglesContr]; + newSuperSinglesContr[index].enable = value; + // newSuperSinglesContr[index].price = 0; + // newSuperSinglesContr[index].wechatFree = false; + setSuperSinglesContr(newSuperSinglesContr); }} > {superSingle.text} - */} +
    ¥ { - const newFormData = { ...formData }; - newFormData.superSingle[superSingle.key].price = value; - setFormData(newFormData); + const newSuperSinglesContr = [...superSinglesContr]; + newSuperSinglesContr[index].price = value; + setSuperSinglesContr(newSuperSinglesContr); }} />
    @@ -88,126 +87,107 @@ const ListItemWithCheckbox = ({ | { - const newFormData = { ...formData }; - newFormData.superSingle[superSingle.key].wechatFree = value; - setFormData(newFormData); + const newSuperSinglesContr = [...superSinglesContr]; + newSuperSinglesContr[index].wechatFree = value; + setSuperSinglesContr(newSuperSinglesContr); }} >

    赠送微信

    - {/* { - const newFormData = { ...formData }; - newFormData.superSingle[superSingle.key].wechatFree = value; - setFormData(newFormData); - }} - > -

    赠送微信

    -
    */}
  • ); }; -export default function spacePaymentSetting() { + +export default function SpacePaymentSetting() { + const [form] = Form.useForm(); const router = useRouter(); const searchParams = useSearchParams(); - const [formData, setFormData] = useState({ - spacePrice: "", - ironFanPrice: "", - openSuper: true, - superSingle: [ - { enable: false, price: 0, wechatFree: false }, - { enable: false, price: 0, wechatFree: false }, - { enable: false, price: 0, wechatFree: false }, - { enable: false, price: 0, wechatFree: false }, - { enable: false, price: 0, wechatFree: false }, - ], - }); + const [openSuper, setOpenSuper] = useState(false); const [spacePriceAble, setSpacePriceAble] = useState(false); const [tiefenPriceAble, setTiefenPriceAble] = useState(false); const [isSubmitting, setIsSubmitting] = useState(false); - // const [superSingleCheckeds, setSuperSingleCheckeds] = useState([]); - const [superSingleChecked, setSuperSingleChecked] = useState(null); + const [superSingleCheckeds, setSuperSingleCheckeds] = useState([]); + + const [superSinglesContr, setSuperSinglesContr] = useState([ + { enable: false, price: 0, wechatFree: false, key: 0 }, + { enable: false, price: 0, wechatFree: false, key: 4 }, + { enable: false, price: 0, wechatFree: false, key: 3 }, + { enable: false, price: 0, wechatFree: false, key: 2 }, + { enable: false, price: 0, wechatFree: false, key: 1 }, + ]); + const [spacePriceInfo, setSpacePriceInfo] = useState(null); useEffect(() => { const account = get("account"); getStreamerInfo(Number(account.mid)).then((res) => { - // 旧版本 - const haveChecked = res.is_superfanship_enabled; - if (haveChecked) { - setSuperSingleChecked(res.superfanship_valid_period); - } - const newFormData = { - spacePrice: `${res.admission_price / 100}`, - ironFanPrice: res.ironfanship_price / 100, - openSuper: !!res.is_superfanship_enabled, - superSingle: formData.superSingle.map((it, index) => { - if (index == res.superfanship_valid_period) { - return { - enable: !!res.is_superfanship_enabled, - price: res.superfanship_price / 100, - wechatFree: !!res.is_superfanship_give_wechat, - }; - } else { - return it; - } - }), - spaceIntro: res.profile, - }; - setFormData(newFormData); // 新版本 - // const haveChecked = res.superfan_price_list - // .map((it, index) => ({ ...it, index })) - // .filter((it) => it.enable); + const priceList = res.superfan_price_list ?? [ + { enable: false, price: 0, is_superfanship_give_wechat: false, key: 0 }, + { enable: false, price: 0, is_superfanship_give_wechat: false, key: 4 }, + { enable: false, price: 0, is_superfanship_give_wechat: false, key: 3 }, + { enable: false, price: 0, is_superfanship_give_wechat: false, key: 2 }, + { enable: false, price: 0, is_superfanship_give_wechat: false, key: 1 }, + ]; + const haveChecked = priceList + .map((it, index) => ({ ...it, index })) + .filter((it) => it.enable); // if (haveChecked.length > 0) { // setSuperSingleChecked(haveChecked[0].period); // } - // setSuperSingleCheckeds( - // res.superfan_price_list - // .map((it, index) => ({ ...it, index })) - // .filter((it) => it.enable) - // .map((it) => superSingles[it.index].key) - // ); - // setFormData({ - // spacePrice: res.admission_price / 100, - // ironFanPrice: res.ironfanship_price / 100, - // openSuper: !!res.is_superfanship_enabled, - // superSingle: res.superfan_price_list.map((it) => ({ - // enable: !!it.enable, - // price: it.price / 100, - // wechatFree: !!it.is_superfanship_give_wechat, - // })), - // spaceIntro: res.profile, - // }); + setSuperSingleCheckeds( + priceList + .map((it, index) => ({ ...it, index })) + .filter((it) => it.enable) + .map((it) => superSingles[it.index].index) + ); + setOpenSuper(!!res.is_superfanship_enabled); + setSuperSinglesContr( + priceList.map((it, index) => ({ + enable: !!it.enable, + price: it.price / 100, + wechatFree: !!it.is_superfanship_give_wechat, + key: index ? 5 - index : index, + })) + ); + setSpacePriceInfo(res); }); }, []); + + useEffect(() => { + if (!spacePriceInfo) return; + form.setFieldsValue({ + spacePrice: spacePriceInfo.admission_price / 100, + ironFanPrice: spacePriceInfo.ironfanship_price / 100, + }); + }, [form, spacePriceInfo]); const listItemWithCheckboxMemo = useMemo(() => { return superSingles.map((item, index) => ( )); - }, [formData, superSingleChecked]); - const handleSubmit = async () => { - const { spacePrice, ironFanPrice, openSuper, superSingle } = formData; + }, [superSingleCheckeds, superSinglesContr]); + const handleSubmit = async (newFormData) => { + const { spacePrice, ironFanPrice } = newFormData; + const superSingle = [...superSinglesContr]; const openSuperEveryFalse = Object.values(superSingle).every( (it) => !it.enable ); - if (!spacePrice || !ironFanPrice || (openSuper && openSuperEveryFalse)) { + if (openSuper && openSuperEveryFalse) { Toast.show({ icon: "fail", - content: "请完善内容后提交", + content: "请完善档位内容后提交", position: "top", }); return; @@ -233,57 +213,9 @@ export default function spacePaymentSetting() { } let isPrice = false; if (openSuper) { - // Object.values(superSingle).forEach((it) => { - // if (it.enable) { - // const superFanPrice = it.price; - // if (!superFanPrice) { - // Toast.show({ - // icon: "fail", - // content: "请填写超粉价格", - // position: "top", - // }); - // isPrice = true; - // return; - // } else { - // const _superFanPrice = parseInt(superFanPrice * 100, 10); - // if ( - // openSuper && - // (isNaN(_superFanPrice) || - // _superFanPrice < 100 || - // _superFanPrice > 388800) - // ) { - // isPrice = true; - // Toast.show({ - // icon: "fail", - // content: "请输入有效的超粉价格", - // position: "top", - // }); - // return; - // } - // if (openSuper && _superFanPrice <= _ironFanPrice) { - // isPrice = true; - // Toast.show({ - // icon: "fail", - // content: "请输入大于铁粉价格的超粉价格", - // position: "top", - // }); - // return; - // } - // } - // } - // }); - if (superSingleChecked == null) { - Toast.show({ - icon: "fail", - content: "请选择铁粉类型", - position: "top", - }); - } else { - const superChecked = superSingle.filter( - (_, index) => index == superSingleChecked - )[0]; - if (superChecked) { - const superFanPrice = superChecked.price; + Object.values(superSingle).forEach((it) => { + if (it.enable) { + const superFanPrice = it.price; if (!superFanPrice) { Toast.show({ icon: "fail", @@ -319,7 +251,55 @@ export default function spacePaymentSetting() { } } } - } + }); + // if (superSingleChecked == null) { + // Toast.show({ + // icon: "fail", + // content: "请选择铁粉类型", + // position: "top", + // }); + // } else { + // const superChecked = superSingle.filter( + // (_, index) => index == superSingleChecked + // )[0]; + // if (superChecked) { + // const superFanPrice = superChecked.price; + // if (!superFanPrice) { + // Toast.show({ + // icon: "fail", + // content: "请填写超粉价格", + // position: "top", + // }); + // isPrice = true; + // return; + // } else { + // const _superFanPrice = parseInt(superFanPrice * 100, 10); + // if ( + // openSuper && + // (isNaN(_superFanPrice) || + // _superFanPrice < 100 || + // _superFanPrice > 388800) + // ) { + // isPrice = true; + // Toast.show({ + // icon: "fail", + // content: "请输入有效的超粉价格", + // position: "top", + // }); + // return; + // } + // if (openSuper && _superFanPrice <= _ironFanPrice) { + // isPrice = true; + // Toast.show({ + // icon: "fail", + // content: "请输入大于铁粉价格的超粉价格", + // position: "top", + // }); + // return; + // } + // } + // } + // } } if (isPrice) return; // if ( @@ -340,20 +320,21 @@ export default function spacePaymentSetting() { if (isSubmitting) return; // 旧版本 - const superfanList = superSingle.map((it, index) => ({ - period: index, - enable: it.enable ? 1 : 0, - price: parseInt(it.price * 100, 10), - is_superfanship_give_wechat: it.wechatFree ? 1 : 0, - })); - const superfanObj = superfanList.filter((it) => it.enable)[0]; - // 新版本 - // const superfan_price_list = superSingle.map((it, index) => ({ + // const superfanList = superSingle.map((it, index) => ({ // period: index, // enable: it.enable ? 1 : 0, // price: parseInt(it.price * 100, 10), // is_superfanship_give_wechat: it.wechatFree ? 1 : 0, // })); + // const superfanObj = superfanList.filter((it) => it.enable)[0]; + // 新版本 + + const superfan_price_list = superSinglesContr.map((it, index) => ({ + period: it.key, + enable: it.enable ? 1 : 0, + price: parseInt(it.price * 100, 10), + is_superfanship_give_wechat: it.wechatFree ? 1 : 0, + })); setIsSubmitting(true); try { const body = { @@ -362,13 +343,12 @@ export default function spacePaymentSetting() { ironfanship_price: parseInt(ironFanPrice * 100, 10), is_superfanship_enabled: openSuper ? 1 : 0, // 旧版本 - superfanship_price: superfanObj.price, - superfanship_valid_period: superfanObj.period, - is_superfanship_give_wechat: superfanObj.is_superfanship_give_wechat, + // superfanship_price: superfanObj.price, + // superfanship_valid_period: superfanObj.period, + // is_superfanship_give_wechat: superfanObj.is_superfanship_give_wechat, // 新版本 - // superfan_price_list, + superfan_price_list, }; - // console.log("body", body); const _data = await requireAPI( "POST", "/api/zone/update", @@ -397,6 +377,7 @@ export default function spacePaymentSetting() { setIsSubmitting(false); } }; + const messageEle = (message) =>

    {message}

    ; return (
    {/* 头部标题 */} @@ -415,10 +396,35 @@ export default function spacePaymentSetting() {
    {/* 内容 */}
    -
    +
    { + Toast.show({ + icon: "fail", + content: "请检查所填内容", + position: "top", + }); + }} + onFinish={handleSubmit} + onValuesChange={(values) => { + console.log("onValuesChange:", values); + // setFormData(values); + }} + // hasFeedback={false} + validateMessages={{ + required: (name) => { + return

    {`请输入${name}`}

    ; + }, + }} + >

    - 解锁空间价格 + 解锁空间价格 *

    @@ -428,28 +434,31 @@ export default function spacePaymentSetting() {

    ¥ - {/* {!spacePriceAble ? ( - {formData.spacePrice} - ) : ( + { + // if (value.length === 0) { + // return Promise.reject(messageEle("请选择性别")); + // } + // }, + }, + ]} + > - setFormData((old) => ({ ...old, spacePrice: value })) - } + placeholder="0~3888,仅支持整数" + inputClassName="placeholder:text-[14px]" /> - )} */} - - setFormData((old) => ({ ...old, spacePrice: value })) - } - className={!formData.spacePrice ? "pb-1.5" : ""} - inputClassName="placeholder:text-[14px]" - /> +
    -
    -
    -
    -

    - 铁粉价格 - * -

    -

    - (累计消费达成后解锁铁粉权益) -

    -
    -
    -
    - ¥ - {/* {!tiefenPriceAble ? ( - {formData.ironFanPrice} - ) : ( - - )} */} - - setFormData((old) => ({ ...old, ironFanPrice: value })) - } - className={!formData.ironFanPrice ? "pb-1.5" : ""} - inputClassName="placeholder:text-[14px]" - /> + +

    + 铁粉价格 + * +

    +

    + (累计消费达成后解锁铁粉权益) +

    +
    + } + layout="vertical" + rules={[ + { + required: true, + message: messageEle("请填写铁粉价格"), + // validator: (rule, value) => { + // if (value.length === 0) { + // return Promise.reject(messageEle("请选择性别")); + // } + // }, + }, + ]} + > +
    +
    + ¥ + + + +
    +
    - -
    -
    -
    +

    - 超粉功能 - * + 超粉功能

    是否启用

    - { - setFormData((old) => ({ - ...old, - openSuper: value, - })); - }} - style={{ - "--checked-color": "#FF669E", - "--height": "24px", - "--width": "36px", - }} - /> + + setOpenSuper((old) => !old)} + style={{ + "--checked-color": "#FF669E", + "--height": "24px", + "--width": "36px", + }} + /> +
    -
    - {formData.openSuper && ( -
    -
    -

    - 超粉单次开通类型 - * -

    -

    - (付费后解锁对应期限超粉权益) -

    -
    - - { - setSuperSingleChecked(values); - // setSuperSingleCheckeds(values); - }} - > -
      {listItemWithCheckboxMemo}
    -
    - {/* { - setSuperSingleCheckeds(values); - }} - > -
      {listItemWithCheckboxMemo}
    -
    */} -
    -
    - )} - -
    -
    + } + layout="vertical" + > + + {/* { + setSuperSingleChecked(values); + // setSuperSingleCheckeds(values); }} - onClick={handleSubmit} > - {isSubmitting ? "正在保存..." : "保存设置"} - -
    +
      {listItemWithCheckboxMemo}
    + */} + { + setSuperSingleCheckeds(values); + }} + > +
      {listItemWithCheckboxMemo}
    +
    + + + )} + + + + +
    );