From 99c6f600a8cba4f1b3fb9bbdad5b50cb7d501ada Mon Sep 17 00:00:00 2001 From: yezian Date: Thu, 4 Jan 2024 14:40:05 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E6=AD=A5=E5=AE=8C=E6=88=90=E4=BA=BA?= =?UTF-8?q?=E5=B7=A5=E5=85=85=E5=80=BC=E9=A1=B5=E9=9D=A2=EF=BC=9B=E5=AE=8C?= =?UTF-8?q?=E6=88=90=E6=95=B0=E6=8D=AE=E7=BB=9F=E8=AE=A1=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/images/icon_border.png | Bin 0 -> 5040 bytes .../ManualRechargeAndWithdrawal/index.jsx | 71 +++++----- src/pages/Op/data.jsx | 133 ++++++++++++++++++ src/pages/Op/index.jsx | 10 +- 4 files changed, 171 insertions(+), 43 deletions(-) create mode 100644 public/images/icon_border.png create mode 100644 src/pages/Op/data.jsx diff --git a/public/images/icon_border.png b/public/images/icon_border.png new file mode 100644 index 0000000000000000000000000000000000000000..72c749dba1e6e2c09df0919d0242c859cd4d38ab GIT binary patch literal 5040 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 { const { TextArea } = Input; @@ -134,20 +133,16 @@ const ManualRechargeAndWithdrawalContent = (props) => { const modalSearch = async (value) => { try { const base = baseRequest(); - const signature = generateSignature(); - const response = await fetch( - `/op/account/list_by_user_id?signature=${signature}`, - { - method: "POST", - headers: { - "Content-Type": "application/json", - }, - body: JSON.stringify({ - user_id: parseInt(value.userId, 10), - ...base, - }), - } - ); + const response = await fetch(`/op/account/list_by_user_id`, { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify({ + user_id: parseInt(value.userId, 10), + ...base, + }), + }); const data = await response.json(); if (data.ret === -1) { alert(data.msg); @@ -177,34 +172,23 @@ const ManualRechargeAndWithdrawalContent = (props) => { try { const base = baseRequest(); - const signature = generateSignature({ - mid: selectedUser, - coins: parseInt(value.num, 10), - operator: base.b_mid.toString(), - ...base, + const response = await fetch(`/op/vas/create_order`, { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify({ + mid: selectedUser, + coins: parseInt(value.num, 10), + operator: value.password, + ...base, + }), }); - const response = await fetch( - `/op/vas/create_order?signature=${signature}`, - { - method: "POST", - headers: { - "Content-Type": "application/json", - }, - body: JSON.stringify({ - mid: selectedUser, - coins: parseInt(value.num, 10), - operator: base.b_mid.toString(), - ...base, - }), - } - ); const data = await response.json(); - console.log(data); if (data.ret === -1) { alert(data.msg); return; } - setUserInfo(data.data.account); } catch (error) { console.error(error); } @@ -342,6 +326,19 @@ const ManualRechargeAndWithdrawalContent = (props) => { > + + + diff --git a/src/pages/Op/data.jsx b/src/pages/Op/data.jsx new file mode 100644 index 0000000..0376a63 --- /dev/null +++ b/src/pages/Op/data.jsx @@ -0,0 +1,133 @@ +import React, { useState, useEffect } from "react"; +import baseRequest from "../../utils/baseRequest"; +import { DatePicker, Table } from "antd"; + +export default function Data() { + const { RangePicker } = DatePicker; + const [data, setData] = useState(); + + // 获取当前时间戳 + const currentTimestamp = Date.now(); + // 获取前2个小时的时间戳 + const oneHourAgoTimestamp = currentTimestamp - 7200000; // 1小时 = 60分钟 * 60秒 * 1000毫秒 + const [selectTime, setSelectTime] = useState({ + ct_lower_bound: oneHourAgoTimestamp, + ct_upper_bound: currentTimestamp, + }); + + useEffect(() => { + const getData = async () => { + try { + const base = baseRequest(); + const response = await fetch(`/op/daily_statement/list`, { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify({ + ct_lower_bound: Math.floor(selectTime.ct_lower_bound / 1000), + ct_upper_bound: Math.floor(selectTime.ct_upper_bound / 1000), + offset: 0, + limit: 100, + ...base, + }), + }); + const _data = await response.json(); + const structedData = _data.data.list.map((item, index) => { + return { + key: index, + time: { + start: new Date(item.start_time * 1000).toLocaleString(), + end: new Date(item.end_time * 1000).toLocaleString(), + }, + h5_call_count: item.h5_call_count, + registered_user_count: item.registered_user_count, + order_created_count: item.order_created_count, + order_finished_count: item.order_finished_count, + }; + }); + setData(structedData); + if (_data.ret === -1) { + alert(_data.msg); + return; + } + } catch (error) { + console.error(error); + } + }; + getData(); + }, [selectTime]); + + const onOk = (value) => { + const startTimeStamp = value[0] && value[0].valueOf() - 60000; // 起始时间的时间戳 + const endTimeStamp = value[1] && value[1].valueOf() + 60000; // 结束时间的时间戳 + setSelectTime({ + ct_lower_bound: startTimeStamp, + ct_upper_bound: endTimeStamp, + }); + }; + + //表头 + const columns = [ + { + title: "时段", + dataIndex: "time", + key: "time", + render: (data) => { + return ( +
+

+ 开始时间: + {data.start} +

+

+ 结束时间: + {data.end} +

+
+ ); + }, + }, + { + title: "当日页面访问", + dataIndex: "h5_call_count", + key: "h5_call_count", + }, + { + title: "总注册", + dataIndex: "registered_user_count", + key: "registered_user_count", + }, + { + title: "总订单创建", + dataIndex: "order_created_count", + key: "order_created_count", + }, + { + title: "总订单完成", + dataIndex: "order_finished_count", + key: "order_finished_count", + }, + ]; + + return ( +
+

数据统计

+

请选择时段

+ + + + ); +} diff --git a/src/pages/Op/index.jsx b/src/pages/Op/index.jsx index 0caef2c..a0e4a75 100644 --- a/src/pages/Op/index.jsx +++ b/src/pages/Op/index.jsx @@ -16,6 +16,7 @@ import { import { Menu, Layout } from "antd"; import { Outlet, useNavigate, useLocation } from "react-router-dom"; import { checkAuth, signOut } from "../../utils/auth"; +import Data from "./data"; export default function Op() { const { Content, Sider } = Layout; @@ -92,11 +93,8 @@ export default function Op() { zIndex: 999, }} > -
- +
navigate("/")} className="op-logo"> +

铁粉空间运营

- {location.pathname === "/" &&

好兄弟,辛苦了!加油!奥利给!

} + {location.pathname === "/" && }