提交 7d635326 作者: ZhangLingKun

Merge branch 'develop'

#请求接口地址 #请求接口地址
VITE_REQUEST_BASE_URL='https://www.iuav.shop' VITE_REQUEST_BASE_URL='https://www.iuav.shop'
#VITE_REQUEST_BASE_URL='http://119.23.248.181'
#VITE_REQUEST_BASE_URL='http://120.77.145.47' #VITE_REQUEST_BASE_URL='http://120.77.145.47'
#VITE_REQUEST_BASE_URL='https://test.iuav.shop' #VITE_REQUEST_BASE_URL='https://test.iuav.shop'
#VITE_REQUEST_BASE_URL='/api' #VITE_REQUEST_BASE_URL='/api'
......
...@@ -14,4 +14,4 @@ patches: ...@@ -14,4 +14,4 @@ patches:
images: images:
- name: REGISTRY/NAMESPACE/IMAGE:TAG - name: REGISTRY/NAMESPACE/IMAGE:TAG
newName: mmc-registry.cn-shenzhen.cr.aliyuncs.com/sharefly-dev/admin newName: mmc-registry.cn-shenzhen.cr.aliyuncs.com/sharefly-dev/admin
newTag: 6a85a7fa07fcbc6507de09152937ed5f27bf494c newTag: 9fb79ceb3cf93febf2f25fa9c26a42b1884757bf
...@@ -126,3 +126,78 @@ export type activityUpdateType = InterFunction< ...@@ -126,3 +126,78 @@ export type activityUpdateType = InterFunction<
>; >;
// 删除活动 // 删除活动
export type activityDeleteType = InterFunction<{ id: number }, null>; export type activityDeleteType = InterFunction<{ id: number }, null>;
// 活动详情
export type activityInviteDetailType = InterListFunction<
{
activityId: number;
activityStatus?: number;
activityType?: number;
userAccountId?: number;
},
{
id: number;
activityId: number;
userAccountId: number;
createTime: null;
accountSimpleDTO: {
id: number;
uid: string;
phoneNum: string;
userName: string;
nickName: string;
userImg: string;
openid: string;
userSex: number;
email: null;
source: null;
accountStatus: number;
portType: number;
companyAuthStatus: number;
cooperationTagId: null;
companyName: string;
tagName: null;
cooperationTagVOS: Array<{
id: number;
tagName: string;
tagImg: null;
tagDescription: null;
tagRequire: null;
createTime: null;
}>;
briefIntroduction: null;
coverPicture: null;
region: null;
};
rewardValue: null;
puserAccountId: number;
paccountSimpleDTO: {
id: number;
uid: string;
phoneNum: string;
userName: null;
nickName: string;
userImg: string;
openid: string;
userSex: number;
email: null;
source: null;
accountStatus: number;
portType: number;
companyAuthStatus: number;
cooperationTagId: null;
companyName: null;
tagName: null;
cooperationTagVOS: Array<{
id: number;
tagName: string;
tagImg: null;
tagDescription: null;
tagRequire: null;
createTime: null;
}>;
briefIntroduction: null;
coverPicture: null;
region: null;
};
}
>;
...@@ -142,6 +142,8 @@ export type listUserApplyTag = InterListFunction< ...@@ -142,6 +142,8 @@ export type listUserApplyTag = InterListFunction<
remark: string; remark: string;
score: number; score: number;
userAccountId: number; userAccountId: number;
orderNo: string;
signStatus: number;
} }
>; >;
// 审批详情 // 审批详情
...@@ -197,6 +199,8 @@ export type editUserApplyTagDetails = InterFunction< ...@@ -197,6 +199,8 @@ export type editUserApplyTagDetails = InterFunction<
remark: string; remark: string;
attachmentList?: { userApplyTagId: number; url: string; type: number }[]; attachmentList?: { userApplyTagId: number; url: string; type: number }[];
brandLogo: string; brandLogo: string;
contractNo?: string;
signStatus: number;
} }
>; >;
// 后台-编辑服务商信息 // 后台-编辑服务商信息
......
...@@ -100,6 +100,7 @@ export type userJoinReportDataType = InterFunction< ...@@ -100,6 +100,7 @@ export type userJoinReportDataType = InterFunction<
* 培训机构 * 培训机构
*/ */
trainingInstitution: number; trainingInstitution: number;
companyAuthCount: number;
} }
>; >;
// 数据看板-订单数据 // 数据看板-订单数据
......
...@@ -99,3 +99,11 @@ export type approveWithdrawalApplyType = InterFunction< ...@@ -99,3 +99,11 @@ export type approveWithdrawalApplyType = InterFunction<
}, },
any any
>; >;
// 提现数据统计
export type statisticsType = InterFunction<
any,
{
cashPoolAmount: number;
totalWithdrawAmt: number;
}
>;
...@@ -4,6 +4,7 @@ import { ...@@ -4,6 +4,7 @@ import {
activityDeleteType, activityDeleteType,
activityEditType, activityEditType,
activityInsertType, activityInsertType,
activityInviteDetailType,
activityUpdateType, activityUpdateType,
addActivityType, addActivityType,
DataInfoType, DataInfoType,
...@@ -73,4 +74,9 @@ export class ActivityManageAPI { ...@@ -73,4 +74,9 @@ export class ActivityManageAPI {
static activityDelete: activityDeleteType = (params) => { static activityDelete: activityDeleteType = (params) => {
return axios.get('/userapp/activity/delete', { params }); return axios.get('/userapp/activity/delete', { params });
}; };
// 活动详情
static activityInviteDetail: activityInviteDetailType = (params) => {
return axios.post('/userapp/activity/inviteDetail', params);
};
} }
import { import {
approveWithdrawalApplyType, approveWithdrawalApplyType,
listPageWithdrawalApplyType, listPageWithdrawalApplyType,
statisticsType,
} from '~/api/interface/depleteManageType'; } from '~/api/interface/depleteManageType';
import axios from '~/api/request'; import axios from '~/api/request';
...@@ -11,4 +12,7 @@ export class DepleteManageTypeAPI { ...@@ -11,4 +12,7 @@ export class DepleteManageTypeAPI {
//提现审批 //提现审批
static approveWithdrawalApply: approveWithdrawalApplyType = (params) => static approveWithdrawalApply: approveWithdrawalApplyType = (params) =>
axios.get('/userapp/withdrawal/approveWithdrawalApply', { params }); axios.get('/userapp/withdrawal/approveWithdrawalApply', { params });
// 提现数据统计
static getCashAmountAndWithdrawAmount: statisticsType = () =>
axios.get('/userapp/withdrawal/getCashAmountAndWithdrawAmount');
} }
...@@ -38,14 +38,7 @@ interface selfProps { ...@@ -38,14 +38,7 @@ interface selfProps {
type: number; //0:采购订单,1:商城订单 type: number; //0:采购订单,1:商城订单
} }
const SureOrder: FC<ModalProps & selfProps> = ({ const SureOrder: FC<ModalProps & selfProps> = ({ open, onOk, onCancel, orderItem, type }) => {
open,
onOk,
onCancel,
orderItem,
type,
updateContract,
}) => {
const navigate = useNavigate(); const navigate = useNavigate();
const [orderInfoForm] = Form.useForm<{ const [orderInfoForm] = Form.useForm<{
orderTotalAmount: number; orderTotalAmount: number;
......
...@@ -114,6 +114,7 @@ const Index: React.FC<propsType> = (props) => { ...@@ -114,6 +114,7 @@ const Index: React.FC<propsType> = (props) => {
form={form} form={form}
initialValues={{ layout: 'inline' }} initialValues={{ layout: 'inline' }}
onFinish={handleSubmit} onFinish={handleSubmit}
autoComplete={'off'}
> >
{props?.child && <div className='search-children'>{props?.child}</div>} {props?.child && <div className='search-children'>{props?.child}</div>}
{props?.children && <div className='search-children'>{props?.children}</div>} {props?.children && <div className='search-children'>{props?.children}</div>}
......
...@@ -52,11 +52,11 @@ const AddOrEditModal: FC<ModalProps & selfProps> = ({ open, onCancel, title, dat ...@@ -52,11 +52,11 @@ const AddOrEditModal: FC<ModalProps & selfProps> = ({ open, onCancel, title, dat
} else { } else {
editForm.resetFields(); editForm.resetFields();
} }
console.log('组件挂载 --->', data); // console.log('组件挂载 --->', data);
}, [open]); }, [open]);
return ( return (
<Modal open={open} onCancel={handleCancel} title={title} onOk={handleSubmit}> <Modal open={open} onCancel={handleCancel} title={title} onOk={handleSubmit}>
<Form labelCol={{ span: 4 }} wrapperCol={{ span: 16 }} form={editForm}> <Form labelCol={{ span: 4 }} wrapperCol={{ span: 16 }} form={editForm} autoComplete={'off'}>
<Form.Item <Form.Item
label='活动名称' label='活动名称'
name='activityName' name='activityName'
...@@ -113,7 +113,7 @@ const AddOrEditModal: FC<ModalProps & selfProps> = ({ open, onCancel, title, dat ...@@ -113,7 +113,7 @@ const AddOrEditModal: FC<ModalProps & selfProps> = ({ open, onCancel, title, dat
<Radio.Group <Radio.Group
options={[ options={[
{ label: '积分', value: 0 }, { label: '积分', value: 0 },
{ label: '余额', value: 1 }, { label: '余额', value: 1, disabled: true },
{ label: '优惠券', value: 2, disabled: true }, { label: '优惠券', value: 2, disabled: true },
]} ]}
/> />
......
import { useEffect, useState } from 'react';
import SearchBox from '~/components/search-box';
import { Button, message, Table } from 'antd';
import { ArrowLeftOutlined } from '@ant-design/icons';
import { activityInviteDetailType } from '~/api/interface/activityManage';
import { InterListType } from '~/api/interface';
import { ActivityManageAPI } from '~/api';
import { useLocation, useNavigate } from 'react-router-dom';
import qs from 'query-string';
import { ColumnsType } from 'antd/es/table';
// 列表的类型
type TableType = InterListType<activityInviteDetailType>;
const ActivityListDetailView = () => {
// 路由钩子
const location = useLocation();
const navigate = useNavigate();
// 表格数据
const [tableData, setTableData] = useState<TableType>([]);
// 表格分页配置
const [pagination, setPagination] = useState({
total: 0,
pageSize: 10,
current: 1,
totalPage: 0,
});
// 活动id
const activityId = Number(qs.parse(location.search).id);
// 加载列表
const getTableList = async (value = {}) => {
// 只需要修改这个地方的接口即可
const res = await ActivityManageAPI.activityInviteDetail({
pageNo: pagination.current,
pageSize: pagination.pageSize,
activityId,
...value,
});
if (res && res.code === '200') {
const { list, pageNo, totalCount, pageSize, totalPage } = res.result; // 解构
setPagination({
total: totalCount,
current: pageNo,
pageSize,
totalPage,
});
setTableData(list || []);
// console.log('加载列表 --->', list);
} else {
message.warning(res.message);
}
};
// 翻页
const paginationChange = (pageNo: number, pageSize: number) => {
getTableList({ pageNo, pageSize }).then();
};
// 页面挂载
useEffect(() => {
getTableList().then();
}, []);
// 表格结构
const columns: ColumnsType<TableType[0]> = [
{
title: '邀请人',
dataIndex: 'userAccountId',
align: 'center',
render: (_text, record) =>
record?.accountSimpleDTO?.userName || record?.accountSimpleDTO?.nickName,
},
{
title: '邀请人手机号',
dataIndex: 'userAccountId',
align: 'center',
render: (_text, record) => record?.accountSimpleDTO?.phoneNum,
},
{
title: '被邀请人',
dataIndex: 'userAccountId',
align: 'center',
render: (_text, record) =>
record?.paccountSimpleDTO?.userName || record?.paccountSimpleDTO?.nickName,
},
{
title: '被邀请人手机号',
dataIndex: 'userAccountId',
align: 'center',
render: (_text, record) => record?.paccountSimpleDTO?.phoneNum,
},
{
title: '奖励积分',
dataIndex: 'rewardValue',
align: 'center',
render: (text) => `${text}分`,
},
{
title: '注册时间',
dataIndex: 'createTime',
align: 'center',
},
];
return (
<>
<SearchBox
child={
<>
<Button
type={'primary'}
icon={<ArrowLeftOutlined />}
onClick={() => {
navigate(-1);
}}
>
返回
</Button>
</>
}
/>
<Table
// size='small'
dataSource={tableData}
columns={columns}
rowKey='id'
// scroll={{ x: 1000 }}
bordered
pagination={{
total: pagination.total,
pageSize: pagination.pageSize,
current: pagination.current,
showSizeChanger: true,
showQuickJumper: true,
onChange: (page: number, pageSize: number) => paginationChange(page, pageSize),
showTotal: (total, range) => `当前 ${range[0]}-${range[1]} 条记录 / 共 ${total} 条数据`,
}}
/>
</>
);
};
export default ActivityListDetailView;
import React, { useEffect, useState } from 'react'; import { useEffect, useState } from 'react';
import SearchView from '~/components/search-box'; import SearchView from '~/components/search-box';
import { ActivityManageAPI } from '~/api'; import { ActivityManageAPI } from '~/api';
import { InterListType, InterReqListType } from '~/api/interface'; import { InterListType, InterReqListType } from '~/api/interface';
...@@ -7,6 +7,8 @@ import { Button, message, Modal, Table } from 'antd'; ...@@ -7,6 +7,8 @@ import { Button, message, Modal, Table } from 'antd';
import { ColumnsType } from 'antd/es/table'; import { ColumnsType } from 'antd/es/table';
import { PlusOutlined } from '@ant-design/icons'; import { PlusOutlined } from '@ant-design/icons';
import AddOrEditModal from '~/pages/activityManage/activityList/comp/addOrEditModal'; import AddOrEditModal from '~/pages/activityManage/activityList/comp/addOrEditModal';
import { useNavigate } from 'react-router-dom';
import qs from 'query-string';
// 列表的类型 // 列表的类型
type TableType = InterListType<listActivityPagesType>; type TableType = InterListType<listActivityPagesType>;
...@@ -29,6 +31,8 @@ const rewardTypeList = [ ...@@ -29,6 +31,8 @@ const rewardTypeList = [
]; ];
const ActivityListView = () => { const ActivityListView = () => {
// 路由钩子
const navigate = useNavigate();
// 表格数据 // 表格数据
const [tableData, setTableData] = useState<TableType>([]); const [tableData, setTableData] = useState<TableType>([]);
// 表格分页配置 // 表格分页配置
...@@ -62,7 +66,7 @@ const ActivityListView = () => { ...@@ -62,7 +66,7 @@ const ActivityListView = () => {
totalPage, totalPage,
}); });
setTableData(list || []); setTableData(list || []);
console.log('加载列表 --->', list); // console.log('加载列表 --->', list);
} else { } else {
message.warning(res.message); message.warning(res.message);
} }
...@@ -87,7 +91,9 @@ const ActivityListView = () => { ...@@ -87,7 +91,9 @@ const ActivityListView = () => {
const res = await ActivityManageAPI.activityDelete({ id: record?.id }); const res = await ActivityManageAPI.activityDelete({ id: record?.id });
if (res && res.code === '200') { if (res && res.code === '200') {
paginationChange( paginationChange(
tableData.length === 1 ? pagination.current - 1 : pagination.current, tableData.length === 1 && pagination.current !== 1
? pagination.current - 1
: pagination.current,
pagination.pageSize, pagination.pageSize,
); );
message.success('删除成功'); message.success('删除成功');
...@@ -160,6 +166,7 @@ const ActivityListView = () => { ...@@ -160,6 +166,7 @@ const ActivityListView = () => {
dataIndex: 'action', dataIndex: 'action',
align: 'center', align: 'center',
fixed: 'right', fixed: 'right',
width: '180px',
render: (_text, record) => ( render: (_text, record) => (
<> <>
<Button <Button
...@@ -171,6 +178,18 @@ const ActivityListView = () => { ...@@ -171,6 +178,18 @@ const ActivityListView = () => {
> >
编辑 编辑
</Button> </Button>
<Button
type={'link'}
onClick={() => {
navigate(
`/activityManage/activityList/detail?${qs.stringify({
id: record?.id,
})}`,
);
}}
>
领取记录
</Button>
<Button type={'link'} danger onClick={() => handleDelete(record)}> <Button type={'link'} danger onClick={() => handleDelete(record)}>
删除 删除
</Button> </Button>
......
...@@ -6,10 +6,12 @@ import { ...@@ -6,10 +6,12 @@ import {
} from '~/api/interface/customManageType'; } from '~/api/interface/customManageType';
import { InterDataType, InterListType, InterReqType } from '~/api/interface'; import { InterDataType, InterListType, InterReqType } from '~/api/interface';
import { Button, Form, Image, Input, message, Modal, Rate, Select } from 'antd'; import { Button, Form, Image, Input, message, Modal, Rate, Select } from 'antd';
import { CustomManageAPI } from '~/api'; import { CustomManageAPI, FddInterfaceAPI } from '~/api';
import SelectMapModal from '~/components/select-map'; import SelectMapModal from '~/components/select-map';
import { Uploader } from '~/components/uploader'; import { Uploader } from '~/components/uploader';
import { UploadOutlined } from '@ant-design/icons'; import { UploadOutlined } from '@ant-design/icons';
import { decode } from 'js-base64';
import FileSaver from 'file-saver';
// 数据类型 // 数据类型
type DataType = InterDataType<editUserApplyTagDetails>; type DataType = InterDataType<editUserApplyTagDetails>;
...@@ -141,6 +143,23 @@ const AddEditModal: FC<propType> = (props) => { ...@@ -141,6 +143,23 @@ const AddEditModal: FC<propType> = (props) => {
handleCancel(); handleCancel();
} }
}; };
// 合同预览
const contractPreview = () => {
if (detail?.contractNo) {
FddInterfaceAPI.viewContract({ contractId: detail?.contractNo }).then(({ result }) => {
window.open(decode(result), '_blank');
});
}
};
// 合同下载
const downloadContract = () => {
if (detail?.contractNo) {
FddInterfaceAPI.downloadContract({ contractId: detail?.contractNo }).then(({ result }) => {
FileSaver.saveAs(decode(result), `${detail?.contractNo}.pdf`);
});
}
};
// componentDidMount // componentDidMount
useEffect(() => { useEffect(() => {
if (!open) return; if (!open) return;
...@@ -218,6 +237,18 @@ const AddEditModal: FC<propType> = (props) => { ...@@ -218,6 +237,18 @@ const AddEditModal: FC<propType> = (props) => {
<Form.Item label='营业执照'> <Form.Item label='营业执照'>
<Image src={detail?.licenseImg} width={50} height={50} /> <Image src={detail?.licenseImg} width={50} height={50} />
</Form.Item> </Form.Item>
{detail?.contractNo ? (
<Form.Item label='合同信息'>
<Button type='link' onClick={contractPreview}>
查看
</Button>
<Button type='link' onClick={downloadContract}>
下载
</Button>
</Form.Item>
) : (
''
)}
<Form.Item label='附件' name='attachmentList'> <Form.Item label='附件' name='attachmentList'>
<Uploader <Uploader
fileUpload fileUpload
......
import { Button, Form, Input, message, Modal, ModalProps } from 'antd';
import { FC, useState } from 'react';
import { Uploader } from '~/components/uploader';
import { UploadOutlined } from '@ant-design/icons';
import { listUserApplyTag } from '~/api/interface/customManageType';
import { InterDataType, InterListType } from '~/api/interface';
import { CustomManageAPI, FddInterfaceAPI } from '~/api';
import { useNavigate } from 'react-router-dom';
import { decode } from 'js-base64';
import { uploadContractType } from '~/api/interface/fddInterfaceType';
import { UploadFile } from 'antd/es/upload/interface';
import IframeModal from '~/components/modal/iframeModal';
// 列表类型
type joinType = InterListType<listUserApplyTag>[0];
// 合同返回类型
type contractType = InterDataType<uploadContractType>;
interface selfProps {
onOk: () => void;
onCancel: () => void;
joinItem: joinType | undefined;
}
const ContractModal: FC<ModalProps & selfProps> = ({ open, onOk, onCancel, joinItem }) => {
const navigate = useNavigate();
const [contractForm] = Form.useForm<{ contractUrl: string; contractTitle: string }>();
const [contractFileList, setContractFileList] = useState<UploadFile[]>([]);
const [contractInfo, setContractInfo] = useState<contractType>();
const [contractUrl, setContractUrl] = useState<string>('');
const [iframeModalShow, setIframeModalShow] = useState<boolean>(false);
const handleOk = () => {
contractForm
.validateFields()
.then(() => {
if (contractInfo) {
signContract(contractInfo.contractNo);
}
})
.catch((error: any) => {
message.warning(error?.errorFields[0]?.errors[0]);
});
};
const handleCancel = () => {
onCancel();
contractForm.resetFields();
setContractFileList([]);
};
// 上传合同
// 合同上传
const uploadSuccess = (value: any) => {
contractForm
.validateFields(['contractTitle'])
.then((values) => {
if (joinItem?.orderNo) {
FddInterfaceAPI.uploadContract({
docUrl: value[0].url,
orderNo: joinItem.orderNo,
port: 1,
title: values.contractTitle,
})
.then(({ result }) => {
setContractFileList(value);
contractForm.setFieldValue('contractUrl', value[0].url);
setContractInfo(result);
})
.catch(({ code }) => {
if (code === '1006' || code === '1005') {
navigate('/systemManage/realNameAuth');
}
setContractFileList([]);
});
} else {
setContractFileList([]);
message.warning('orderNo不能为空');
}
})
.catch((error: any) => {
setContractFileList([]);
message.warning(error?.errorFields[0]?.errors[0]);
});
};
// 签署合同
const signContract = (contractId: string) => {
FddInterfaceAPI.signContract({ contractId, port: 1 }).then(({ result }) => {
if (result) {
setContractUrl(decode(result));
setIframeModalShow(true);
}
});
};
const iframeModalCancel = () => {
setIframeModalShow(false);
if (joinItem) {
CustomManageAPI.editUserApplyTagDetails({
id: joinItem.id,
}).then(({ result }) => {
if (result?.signStatus === 2) {
contractForm.resetFields();
setContractFileList([]);
onOk();
}
});
}
};
return (
<>
<Modal open={open} onOk={handleOk} onCancel={handleCancel} title='签署合同' okText='签署合同'>
<Form labelCol={{ span: 4 }} wrapperCol={{ span: 15 }} form={contractForm}>
<Form.Item
label='合同标题'
rules={[{ required: true, message: '请输入合同标题' }]}
name='contractTitle'
>
<Input placeholder='请输入合同标题' />
</Form.Item>
<Form.Item
label='合同文件'
rules={[{ required: true, message: '请上传合同文件' }]}
name='contractUrl'
>
<Uploader
fileUpload
listType='text'
defaultFileList={contractFileList}
onChange={uploadSuccess}
fileType={['application/pdf']}
>
<Button icon={<UploadOutlined />} type='primary'>
上传
</Button>
</Uploader>
</Form.Item>
</Form>
</Modal>
<IframeModal
url={contractUrl}
title='合同签署'
open={iframeModalShow}
onCancel={iframeModalCancel}
/>
</>
);
};
export default ContractModal;
...@@ -7,6 +7,7 @@ import { InterDataType, InterListType, InterReqListType } from '~/api/interface' ...@@ -7,6 +7,7 @@ import { InterDataType, InterListType, InterReqListType } from '~/api/interface'
import { listAppUserCountType, listUserApplyTag } from '~/api/interface/customManageType'; import { listAppUserCountType, listUserApplyTag } from '~/api/interface/customManageType';
import ApprovalModal from './comp/approvalModal'; import ApprovalModal from './comp/approvalModal';
import AddEditModal from '~/pages/customManage/customIdentity/comp/addEditModal'; import AddEditModal from '~/pages/customManage/customIdentity/comp/addEditModal';
import ContractModal from '~/pages/customManage/customIdentity/comp/contractModal';
import './index.scss'; import './index.scss';
// 列表类型 // 列表类型
...@@ -46,6 +47,9 @@ const CustomIdentityView = () => { ...@@ -46,6 +47,9 @@ const CustomIdentityView = () => {
}); });
// 数据统计 // 数据统计
const [statisticsData, setStatisticsDataType] = useState<statisticsDataType>(); const [statisticsData, setStatisticsDataType] = useState<statisticsDataType>();
// 合同弹窗
const [contractModalShow, setContractModalShow] = useState<boolean>(false);
const [loading, setLoading] = useState<boolean>(false);
// 加载列表 // 加载列表
const getTableList = async (value = {}) => { const getTableList = async (value = {}) => {
...@@ -79,7 +83,9 @@ const CustomIdentityView = () => { ...@@ -79,7 +83,9 @@ const CustomIdentityView = () => {
}; };
// 获取加盟列表 // 获取加盟列表
const getCooperationList = async () => { const getCooperationList = async () => {
setLoading(true);
const res = await CustomManageAPI.cooperationListTag({}); const res = await CustomManageAPI.cooperationListTag({});
setLoading(false);
if (res && res.code === '200') { if (res && res.code === '200') {
const list = res.result || []; const list = res.result || [];
setCooperationList(list.map((i) => ({ label: i.tagName, value: i.id }))); setCooperationList(list.map((i) => ({ label: i.tagName, value: i.id })));
...@@ -111,6 +117,18 @@ const CustomIdentityView = () => { ...@@ -111,6 +117,18 @@ const CustomIdentityView = () => {
} }
}); });
}; };
// 合同签署
const contractModalShowClick = (record: TableType[0]) => {
setEditData(record);
setContractModalShow(true);
};
const contractModalCancel = () => {
setContractModalShow(false);
};
const contractModalOk = () => {
setContractModalShow(false);
getTableList(query).then();
};
useEffect(() => { useEffect(() => {
getCooperationList().then(); getCooperationList().then();
...@@ -179,7 +197,7 @@ const CustomIdentityView = () => { ...@@ -179,7 +197,7 @@ const CustomIdentityView = () => {
dataIndex: 'action', dataIndex: 'action',
align: 'center', align: 'center',
fixed: 'right', fixed: 'right',
width: '150px', width: '250px',
render: (_text, record) => ( render: (_text, record) => (
<> <>
<Button <Button
...@@ -193,6 +211,13 @@ const CustomIdentityView = () => { ...@@ -193,6 +211,13 @@ const CustomIdentityView = () => {
审批 审批
</Button> </Button>
<Button <Button
type='link'
onClick={() => contractModalShowClick(record)}
disabled={record.approvalStatus !== 1 || [2, 3, 4, 5].includes(record.signStatus)}
>
签署合同
</Button>
<Button
type={'link'} type={'link'}
onClick={() => { onClick={() => {
setAddModalVisible(true); setAddModalVisible(true);
...@@ -261,6 +286,7 @@ const CustomIdentityView = () => { ...@@ -261,6 +286,7 @@ const CustomIdentityView = () => {
<Table <Table
size='small' size='small'
dataSource={tableData} dataSource={tableData}
loading={loading}
columns={columns} columns={columns}
rowKey='id' rowKey='id'
scroll={{ x: 1200 }} scroll={{ x: 1200 }}
...@@ -298,6 +324,13 @@ const CustomIdentityView = () => { ...@@ -298,6 +324,13 @@ const CustomIdentityView = () => {
paginationChange(pagination.current, pagination.pageSize); paginationChange(pagination.current, pagination.pageSize);
}} }}
/> />
{/*合同签署*/}
<ContractModal
open={contractModalShow}
onCancel={contractModalCancel}
onOk={contractModalOk}
joinItem={editData}
/>
</div> </div>
); );
}; };
......
...@@ -109,8 +109,10 @@ const JoinInfo = () => { ...@@ -109,8 +109,10 @@ const JoinInfo = () => {
return ( return (
<div className='join-info'> <div className='join-info'>
<div className='join-info-card-1'> <div className='join-info-card-1'>
<div className='join-count'>{joinReportDataType?.joinStoreCount}</div> <div className='join-count'>{joinReportDataType?.companyAuthCount}</div>
<div className='join-meta'>入驻商家总数</div> <div className='join-meta'>
已认证企业总数(入驻{joinReportDataType?.joinStoreCount}家)
</div>
</div> </div>
<div className='join-info-card-2'> <div className='join-info-card-2'>
<div className='card-header'> <div className='card-header'>
......
.with-draw-manage{
.data-statistics{
display: flex;
align-items: center;
color: red;
justify-content: flex-end;
}
}
...@@ -4,16 +4,19 @@ import { Button, Table } from 'antd'; ...@@ -4,16 +4,19 @@ import { Button, Table } from 'antd';
import { ColumnsType } from 'antd/es/table/InternalTable'; import { ColumnsType } from 'antd/es/table/InternalTable';
import { DepleteManageTypeAPI } from '~/api'; import { DepleteManageTypeAPI } from '~/api';
import { useEffect, useState } from 'react'; import { useEffect, useState } from 'react';
import { InterListType, PaginationProps } from '~/api/interface'; import { InterDataType, InterListType, PaginationProps } from '~/api/interface';
import { listPageWithdrawalApplyType } from '~/api/interface/depleteManageType'; import { listPageWithdrawalApplyType, statisticsType } from '~/api/interface/depleteManageType';
import { filterObjAttr } from '~/utils'; import { filterObjAttr } from '~/utils';
import ApplyStatusModal from '~/pages/depleteManage/withDrawList/components/applyStatusModal'; import ApplyStatusModal from '~/pages/depleteManage/withDrawList/components/applyStatusModal';
import { withdrawStatusList } from '~/utils/dictionary'; import { withdrawStatusList } from '~/utils/dictionary';
import './index.scss';
// 提现列表返回类型 // 提现列表返回类型
type withdrawalApplyType = InterListType<listPageWithdrawalApplyType>; type withdrawalApplyType = InterListType<listPageWithdrawalApplyType>;
// 提现列表请求类型 // 提现列表请求类型
type withdrawalApplyParameterType = InterListType<listPageWithdrawalApplyType>; type withdrawalApplyParameterType = InterListType<listPageWithdrawalApplyType>;
// 提现数据统计返回类型
type statisticsDataType = InterDataType<statisticsType>;
// 提现方式字典 // 提现方式字典
const settleTypeDic = [ const settleTypeDic = [
{ {
...@@ -139,6 +142,8 @@ const WithDrawManage = () => { ...@@ -139,6 +142,8 @@ const WithDrawManage = () => {
const [applyStatusModalShow, setApplyStatusModalShow] = useState<boolean>(false); const [applyStatusModalShow, setApplyStatusModalShow] = useState<boolean>(false);
// 当前审批对象 // 当前审批对象
const [currentWithDrawItem, setCurrentWithDrawItem] = useState<withdrawalApplyType[0]>(); const [currentWithDrawItem, setCurrentWithDrawItem] = useState<withdrawalApplyType[0]>();
// 提现数据统计
const [statisticsData, setStatisticsData] = useState<statisticsDataType>();
// 获取提现列表 // 获取提现列表
const getListPageWithdrawalApply = (query?: withdrawalApplyParameterType) => { const getListPageWithdrawalApply = (query?: withdrawalApplyParameterType) => {
...@@ -154,6 +159,14 @@ const WithDrawManage = () => { ...@@ -154,6 +159,14 @@ const WithDrawManage = () => {
setTableData(result.list || []); setTableData(result.list || []);
}); });
}; };
// 提现数据统计
const getCashAmountAndWithdrawAmount = () => {
DepleteManageTypeAPI.getCashAmountAndWithdrawAmount().then(({ result }) => {
if (result) {
setStatisticsData(result);
}
});
};
// 分页 // 分页
const paginationChange = (pageNo: number, pageSize: number) => { const paginationChange = (pageNo: number, pageSize: number) => {
pagination.pageNo = pageNo; pagination.pageNo = pageNo;
...@@ -167,6 +180,7 @@ const WithDrawManage = () => { ...@@ -167,6 +180,7 @@ const WithDrawManage = () => {
const filterQuery = filterObjAttr(value, ['time']); const filterQuery = filterObjAttr(value, ['time']);
setQuery(filterQuery); setQuery(filterQuery);
getListPageWithdrawalApply(filterQuery); getListPageWithdrawalApply(filterQuery);
getCashAmountAndWithdrawAmount();
}; };
// 审批弹窗事件 // 审批弹窗事件
const applyStatusEvent = (record: withdrawalApplyType[0]) => { const applyStatusEvent = (record: withdrawalApplyType[0]) => {
...@@ -183,10 +197,34 @@ const WithDrawManage = () => { ...@@ -183,10 +197,34 @@ const WithDrawManage = () => {
useEffect(() => { useEffect(() => {
getListPageWithdrawalApply(); getListPageWithdrawalApply();
getCashAmountAndWithdrawAmount();
}, []); }, []);
return ( return (
<div className='with-draw-manage'> <div className='with-draw-manage'>
<SearchBox search={searchColumns} searchData={searchSuccess} /> <SearchBox
search={searchColumns}
searchData={searchSuccess}
sufFixBtn={
<div className='data-statistics'>
<div>
<span>已提现:</span>
<span>
{statisticsData?.totalWithdrawAmt
? statisticsData?.totalWithdrawAmt.toFixed(2).toLocaleString()
: 0}
</span>
</div>
<div>
<span>账户余额:</span>
<span>
{statisticsData?.cashPoolAmount
? statisticsData?.cashPoolAmount.toFixed(2).toLocaleString()
: 0}
</span>
</div>
</div>
}
/>
<Table <Table
bordered bordered
columns={tableColumns} columns={tableColumns}
......
...@@ -174,6 +174,7 @@ import CustomListDetail from '~/pages/customManage/customList/detail'; ...@@ -174,6 +174,7 @@ import CustomListDetail from '~/pages/customManage/customList/detail';
import ServiceCategoryDetail from '~/pages/categoryManage/serviceCategoryList/detail'; import ServiceCategoryDetail from '~/pages/categoryManage/serviceCategoryList/detail';
import RewardsManageView from '~/pages/activityManage/rewardsManage'; import RewardsManageView from '~/pages/activityManage/rewardsManage';
import ActivityListView from '~/pages/activityManage/activityList'; import ActivityListView from '~/pages/activityManage/activityList';
import ActivityListDetailView from '~/pages/activityManage/activityList/detail';
const AddressManageView = React.lazy(() => import('~/pages/systemManage/addressManage')); const AddressManageView = React.lazy(() => import('~/pages/systemManage/addressManage'));
// const IndustryListView = React.lazy(() => import('~/pages/mallManage/industryManage/industryList')); //行业列表 // const IndustryListView = React.lazy(() => import('~/pages/mallManage/industryManage/industryList')); //行业列表
...@@ -529,6 +530,19 @@ export const routerList: Array<RouteObjectType> = [ ...@@ -529,6 +530,19 @@ export const routerList: Array<RouteObjectType> = [
develop: true, develop: true,
}, },
}, },
{
path: '/activityManage/activityList/detail',
element: withLoadingComponent(<ActivityListDetailView />),
errorElement: <ErrorPage />,
meta: {
id: 520,
title: '领取记录',
icon: <WechatOutlined />,
hidden: true,
pid: 520,
develop: true,
},
},
], ],
}, },
{ {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论