Browse Source

feat: 利好加提现相关功能

lihao
nili 3 months ago
parent
commit
05bcbc11e3
  1. 7
      config/routes.ts
  2. 1
      dist/15.5484f456.async.js
  3. 72
      dist/247.3fe8fb10.async.js
  4. 1
      dist/971.8a6ac777.async.js
  5. 1
      dist/_umi_route_preload_helper.517c19ad.js
  6. 1
      dist/_umi_route_preload_helper.98a76856.js
  7. 4
      dist/index.html
  8. 1
      dist/p__AdminManagement.2a8ffce8.async.js
  9. 1
      dist/p__AdminManagement.5355b667.async.js
  10. 1
      dist/p__AdvRecordListV2.4cf35d76.async.js
  11. 1
      dist/p__AdvRecordListV2.f8055b8e.async.js
  12. 1
      dist/p__App__AppManagement.9a034487.async.js
  13. 1
      dist/p__App__AppManagement.e7db4a10.async.js
  14. 1
      dist/p__MoneyManagement.4138f9c6.async.js
  15. 1
      dist/p__Proxy__ProxyAdvRecordListV2.331f8d02.async.js
  16. 1
      dist/p__Proxy__ProxyAdvRecordListV2.95a376ea.async.js
  17. 1
      dist/p__Proxy__ProxyUserManagement.3e781dae.async.js
  18. 1
      dist/p__Proxy__ProxyUserManagement.752f65f0.async.js
  19. 1
      dist/p__SuperAdmin.4df5c668.async.js
  20. 1
      dist/p__SuperAdmin.e8ce76c3.async.js
  21. 1
      dist/p__UserManagement.7f7499c6.async.js
  22. 1
      dist/p__UserManagement.c7a0e4a5.async.js
  23. 22
      dist/umi.a0091e7b.js
  24. 6
      src/app.tsx
  25. 178
      src/pages/App/CashConfigForm.tsx
  26. 27
      src/pages/Proxy/ProxyUserManagement.tsx
  27. 19
      src/pages/User/UserInfo.tsx
  28. 28
      src/pages/UserManagement.tsx

7
config/routes.ts

@ -55,6 +55,13 @@ export default [
access: 'canAdmin', access: 'canAdmin',
component: './UserManagement', component: './UserManagement',
}, },
{
path: '/money/:code',
name: '提现管理',
icon: 'smile',
access: 'canAdmin',
component: './MoneyManagement',
},
{ {
path: '/app/:code', path: '/app/:code',
name: '应用列表', name: '应用列表',

1
dist/15.5484f456.async.js

File diff suppressed because one or more lines are too long

72
dist/343.7ff141fb.async.js → dist/247.3fe8fb10.async.js

File diff suppressed because one or more lines are too long

1
dist/971.8a6ac777.async.js

File diff suppressed because one or more lines are too long

1
dist/_umi_route_preload_helper.517c19ad.js

@ -1 +0,0 @@
!function(){"use strict";var t="/".replace(/([^/])$/,"$1/"),e=location.pathname,n=e.startsWith(t)&&decodeURI("/".concat(e.slice(t.length)));if(n){var a=document,c=a.head,r=a.createElement.bind(a),i=function(t,e,n){var a,c=e.r[t]||(null===(a=Object.entries(e.r).find((function(e){var n=e[0];return new RegExp("^".concat(n.replace(/\/:[^/]+/g,"/[^/]+").replace("/*","/.+"),"$")).test(t)})))||void 0===a?void 0:a[1]);return null==c?void 0:c.map((function(t){var a=e.f[t][1],c=e.f[t][0];return{type:c.split(".").pop(),url:"".concat(n.publicPath).concat(c),attrs:[["data-".concat(e.b),"".concat(e.p,":").concat(a)]]}}))}(n,{"p":"ant-design-pro","b":"webpack","f":[["134.6fc81d91.async.js",134],["169.57647c7d.async.js",169],["p__Welcome.61596037.async.js",185],["t__plugin-layout__Layout.6cae69f5.chunk.css",301],["t__plugin-layout__Layout.4594a64b.async.js",301],["343.7ff141fb.async.js",343],["p__User__Login__index.9d3ab92e.async.js",366],["p__DeviceOwnerApp.1ed365d2.async.js",371],["390.41467286.async.js",390],["393.38316f72.async.js",393],["397.fb5f72c1.async.js",397],["435.88a89336.async.js",435],["p__SuperAdmin.4df5c668.async.js",455],["p__Proxy__ProxyUserManagement.752f65f0.async.js",526],["531.35af34f5.async.js",531],["539.290aefb9.async.js",539],["p__AdvRecordListV2.f8055b8e.async.js",542],["p__Bind.b6ee068f.async.js",557],["559.016bfdbb.async.js",559],["p__404.0c100574.async.js",571],["635.8a884f26.async.js",635],["p__App__AppManagement.9a034487.async.js",731],["761.f7bbde11.async.js",761],["p__AdminManagement.5355b667.async.js",816],["p__AdvRecordList.d682c9eb.async.js",857],["p__UserManagement.7f7499c6.async.js",903],["905.6e225d1b.async.js",905],["930.fca7adbf.async.js",930],["971.8a6ac777.async.js",971],["p__Proxy__ProxyAdvRecordListV2.95a376ea.async.js",990]],"r":{"/*":[19,26],"/":[0,3,4,18,20,26],"/welcome":[0,1,2,9,18,27,3,4,20,26],"/super":[0,1,5,12,14,15,26,27,3,4,18,20],"/adminList":[0,1,14,15,22,23,26,28,3,4,18,20],"/bind":[0,1,9,10,17,18,27,3,4,20,26],"/appList":[0,1,5,10,14,15,21,26,27,3,4,18,20],"/advList/:code":[0,1,11,14,15,18,24,26,27,3,4,20],"/advListV2/:code":[0,1,9,11,14,15,16,18,26,27,3,4,20],"/user/:code":[0,1,14,15,25,26,27,28,3,4,18,20],"/app/:code":[0,1,7,11,14,15,18,26,27,3,4,20],"/user/login":[0,1,6,14],"/proxy/advListV2/:code":[0,1,11,14,15,18,26,27,29,3,4,20],"/proxy/user/:code":[0,1,13,14,15,26,27,28,3,4,18,20]}},{publicPath:"https://apks.bzgames.cn/matrix_fe/"});null==i||i.forEach((function(t){var e,n=t.type,a=t.url;if("js"===n)(e=r("script")).src=a,e.async=!0;else{if("css"!==n)return;(e=r("link")).href=a,e.rel="preload",e.as="style"}t.attrs.forEach((function(t){e.setAttribute(t[0],t[1]||"")})),c.appendChild(e)}))}}();

1
dist/_umi_route_preload_helper.98a76856.js

@ -0,0 +1 @@
!function(){"use strict";var t="/".replace(/([^/])$/,"$1/"),e=location.pathname,n=e.startsWith(t)&&decodeURI("/".concat(e.slice(t.length)));if(n){var a=document,c=a.head,r=a.createElement.bind(a),i=function(t,e,n){var a,c=e.r[t]||(null===(a=Object.entries(e.r).find((function(e){var n=e[0];return new RegExp("^".concat(n.replace(/\/:[^/]+/g,"/[^/]+").replace("/*","/.+"),"$")).test(t)})))||void 0===a?void 0:a[1]);return null==c?void 0:c.map((function(t){var a=e.f[t][1],c=e.f[t][0];return{type:c.split(".").pop(),url:"".concat(n.publicPath).concat(c),attrs:[["data-".concat(e.b),"".concat(e.p,":").concat(a)]]}}))}(n,{"p":"ant-design-pro","b":"webpack","f":[["15.5484f456.async.js",15],["134.6fc81d91.async.js",134],["169.57647c7d.async.js",169],["p__Welcome.61596037.async.js",185],["p__MoneyManagement.4138f9c6.async.js",190],["247.3fe8fb10.async.js",247],["t__plugin-layout__Layout.6cae69f5.chunk.css",301],["t__plugin-layout__Layout.4594a64b.async.js",301],["p__User__Login__index.9d3ab92e.async.js",366],["p__DeviceOwnerApp.1ed365d2.async.js",371],["390.41467286.async.js",390],["393.38316f72.async.js",393],["397.fb5f72c1.async.js",397],["435.88a89336.async.js",435],["p__SuperAdmin.e8ce76c3.async.js",455],["p__Proxy__ProxyUserManagement.3e781dae.async.js",526],["531.35af34f5.async.js",531],["539.290aefb9.async.js",539],["p__AdvRecordListV2.4cf35d76.async.js",542],["p__Bind.b6ee068f.async.js",557],["559.016bfdbb.async.js",559],["p__404.0c100574.async.js",571],["635.8a884f26.async.js",635],["p__App__AppManagement.e7db4a10.async.js",731],["761.f7bbde11.async.js",761],["p__AdminManagement.2a8ffce8.async.js",816],["p__AdvRecordList.d682c9eb.async.js",857],["p__UserManagement.c7a0e4a5.async.js",903],["905.6e225d1b.async.js",905],["930.fca7adbf.async.js",930],["p__Proxy__ProxyAdvRecordListV2.331f8d02.async.js",990]],"r":{"/*":[21,28],"/":[1,6,7,20,22,28],"/welcome":[1,2,3,11,20,29,6,7,22,28],"/super":[0,1,2,5,14,16,17,28,29,6,7,20,22],"/adminList":[0,1,2,16,17,24,25,28,6,7,20,22],"/bind":[1,2,11,12,19,20,29,6,7,22,28],"/appList":[1,2,5,12,16,17,23,28,29,6,7,20,22],"/advList/:code":[1,2,13,16,17,20,26,28,29,6,7,22],"/advListV2/:code":[0,1,2,11,13,16,17,18,20,28,29,6,7,22],"/user/:code":[0,1,2,16,17,27,28,29,6,7,20,22],"/money/:code":[0,1,2,4,16,17,28,29,6,7,20,22],"/app/:code":[1,2,9,13,16,17,20,28,29,6,7,22],"/user/login":[1,2,8,16],"/proxy/advListV2/:code":[0,1,2,13,16,17,20,28,29,30,6,7,22],"/proxy/user/:code":[0,1,2,15,16,17,28,29,6,7,20,22]}},{publicPath:"https://apks.bzgames.cn/matrix_fe/"});null==i||i.forEach((function(t){var e,n=t.type,a=t.url;if("js"===n)(e=r("script")).src=a,e.async=!0;else{if("css"!==n)return;(e=r("link")).href=a,e.rel="preload",e.as="style"}t.attrs.forEach((function(t){e.setAttribute(t[0],t[1]||"")})),c.appendChild(e)}))}}();

4
dist/index.html

@ -7,10 +7,10 @@
<title>Ant Design Pro</title> <title>Ant Design Pro</title>
<link rel="stylesheet" href="https://apks.bzgames.cn/matrix_fe/umi.1ca9308c.css"> <link rel="stylesheet" href="https://apks.bzgames.cn/matrix_fe/umi.1ca9308c.css">
<script async src="/scripts/loading.js"></script> <script async src="/scripts/loading.js"></script>
<script src="https://apks.bzgames.cn/matrix_fe/_umi_route_preload_helper.517c19ad.js"></script> <script src="https://apks.bzgames.cn/matrix_fe/_umi_route_preload_helper.98a76856.js"></script>
</head> </head>
<body> <body>
<div id="root"></div> <div id="root"></div>
<script src="https://apks.bzgames.cn/matrix_fe/umi.b63ef643.js"></script> <script src="https://apks.bzgames.cn/matrix_fe/umi.a0091e7b.js"></script>
</body> </body>
</html> </html>

1
dist/p__AdminManagement.2a8ffce8.async.js

File diff suppressed because one or more lines are too long

1
dist/p__AdminManagement.5355b667.async.js

File diff suppressed because one or more lines are too long

1
dist/p__AdvRecordListV2.4cf35d76.async.js

File diff suppressed because one or more lines are too long

1
dist/p__AdvRecordListV2.f8055b8e.async.js

File diff suppressed because one or more lines are too long

1
dist/p__App__AppManagement.9a034487.async.js

File diff suppressed because one or more lines are too long

1
dist/p__App__AppManagement.e7db4a10.async.js

File diff suppressed because one or more lines are too long

1
dist/p__MoneyManagement.4138f9c6.async.js

File diff suppressed because one or more lines are too long

1
dist/p__Proxy__ProxyAdvRecordListV2.331f8d02.async.js

File diff suppressed because one or more lines are too long

1
dist/p__Proxy__ProxyAdvRecordListV2.95a376ea.async.js

File diff suppressed because one or more lines are too long

1
dist/p__Proxy__ProxyUserManagement.3e781dae.async.js

File diff suppressed because one or more lines are too long

1
dist/p__Proxy__ProxyUserManagement.752f65f0.async.js

File diff suppressed because one or more lines are too long

1
dist/p__SuperAdmin.4df5c668.async.js

File diff suppressed because one or more lines are too long

1
dist/p__SuperAdmin.e8ce76c3.async.js

File diff suppressed because one or more lines are too long

1
dist/p__UserManagement.7f7499c6.async.js

File diff suppressed because one or more lines are too long

1
dist/p__UserManagement.c7a0e4a5.async.js

File diff suppressed because one or more lines are too long

22
dist/umi.b63ef643.js → dist/umi.a0091e7b.js

File diff suppressed because one or more lines are too long

6
src/app.tsx

@ -93,6 +93,12 @@ const matrixMenu = (app: API.MatrixAppBo): MenuDataItem => {
access: 'canAdmin', access: 'canAdmin',
component: './UserManagement', component: './UserManagement',
}, },
{
name: '提现管理',
path: '/money/' + app.code,
access: 'canAdmin',
component: './MoneyManagement',
},
], ],
}; };
}; };

178
src/pages/App/CashConfigForm.tsx

@ -1,5 +1,6 @@
import { getAppNormalConfig, saveNormalConfig } from '@/services/matrix/matrixAppConfigController'; import { getAppNormalConfig, saveNormalConfig } from '@/services/matrix/matrixAppConfigController';
import { Form, InputNumber, Modal, Switch } from 'antd'; import { InfoCircleOutlined, MinusCircleOutlined, PlusOutlined } from '@ant-design/icons';
import { Button, Col, Form, Input, InputNumber, Modal, Row, Switch, Tooltip } from 'antd';
import React, { useEffect } from 'react'; import React, { useEffect } from 'react';
export type AppNormalConfigFormProps = { export type AppNormalConfigFormProps = {
@ -39,6 +40,23 @@ const AppNormalConfigForm: React.FC<AppNormalConfigFormProps> = (props) => {
props.onSubmit(); props.onSubmit();
}; };
const formItemLayout = {
labelCol: {
xs: { span: 24 },
sm: { span: 6 },
},
wrapperCol: {
xs: { span: 24 },
sm: { span: 20 },
},
};
const formItemLayoutWithOutLabel = {
wrapperCol: {
xs: { span: 24, offset: 10 },
sm: { span: 20, offset: 6 },
},
};
return ( return (
<Modal title="编辑" visible={props.updateModalOpen} onOk={handleOk} onCancel={handleCancel}> <Modal title="编辑" visible={props.updateModalOpen} onOk={handleOk} onCancel={handleCancel}>
<Form labelCol={{ span: 6 }} wrapperCol={{ span: 18 }} form={form} onFinish={handleSaveApp}> <Form labelCol={{ span: 6 }} wrapperCol={{ span: 18 }} form={form} onFinish={handleSaveApp}>
@ -57,6 +75,164 @@ const AppNormalConfigForm: React.FC<AppNormalConfigFormProps> = (props) => {
<Form.Item name="popUpDuration" label="插页广告间隔(秒)"> <Form.Item name="popUpDuration" label="插页广告间隔(秒)">
<InputNumber /> <InputNumber />
</Form.Item> </Form.Item>
<Form.List name="moneyLadder">
{(fields, { add, remove }) => (
<>
<Form.Item
// {...(index === 0 ? formItemLayout : formItemLayoutWithOutLabel)}
label={
<>
<span style={{ marginLeft: 4 }}>
<Tooltip title="用户可选的提现金额档位,单位分">
<InfoCircleOutlined />
</Tooltip>
</span>
</>
}
required={false}
>
<Row>
{fields.map((field) => (
<Form.Item
// {...(index === 0 ? formItemLayout : formItemLayoutWithOutLabel)}
label={''}
required={false}
key={field.key}
>
<Row align={'stretch'} style={{ marginRight: 10 }}>
<Form.Item
{...field}
validateTrigger={['onChange', 'onBlur']}
rules={[
{
required: true,
message: '请输入金额或者删除',
},
]}
noStyle
>
<InputNumber placeholder="金额,单位分" />
</Form.Item>
<MinusCircleOutlined
style={{ marginLeft: 4 }}
className="dynamic-delete-button"
onClick={() => remove(field.name)}
/>
</Row>
</Form.Item>
))}
</Row>
<Form.Item {...formItemLayoutWithOutLabel}>
<Button type="dashed" onClick={() => add()} icon={<PlusOutlined />}>
</Button>
</Form.Item>
</Form.Item>
</>
)}
</Form.List>
<Form.Item
name="noAuditMoney"
label={
<>
<span style={{ marginLeft: 4 }}>
<Tooltip title="低于此金额的提现申请将会自动审核通过,单位分">
<InfoCircleOutlined />
</Tooltip>
</span>
</>
}
>
<InputNumber placeholder="单位分" style={{ width: '60%' }} />
</Form.Item>
<Form.Item name="qqUrl" label="QQ群链接">
<Input />
</Form.Item>
<Form.Item
name="dayLimit"
label={
<>
<span style={{ marginLeft: 4 }}>
<Tooltip title="同个账号或同个支付宝每日最多提现的次数">
<InfoCircleOutlined />
</Tooltip>
</span>
</>
}
>
<InputNumber style={{ width: '60%' }} />
</Form.Item>
<Form.Item
name="maxIncomeEachVideo"
label={
<>
<span style={{ marginLeft: 4 }}>
<Tooltip title="看一条视频最多能获得的钱,单位分">
<InfoCircleOutlined />
</Tooltip>
</span>
</>
}
>
<InputNumber style={{ width: '60%' }} />
</Form.Item>
<Form.Item
name="defaultRate"
label={
<>
<span style={{ marginLeft: 4 }}>
<Tooltip title="比如100,就是100%全分给用户">
<InfoCircleOutlined />
</Tooltip>
</span>
</>
}
>
<InputNumber style={{ width: '60%' }} />
</Form.Item>
<Form.List name="dayRates">
{(fields, { add, remove }) => (
<>
{fields.map(({ key, name }, index) => (
<>
<Form.Item
{...(index === 0 ? formItemLayout : formItemLayoutWithOutLabel)}
label={index === 0 ? '特殊日分成比例' : ''}
required={false}
key={key}
>
<Row key={key} align="stretch" gutter={16}>
<Col span={8}>
<Form.Item name={[name, 'day']} rules={[{ required: true }]}>
<Input placeholder="Day" />
</Form.Item>
</Col>
<Col span={8}>
<Form.Item name={[name, 'rate']} rules={[{ required: true }]}>
<Input placeholder="Rate" />
</Form.Item>
</Col>
<Col>
<MinusCircleOutlined onClick={() => remove(name)} />
</Col>
</Row>
</Form.Item>
</>
))}
<Form.Item {...formItemLayoutWithOutLabel}>
<Button type="dashed" onClick={() => add()} block>
</Button>
</Form.Item>
</>
)}
</Form.List>
</Form> </Form>
</Modal> </Modal>
); );

27
src/pages/Proxy/ProxyUserManagement.tsx

@ -1,4 +1,5 @@
import { list } from '@/services/matrix/matrixUserController'; import { list } from '@/services/matrix/matrixUserController';
import { cent2Yuan, formatIncome } from '@/utils/numberUtils';
import { ActionType, PageContainer, ProColumns, ProTable } from '@ant-design/pro-components'; import { ActionType, PageContainer, ProColumns, ProTable } from '@ant-design/pro-components';
import { useParams } from '@umijs/max'; import { useParams } from '@umijs/max';
import { Tag } from 'antd'; import { Tag } from 'antd';
@ -38,6 +39,16 @@ const ProxyUserManagement: React.FC = () => {
return <UserInfo data={r} />; return <UserInfo data={r} />;
}, },
}, },
{
title: '支付宝名称',
dataIndex: 'name',
hideInSearch: true,
},
{
title: '支付宝账号',
dataIndex: 'aliPayAccount',
hideInSearch: true,
},
{ {
title: '微信', title: '微信',
dataIndex: 'wxOpenId', dataIndex: 'wxOpenId',
@ -49,6 +60,22 @@ const ProxyUserManagement: React.FC = () => {
return <Tag color="red"></Tag>; return <Tag color="red"></Tag>;
}, },
}, },
{
title: '总收益(元)',
hideInSearch: true,
dataIndex: 'income',
renderText: (r: number) => {
return formatIncome(r);
},
},
{
title: '已提现(元)',
hideInSearch: true,
dataIndex: 'realMoney',
renderText: (r: number) => {
return cent2Yuan(r);
},
},
{ {
title: '注册时间', title: '注册时间',
hideInSearch: true, hideInSearch: true,

19
src/pages/User/UserInfo.tsx

@ -1,3 +1,4 @@
import { cent2Yuan, formatIncome } from '@/utils/numberUtils';
import { Avatar, List, Popover, Row } from 'antd'; import { Avatar, List, Popover, Row } from 'antd';
import React, { useState } from 'react'; import React, { useState } from 'react';
import { envMsg } from '../../utils/commonUtil'; import { envMsg } from '../../utils/commonUtil';
@ -16,6 +17,24 @@ const UserInfo: React.FC<UserInfoProps> = (props) => {
<Popover <Popover
content={ content={
<> <>
<p>
<label></label>
{formatIncome(props.data.income)}
</p>
<p>
<label></label>
{cent2Yuan(props.data.realMoney)}
</p>
{msg.length > 0 && (
<List
size="small"
header={<div></div>}
// footer={<div>Footer</div>}
bordered
dataSource={msg}
renderItem={(item) => <List.Item>{item}</List.Item>}
/>
)}
{props.data.localAppList && props.data.localAppList.length > 0 && ( {props.data.localAppList && props.data.localAppList.length > 0 && (
<p> <p>
<label></label> <label></label>

28
src/pages/UserManagement.tsx

@ -1,4 +1,5 @@
import { changeStatus, list } from '@/services/matrix/matrixUserController'; import { changeStatus, list } from '@/services/matrix/matrixUserController';
import { cent2Yuan, formatIncome } from '@/utils/numberUtils';
import { ActionType, PageContainer, ProColumns, ProTable } from '@ant-design/pro-components'; import { ActionType, PageContainer, ProColumns, ProTable } from '@ant-design/pro-components';
import { useParams } from '@umijs/max'; import { useParams } from '@umijs/max';
import { Flex, Popconfirm, Tag } from 'antd'; import { Flex, Popconfirm, Tag } from 'antd';
@ -37,6 +38,16 @@ const UserManagement: React.FC = () => {
return <UserInfo data={r} />; return <UserInfo data={r} />;
}, },
}, },
{
title: '支付宝名称',
dataIndex: 'name',
hideInSearch: true,
},
{
title: '支付宝账号',
dataIndex: 'aliPayAccount',
hideInSearch: true,
},
{ {
title: '微信', title: '微信',
dataIndex: 'wxOpenId', dataIndex: 'wxOpenId',
@ -48,7 +59,22 @@ const UserManagement: React.FC = () => {
return <Tag color="red"></Tag>; return <Tag color="red"></Tag>;
}, },
}, },
{
title: '总收益(元)',
hideInSearch: true,
dataIndex: 'income',
renderText: (r: number) => {
return formatIncome(r);
},
},
{
title: '已提现(元)',
hideInSearch: true,
dataIndex: 'realMoney',
renderText: (r: number) => {
return cent2Yuan(r);
},
},
{ {
title: '注册时间', title: '注册时间',
hideInSearch: true, hideInSearch: true,

Loading…
Cancel
Save