anln_1.3 #22

Merged
yezian merged 2 commits from anln_1.3 into main 2025-02-19 16:19:31 +08:00
2 changed files with 331 additions and 141 deletions

View File

@ -52,6 +52,8 @@ const BlockUserContent = (props) => {
<p>{data === 5 && "主播发现隐藏"}</p>
<p>{data === 6 && "主播广场隐藏"}</p>
<p>{data === 7 && "禁止付款"}</p>
<p>{data === 8 && "试运营限制广场发帖"}</p>
<p>{data === 9 && "试运营主播发现隐藏"}</p>
</div>
),
},
@ -402,6 +404,8 @@ const BlockUserContent = (props) => {
<option value={5}>主播发现隐藏</option>
<option value={6}>主播广场隐藏</option>
<option value={7}>禁止付款</option>
<option value={8}>试运营限制广场发帖</option>
<option value={9}>试运营主播发现隐藏</option>
</select>
</Form.Item>
<Form.Item

View File

@ -18,6 +18,7 @@ import { useNavigate } from "react-router-dom";
const StreamerSpaceContent = () => {
const navigate = useNavigate();
const { TextArea } = Input;
const [superSingles, setSuperSingles] = useState([]);
//
const [showColumns, setShowColumns] = useState([
"baseInfo",
@ -26,6 +27,8 @@ const StreamerSpaceContent = () => {
"active",
"ratio",
]);
//
const [searchForm] = Form.useForm();
//
const dynamicColumns = showColumns.map((item) => {
switch (item) {
@ -73,43 +76,38 @@ const StreamerSpaceContent = () => {
<p>
是否开启超粉功能
<span className="text-red-400">
{data.is_superfanship_enabled === 1 ? "是" : "否"}
{data.is_superfanship_enabled === "1" ? "是" : "否"}
</span>
</p>
{data.is_superfanship_enabled === 1 && (
<>
<p>
超粉价格
<span className="text-red-400">
¥{data.superfanship_price}
<hr />
{data.is_superfanship_enabled === "1" &&
data?.superPriceList?.map((item, index) => (
<p key={index}>
{item.period === 4
? "年度超粉"
: item.period === 3
? "半年度超粉"
: item.period === 2
? "一季度超粉"
: item.period === 1
? "一个月超粉"
: "永久超粉"}
<span
className={
item.enable === "1" ? "text-green-400" : "text-red-400"
}
>
{item.enable === "1" ? "开启" : "关闭"}
</span>
</p>
<p>
超粉有效期
{data.superfanship_valid_period === 0 && (
<span className="text-red-400">永久</span>
)}
{data.superfanship_valid_period === 1 && (
<span className="text-red-400">月度</span>
)}
{data.superfanship_valid_period === 2 && (
<span className="text-red-400">季度</span>
)}
{data.superfanship_valid_period === 3 && (
<span className="text-red-400">半年</span>
)}
{data.superfanship_valid_period === 4 && (
<span className="text-red-400">年度</span>
{item.enable === "1" && (
<span className="text-red-400">
¥{item.price}
{item.is_superfanship_give_wechat === "1" &&
",赠送微信"}
</span>
)}
</p>
<p>
开通超粉是否送微信
<span className="text-red-400">
{data.is_superfanship_give_wechat === 1 ? "是" : "否"}
</span>
</p>
</>
)}
))}
</div>
),
};
@ -300,14 +298,26 @@ const StreamerSpaceContent = () => {
ct: new Date(zone.ct * 1000).toLocaleString(),
},
profile: zone.profile,
paymentSettings: {
admission_price: zone.admission_price / 100,
ironfanship_price: zone.ironfanship_price / 100,
is_superfanship_enabled: zone.is_superfanship_enabled,
superfanship_price: zone.superfanship_price / 100,
superfanship_valid_period: zone.superfanship_valid_period,
is_superfanship_give_wechat: zone.is_superfanship_give_wechat,
},
paymentSettings:
// {
// admission_price: zone.admission_price / 100,
// ironfanship_price: zone.ironfanship_price / 100,
// is_superfanship_enabled: zone.is_superfanship_enabled,
// superfanship_price: zone.superfanship_price / 100,
// superfanship_valid_period: zone.superfanship_valid_period,
// is_superfanship_give_wechat: zone.is_superfanship_give_wechat,
// },
{
superPriceList: zone.superfan_price_list?.map((item) => ({
...item,
price: item.price / 100,
enable: `${item.enable}`,
is_superfanship_give_wechat: `${item.is_superfanship_give_wechat}`,
})),
admission_price: zone.admission_price / 100,
ironfanship_price: zone.ironfanship_price / 100,
is_superfanship_enabled: `${zone.is_superfanship_enabled}`,
},
active: {
zone_moment_count: zone.zone_moment_count,
image_count: zone.image_count,
@ -345,7 +355,7 @@ const StreamerSpaceContent = () => {
},
body: JSON.stringify({
offset: 0,
limit: 2000,
limit: 100,
...base,
}),
});
@ -365,14 +375,26 @@ const StreamerSpaceContent = () => {
ct: new Date(item.ct * 1000).toLocaleString(),
},
profile: item.profile,
paymentSettings: {
admission_price: item.admission_price / 100,
ironfanship_price: item.ironfanship_price / 100,
is_superfanship_enabled: item.is_superfanship_enabled,
superfanship_price: item.superfanship_price / 100,
superfanship_valid_period: item.superfanship_valid_period,
is_superfanship_give_wechat: item.is_superfanship_give_wechat,
},
paymentSettings:
// {
// admission_price: item.admission_price / 100,
// ironfanship_price: item.ironfanship_price / 100,
// is_superfanship_enabled: item.is_superfanship_enabled,
// superfanship_price: item.superfanship_price / 100,
// superfanship_valid_period: item.superfanship_valid_period,
// is_superfanship_give_wechat: item.is_superfanship_give_wechat,
// },
{
superPriceList: item.superfan_price_list?.map((item) => ({
...item,
price: item.price / 100,
enable: `${item.enable}`,
is_superfanship_give_wechat: `${item.is_superfanship_give_wechat}`,
})),
admission_price: item.admission_price / 100,
ironfanship_price: item.ironfanship_price / 100,
is_superfanship_enabled: `${item.is_superfanship_enabled}`,
},
active: {
zone_moment_count: item.zone_moment_count,
image_count: item.image_count,
@ -403,9 +425,10 @@ const StreamerSpaceContent = () => {
const [isModalOpen, setIsModalOpen] = useState(false);
//modal
const handleCancel = () => {
setShowData([]);
// setShowData([]);
setDefaultValues({});
setIsModalOpen(false);
setSuperSingles([]);
};
//modal
const [defaultValues, setDefaultValues] = useState({});
@ -413,6 +436,68 @@ const StreamerSpaceContent = () => {
const handleModal = (record) => {
setDefaultValues(record);
setIsModalOpen(true);
const superList = [
{
period: "0",
text: "永久超粉",
enable: "0",
price: 0,
is_superfanship_give_wechat: "0",
},
{
period: "1",
text: "一个月超粉",
enable: "0",
price: 0,
is_superfanship_give_wechat: "0",
},
{
period: "2",
text: "一季度超粉",
enable: "0",
price: 0,
is_superfanship_give_wechat: "0",
},
{
period: "3",
text: "半年度超粉",
enable: "0",
price: 0,
is_superfanship_give_wechat: "0",
},
{
period: "4",
text: "年度超粉",
enable: "0",
price: 0,
is_superfanship_give_wechat: "0",
},
];
if (record.paymentSettings?.superPriceList.length > 0) {
setSuperSingles(
record.paymentSettings?.superPriceList.map((item) => {
return {
period: item.period.toString(),
text:
item.period === 4
? "年度超粉"
: item.period === 3
? "半年度超粉"
: item.period === 2
? "一季度超粉"
: item.period === 1
? "一个月超粉"
: "永久超粉",
enable: item.enable.toString(),
price: item.price,
is_superfanship_give_wechat:
item.is_superfanship_give_wechat.toString(),
};
})
);
} else {
setSuperSingles(superList);
}
};
//
const onModalFormFinish = async (value) => {
@ -426,15 +511,15 @@ const StreamerSpaceContent = () => {
alert("请完善表单信息");
return;
}
if (
parseInt(value.is_superfanship_enabled) === 1 &&
(!value.superfanship_price?.toString() ||
!value.superfanship_valid_period?.toString() ||
!value.is_superfanship_give_wechat?.toString())
) {
alert("请完善表单信息");
return;
}
// if (
// parseInt(value.is_superfanship_enabled) === 1 &&
// (!value.superfanship_price?.toString() ||
// !value.superfanship_valid_period?.toString() ||
// !value.is_superfanship_give_wechat?.toString())
// ) {
// alert("");
// return;
// }
const _spacePrice = parseInt(value.admission_price * 100, 10);
if (isNaN(_spacePrice) || _spacePrice < 0) {
alert("请输入有效的解锁空间价格");
@ -445,19 +530,52 @@ const StreamerSpaceContent = () => {
alert("请输入有效的铁粉价格");
return;
}
const _superFanPrice = parseInt(value.superfanship_price * 100, 10);
if (
parseInt(value.is_superfanship_enabled) === 1 &&
(isNaN(_superFanPrice) || _superFanPrice < 100 || _superFanPrice > 388800)
) {
alert("请输入有效的超粉价格");
return;
// const _superFanPrice = parseInt(value.superfanship_price * 100, 10);
// if (
// parseInt(value.is_superfanship_enabled) === 1 &&
// (isNaN(_superFanPrice) || _superFanPrice < 100 || _superFanPrice > 388800)
// ) {
// alert("");
// return;
// }
// if (
// parseInt(value.is_superfanship_enabled) === 1 &&
// _superFanPrice <= _ironFanPrice
// ) {
// alert("");
// return;
// }
const superPriceList = superSingles.map((item) => {
return {
period: parseInt(item.period), // int, 0:
enable: parseInt(item.enable), // int, 1:, 0:
price: parseInt(value[`superPrice${item.period}`] * 100, 10),
is_superfanship_give_wechat: parseInt(
value[`isSuperfanshipGiveWechat${item.period}`]
),
};
});
//
let pass = true;
if (value.is_superfanship_enabled === "1") {
superPriceList.forEach((item) => {
if (!pass) {
return;
}
if (item.enable && item.price <= _ironFanPrice) {
alert("请输入大于铁粉价格的超粉价格");
pass = false;
return;
}
});
}
if (
parseInt(value.is_superfanship_enabled) === 1 &&
_superFanPrice <= _ironFanPrice
) {
alert("请输入大于铁粉价格的超粉价格");
if (!pass) return;
const allClose = superPriceList.every((item) => {
return item.enable === 0;
});
if (allClose) {
alert("请至少开启一个超粉价格");
return;
}
try {
@ -473,15 +591,16 @@ const StreamerSpaceContent = () => {
admission_price: parseInt(value.admission_price * 100, 10),
ironfanship_price: parseInt(value.ironfanship_price * 100, 10),
is_superfanship_enabled: parseInt(value.is_superfanship_enabled),
superfanship_price: parseInt(value.superfanship_price * 100, 10),
superfanship_valid_period: parseInt(
value.superfanship_valid_period,
10
),
is_superfanship_give_wechat: parseInt(
value.is_superfanship_give_wechat,
10
),
// superfanship_price: parseInt(value.superfanship_price * 100, 10),
// superfanship_valid_period: parseInt(
// value.superfanship_valid_period,
// 10
// ),
// is_superfanship_give_wechat: parseInt(
// value.is_superfanship_give_wechat,
// 10
// ),
superfan_price_list: superPriceList,
...base,
}),
});
@ -490,11 +609,17 @@ const StreamerSpaceContent = () => {
alert(detailData.msg);
return;
}
const searchValue = searchForm.getFieldsValue();
if (searchValue.id) {
search(searchValue);
} else {
getAllSpace();
}
} catch (error) {
console.error(error);
}
//
setShowData([]);
// setShowData([]);
setDefaultValues({});
setIsModalOpen(false);
};
@ -561,13 +686,13 @@ const StreamerSpaceContent = () => {
console.error(error);
}
//
setShowData([]);
// setShowData([]);
setDefaultValues({});
setIsAddAgencyModalOpen(false);
};
//Modal
const handleAddAgencyModalCancel = () => {
setShowData([]);
// setShowData([]);
setIsAddAgencyModalOpen(false);
};
//modal
@ -677,7 +802,7 @@ const StreamerSpaceContent = () => {
console.error(error);
}
//
setShowData([]);
// setShowData([]);
setDefaultValues({});
setIsAgencyModalOpen(false);
};
@ -703,7 +828,7 @@ const StreamerSpaceContent = () => {
}
message.success("删除成功");
//
setShowData([]);
// setShowData([]);
setDefaultValues({});
setIsAgencyModalOpen(false);
} catch (error) {
@ -712,10 +837,10 @@ const StreamerSpaceContent = () => {
};
//Modal
const handleAgencyModalCancel = () => {
setShowData([]);
// setShowData([]);
setIsAgencyModalOpen(false);
};
const messageEle = (message) => <p className="text-right">{message}</p>;
return (
<div style={{ marginLeft: 20, marginRight: 20 }}>
<div style={{ marginTop: 20, marginBottom: 10 }}>
@ -726,7 +851,12 @@ const StreamerSpaceContent = () => {
onChange={(value) => setShowColumns(value)}
/>
</div>
<Form name="search" onFinish={search} onFinishFailed={onFinishFailed}>
<Form
form={searchForm}
name="search"
onFinish={search}
onFinishFailed={onFinishFailed}
>
<Space style={{ marginBottom: 20 }}>
<Form.Item label="ID" name="id" style={{ margin: 0 }}>
<Input />
@ -745,7 +875,12 @@ const StreamerSpaceContent = () => {
/>
{/* 编辑空间模态框是否显示 */}
{isModalOpen && (
<Modal footer={null} open={isModalOpen} onCancel={handleCancel}>
<Modal
style={{ minWidth: 600 }}
footer={null}
open={isModalOpen}
onCancel={handleCancel}
>
<Form
name="change"
onFinish={onModalFormFinish}
@ -833,63 +968,114 @@ const StreamerSpaceContent = () => {
borderRadius: 4,
outline: "none",
}}
>
<option value={1}></option>
<option value={0}></option>
</select>
</Form.Item>
<Form.Item
name="superfanship_price"
label="超粉价格(元)"
initialValue={
defaultValues?.paymentSettings?.superfanship_price
}
>
<InputNumber min={0} />
</Form.Item>
<Form.Item
name="superfanship_valid_period"
label="超粉有效期"
initialValue={
defaultValues?.paymentSettings?.superfanship_valid_period
}
>
<select
style={{
height: 32,
padding: "4px 11px",
border: "1px solid #d9d9d9",
borderRadius: 4,
outline: "none",
onChange={(e) => {
setDefaultValues((prev) => {
return {
...prev,
paymentSettings: {
...prev.paymentSettings,
is_superfanship_enabled: e.target.value,
},
};
});
}}
>
<option value={0}>永久</option>
<option value={1}>月度</option>
<option value={2}>季度</option>
<option value={3}>半年</option>
<option value={4}>年度</option>
<option value="1"></option>
<option value="0"></option>
</select>
</Form.Item>
<Form.Item
name="is_superfanship_give_wechat"
label="开通超粉是否送微信"
initialValue={
defaultValues?.paymentSettings?.is_superfanship_give_wechat
}
<hr className="w-full m-0 border-red-500" />
<hr className="w-full mb-4 border-red-500" />
<div
style={{
display:
defaultValues?.paymentSettings
?.is_superfanship_enabled === "1"
? "block"
: "none",
}}
>
<select
style={{
height: 32,
padding: "4px 11px",
border: "1px solid #d9d9d9",
borderRadius: 4,
outline: "none",
}}
>
<option value={1}></option>
<option value={0}></option>
</select>
</Form.Item>
{superSingles.map((item) => (
<div className="flex gap-2" key={item.period}>
<Form.Item
name={"superPriceType" + item.period}
label={item.text}
initialValue={item?.enable}
>
<select
style={{
height: 32,
padding: "4px 11px",
border: "1px solid #d9d9d9",
borderRadius: 4,
outline: "none",
}}
onChange={(e) => {
setSuperSingles((prev) => {
return prev.map((it) => {
if (it.period === item.period) {
return {
...it,
enable: e.target.value,
};
}
return it;
});
});
}}
>
<option value="1">开启</option>
<option value="0">关闭</option>
</select>
</Form.Item>
<div
className="flex flex-nowrap gap-2"
style={{
display: item.enable === "1" ? "flex" : "none",
}}
>
<Form.Item
name={"superPrice" + item.period}
label="价格(元)"
initialValue={item?.price}
rules={[
{
required: true,
message: messageEle("请输入价格"),
},
]}
>
<InputNumber min={0} />
</Form.Item>
<Form.Item
name={"isSuperfanshipGiveWechat" + item.period}
label="赠送微信"
initialValue={item?.is_superfanship_give_wechat}
rules={[
{
required: true,
message: messageEle("请选择是否赠送微信"),
},
]}
>
<select
style={{
height: 32,
padding: "4px 11px",
border: "1px solid #d9d9d9",
borderRadius: 4,
outline: "none",
}}
>
<option value="1"></option>
<option value="0"></option>
</select>
</Form.Item>
</div>
</div>
))}
</div>
<Button type="primary" htmlType="submit">
确认
</Button>