yemianjiekou
This commit is contained in:
372
src/pages/Agency/AgencyManager/applyIndex.tsx
Normal file
372
src/pages/Agency/AgencyManager/applyIndex.tsx
Normal file
@ -0,0 +1,372 @@
|
||||
import React, { useState, useRef } from 'react';
|
||||
import {Radio, message, Modal, Input, Form, PageHeader, Button, Spin, Select, Tree, DatePicker } from 'antd';
|
||||
import ProTable, { ProColumns, ActionType } from '@ant-design/pro-table';
|
||||
import { getPage, getDataById, deleteAgency, addAgency, updateAgency,disableAgency } from './service';
|
||||
// import './styles.less';
|
||||
import { getDicData } from '@/utils/session';
|
||||
import TextArea from 'antd/lib/input/TextArea';
|
||||
import SelectProvider from './components/SelectProvider';
|
||||
|
||||
const agency: React.FC<{}> = () => {
|
||||
//获取字典
|
||||
const getDict: any = getDicData();
|
||||
const [form] = Form.useForm();
|
||||
const [title, setTitle] = useState<string>('');
|
||||
const [open, setOpen] = useState<boolean>(false);
|
||||
|
||||
const [checkedKeys, setCheckedKeys] = useState<React.Key[]>([]);
|
||||
const [currentRoleId, setCurrentRoleId] = useState<number | null>(null);
|
||||
const dictData = JSON.parse(getDict);
|
||||
const actionRef = useRef<ActionType>();
|
||||
const [spin, spinSet] = useState<boolean>(false);
|
||||
const [selectProviderVisible, setSelectProviderVisible] = useState<boolean>(false);
|
||||
const [currentRecord, setCurrentRecord] = useState<any>(null);
|
||||
const [showEndDate, setShowEndDate] = useState<boolean>(false);
|
||||
//查询分页数据
|
||||
const [pageData, pageDataSet] = useState<any>({
|
||||
pageNo: 1,
|
||||
pageSize: 10
|
||||
});
|
||||
const layout = {
|
||||
labelCol: { span: 6 },
|
||||
wrapperCol: { span: 13 },
|
||||
};
|
||||
interface DictType {
|
||||
value: string;
|
||||
label: string;
|
||||
}
|
||||
const sys_normal_scope: DictType[] = [
|
||||
{ value: 'EBTP', label: '招标采购中心' },
|
||||
];
|
||||
|
||||
//委托列表
|
||||
const columns: ProColumns<any>[] = [
|
||||
{ title: '序号', valueType: 'index', width: 50, search: false, },
|
||||
{ title: '代理机构名称', dataIndex: 'providerName', },//, ellipsis: true
|
||||
{ title: '申请人', dataIndex: 'applyUser', search: false, },//, ellipsis: true//, ellipsis: true
|
||||
{ title: '开始服务时间', dataIndex: 'periodBegin', search: false, },//, ellipsis: true
|
||||
{ title: '准入人', dataIndex: 'accessUser', search: false, },//, ellipsis: true
|
||||
{ title: '失效时间', dataIndex: 'periodEnd', search: false,},//, ellipsis: true
|
||||
{ title: '状态', dataIndex: 'validityStatus', valueType: 'select',
|
||||
valueEnum: { '1': { text: '有效', status: '1' },'2': { text: '失效', status: '2' }, },
|
||||
},//, ellipsis: true
|
||||
{ title: 'id', dataIndex: 'id', search: false,hideInTable:true,},//, ellipsis: true
|
||||
// { title: '创建时间', dataIndex: 'createDate', width: '10%', valueType: 'dateTime', search: false },
|
||||
{ title: 'providerId', dataIndex: 'providerId', search: false,hideInTable:true,},
|
||||
{
|
||||
title: '操作', width: '9%',
|
||||
valueType: 'option',
|
||||
render: (_, record) => [
|
||||
<Button type='text' onClick={() => { handleUpdate(record.providerId) }}>委托项目信息</Button>,
|
||||
<Button type='text' onClick={() => { handleUpdate(record) }}>查看</Button>,
|
||||
record.validityStatus === '1' && (
|
||||
<Button key="disable" type='text' onClick={() => handleDisable(record.id)}>失效</Button>
|
||||
),
|
||||
record.validityStatus === '2' && (
|
||||
<Button key="select" type='text' onClick={() => { handleReSelect(record) }}>选择</Button>
|
||||
)
|
||||
|
||||
]
|
||||
},
|
||||
];
|
||||
// 删除操作
|
||||
const handleDelete = (id: string) => {
|
||||
Modal.confirm({
|
||||
title: '确认删除该代理机构?',
|
||||
onOk: async () => {
|
||||
await deleteAgency(id).then((r: any) => {
|
||||
if (r?.code == 200) {
|
||||
message.success('删除成功');
|
||||
} else {
|
||||
message.error('删除失败');
|
||||
}
|
||||
})
|
||||
.finally(() => actionRef.current?.reload());
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
const handleDisable = (id: string) => {
|
||||
Modal.confirm({
|
||||
title: '确认失效该代理机构?',
|
||||
onOk: async () => {
|
||||
await disableAgency(id).then((r: any) => {
|
||||
if (r?.code == 200) {
|
||||
message.success('操作成功');
|
||||
} else {
|
||||
message.error('操作失败');
|
||||
}
|
||||
})
|
||||
.finally(() => actionRef.current?.reload());
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
const handleAdd = async (record: any) => {
|
||||
form.resetFields();
|
||||
form.setFieldsValue({
|
||||
//...record,
|
||||
providerId: record.id,
|
||||
providerName: record.name,
|
||||
id: '',
|
||||
});
|
||||
|
||||
setOpen(true);
|
||||
setTitle('添加招标代理机构');
|
||||
};
|
||||
const handleReSelect = async (record: any) => {
|
||||
form.resetFields();
|
||||
const agencyDetail = await getDataById(record.id);
|
||||
if(agencyDetail&&(agencyDetail?.code == 200)&&agencyDetail.data&&agencyDetail.data.providerDetail) {
|
||||
setCurrentRecord(agencyDetail.data.providerDetail);
|
||||
setShowEndDate(agencyDetail.data.validity === '2');
|
||||
form.setFieldsValue({
|
||||
// ...currentRecord,
|
||||
providerId: agencyDetail.data.providerDetail.id,
|
||||
providerName: agencyDetail.data.providerDetail.name,
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
setOpen(true);
|
||||
setTitle('添加招标代理机构');
|
||||
};
|
||||
const [menuOptions, setMenuOptions] = useState<any[]>([]);
|
||||
|
||||
|
||||
|
||||
const handleUpdate = async (record: any) => {
|
||||
form.resetFields();
|
||||
const agencyDetail = await getDataById(record.id);
|
||||
|
||||
if(agencyDetail&&(agencyDetail?.code == 200)&&agencyDetail.data&&agencyDetail.data.providerDetail) {
|
||||
setCurrentRecord(agencyDetail.data.providerDetail);
|
||||
setShowEndDate(agencyDetail.data.validity === '2');
|
||||
}
|
||||
form.setFieldsValue({
|
||||
...agencyDetail.data
|
||||
});
|
||||
|
||||
setOpen(true);
|
||||
setTitle('修改代理机构');
|
||||
};
|
||||
|
||||
const closeModal = async () => {
|
||||
actionRef.current?.reload();
|
||||
form.resetFields();
|
||||
setCheckedKeys([]);
|
||||
setOpen(false);
|
||||
};
|
||||
|
||||
const handleSubmit = async () => {
|
||||
try {
|
||||
const values = await form.validateFields();
|
||||
|
||||
// 处理日期,确保只保留日期部分
|
||||
if (values.periodEnd) {
|
||||
values.periodEnd = values.periodEnd.format('YYYY-MM-DD');
|
||||
}
|
||||
|
||||
if (values.id) {
|
||||
await updateAgency(values).then((r: any) => {
|
||||
if (r?.code == 200) {
|
||||
message.success('修改成功');
|
||||
} else {
|
||||
message.error('修改失败');
|
||||
}
|
||||
});
|
||||
} else {
|
||||
await addAgency(values).then((r: any) => {
|
||||
|
||||
if (r?.code == 200) {
|
||||
message.success('新增成功');
|
||||
} else {
|
||||
message.error('新增失败');
|
||||
}
|
||||
});
|
||||
}
|
||||
closeModal();
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
}
|
||||
};
|
||||
const checkSupModal = (
|
||||
<Modal
|
||||
title={title}
|
||||
visible={open}
|
||||
width="70%"
|
||||
centered
|
||||
destroyOnClose={true}
|
||||
bodyStyle={{ maxHeight: window.innerHeight * 0.96 - 108, overflowY: 'auto', paddingTop: 0 }}
|
||||
// footer={<Button onClick={() => setOpen(false)}>关闭</Button>}
|
||||
onOk={handleSubmit}
|
||||
onCancel={() => closeModal()}
|
||||
>
|
||||
|
||||
|
||||
|
||||
<div className="info-display" style={{
|
||||
display: 'flex',
|
||||
flexWrap: 'wrap',
|
||||
margin: '0 -1%',
|
||||
marginBottom: '1.5rem'
|
||||
}}>
|
||||
|
||||
<div className="info-item" style={{ flex: '0 0 48%', margin: '0 1% 1rem', display: 'flex' }}>
|
||||
<span className="info-label" style={{ flex: '0 0 30%', textAlign: 'right', marginRight: '2%' }}>供应商名称:</span>
|
||||
<span className="info-content" style={{ flex: '1' }}>{currentRecord?.name || '-'}</span>
|
||||
</div>
|
||||
|
||||
<div className="info-item" style={{ flex: '0 0 48%', margin: '0 1% 1rem', display: 'flex' }}>
|
||||
<span className="info-label" style={{ flex: '0 0 30%', textAlign: 'right', marginRight: '2%' }}>供应商类型名称:</span>
|
||||
<span className="info-content" style={{ flex: '1' }}>{currentRecord?.kindName || '-'}</span>
|
||||
</div>
|
||||
<div className="info-item" style={{ flex: '0 0 48%', margin: '0 1% 1rem', display: 'flex' }}>
|
||||
<span className="info-label" style={{ flex: '0 0 30%', textAlign: 'right', marginRight: '2%' }}>准入时间:</span>
|
||||
<span className="info-content" style={{ flex: '1' }}>{currentRecord?.accessTime || '-'}</span>
|
||||
</div>
|
||||
<div className="info-item" style={{ flex: '0 0 48%', margin: '0 1% 1rem', display: 'flex' }}>
|
||||
<span className="info-label" style={{ flex: '0 0 30%', textAlign: 'right', marginRight: '2%' }}>商品品类:</span>
|
||||
<span className="info-content" style={{ flex: '1' }}>{currentRecord?.goodsTypeName || '-'}</span>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div className="info-display" style={{
|
||||
display: 'flex',
|
||||
flexWrap: 'wrap',
|
||||
margin: '0 -1%',
|
||||
marginBottom: '1.5rem'
|
||||
}}>
|
||||
<div className="info-item" style={{ flex: '0 0 48%', margin: '0 1% 1rem', display: 'flex' }}>
|
||||
<span className="info-label" style={{ flex: '0 0 30%', textAlign: 'right', marginRight: '2%' }}>姓名:</span>
|
||||
<span className="info-content" style={{ flex: '1' }}>{currentRecord?.applyUser || '-'}</span>
|
||||
</div>
|
||||
<div className="info-item" style={{ flex: '0 0 48%', margin: '0 1% 1rem', display: 'flex' }}>
|
||||
<span className="info-label" style={{ flex: '0 0 30%', textAlign: 'right', marginRight: '2%' }}>工号:</span>
|
||||
<span className="info-content" style={{ flex: '1' }}>{currentRecord?.name || '-'}</span>
|
||||
</div>
|
||||
<div className="info-item" style={{ flex: '0 0 48%', margin: '0 1% 1rem', display: 'flex' }}>
|
||||
<span className="info-label" style={{ flex: '0 0 30%', textAlign: 'right', marginRight: '2%' }}>角色:</span>
|
||||
<span className="info-content" style={{ flex: '1' }}>{currentRecord?.kindCode || '-'}</span>
|
||||
</div>
|
||||
<div className="info-item" style={{ flex: '0 0 48%', margin: '0 1% 1rem', display: 'flex' }}>
|
||||
<span className="info-label" style={{ flex: '0 0 30%', textAlign: 'right', marginRight: '2%' }}>公司:</span>
|
||||
<span className="info-content" style={{ flex: '1' }}>{currentRecord?.kindName || '-'}</span>
|
||||
</div>
|
||||
<div className="info-item" style={{ flex: '0 0 48%', margin: '0 1% 1rem', display: 'flex' }}>
|
||||
<span className="info-label" style={{ flex: '0 0 30%', textAlign: 'right', marginRight: '2%' }}>部门:</span>
|
||||
<span className="info-content" style={{ flex: '1' }}>{currentRecord?.goodsTypeCode || '-'}</span>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<Form form={form} {...layout}>
|
||||
|
||||
<Form.Item label="供应商ID" name="providerId" hidden>
|
||||
<Input disabled />
|
||||
</Form.Item>
|
||||
<Form.Item label="供应商Name" name="providerName" hidden>
|
||||
<Input disabled />
|
||||
</Form.Item>
|
||||
<Form.Item label="ID" name="id" hidden>
|
||||
<Input disabled />
|
||||
|
||||
</Form.Item>
|
||||
|
||||
<Form.Item label="有效期" name="validity">
|
||||
<Radio.Group
|
||||
options={[
|
||||
{ value: '1', label: '长期' },
|
||||
{ value: '2', label: '定期' }
|
||||
]}
|
||||
onChange={(e) => {
|
||||
const value = e.target.value;
|
||||
setShowEndDate(value === '2');
|
||||
if (value === '1') {
|
||||
|
||||
}
|
||||
}}
|
||||
/>
|
||||
</Form.Item>
|
||||
|
||||
{showEndDate && (
|
||||
<Form.Item label="结束日期" name="periodEnd">
|
||||
<DatePicker style={{ width: '100%' }} format="YYYY-MM-DD" picker="date" />
|
||||
</Form.Item>
|
||||
)}
|
||||
|
||||
|
||||
</Form>
|
||||
|
||||
</Modal>
|
||||
);
|
||||
return (
|
||||
<Spin spinning={spin}>
|
||||
<PageHeader title="我的招标代理" />
|
||||
<div style={{ maxHeight: innerHeight - 130, height: innerHeight - 130 }} className='xsy-entrust bgCWhite'>
|
||||
<ProTable<any>
|
||||
actionRef={actionRef}//action触发后更新表格
|
||||
columns={columns}//表格
|
||||
options={false}
|
||||
bordered={false}
|
||||
className='tableSearch'
|
||||
size='small'
|
||||
search={{ labelWidth: 'auto', span: 6 }}
|
||||
request={(params) =>
|
||||
getPage({
|
||||
...params,
|
||||
basePageRequest: { pageNo: pageData.pageNo, pageSize: pageData.pageSize },
|
||||
}).then((res) => {
|
||||
const result = {
|
||||
data: res.data.records,
|
||||
total: res.data.total,
|
||||
success: res.success,
|
||||
pageSize: res.data.size,
|
||||
current: res.data.current
|
||||
}
|
||||
return result;
|
||||
})
|
||||
}
|
||||
toolBarRender={() => [
|
||||
<Button type="primary" onClick={() => {
|
||||
|
||||
setSelectProviderVisible(true);
|
||||
}}>新增招标代理</Button>
|
||||
// <Button onClick={() => { handleAdd() }} type="primary">
|
||||
// 新增招标代理
|
||||
// </Button>,
|
||||
]
|
||||
}
|
||||
pagination={{
|
||||
defaultPageSize: 10,
|
||||
showSizeChanger: false,
|
||||
onChange: (page, pageSize) => pageDataSet({ pageNo: page, pageSize: pageSize }),
|
||||
onShowSizeChange: (current, size) => pageDataSet({ pageNo: current, pageSize: size }),
|
||||
}}
|
||||
onReset={() => { pageDataSet({ pageNo: 1, pageSize: 10 }) }}
|
||||
/>
|
||||
{checkSupModal}
|
||||
<SelectProvider
|
||||
visible={selectProviderVisible}
|
||||
onSelect={(provider) => {
|
||||
console.log('Selected provider:', provider);
|
||||
// 处理选中的供应商数据
|
||||
setCurrentRecord(provider);
|
||||
// if (currentRecord && provider) {
|
||||
handleAdd(provider);
|
||||
// }
|
||||
setSelectProviderVisible(false);
|
||||
// setCurrentRecord(null);
|
||||
}}
|
||||
onCancel={() => {
|
||||
setSelectProviderVisible(false);
|
||||
setCurrentRecord(null);
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
{/* 查看 */}
|
||||
</Spin >
|
||||
)
|
||||
};
|
||||
export default agency;
|
@ -43,12 +43,12 @@ const agency: React.FC<{}> = () => {
|
||||
const columns: ProColumns<any>[] = [
|
||||
{ title: '序号', valueType: 'index', width: 50, search: false, },
|
||||
{ title: '代理机构名称', dataIndex: 'providerName', },//, ellipsis: true
|
||||
{ title: '申请人', dataIndex: 'roleName', search: false, },//, ellipsis: true//, ellipsis: true
|
||||
{ title: '准入时间', dataIndex: 'roleName', search: false, },//, ellipsis: true
|
||||
{ title: '准入人', dataIndex: 'roleName', search: false, },//, ellipsis: true
|
||||
{ title: '失效时间', dataIndex: 'roleName', search: false,},//, ellipsis: true
|
||||
{ title: '状态', dataIndex: 'status', valueType: 'select',
|
||||
valueEnum: { '1': { text: '有效', status: '1' },'0': { text: '无效', status: '0' }, },
|
||||
{ title: '申请人', dataIndex: 'applyUser', search: false, },//, ellipsis: true//, ellipsis: true
|
||||
{ title: '开始服务时间', dataIndex: 'periodBegin', search: false, },//, ellipsis: true
|
||||
{ title: '准入人', dataIndex: 'accessUser', search: false, },//, ellipsis: true
|
||||
{ title: '失效时间', dataIndex: 'periodEnd', search: false,},//, ellipsis: true
|
||||
{ title: '状态', dataIndex: 'validityStatus', valueType: 'select',
|
||||
valueEnum: { '1': { text: '有效', status: '1' },'2': { text: '失效', status: '2' }, },
|
||||
},//, ellipsis: true
|
||||
{ title: 'id', dataIndex: 'id', search: false,hideInTable:true,},//, ellipsis: true
|
||||
// { title: '创建时间', dataIndex: 'createDate', width: '10%', valueType: 'dateTime', search: false },
|
||||
@ -58,11 +58,13 @@ const agency: React.FC<{}> = () => {
|
||||
valueType: 'option',
|
||||
render: (_, record) => [
|
||||
<Button type='text' onClick={() => { handleUpdate(record.providerId) }}>委托项目信息</Button>,
|
||||
<Button type='text' onClick={() => { handleDelete(record.id) }}>查看</Button>,
|
||||
<Button type='text' onClick={() => { handleUpdate(record.id) }}>失效</Button>,
|
||||
<Button type='text' onClick={() => {
|
||||
|
||||
}}>选择</Button>
|
||||
<Button type='text' onClick={() => { handleUpdate(record) }}>查看</Button>,
|
||||
record.validityStatus === '1' && (
|
||||
<Button key="disable" type='text' onClick={() => handleDisable(record.id)}>失效</Button>
|
||||
),
|
||||
record.validityStatus === '2' && (
|
||||
<Button key="select" type='text' onClick={() => { handleReSelect(record) }}>选择</Button>
|
||||
)
|
||||
|
||||
]
|
||||
},
|
||||
@ -83,17 +85,53 @@ const agency: React.FC<{}> = () => {
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
const handleDisable = (id: string) => {
|
||||
Modal.confirm({
|
||||
title: '确认失效该代理机构?',
|
||||
onOk: async () => {
|
||||
await disableAgency(id).then((r: any) => {
|
||||
if (r?.code == 200) {
|
||||
message.success('操作成功');
|
||||
} else {
|
||||
message.error('操作失败');
|
||||
}
|
||||
})
|
||||
.finally(() => actionRef.current?.reload());
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
const handleAdd = async (record: any) => {
|
||||
form.resetFields();
|
||||
form.setFieldsValue({
|
||||
...record,
|
||||
providerId: record.id
|
||||
//...record,
|
||||
providerId: record.id,
|
||||
providerName: record.name,
|
||||
id: '',
|
||||
});
|
||||
|
||||
setOpen(true);
|
||||
setTitle('添加招标代理机构');
|
||||
};
|
||||
|
||||
const handleReSelect = async (record: any) => {
|
||||
form.resetFields();
|
||||
const agencyDetail = await getDataById(record.id);
|
||||
if(agencyDetail&&(agencyDetail?.code == 200)&&agencyDetail.data&&agencyDetail.data.providerDetail) {
|
||||
setCurrentRecord(agencyDetail.data.providerDetail);
|
||||
setShowEndDate(agencyDetail.data.validity === '2');
|
||||
form.setFieldsValue({
|
||||
// ...currentRecord,
|
||||
providerId: agencyDetail.data.providerDetail.id,
|
||||
providerName: agencyDetail.data.providerDetail.name,
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
setOpen(true);
|
||||
setTitle('添加招标代理机构');
|
||||
};
|
||||
const [menuOptions, setMenuOptions] = useState<any[]>([]);
|
||||
|
||||
|
||||
@ -101,9 +139,11 @@ const agency: React.FC<{}> = () => {
|
||||
const handleUpdate = async (record: any) => {
|
||||
form.resetFields();
|
||||
const agencyDetail = await getDataById(record.id);
|
||||
// const menus = await roleMenuTreeselect(record.roleId);
|
||||
// setMenuOptions(menus.data.menus || []);
|
||||
|
||||
|
||||
if(agencyDetail&&(agencyDetail?.code == 200)&&agencyDetail.data&&agencyDetail.data.providerDetail) {
|
||||
setCurrentRecord(agencyDetail.data.providerDetail);
|
||||
setShowEndDate(agencyDetail.data.validity === '2');
|
||||
}
|
||||
form.setFieldsValue({
|
||||
...agencyDetail.data
|
||||
});
|
||||
@ -122,7 +162,13 @@ const agency: React.FC<{}> = () => {
|
||||
const handleSubmit = async () => {
|
||||
try {
|
||||
const values = await form.validateFields();
|
||||
if (values.roleId) {
|
||||
|
||||
// 处理日期,确保只保留日期部分
|
||||
if (values.periodEnd) {
|
||||
values.periodEnd = values.periodEnd.format('YYYY-MM-DD');
|
||||
}
|
||||
|
||||
if (values.id) {
|
||||
await updateAgency(values).then((r: any) => {
|
||||
if (r?.code == 200) {
|
||||
message.success('修改成功');
|
||||
@ -132,7 +178,7 @@ const agency: React.FC<{}> = () => {
|
||||
});
|
||||
} else {
|
||||
await addAgency(values).then((r: any) => {
|
||||
console.log("r?.code", r?.code)
|
||||
|
||||
if (r?.code == 200) {
|
||||
message.success('新增成功');
|
||||
} else {
|
||||
@ -220,7 +266,9 @@ const agency: React.FC<{}> = () => {
|
||||
<Form.Item label="供应商ID" name="providerId" hidden>
|
||||
<Input disabled />
|
||||
</Form.Item>
|
||||
|
||||
<Form.Item label="供应商Name" name="providerName" hidden>
|
||||
<Input disabled />
|
||||
</Form.Item>
|
||||
<Form.Item label="ID" name="id" hidden>
|
||||
<Input disabled />
|
||||
|
||||
@ -244,12 +292,13 @@ const agency: React.FC<{}> = () => {
|
||||
|
||||
{showEndDate && (
|
||||
<Form.Item label="结束日期" name="periodEnd">
|
||||
<DatePicker style={{ width: '100%' }} />
|
||||
<DatePicker style={{ width: '100%' }} format="YYYY-MM-DD" picker="date" />
|
||||
</Form.Item>
|
||||
)}
|
||||
|
||||
|
||||
</Form>
|
||||
|
||||
</Modal>
|
||||
);
|
||||
return (
|
||||
|
Reference in New Issue
Block a user