新增动态机审、查询手机号、置顶所有未处理订单;删除广告审核、logo审核;优化部分细节
This commit is contained in:
parent
5bfe898cdc
commit
4242097bb6
|
@ -0,0 +1,57 @@
|
|||
import React, { useState } from "react";
|
||||
import { Form, Input, Space, Button } from "antd";
|
||||
import baseRequest from "../../utils/baseRequest";
|
||||
|
||||
export default function GetPhoneNumber() {
|
||||
const [phoneNumber, setPhoneNumber] = useState();
|
||||
//搜索
|
||||
const search = async (value) => {
|
||||
try {
|
||||
const base = baseRequest();
|
||||
const response = await fetch("/op/account/get_mobile_phone_by_user_id", {
|
||||
method: "POST",
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
},
|
||||
body: JSON.stringify({
|
||||
user_id: parseInt(value.user_id, 10),
|
||||
...base,
|
||||
}),
|
||||
});
|
||||
const data = await response.json();
|
||||
if (data.ret === -1) {
|
||||
alert(data.msg);
|
||||
return;
|
||||
}
|
||||
setPhoneNumber(
|
||||
data.data.mobile_phone === ""
|
||||
? "未查询到手机号,请检查ID是否正确"
|
||||
: data.data.mobile_phone
|
||||
);
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
}
|
||||
};
|
||||
//表单提交失败
|
||||
const onFinishFailed = (errorInfo) => {
|
||||
console.log("Failed:", errorInfo);
|
||||
};
|
||||
return (
|
||||
<div className="mt-4" style={{ marginLeft: 20, marginRight: 20 }}>
|
||||
<Form name="search" onFinish={search} onFinishFailed={onFinishFailed}>
|
||||
<Space style={{ marginBottom: 20 }}>
|
||||
<Form.Item label="ID" name="user_id" style={{ margin: 0 }}>
|
||||
<Input type="number" />
|
||||
</Form.Item>
|
||||
<Button type="primary" htmlType="submit">
|
||||
搜索
|
||||
</Button>
|
||||
</Space>
|
||||
</Form>
|
||||
<p className="text-red-400">
|
||||
该功能仅限内部出于售后目的使用,请勿泄漏用户手机号
|
||||
</p>
|
||||
<p className="text-lg mt-4">{phoneNumber}</p>
|
||||
</div>
|
||||
);
|
||||
}
|
|
@ -63,46 +63,36 @@ const ImageMachineReviewContent = (props) => {
|
|||
<div key={index}>
|
||||
<p className="text-red-400">图{index + 1}违规情况:</p>
|
||||
<div className="flex flex-wrap gap-1">
|
||||
<div className="border-2 border-black bg-gray-200">
|
||||
<p>色情审核:</p>
|
||||
<ul>
|
||||
<li>建议:{item.porn_scene_suggestion}</li>
|
||||
<li>结果:{item.porn_scene_label}</li>
|
||||
<li>结果:{item.porn_scene_rate.toFixed(1)}</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div className="border-2 border-black bg-gray-200">
|
||||
<p>暴恐审核:</p>
|
||||
<ul>
|
||||
<li>建议:{item.terrorism_scene_suggestion}</li>
|
||||
<li>结果:{item.terrorism_scene_label}</li>
|
||||
<li>结果:{item.terrorism_scene_rate.toFixed(1)}</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div className="border-2 border-black bg-gray-200">
|
||||
<p>广告审核:</p>
|
||||
<ul>
|
||||
<li>建议:{item.ad_scene_suggestion}</li>
|
||||
<li>结果:{item.ad_scene_label}</li>
|
||||
<li>结果:{item.ad_scene_rate.toFixed(1)}</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div className="border-2 border-black bg-gray-200">
|
||||
<p>不良审核:</p>
|
||||
<ul>
|
||||
<li>建议:{item.live_scene_suggestion}</li>
|
||||
<li>结果:{item.live_scene_label}</li>
|
||||
<li>结果:{item.live_scene_rate.toFixed(1)}</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div className="border-2 border-black bg-gray-200">
|
||||
<p>logo审核:</p>
|
||||
<ul>
|
||||
<li>建议:{item.logo_scene_suggestion}</li>
|
||||
<li>结果:{item.logo_scene_label}</li>
|
||||
<li>结果:{item.logo_scene_rate.toFixed(1)}</li>
|
||||
</ul>
|
||||
</div>
|
||||
{item.porn_scene_suggestion !== "pass" && (
|
||||
<div className="border-2 border-black bg-gray-200">
|
||||
<p>色情审核:</p>
|
||||
<ul>
|
||||
<li>建议:{item.porn_scene_suggestion}</li>
|
||||
<li>结果:{item.porn_scene_label}</li>
|
||||
<li>结果:{item.porn_scene_rate.toFixed(1)}</li>
|
||||
</ul>
|
||||
</div>
|
||||
)}
|
||||
{item.terrorism_scene_suggestion !== "pass" && (
|
||||
<div className="border-2 border-black bg-gray-200">
|
||||
<p>暴恐审核:</p>
|
||||
<ul>
|
||||
<li>建议:{item.terrorism_scene_suggestion}</li>
|
||||
<li>结果:{item.terrorism_scene_label}</li>
|
||||
<li>结果:{item.terrorism_scene_rate.toFixed(1)}</li>
|
||||
</ul>
|
||||
</div>
|
||||
)}
|
||||
{item.live_scene_suggestion !== "pass" && (
|
||||
<div className="border-2 border-black bg-gray-200">
|
||||
<p>不良审核:</p>
|
||||
<ul>
|
||||
<li>建议:{item.live_scene_suggestion}</li>
|
||||
<li>结果:{item.live_scene_label}</li>
|
||||
<li>结果:{item.live_scene_rate.toFixed(1)}</li>
|
||||
</ul>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
|
|
|
@ -60,7 +60,6 @@ export default function Login() {
|
|||
return;
|
||||
}
|
||||
signIn(data);
|
||||
navigate("/");
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
}
|
||||
|
|
|
@ -144,6 +144,7 @@ const ManualRechargeAndWithdrawalContent = (props) => {
|
|||
}),
|
||||
});
|
||||
const data = await response.json();
|
||||
console.log(data);
|
||||
if (data.ret === -1) {
|
||||
alert(data.msg);
|
||||
return;
|
||||
|
|
|
@ -6,6 +6,7 @@ export default function Data() {
|
|||
const { RangePicker } = DatePicker;
|
||||
const [data, setData] = useState();
|
||||
const [order, setOrder] = useState();
|
||||
const [notFinishOrder, setNotFinishOrder] = useState();
|
||||
|
||||
// 获取当前时间戳
|
||||
const currentTimestamp = Date.now();
|
||||
|
@ -69,7 +70,7 @@ export default function Data() {
|
|||
st: Math.floor(selectTime.ct_lower_bound / 1000),
|
||||
et: Math.floor(selectTime.ct_upper_bound / 1000),
|
||||
offset: 0,
|
||||
limit: 100,
|
||||
limit: 10000,
|
||||
...base,
|
||||
}),
|
||||
});
|
||||
|
@ -92,6 +93,41 @@ export default function Data() {
|
|||
};
|
||||
});
|
||||
setOrder(structedData);
|
||||
//查询所有未处理的订单
|
||||
const response2 = await fetch(`/op/vas/coin_order_list`, {
|
||||
method: "POST",
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
},
|
||||
body: JSON.stringify({
|
||||
st: 1704038400, //从2024-01-01 00:00:00开始
|
||||
et: Math.floor(Date.now() / 1000),
|
||||
offset: 0,
|
||||
limit: 10000,
|
||||
...base,
|
||||
}),
|
||||
});
|
||||
const _data2 = await response2.json();
|
||||
if (_data2.ret === -1) {
|
||||
alert(_data2.msg);
|
||||
return;
|
||||
}
|
||||
const structedData2 = _data2.data.list
|
||||
.filter((item, index) => item.order_status === 3)
|
||||
.map((item, index) => {
|
||||
return {
|
||||
key: index,
|
||||
time: new Date(item.ct * 1000).toLocaleString(),
|
||||
user: item.user_user_id,
|
||||
streamer: item.streamer_user_id,
|
||||
price: item.coins / 10,
|
||||
order_detail: {
|
||||
order_id: item.order_id,
|
||||
order_status_desc: item.order_status_desc,
|
||||
},
|
||||
};
|
||||
});
|
||||
setNotFinishOrder(structedData2);
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
}
|
||||
|
@ -205,12 +241,21 @@ export default function Data() {
|
|||
format="YYYY-MM-DD HH:mm"
|
||||
onOk={onOk}
|
||||
/>
|
||||
<p>全部未处理订单</p>
|
||||
<Table
|
||||
columns={orderColumns}
|
||||
dataSource={notFinishOrder}
|
||||
pagination={{ pageSize: 20 }}
|
||||
scroll={{ y: window.innerHeight - 300 }}
|
||||
/>
|
||||
<p>时段订单</p>
|
||||
<Table
|
||||
columns={orderColumns}
|
||||
dataSource={order}
|
||||
pagination={{ pageSize: 20 }}
|
||||
scroll={{ y: window.innerHeight - 300 }}
|
||||
/>
|
||||
<p>时段数据</p>
|
||||
<Table
|
||||
columns={columns}
|
||||
dataSource={data}
|
||||
|
|
|
@ -52,6 +52,7 @@ export default function Op() {
|
|||
// getItem("网红信息修改审核", "streamerProfileReview"),
|
||||
getItem("图片机审回查", "imageMachineReview"),
|
||||
getItem("文本机审回查", "textMachineReview"),
|
||||
getItem("动态机审回查", "postMachineReview"),
|
||||
]),
|
||||
getItem("网红管理", "streamerManagement", <ShopOutlined />, [
|
||||
getItem("网红资料", "streamerInformation"),
|
||||
|
@ -61,6 +62,9 @@ export default function Op() {
|
|||
getItem("发布与编辑", "createAndEditPost"),
|
||||
getItem("置顶动态", "topPosts"),
|
||||
]),
|
||||
getItem("信息查询", "search", <FormOutlined />, [
|
||||
getItem("手机号查询", "getPhoneNumber"),
|
||||
]),
|
||||
// getItem("用户管理", "userManagement", <UsergroupAddOutlined />),
|
||||
// getItem("订单管理", "orderManagement", <FileSearchOutlined />, [
|
||||
// getItem("订单查询", "ordersQuerry"),
|
||||
|
@ -80,7 +84,6 @@ export default function Op() {
|
|||
const onClick = (e) => {
|
||||
if (e.key === "signOut") {
|
||||
signOut();
|
||||
navigate("/login");
|
||||
return;
|
||||
}
|
||||
navigate(e.key);
|
||||
|
|
|
@ -0,0 +1,524 @@
|
|||
import React, { useState, useRef, useEffect } from "react";
|
||||
import { Form, Input, Button, Space, Table, Menu, Image } from "antd";
|
||||
import {
|
||||
Routes,
|
||||
Route,
|
||||
Navigate,
|
||||
useNavigate,
|
||||
useLocation,
|
||||
} from "react-router-dom";
|
||||
import baseRequest from "../../utils/baseRequest";
|
||||
|
||||
const PostMachineReviewContent = (props) => {
|
||||
const { TextArea } = Input;
|
||||
const current = props.current;
|
||||
//表头
|
||||
const columns = [
|
||||
{
|
||||
title: "现内容",
|
||||
dataIndex: "newMedia",
|
||||
key: "newMedia",
|
||||
render: (data) => (
|
||||
<div className="flex flex-col">
|
||||
<div>
|
||||
<p className="text-red-400">
|
||||
文案:<span className="text-black">{data.text}</span>
|
||||
</p>
|
||||
</div>
|
||||
<p className="text-red-400">媒体:</p>
|
||||
<div className="flex flex-wrap gap-1">
|
||||
{data.media.images.map((item, index) => (
|
||||
<Image key={index} src={item.urls[0]} width={100} />
|
||||
))}
|
||||
{data.media.videos.map((item, index) => (
|
||||
<video key={index} src={item.urls[0]} width={150} controls />
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
),
|
||||
},
|
||||
{
|
||||
title: "原内容",
|
||||
dataIndex: "oldMedia",
|
||||
key: "oldMedia",
|
||||
render: (data) => (
|
||||
<div className="flex flex-col">
|
||||
<p className="text-red-400">
|
||||
文案:<span className="text-black">{data.text}</span>
|
||||
</p>
|
||||
<p className="text-red-400">媒体:</p>
|
||||
<div className="flex flex-wrap gap-1">
|
||||
{data.media.images.map((item, index) => (
|
||||
<Image key={index} src={item.urls[0]} width={100} />
|
||||
))}
|
||||
{data.media.videos.map((item, index) => (
|
||||
<video key={index} src={item.urls[0]} width={150} controls />
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
),
|
||||
},
|
||||
{
|
||||
title: "审核结果",
|
||||
dataIndex: "info",
|
||||
key: "info",
|
||||
render: (data) => (
|
||||
<div className="flex flex-col">
|
||||
<p>文案审核结果:</p>
|
||||
<div>
|
||||
{data.text.status === 2 || data.text.status === 5 ? (
|
||||
<p className="text-green-400">无违规</p>
|
||||
) : (
|
||||
<div className="flex flex-wrap gap-1">
|
||||
{data.text.spam_label_details && (
|
||||
<div className="border-2 border-black bg-gray-200">
|
||||
<p>垃圾审核:</p>
|
||||
<ul>
|
||||
{data.text.spam_label_details?.map((item, index) => (
|
||||
<li key={index}>{item}</li>
|
||||
))}
|
||||
</ul>
|
||||
</div>
|
||||
)}
|
||||
{data.text.politics_label_details && (
|
||||
<div className="border-2 border-black bg-gray-200">
|
||||
<p>敏感审核:</p>
|
||||
<ul>
|
||||
{data.text.politics_label_details?.map((item, index) => (
|
||||
<li key={index}>{item}</li>
|
||||
))}
|
||||
</ul>
|
||||
</div>
|
||||
)}
|
||||
{data.text.abuse_label_details && (
|
||||
<div className="border-2 border-black bg-gray-200">
|
||||
<p>辱骂审核:</p>
|
||||
<ul>
|
||||
{data.text.abuse_label_details?.map((item, index) => (
|
||||
<li key={index}>{item}</li>
|
||||
))}
|
||||
</ul>
|
||||
</div>
|
||||
)}
|
||||
{data.text.terrorism_label_details && (
|
||||
<div className="border-2 border-black bg-gray-200">
|
||||
<p>暴恐审核:</p>
|
||||
<ul>
|
||||
{data.text.terrorism_label_details?.map((item, index) => (
|
||||
<li key={index}>{item}</li>
|
||||
))}
|
||||
</ul>
|
||||
</div>
|
||||
)}
|
||||
{data.text.porn_label_details && (
|
||||
<div className="border-2 border-black bg-gray-200">
|
||||
<p>鉴黄审核:</p>
|
||||
<ul>
|
||||
{data.porn_label_details?.map((item, index) => (
|
||||
<li key={index}>{item}</li>
|
||||
))}
|
||||
</ul>
|
||||
</div>
|
||||
)}
|
||||
{data.text.flood_label_details && (
|
||||
<div className="border-2 border-black bg-gray-200">
|
||||
<p>灌水审核:</p>
|
||||
<ul>
|
||||
{data.text.flood_label_details?.map((item, index) => (
|
||||
<li key={index}>{item}</li>
|
||||
))}
|
||||
</ul>
|
||||
</div>
|
||||
)}
|
||||
{data.text.contraband_label_details && (
|
||||
<div className="border-2 border-black bg-gray-200">
|
||||
<p>违禁审核:</p>
|
||||
<ul>
|
||||
{data.text.contraband_label_details?.map(
|
||||
(item, index) => (
|
||||
<li key={index}>{item}</li>
|
||||
)
|
||||
)}
|
||||
</ul>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
<hr className="w-full" />
|
||||
<p>媒体审核结果:</p>
|
||||
{data.media === null && (
|
||||
<p className="text-green-400">视频不过审核</p>
|
||||
)}
|
||||
<div>
|
||||
{data.media?.map((item, index) => {
|
||||
if (item.status === 2 || item.status === 5) {
|
||||
return (
|
||||
<p key={index} className="text-green-400">
|
||||
图{index + 1}无违规
|
||||
</p>
|
||||
);
|
||||
}
|
||||
if (item.status === 10) {
|
||||
return (
|
||||
<p key={index} className="text-green-400">
|
||||
图{index + 1}审核失败
|
||||
</p>
|
||||
);
|
||||
}
|
||||
return (
|
||||
<div key={index}>
|
||||
<p className="text-red-400">图{index + 1}违规情况:</p>
|
||||
<div className="flex flex-wrap gap-1">
|
||||
{item.porn_scene_suggestion !== "pass" && (
|
||||
<div className="border-2 border-black bg-gray-200">
|
||||
<p>色情审核:</p>
|
||||
<ul>
|
||||
<li>建议:{item.porn_scene_suggestion}</li>
|
||||
<li>结果:{item.porn_scene_label}</li>
|
||||
<li>结果:{item.porn_scene_rate.toFixed(1)}</li>
|
||||
</ul>
|
||||
</div>
|
||||
)}
|
||||
{item.terrorism_scene_suggestion !== "pass" && (
|
||||
<div className="border-2 border-black bg-gray-200">
|
||||
<p>暴恐审核:</p>
|
||||
<ul>
|
||||
<li>建议:{item.terrorism_scene_suggestion}</li>
|
||||
<li>结果:{item.terrorism_scene_label}</li>
|
||||
<li>结果:{item.terrorism_scene_rate.toFixed(1)}</li>
|
||||
</ul>
|
||||
</div>
|
||||
)}
|
||||
{item.live_scene_suggestion !== "pass" && (
|
||||
<div className="border-2 border-black bg-gray-200">
|
||||
<p>不良审核:</p>
|
||||
<ul>
|
||||
<li>建议:{item.live_scene_suggestion}</li>
|
||||
<li>结果:{item.live_scene_label}</li>
|
||||
<li>结果:{item.live_scene_rate.toFixed(1)}</li>
|
||||
</ul>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
})}
|
||||
</div>
|
||||
</div>
|
||||
),
|
||||
},
|
||||
{
|
||||
title: "提交时间",
|
||||
dataIndex: "submitTime",
|
||||
key: "submitTime",
|
||||
},
|
||||
{
|
||||
title: "备注",
|
||||
dataIndex: "remarks",
|
||||
key: "remarks",
|
||||
render: (_, record) => (
|
||||
<div className="flex flex-col">
|
||||
<Form.Item
|
||||
name={record.id.text}
|
||||
initialValue={`文案:${record.remarks.text}`}
|
||||
>
|
||||
<TextArea disabled rows={4} />
|
||||
</Form.Item>
|
||||
<Form.Item
|
||||
name={record.id.media}
|
||||
initialValue={`媒体:${record.remarks.media}`}
|
||||
>
|
||||
<TextArea disabled rows={4} />
|
||||
</Form.Item>
|
||||
</div>
|
||||
),
|
||||
},
|
||||
{
|
||||
title: "操作",
|
||||
dataIndex: "opeartion",
|
||||
key: "opeartion",
|
||||
render: (_, record) => (
|
||||
<div>
|
||||
<Space>
|
||||
<Space.Compact direction="vertical">
|
||||
{(current === "rollbackbymachine" ||
|
||||
current === "machinereviewfail") && (
|
||||
<Button type="primary" onClick={() => onClickSubmit(record)}>
|
||||
通过
|
||||
</Button>
|
||||
)}
|
||||
</Space.Compact>
|
||||
</Space>
|
||||
</div>
|
||||
),
|
||||
},
|
||||
];
|
||||
//给表单绑定ref
|
||||
const formRef = useRef(null);
|
||||
//点击修改状态按钮
|
||||
const onClickSubmit = (record) => {
|
||||
formRef.current.record = record;
|
||||
formRef.current.btn = "submit";
|
||||
formRef.current.submit();
|
||||
};
|
||||
//提交表单
|
||||
const handleSubmit = async () => {
|
||||
try {
|
||||
//通过图片审核,如果是视频直接跳过
|
||||
const base = baseRequest();
|
||||
if (formRef.current.record.others.media.id !== undefined) {
|
||||
const response = await fetch("/op/image_audit_task/pass_batch", {
|
||||
method: "POST",
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
},
|
||||
body: JSON.stringify({
|
||||
tasks: [formRef.current.record.others.media],
|
||||
...base,
|
||||
}),
|
||||
});
|
||||
const approveData = await response.json();
|
||||
console.log(approveData);
|
||||
if (approveData.ret === -1) {
|
||||
alert(approveData.msg);
|
||||
return;
|
||||
}
|
||||
}
|
||||
//通过文案审核
|
||||
const response2 = await fetch("/op/text_audit_task/pass_batch", {
|
||||
method: "POST",
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
},
|
||||
body: JSON.stringify({
|
||||
tasks: [formRef.current.record.others.text],
|
||||
...base,
|
||||
}),
|
||||
});
|
||||
const approveData2 = await response2.json();
|
||||
console.log(approveData2);
|
||||
if (approveData2.ret === -1) {
|
||||
alert(approveData2.msg);
|
||||
return;
|
||||
}
|
||||
//取消数据展示
|
||||
setShowData(
|
||||
showData.filter(
|
||||
(item) => item.id.media !== formRef.current.record.others.media.id
|
||||
)
|
||||
);
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
}
|
||||
};
|
||||
//获取数据
|
||||
const [data, setData] = useState([]);
|
||||
const [offset, setOffset] = useState(0);
|
||||
const [more, setMore] = useState(1);
|
||||
const getData = async () => {
|
||||
if (!more) return;
|
||||
let querryStatus;
|
||||
switch (current) {
|
||||
case "rollbackbymachine":
|
||||
querryStatus = 4;
|
||||
break;
|
||||
case "machinereviewfail":
|
||||
querryStatus = 10;
|
||||
break;
|
||||
case "passbymachine":
|
||||
querryStatus = 2;
|
||||
break;
|
||||
case "passbyoperator":
|
||||
querryStatus = 5;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
try {
|
||||
const base = baseRequest();
|
||||
const response = await fetch("/op/moment_audit_task/list", {
|
||||
method: "POST",
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
},
|
||||
body: JSON.stringify({
|
||||
status: querryStatus,
|
||||
offset: offset,
|
||||
limit: 200,
|
||||
...base,
|
||||
}),
|
||||
});
|
||||
const temData = await response.json();
|
||||
console.log(temData);
|
||||
if (temData.ret === -1) {
|
||||
alert(temData.msg);
|
||||
return;
|
||||
}
|
||||
//匹配表格格式
|
||||
const structedData = temData.data.list.map((item, index) => {
|
||||
return {
|
||||
key: index,
|
||||
id: {
|
||||
media: item.image_audit_task_vo.id,
|
||||
text: item.text_audit_task_vo.id,
|
||||
},
|
||||
newMedia: {
|
||||
media: item.moment_audit_task.final_media
|
||||
? item.moment_audit_task.final_media
|
||||
: item.moment_audit_task.audited_media,
|
||||
text: item.moment_audit_task.final_text
|
||||
? item.moment_audit_task.final_text
|
||||
: item.moment_audit_task.audited_text,
|
||||
},
|
||||
oldMedia: {
|
||||
media: item.moment_audit_task.audited_media,
|
||||
text: item.moment_audit_task.audited_text,
|
||||
},
|
||||
info: {
|
||||
media: item.image_audit_task_vo.image_audits,
|
||||
text: item.text_audit_task_vo.text_audit,
|
||||
},
|
||||
submitTime: new Date(
|
||||
item.moment_audit_task.ct * 1000
|
||||
).toLocaleString(),
|
||||
remarks: {
|
||||
media: item.image_audit_task_vo.remarks,
|
||||
text: item.text_audit_task_vo.remarks,
|
||||
},
|
||||
others: {
|
||||
media: {
|
||||
id: item.image_audit_task_vo.id,
|
||||
audited_media: item.image_audit_task_vo.audited_media,
|
||||
associative_database:
|
||||
item.image_audit_task_vo.associative_database,
|
||||
associative_table_name:
|
||||
item.image_audit_task_vo.associative_table_name,
|
||||
associative_table_id:
|
||||
item.image_audit_task_vo.associative_table_id,
|
||||
associative_table_column:
|
||||
item.image_audit_task_vo.associative_table_column,
|
||||
},
|
||||
text: {
|
||||
id: item.text_audit_task_vo.id,
|
||||
audited_text: item.text_audit_task_vo.audited_text,
|
||||
associative_database:
|
||||
item.text_audit_task_vo.associative_database,
|
||||
associative_table_name:
|
||||
item.text_audit_task_vo.associative_table_name,
|
||||
associative_table_id:
|
||||
item.text_audit_task_vo.associative_table_id,
|
||||
associative_table_column:
|
||||
item.text_audit_task_vo.associative_table_column,
|
||||
},
|
||||
},
|
||||
};
|
||||
});
|
||||
setData([...data, ...structedData]);
|
||||
setOffset(temData.data.offset);
|
||||
setMore(temData.data.more);
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
}
|
||||
};
|
||||
useEffect(() => {
|
||||
getData();
|
||||
}, [current]);
|
||||
|
||||
//展示的数据
|
||||
const [showData, setShowData] = useState([]);
|
||||
useEffect(() => {
|
||||
setShowData(data);
|
||||
}, [data]);
|
||||
//表单提交失败
|
||||
const onFinishFailed = (errorInfo) => {
|
||||
console.log("Failed:", errorInfo);
|
||||
};
|
||||
return (
|
||||
<div style={{ marginLeft: 20, marginRight: 20 }}>
|
||||
<p>
|
||||
{current === "rollbackbymachine" && `机审核违规${showData.length}条`}
|
||||
{current === "passbymachine" && `机审核通过${showData.length}条`}
|
||||
{current === "passbyoperator" && `运营通过${showData.length}条`}
|
||||
</p>
|
||||
<Form
|
||||
ref={formRef}
|
||||
name="remarks"
|
||||
onFinish={handleSubmit}
|
||||
onFinishFailed={onFinishFailed}
|
||||
>
|
||||
<Table
|
||||
columns={columns}
|
||||
dataSource={showData}
|
||||
pagination={{ pageSize: 20 }}
|
||||
scroll={{ y: window.innerHeight - 300 }}
|
||||
/>
|
||||
</Form>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export default function PostMachineReview() {
|
||||
const navigate = useNavigate();
|
||||
//当前tab
|
||||
const location = useLocation();
|
||||
const pathname = location.pathname.split("/")[2] || "rollbackbymachine";
|
||||
const [current, setCurrent] = useState(pathname);
|
||||
//tab名称
|
||||
const items = [
|
||||
{
|
||||
label: "机审回退",
|
||||
key: "rollbackbymachine",
|
||||
},
|
||||
{
|
||||
label: "机审失败",
|
||||
key: "machinereviewfail",
|
||||
},
|
||||
{
|
||||
label: "机审通过",
|
||||
key: "passbymachine",
|
||||
},
|
||||
{
|
||||
label: "运营通过",
|
||||
key: "passbyoperator",
|
||||
},
|
||||
];
|
||||
const onClick = (e) => {
|
||||
setCurrent(e.key);
|
||||
navigate(e.key);
|
||||
window.location.reload();
|
||||
};
|
||||
|
||||
return (
|
||||
<div>
|
||||
<Menu
|
||||
onClick={onClick}
|
||||
selectedKeys={[current]}
|
||||
mode="horizontal"
|
||||
items={items}
|
||||
/>
|
||||
<Routes>
|
||||
<Route
|
||||
path="/"
|
||||
element={<Navigate to="/postMachineReview/rollbackbymachine" />}
|
||||
/>
|
||||
<Route
|
||||
path="/rollbackbymachine"
|
||||
element={<PostMachineReviewContent current="rollbackbymachine" />}
|
||||
/>
|
||||
<Route
|
||||
path="/machinereviewfail"
|
||||
element={<PostMachineReviewContent current="machinereviewfail" />}
|
||||
/>
|
||||
<Route
|
||||
path="/passbymachine"
|
||||
element={<PostMachineReviewContent current="passbymachine" />}
|
||||
/>
|
||||
<Route
|
||||
path="/passbyoperator"
|
||||
element={<PostMachineReviewContent current="passbyoperator" />}
|
||||
/>
|
||||
</Routes>
|
||||
</div>
|
||||
);
|
||||
}
|
|
@ -27,9 +27,6 @@ const VerificationContent = (props) => {
|
|||
<p>
|
||||
ID:<span className="text-red-400">{data.user_id}</span>
|
||||
</p>
|
||||
<p>
|
||||
性别:<span className="text-red-400">{data.gender}</span>
|
||||
</p>
|
||||
</div>
|
||||
),
|
||||
},
|
||||
|
@ -198,7 +195,7 @@ const VerificationContent = (props) => {
|
|||
body: JSON.stringify({
|
||||
status: querryStatus,
|
||||
offset: offset,
|
||||
limit: 200,
|
||||
limit: 10000,
|
||||
...base,
|
||||
}),
|
||||
});
|
||||
|
@ -220,6 +217,8 @@ const VerificationContent = (props) => {
|
|||
},
|
||||
body: JSON.stringify({
|
||||
mids: streamerMids,
|
||||
offset: 0,
|
||||
limit: 10000,
|
||||
...base,
|
||||
}),
|
||||
});
|
||||
|
@ -244,7 +243,6 @@ const VerificationContent = (props) => {
|
|||
avatar: item.avatar?.images[0].urls[0],
|
||||
user_id: item.user_id,
|
||||
name: item.name,
|
||||
gender: item.gender,
|
||||
},
|
||||
verificationInfo: {
|
||||
real_name: item.real_name,
|
||||
|
|
|
@ -103,16 +103,6 @@ const TextMachineReviewContent = (props) => {
|
|||
</ul>
|
||||
</div>
|
||||
)}
|
||||
{data.ad_label_details && (
|
||||
<div className="border-2 border-black bg-gray-200">
|
||||
<p>广告审核:</p>
|
||||
<ul>
|
||||
{data.ad_label_details?.map((item, index) => (
|
||||
<li key={index}>{item}</li>
|
||||
))}
|
||||
</ul>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
},
|
||||
|
|
|
@ -17,6 +17,8 @@ import TextMachineReview from "../pages/TextMachineReview";
|
|||
import ManualRechargeAndWithdrawal from "../pages/ManualRechargeAndWithdrawal";
|
||||
import CreateAndEditPost from "../pages/CreateAndEditPost";
|
||||
import TopPosts from "../pages/TopPosts";
|
||||
import PostMachineReview from "../pages/PostMachineReview";
|
||||
import GetPhoneNumber from "../pages/GetPhoneNumber";
|
||||
|
||||
const routes = [
|
||||
{
|
||||
|
@ -95,6 +97,14 @@ const routes = [
|
|||
path: "topPosts/*",
|
||||
element: <TopPosts />,
|
||||
},
|
||||
{
|
||||
path: "postMachineReview/*",
|
||||
element: <PostMachineReview />,
|
||||
},
|
||||
{
|
||||
path: "getPhoneNumber/*",
|
||||
element: <GetPhoneNumber />,
|
||||
},
|
||||
],
|
||||
},
|
||||
];
|
||||
|
|
Loading…
Reference in New Issue