Compare commits
No commits in common. "ae327d9b561128a61e487eacf9dc73edc383ba62" and "555301527b2c6fed48cf21994906214780c25868" have entirely different histories.
ae327d9b56
...
555301527b
@ -93,14 +93,7 @@ export const LayoutConfig: RuntimeConfig['layout'] = () => {
|
|||||||
// 首页 logo
|
// 首页 logo
|
||||||
logo: (
|
logo: (
|
||||||
<div style={{ width: 181 }}>
|
<div style={{ width: 181 }}>
|
||||||
<img
|
{/* <img src={Logo} style={{ height: '42px' }} /> */}
|
||||||
src={
|
|
||||||
snap.session?.company_configs?.config_value?.logo
|
|
||||||
? snap.session?.company_configs?.config_value?.logo[0]?.url
|
|
||||||
: ''
|
|
||||||
}
|
|
||||||
style={{ height: '42px' }}
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
),
|
),
|
||||||
layout: 'mix',
|
layout: 'mix',
|
||||||
|
|||||||
@ -15,7 +15,6 @@ export const stateActions = {
|
|||||||
setLogin(res: MyResponseType) {
|
setLogin(res: MyResponseType) {
|
||||||
state.session.user = res.data.user;
|
state.session.user = res.data.user;
|
||||||
state.session.campus = res.data.campus;
|
state.session.campus = res.data.campus;
|
||||||
state.session.company_configs = res.data.company_configs;
|
|
||||||
state.session.permissions = res.data.permissions;
|
state.session.permissions = res.data.permissions;
|
||||||
if (res.data?.token?.access_token)
|
if (res.data?.token?.access_token)
|
||||||
state.storage.access_token = res.data?.token?.access_token;
|
state.storage.access_token = res.data?.token?.access_token;
|
||||||
|
|||||||
@ -35,13 +35,6 @@ type SessionType = {
|
|||||||
id: number;
|
id: number;
|
||||||
name: string;
|
name: string;
|
||||||
};
|
};
|
||||||
company_configs?: {
|
|
||||||
config_value?: {
|
|
||||||
logo?: {
|
|
||||||
url?: string;
|
|
||||||
}[];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
permissions?: any;
|
permissions?: any;
|
||||||
apiKeys: string[];
|
apiKeys: string[];
|
||||||
loading: number;
|
loading: number;
|
||||||
@ -52,7 +45,6 @@ const session: SessionType = proxy({
|
|||||||
user: undefined,
|
user: undefined,
|
||||||
campus: undefined,
|
campus: undefined,
|
||||||
permissions: undefined,
|
permissions: undefined,
|
||||||
company_configs: {},
|
|
||||||
apiKeys: [],
|
apiKeys: [],
|
||||||
loading: 0,
|
loading: 0,
|
||||||
});
|
});
|
||||||
|
|||||||
11
src/gen/ApiTypes.d.ts
vendored
11
src/gen/ApiTypes.d.ts
vendored
@ -842,17 +842,6 @@ declare namespace ApiTypes {
|
|||||||
"organizations_id"?: number; // 所属组织id,[ref:organizations]
|
"organizations_id"?: number; // 所属组织id,[ref:organizations]
|
||||||
"keywords"?: string; // 关键词
|
"keywords"?: string; // 关键词
|
||||||
};
|
};
|
||||||
type Import = {
|
|
||||||
"upload_file": mimes:xlsx,xls; // 上传文件
|
|
||||||
};
|
|
||||||
type Export = {
|
|
||||||
"organizations_id"?: number; // 组织机构ID
|
|
||||||
"organization_name"?: string; // 组织机构名称
|
|
||||||
"name"?: string; // 模糊搜索:名称
|
|
||||||
"phone"?: string; // 模糊搜索:手机号
|
|
||||||
"download_type"?: string; // 下载类型:all-全部,page-当前页
|
|
||||||
"current"?: number; // 当前页偏移量
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
namespace CompanyPositions {
|
namespace CompanyPositions {
|
||||||
type List = {
|
type List = {
|
||||||
|
|||||||
@ -423,15 +423,6 @@ export const Apis = {
|
|||||||
Select(data?: ApiTypes.Company.CompanyEmployees.Select): Promise<MyResponseType> {
|
Select(data?: ApiTypes.Company.CompanyEmployees.Select): Promise<MyResponseType> {
|
||||||
return request('company/company/company_employees/select', { data });
|
return request('company/company/company_employees/select', { data });
|
||||||
},
|
},
|
||||||
Import(data: ApiTypes.Company.CompanyEmployees.Import): Promise<MyResponseType> {
|
|
||||||
return request('company/company/company_employees/import', { data });
|
|
||||||
},
|
|
||||||
DownloadTemplate(): Promise<MyResponseType> {
|
|
||||||
return request('company/company/company_employees/download_template', {responseType: 'blob',});
|
|
||||||
},
|
|
||||||
Export(data?: ApiTypes.Company.CompanyEmployees.Export): Promise<MyResponseType> {
|
|
||||||
return request('company/company/company_employees/export', { responseType: 'blob',data });
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
CompanyPositions: {
|
CompanyPositions: {
|
||||||
List(data?: ApiTypes.Company.CompanyPositions.List): Promise<MyResponseType> {
|
List(data?: ApiTypes.Company.CompanyPositions.List): Promise<MyResponseType> {
|
||||||
|
|||||||
@ -251,7 +251,7 @@ export const BannersTypeEnum= {
|
|||||||
|
|
||||||
// 缓存类型
|
// 缓存类型
|
||||||
export const CacheTypeEnum= {
|
export const CacheTypeEnum= {
|
||||||
'MobilePhoneVerificationCode': {"text":"手机验证码","color":"#bba798","value":"MobilePhoneVerificationCode"},
|
'MobilePhoneVerificationCode': {"text":"手机验证码","color":"#2721e5","value":"MobilePhoneVerificationCode"},
|
||||||
};
|
};
|
||||||
|
|
||||||
// CompaniesMerchantTypeEnum
|
// CompaniesMerchantTypeEnum
|
||||||
|
|||||||
@ -1,86 +0,0 @@
|
|||||||
import { MyColumns, MyPageContainer, MyProTableProps } from '@/common';
|
|
||||||
import { Apis } from '@/gen/Apis';
|
|
||||||
import {
|
|
||||||
ApprovalInstancesStatusEnum,
|
|
||||||
ApprovalTemplatesTypeEnum,
|
|
||||||
} from '@/gen/Enums';
|
|
||||||
import { ProTable } from '@ant-design/pro-components';
|
|
||||||
import { useNavigate } from '@umijs/max';
|
|
||||||
import { Space } from 'antd';
|
|
||||||
import Audit from '../pending/modals/Audit';
|
|
||||||
|
|
||||||
export default function Index({ title = '待我审批' }) {
|
|
||||||
const navigate = useNavigate();
|
|
||||||
return (
|
|
||||||
<MyPageContainer
|
|
||||||
title={title}
|
|
||||||
enableTabs={true}
|
|
||||||
tabKey="approval_instances"
|
|
||||||
tabLabel={title}
|
|
||||||
>
|
|
||||||
<ProTable
|
|
||||||
{...MyProTableProps.props}
|
|
||||||
request={async (params, sort) =>
|
|
||||||
MyProTableProps.request(
|
|
||||||
{
|
|
||||||
status: 'Pending',
|
|
||||||
...params,
|
|
||||||
},
|
|
||||||
sort,
|
|
||||||
Apis.Approval.ApprovalInstances.PendingList,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
headerTitle="待我审批"
|
|
||||||
columns={[
|
|
||||||
MyColumns.ID({ search: false }),
|
|
||||||
MyColumns.EnumTag({
|
|
||||||
title: '状态',
|
|
||||||
dataIndex: 'status',
|
|
||||||
valueEnum: ApprovalInstancesStatusEnum,
|
|
||||||
}),
|
|
||||||
MyColumns.EnumTag({
|
|
||||||
dataIndex: ['approval_instance', 'type'],
|
|
||||||
title: '类型',
|
|
||||||
valueEnum: ApprovalTemplatesTypeEnum,
|
|
||||||
search: false,
|
|
||||||
}),
|
|
||||||
{
|
|
||||||
title: '申请事项',
|
|
||||||
dataIndex: ['approval_instance', 'title'],
|
|
||||||
search: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: '关联项目',
|
|
||||||
dataIndex: ['approval_instance', 'asset_project', 'name'],
|
|
||||||
search: false,
|
|
||||||
},
|
|
||||||
|
|
||||||
{
|
|
||||||
title: '申请人',
|
|
||||||
dataIndex: 'approver_name',
|
|
||||||
},
|
|
||||||
|
|
||||||
// {
|
|
||||||
// title: '有效期',
|
|
||||||
// search: false,
|
|
||||||
// render: (_, item: any) => {
|
|
||||||
// return `${dayjs(
|
|
||||||
// item?.approval_instance?.model?.start_time,
|
|
||||||
// ).format('YYYY-MM-DD')}至${dayjs(
|
|
||||||
// item?.approval_instance?.model?.end_time,
|
|
||||||
// ).format('YYYY-MM-DD')}`;
|
|
||||||
// },
|
|
||||||
// },
|
|
||||||
MyColumns.CreatedAt(),
|
|
||||||
MyColumns.Option({
|
|
||||||
render: (_, item: any, index, action) => (
|
|
||||||
<Space key={index}>
|
|
||||||
<Audit item={item} reload={action?.reload} title={title} />
|
|
||||||
</Space>
|
|
||||||
),
|
|
||||||
}),
|
|
||||||
]}
|
|
||||||
/>
|
|
||||||
</MyPageContainer>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
@ -1,74 +0,0 @@
|
|||||||
import { MyColumns, MyPageContainer, MyProTableProps } from '@/common';
|
|
||||||
import { Apis } from '@/gen/Apis';
|
|
||||||
import {
|
|
||||||
ApprovalInstancesStatusEnum,
|
|
||||||
ApprovalTemplatesTypeEnum,
|
|
||||||
} from '@/gen/Enums';
|
|
||||||
import { ProTable } from '@ant-design/pro-components';
|
|
||||||
import { Space } from 'antd';
|
|
||||||
import Show from './modals/Show';
|
|
||||||
export default function Index({ title = '抄送我的' }) {
|
|
||||||
return (
|
|
||||||
<MyPageContainer
|
|
||||||
title={title}
|
|
||||||
enableTabs={true}
|
|
||||||
tabKey="my_apply_list"
|
|
||||||
tabLabel={title}
|
|
||||||
>
|
|
||||||
<ProTable
|
|
||||||
{...MyProTableProps.props}
|
|
||||||
request={async (params, sort) =>
|
|
||||||
MyProTableProps.request(
|
|
||||||
params,
|
|
||||||
sort,
|
|
||||||
Apis.Approval.ApprovalInstances.CcList,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
headerTitle={title}
|
|
||||||
columns={[
|
|
||||||
MyColumns.ID({ search: false }),
|
|
||||||
{
|
|
||||||
title: '申请事项',
|
|
||||||
dataIndex: 'title',
|
|
||||||
search: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: '关联项目',
|
|
||||||
dataIndex: ['asset_project', 'name'],
|
|
||||||
search: false,
|
|
||||||
},
|
|
||||||
MyColumns.EnumTag({
|
|
||||||
title: '状态',
|
|
||||||
dataIndex: 'status',
|
|
||||||
valueEnum: ApprovalInstancesStatusEnum,
|
|
||||||
}),
|
|
||||||
MyColumns.EnumTag({
|
|
||||||
dataIndex: 'type',
|
|
||||||
title: '业务类型',
|
|
||||||
valueEnum: ApprovalTemplatesTypeEnum,
|
|
||||||
search: false,
|
|
||||||
}),
|
|
||||||
|
|
||||||
// {
|
|
||||||
// title: '项目ID',
|
|
||||||
// dataIndex: 'asset_projects_id',
|
|
||||||
// hidden: true,
|
|
||||||
// },
|
|
||||||
// {
|
|
||||||
// title: '申请人',
|
|
||||||
// dataIndex: 'applicant_name',
|
|
||||||
// search: false,
|
|
||||||
// },
|
|
||||||
MyColumns.CreatedAt(),
|
|
||||||
MyColumns.Option({
|
|
||||||
render: (_, item: any, index, action) => (
|
|
||||||
<Space key={index}>
|
|
||||||
<Show item={item} reload={action?.reload} title={title} />
|
|
||||||
</Space>
|
|
||||||
),
|
|
||||||
}),
|
|
||||||
]}
|
|
||||||
/>
|
|
||||||
</MyPageContainer>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
@ -1,250 +0,0 @@
|
|||||||
import {
|
|
||||||
MyBetaModalFormProps,
|
|
||||||
MyButtons,
|
|
||||||
MyModalFormProps,
|
|
||||||
renderTextHelper,
|
|
||||||
} from '@/common';
|
|
||||||
|
|
||||||
import { Apis } from '@/gen/Apis';
|
|
||||||
import { RefundsTypeEnum } from '@/gen/Enums';
|
|
||||||
import BIllInfo from '@/pages/bills/house_bills/modals/BIllInfo';
|
|
||||||
import {
|
|
||||||
BetaSchemaForm,
|
|
||||||
ProCard,
|
|
||||||
ProDescriptions,
|
|
||||||
} from '@ant-design/pro-components';
|
|
||||||
import { useNavigate } from '@umijs/max';
|
|
||||||
import { Form, Space, Steps } from 'antd';
|
|
||||||
|
|
||||||
export default function Update(props: MyBetaModalFormProps) {
|
|
||||||
const [form] = Form.useForm();
|
|
||||||
const navigate = useNavigate();
|
|
||||||
|
|
||||||
return (
|
|
||||||
<BetaSchemaForm<ApiTypes.Archive.HouseRegisters.Update>
|
|
||||||
{...MyModalFormProps.props}
|
|
||||||
title={props.title}
|
|
||||||
trigger={<MyButtons.Default title="查看" type="primary" />}
|
|
||||||
wrapperCol={{ span: 24 }}
|
|
||||||
width="600px"
|
|
||||||
key={new Date().getTime()}
|
|
||||||
form={form}
|
|
||||||
onOpenChange={() => {
|
|
||||||
if (props?.item?.id) {
|
|
||||||
Apis.Approval.ApprovalInstances.Show({
|
|
||||||
id: props.item?.model_id,
|
|
||||||
}).then((res) => {
|
|
||||||
form.setFieldsValue({
|
|
||||||
info_display: res?.data,
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}}
|
|
||||||
columns={[
|
|
||||||
{
|
|
||||||
// title: '登记信息',
|
|
||||||
dataIndex: 'info_display',
|
|
||||||
valueType: 'text',
|
|
||||||
renderFormItem: (_, config) => (
|
|
||||||
<Space direction="vertical" style={{ width: '100%' }}>
|
|
||||||
<div>
|
|
||||||
{/* 退款详情 */}
|
|
||||||
{config?.value?.type === 'Refund' && (
|
|
||||||
<ProCard size="small">
|
|
||||||
<ProDescriptions size="small" column={2}>
|
|
||||||
<ProDescriptions.Item label="申请事项" span={2}>
|
|
||||||
{config?.value?.title || '-'}
|
|
||||||
</ProDescriptions.Item>
|
|
||||||
<ProDescriptions.Item label="账单类型">
|
|
||||||
<renderTextHelper.Tag
|
|
||||||
Enums={RefundsTypeEnum}
|
|
||||||
value={config?.value?.model?.type}
|
|
||||||
/>
|
|
||||||
</ProDescriptions.Item>
|
|
||||||
<ProDescriptions.Item label="退款金额">
|
|
||||||
<Space>
|
|
||||||
{config?.value?.model?.refund_amount || '-'}
|
|
||||||
元
|
|
||||||
<BIllInfo
|
|
||||||
item={{
|
|
||||||
id: config?.value?.model?.refundable_id,
|
|
||||||
type: 'link',
|
|
||||||
}}
|
|
||||||
title="查看账单"
|
|
||||||
/>
|
|
||||||
</Space>
|
|
||||||
</ProDescriptions.Item>
|
|
||||||
<ProDescriptions.Item label="付款信息" span={2}>
|
|
||||||
{config?.value?.model?.payer_name || '-'}|
|
|
||||||
{config?.value?.model?.payer_bank || '-'}|
|
|
||||||
{config?.value?.model?.payer_account || '-'}
|
|
||||||
</ProDescriptions.Item>
|
|
||||||
<ProDescriptions.Item label="收款信息" span={2}>
|
|
||||||
{config?.value?.model?.payee_name || '-'}
|
|
||||||
{config?.value?.model?.payee_bank || '-'}
|
|
||||||
{config?.value?.model?.payee_account || '-'}
|
|
||||||
</ProDescriptions.Item>
|
|
||||||
<ProDescriptions.Item label="申请人" span={2}>
|
|
||||||
{props?.item?.applicant?.name || '-'}:
|
|
||||||
{props?.item?.applicant?.phone || '-'}
|
|
||||||
</ProDescriptions.Item>
|
|
||||||
<ProDescriptions.Item label="申请时间">
|
|
||||||
{props?.item?.created_at || '-'}
|
|
||||||
</ProDescriptions.Item>
|
|
||||||
</ProDescriptions>
|
|
||||||
</ProCard>
|
|
||||||
)}
|
|
||||||
{/* 合同详情 */}
|
|
||||||
{config?.value?.type === 'Contract' && (
|
|
||||||
<ProCard size="small">
|
|
||||||
<ProDescriptions size="small" column={2}>
|
|
||||||
<ProDescriptions.Item label="合同名称" span={2}>
|
|
||||||
{config?.value?.model?.name || '-'}
|
|
||||||
</ProDescriptions.Item>
|
|
||||||
|
|
||||||
<ProDescriptions.Item label="合同编号" span={2}>
|
|
||||||
<Space>
|
|
||||||
{config?.value?.model?.code || '-'}
|
|
||||||
<BIllInfo
|
|
||||||
item={{
|
|
||||||
id: config?.value?.model?.refundable_id,
|
|
||||||
type: 'Contract',
|
|
||||||
}}
|
|
||||||
title="查看合同"
|
|
||||||
/>
|
|
||||||
<MyButtons.View
|
|
||||||
title="查看"
|
|
||||||
key="configInfo"
|
|
||||||
onClick={() => {
|
|
||||||
navigate(
|
|
||||||
`/contract/contracts/show/${config?.value?.model?.id}`,
|
|
||||||
);
|
|
||||||
}}
|
|
||||||
/>
|
|
||||||
</Space>
|
|
||||||
</ProDescriptions.Item>
|
|
||||||
{/* <ProDescriptions.Item label="收支类型">
|
|
||||||
<renderTextHelper.Tag
|
|
||||||
Enums={ContractTemplatesIncomeExpenseTypeEnum}
|
|
||||||
value={config?.value?.model?.income_expense_type}
|
|
||||||
/>
|
|
||||||
</ProDescriptions.Item> */}
|
|
||||||
{/* <ProDescriptions.Item label="合同性质">
|
|
||||||
<renderTextHelper.Tag
|
|
||||||
Enums={ContractsContractNatureEnum}
|
|
||||||
value={config?.value?.model?.contract_nature}
|
|
||||||
/>
|
|
||||||
</ProDescriptions.Item> */}
|
|
||||||
<ProDescriptions.Item label="合同类型">
|
|
||||||
{config?.value?.model?.contract_type_name || '-'}
|
|
||||||
</ProDescriptions.Item>
|
|
||||||
{/* <ProDescriptions.Item label="结算模式">
|
|
||||||
<renderTextHelper.Tag
|
|
||||||
Enums={ContractsSettlementModeEnum}
|
|
||||||
value={config?.value?.model?.settlement_mode}
|
|
||||||
/>
|
|
||||||
</ProDescriptions.Item> */}
|
|
||||||
<ProDescriptions.Item label="合同金额">
|
|
||||||
{config?.value?.model?.total_amount || '-'}
|
|
||||||
</ProDescriptions.Item>
|
|
||||||
<ProDescriptions.Item label="保证金金额">
|
|
||||||
{config?.value?.model?.deposit_amount || '无'}
|
|
||||||
</ProDescriptions.Item>
|
|
||||||
<ProDescriptions.Item label="签约主体">
|
|
||||||
{config?.value?.model?.sign_subject || '-'}
|
|
||||||
</ProDescriptions.Item>
|
|
||||||
<ProDescriptions.Item label="签约部门">
|
|
||||||
{config?.value?.model?.sign_department || '-'}
|
|
||||||
</ProDescriptions.Item>
|
|
||||||
<ProDescriptions.Item label="关联项目">
|
|
||||||
{config?.value?.model?.project_name || '-'}
|
|
||||||
</ProDescriptions.Item>
|
|
||||||
<ProDescriptions.Item label="合同对接人">
|
|
||||||
{config?.value?.model?.contract_liaison || '-'}
|
|
||||||
</ProDescriptions.Item>
|
|
||||||
<ProDescriptions.Item label="合同有效期" span={2}>
|
|
||||||
{config?.value?.model?.start_time?.substring(0, 10)}至
|
|
||||||
{config?.value?.model?.end_time?.substring(0, 10)}
|
|
||||||
</ProDescriptions.Item>
|
|
||||||
<ProDescriptions.Item label="申请人" span={2}>
|
|
||||||
{props?.item?.applicant?.name || '-'}:
|
|
||||||
{props?.item?.applicant?.phone || '-'}
|
|
||||||
</ProDescriptions.Item>
|
|
||||||
<ProDescriptions.Item label="申请时间" span={2}>
|
|
||||||
{props?.item?.created_at || '-'}
|
|
||||||
</ProDescriptions.Item>
|
|
||||||
<ProDescriptions.Item label="附件" span={2}>
|
|
||||||
{config?.value?.model?.attachments.map((item: any) => {
|
|
||||||
const handleDownload = async (
|
|
||||||
e: React.MouseEvent,
|
|
||||||
) => {
|
|
||||||
e.preventDefault();
|
|
||||||
try {
|
|
||||||
const response = await fetch(item.url);
|
|
||||||
const blob = await response.blob();
|
|
||||||
const url = window.URL.createObjectURL(blob);
|
|
||||||
const a = document.createElement('a');
|
|
||||||
a.href = url;
|
|
||||||
a.download = item.name;
|
|
||||||
document.body.appendChild(a);
|
|
||||||
a.click();
|
|
||||||
window.URL.revokeObjectURL(url);
|
|
||||||
document.body.removeChild(a);
|
|
||||||
} catch (error) {
|
|
||||||
console.error('下载失败:', error);
|
|
||||||
// 如果下载失败,则在新窗口打开
|
|
||||||
window.open(item.url, '_blank');
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
return (
|
|
||||||
<div key={item.url}>
|
|
||||||
<a href={item.url} onClick={handleDownload}>
|
|
||||||
{item.name};
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
})}
|
|
||||||
</ProDescriptions.Item>
|
|
||||||
</ProDescriptions>
|
|
||||||
</ProCard>
|
|
||||||
)}
|
|
||||||
<ProCard>
|
|
||||||
<ProDescriptions>
|
|
||||||
<ProDescriptions.Item label="审核记录">
|
|
||||||
<Space direction="vertical" style={{ width: '100%' }}>
|
|
||||||
<Steps
|
|
||||||
progressDot
|
|
||||||
direction="vertical"
|
|
||||||
current={config?.value?.approval_records.length}
|
|
||||||
items={config?.value?.approval_records.map(
|
|
||||||
(item: any) =>
|
|
||||||
item?.node_type === 'Approver'
|
|
||||||
? {
|
|
||||||
title: `${
|
|
||||||
item.company_employee?.name || '-'
|
|
||||||
}-${item?.company_employee?.phone}`,
|
|
||||||
description: `${
|
|
||||||
item.status === 'Approved'
|
|
||||||
? `通过 - ${item.opinion || '-'} - ${
|
|
||||||
item.created_at || '-'
|
|
||||||
}`
|
|
||||||
: '待审核'
|
|
||||||
}`,
|
|
||||||
}
|
|
||||||
: '',
|
|
||||||
)}
|
|
||||||
/>
|
|
||||||
</Space>
|
|
||||||
</ProDescriptions.Item>
|
|
||||||
</ProDescriptions>
|
|
||||||
</ProCard>
|
|
||||||
</div>
|
|
||||||
</Space>
|
|
||||||
),
|
|
||||||
colProps: { span: 24 },
|
|
||||||
},
|
|
||||||
]}
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
@ -1,99 +0,0 @@
|
|||||||
import {
|
|
||||||
MyButtons,
|
|
||||||
MyColumns,
|
|
||||||
MyPageContainer,
|
|
||||||
MyProTableProps,
|
|
||||||
} from '@/common';
|
|
||||||
import { Apis } from '@/gen/Apis';
|
|
||||||
import {
|
|
||||||
ApprovalInstancesStatusEnum,
|
|
||||||
ApprovalTemplatesTypeEnum,
|
|
||||||
} from '@/gen/Enums';
|
|
||||||
import { ProTable } from '@ant-design/pro-components';
|
|
||||||
import { Space } from 'antd';
|
|
||||||
export default function Index({ title = '我的发起' }) {
|
|
||||||
return (
|
|
||||||
<MyPageContainer
|
|
||||||
title={title}
|
|
||||||
enableTabs={true}
|
|
||||||
tabKey="my_apply_list"
|
|
||||||
tabLabel={title}
|
|
||||||
>
|
|
||||||
<ProTable
|
|
||||||
{...MyProTableProps.props}
|
|
||||||
request={async (params, sort) =>
|
|
||||||
MyProTableProps.request(
|
|
||||||
params,
|
|
||||||
sort,
|
|
||||||
Apis.Approval.ApprovalInstances.MyApplyList,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
headerTitle={title}
|
|
||||||
columns={[
|
|
||||||
MyColumns.ID({ search: false }),
|
|
||||||
{
|
|
||||||
title: '申请事项',
|
|
||||||
dataIndex: 'title',
|
|
||||||
search: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: '关联项目',
|
|
||||||
dataIndex: ['asset_project', 'name'],
|
|
||||||
search: false,
|
|
||||||
},
|
|
||||||
MyColumns.EnumTag({
|
|
||||||
title: '状态',
|
|
||||||
dataIndex: 'status',
|
|
||||||
valueEnum: ApprovalInstancesStatusEnum,
|
|
||||||
}),
|
|
||||||
MyColumns.EnumTag({
|
|
||||||
dataIndex: 'type',
|
|
||||||
title: '业务类型',
|
|
||||||
valueEnum: ApprovalTemplatesTypeEnum,
|
|
||||||
search: false,
|
|
||||||
}),
|
|
||||||
{
|
|
||||||
title: '当前审批人',
|
|
||||||
dataIndex: ['approval_records', 'approver_name'],
|
|
||||||
search: false,
|
|
||||||
render: (_, item: any) =>
|
|
||||||
`${item?.approval_records?.[0]?.company_employee?.name || ''}-${
|
|
||||||
item?.approval_records?.[0]?.company_employee?.phone || ''
|
|
||||||
}`,
|
|
||||||
},
|
|
||||||
// {
|
|
||||||
// title: '项目ID',
|
|
||||||
// dataIndex: 'asset_projects_id',
|
|
||||||
// hidden: true,
|
|
||||||
// },
|
|
||||||
// {
|
|
||||||
// title: '申请人',
|
|
||||||
// dataIndex: 'applicant_name',
|
|
||||||
// search: false,
|
|
||||||
// },
|
|
||||||
MyColumns.CreatedAt(),
|
|
||||||
MyColumns.Option({
|
|
||||||
render: (_, item: any, index, action) => (
|
|
||||||
<Space key={index}>
|
|
||||||
{/* <Update item={item} reload={action?.reload} title={title} /> */}
|
|
||||||
<MyButtons.Default
|
|
||||||
title="撤销"
|
|
||||||
isConfirm
|
|
||||||
description="确认撤销该申请吗?"
|
|
||||||
disabled={item.status !== 'Pending'}
|
|
||||||
color="danger"
|
|
||||||
variant="solid"
|
|
||||||
onConfirm={() =>
|
|
||||||
Apis.Approval.ApprovalInstances.Cancel({
|
|
||||||
id: item.id,
|
|
||||||
}).then(() => action?.reload())
|
|
||||||
}
|
|
||||||
/>
|
|
||||||
</Space>
|
|
||||||
),
|
|
||||||
}),
|
|
||||||
]}
|
|
||||||
/>
|
|
||||||
</MyPageContainer>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
@ -1,63 +0,0 @@
|
|||||||
import { MyColumns, MyPageContainer, MyProTableProps } from '@/common';
|
|
||||||
import { Apis } from '@/gen/Apis';
|
|
||||||
import {
|
|
||||||
ApprovalInstancesStatusEnum,
|
|
||||||
ApprovalTemplatesTypeEnum,
|
|
||||||
} from '@/gen/Enums';
|
|
||||||
import { ProTable } from '@ant-design/pro-components';
|
|
||||||
import { Space } from 'antd';
|
|
||||||
import Show from './modals/Show';
|
|
||||||
export default function Index({ title = '我的发起' }) {
|
|
||||||
return (
|
|
||||||
<MyPageContainer
|
|
||||||
title={title}
|
|
||||||
enableTabs={true}
|
|
||||||
tabKey="my_apply_list"
|
|
||||||
tabLabel={title}
|
|
||||||
>
|
|
||||||
<ProTable
|
|
||||||
{...MyProTableProps.props}
|
|
||||||
request={async (params, sort) =>
|
|
||||||
MyProTableProps.request(
|
|
||||||
params,
|
|
||||||
sort,
|
|
||||||
Apis.Approval.ApprovalInstances.ProcessedList,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
headerTitle={title}
|
|
||||||
columns={[
|
|
||||||
MyColumns.ID({ search: false }),
|
|
||||||
{
|
|
||||||
title: '申请事项',
|
|
||||||
dataIndex: 'title',
|
|
||||||
search: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: '关联项目',
|
|
||||||
dataIndex: ['asset_project', 'name'],
|
|
||||||
search: false,
|
|
||||||
},
|
|
||||||
MyColumns.EnumTag({
|
|
||||||
title: '状态',
|
|
||||||
dataIndex: 'status',
|
|
||||||
valueEnum: ApprovalInstancesStatusEnum,
|
|
||||||
}),
|
|
||||||
MyColumns.EnumTag({
|
|
||||||
dataIndex: 'type',
|
|
||||||
title: '业务类型',
|
|
||||||
valueEnum: ApprovalTemplatesTypeEnum,
|
|
||||||
search: false,
|
|
||||||
}),
|
|
||||||
MyColumns.CreatedAt(),
|
|
||||||
MyColumns.Option({
|
|
||||||
render: (_, item: any, index, action) => (
|
|
||||||
<Space key={index}>
|
|
||||||
<Show item={item} reload={action?.reload} title={title} />
|
|
||||||
</Space>
|
|
||||||
),
|
|
||||||
}),
|
|
||||||
]}
|
|
||||||
/>
|
|
||||||
</MyPageContainer>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
@ -1,250 +0,0 @@
|
|||||||
import { MyBetaModalFormProps, MyButtons, MyModalFormProps } from '@/common';
|
|
||||||
|
|
||||||
import { Apis } from '@/gen/Apis';
|
|
||||||
// import {
|
|
||||||
// ContractsContractNatureEnum,
|
|
||||||
// ContractsSettlementModeEnum,
|
|
||||||
// ContractTemplatesIncomeExpenseTypeEnum,
|
|
||||||
// RefundsTypeEnum,
|
|
||||||
// } from '@/gen/Enums';
|
|
||||||
import BIllInfo from '@/pages/bills/house_bills/modals/BIllInfo';
|
|
||||||
import {
|
|
||||||
BetaSchemaForm,
|
|
||||||
ProCard,
|
|
||||||
ProDescriptions,
|
|
||||||
} from '@ant-design/pro-components';
|
|
||||||
import { useNavigate } from '@umijs/max';
|
|
||||||
import { Form, Space, Steps } from 'antd';
|
|
||||||
|
|
||||||
export default function Update(props: MyBetaModalFormProps) {
|
|
||||||
const [form] = Form.useForm();
|
|
||||||
const navigate = useNavigate();
|
|
||||||
|
|
||||||
return (
|
|
||||||
<BetaSchemaForm<ApiTypes.Archive.HouseRegisters.Update>
|
|
||||||
{...MyModalFormProps.props}
|
|
||||||
title={props.title}
|
|
||||||
trigger={<MyButtons.Default title="查看" type="primary" />}
|
|
||||||
wrapperCol={{ span: 24 }}
|
|
||||||
width="600px"
|
|
||||||
key={new Date().getTime()}
|
|
||||||
form={form}
|
|
||||||
onOpenChange={() => {
|
|
||||||
if (props?.item?.id) {
|
|
||||||
Apis.Approval.ApprovalInstances.Show({
|
|
||||||
id: props.item?.model_id,
|
|
||||||
}).then((res) => {
|
|
||||||
form.setFieldsValue({
|
|
||||||
info_display: res?.data,
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}}
|
|
||||||
columns={[
|
|
||||||
{
|
|
||||||
// title: '登记信息',
|
|
||||||
dataIndex: 'info_display',
|
|
||||||
valueType: 'text',
|
|
||||||
renderFormItem: (_, config) => (
|
|
||||||
<Space direction="vertical" style={{ width: '100%' }}>
|
|
||||||
<div>
|
|
||||||
{/* 退款详情 */}
|
|
||||||
{config?.value?.type === 'Refund' && (
|
|
||||||
<ProCard size="small">
|
|
||||||
<ProDescriptions size="small" column={2}>
|
|
||||||
<ProDescriptions.Item label="申请事项" span={2}>
|
|
||||||
{config?.value?.title || '-'}
|
|
||||||
</ProDescriptions.Item>
|
|
||||||
{/* <ProDescriptions.Item label="账单类型">
|
|
||||||
<renderTextHelper.Tag
|
|
||||||
Enums={RefundsTypeEnum}
|
|
||||||
value={config?.value?.model?.type}
|
|
||||||
/>
|
|
||||||
</ProDescriptions.Item> */}
|
|
||||||
<ProDescriptions.Item label="退款金额">
|
|
||||||
<Space>
|
|
||||||
{config?.value?.model?.refund_amount || '-'}
|
|
||||||
元
|
|
||||||
<BIllInfo
|
|
||||||
item={{
|
|
||||||
id: config?.value?.model?.refundable_id,
|
|
||||||
type: 'link',
|
|
||||||
}}
|
|
||||||
title="查看账单"
|
|
||||||
/>
|
|
||||||
</Space>
|
|
||||||
</ProDescriptions.Item>
|
|
||||||
<ProDescriptions.Item label="付款信息" span={2}>
|
|
||||||
{config?.value?.model?.payer_name || '-'}|
|
|
||||||
{config?.value?.model?.payer_bank || '-'}|
|
|
||||||
{config?.value?.model?.payer_account || '-'}
|
|
||||||
</ProDescriptions.Item>
|
|
||||||
<ProDescriptions.Item label="收款信息" span={2}>
|
|
||||||
{config?.value?.model?.payee_name || '-'}
|
|
||||||
{config?.value?.model?.payee_bank || '-'}
|
|
||||||
{config?.value?.model?.payee_account || '-'}
|
|
||||||
</ProDescriptions.Item>
|
|
||||||
<ProDescriptions.Item label="申请人" span={2}>
|
|
||||||
{props?.item?.applicant?.name || '-'}:
|
|
||||||
{props?.item?.applicant?.phone || '-'}
|
|
||||||
</ProDescriptions.Item>
|
|
||||||
<ProDescriptions.Item label="申请时间" span={2}>
|
|
||||||
{props?.item?.created_at || '-'}
|
|
||||||
</ProDescriptions.Item>
|
|
||||||
</ProDescriptions>
|
|
||||||
</ProCard>
|
|
||||||
)}
|
|
||||||
{/* 合同详情 */}
|
|
||||||
{config?.value?.type === 'Contract' && (
|
|
||||||
<ProCard size="small">
|
|
||||||
<ProDescriptions size="small" column={2}>
|
|
||||||
<ProDescriptions.Item label="合同名称" span={2}>
|
|
||||||
{config?.value?.model?.name || '-'}
|
|
||||||
</ProDescriptions.Item>
|
|
||||||
|
|
||||||
<ProDescriptions.Item label="合同编号" span={2}>
|
|
||||||
<Space>
|
|
||||||
{config?.value?.model?.code || '-'}
|
|
||||||
<BIllInfo
|
|
||||||
item={{
|
|
||||||
id: config?.value?.model?.refundable_id,
|
|
||||||
type: 'Contract',
|
|
||||||
}}
|
|
||||||
title="查看合同"
|
|
||||||
/>
|
|
||||||
<MyButtons.View
|
|
||||||
title="查看"
|
|
||||||
key="configInfo"
|
|
||||||
onClick={() => {
|
|
||||||
navigate(
|
|
||||||
`/contract/contracts/show/${config?.value?.model?.id}`,
|
|
||||||
);
|
|
||||||
}}
|
|
||||||
/>
|
|
||||||
</Space>
|
|
||||||
</ProDescriptions.Item>
|
|
||||||
{/* <ProDescriptions.Item label="收支类型">
|
|
||||||
<renderTextHelper.Tag
|
|
||||||
Enums={ContractTemplatesIncomeExpenseTypeEnum}
|
|
||||||
value={config?.value?.model?.income_expense_type}
|
|
||||||
/>
|
|
||||||
</ProDescriptions.Item> */}
|
|
||||||
{/* <ProDescriptions.Item label="合同性质">
|
|
||||||
<renderTextHelper.Tag
|
|
||||||
Enums={ContractsContractNatureEnum}
|
|
||||||
value={config?.value?.model?.contract_nature}
|
|
||||||
/>
|
|
||||||
</ProDescriptions.Item> */}
|
|
||||||
<ProDescriptions.Item label="合同类型">
|
|
||||||
{config?.value?.model?.contract_type_name || '-'}
|
|
||||||
</ProDescriptions.Item>
|
|
||||||
{/* <ProDescriptions.Item label="结算模式">
|
|
||||||
<renderTextHelper.Tag
|
|
||||||
Enums={ContractsSettlementModeEnum}
|
|
||||||
value={config?.value?.model?.settlement_mode}
|
|
||||||
/>
|
|
||||||
</ProDescriptions.Item> */}
|
|
||||||
<ProDescriptions.Item label="合同金额">
|
|
||||||
{config?.value?.model?.total_amount || '-'}
|
|
||||||
</ProDescriptions.Item>
|
|
||||||
<ProDescriptions.Item label="保证金金额">
|
|
||||||
{config?.value?.model?.deposit_amount || '无'}
|
|
||||||
</ProDescriptions.Item>
|
|
||||||
<ProDescriptions.Item label="签约主体">
|
|
||||||
{config?.value?.model?.sign_subject || '-'}
|
|
||||||
</ProDescriptions.Item>
|
|
||||||
<ProDescriptions.Item label="签约部门">
|
|
||||||
{config?.value?.model?.sign_department || '-'}
|
|
||||||
</ProDescriptions.Item>
|
|
||||||
<ProDescriptions.Item label="关联项目">
|
|
||||||
{config?.value?.model?.project_name || '-'}
|
|
||||||
</ProDescriptions.Item>
|
|
||||||
<ProDescriptions.Item label="合同对接人">
|
|
||||||
{config?.value?.model?.contract_liaison || '-'}
|
|
||||||
</ProDescriptions.Item>
|
|
||||||
<ProDescriptions.Item label="合同有效期" span={2}>
|
|
||||||
{config?.value?.model?.start_time?.substring(0, 10)}至
|
|
||||||
{config?.value?.model?.end_time?.substring(0, 10)}
|
|
||||||
</ProDescriptions.Item>
|
|
||||||
<ProDescriptions.Item label="申请人" span={2}>
|
|
||||||
{props?.item?.applicant?.name || '-'}:
|
|
||||||
{props?.item?.applicant?.phone || '-'}
|
|
||||||
</ProDescriptions.Item>
|
|
||||||
<ProDescriptions.Item label="申请时间" span={2}>
|
|
||||||
{props?.item?.created_at || '-'}
|
|
||||||
</ProDescriptions.Item>
|
|
||||||
<ProDescriptions.Item label="附件" span={2}>
|
|
||||||
{config?.value?.model?.attachments.map((item: any) => {
|
|
||||||
const handleDownload = async (
|
|
||||||
e: React.MouseEvent,
|
|
||||||
) => {
|
|
||||||
e.preventDefault();
|
|
||||||
try {
|
|
||||||
const response = await fetch(item.url);
|
|
||||||
const blob = await response.blob();
|
|
||||||
const url = window.URL.createObjectURL(blob);
|
|
||||||
const a = document.createElement('a');
|
|
||||||
a.href = url;
|
|
||||||
a.download = item.name;
|
|
||||||
document.body.appendChild(a);
|
|
||||||
a.click();
|
|
||||||
window.URL.revokeObjectURL(url);
|
|
||||||
document.body.removeChild(a);
|
|
||||||
} catch (error) {
|
|
||||||
console.error('下载失败:', error);
|
|
||||||
// 如果下载失败,则在新窗口打开
|
|
||||||
window.open(item.url, '_blank');
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
return (
|
|
||||||
<div key={item.url}>
|
|
||||||
<a href={item.url} onClick={handleDownload}>
|
|
||||||
{item.name};
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
})}
|
|
||||||
</ProDescriptions.Item>
|
|
||||||
</ProDescriptions>
|
|
||||||
</ProCard>
|
|
||||||
)}
|
|
||||||
<ProCard>
|
|
||||||
<ProDescriptions>
|
|
||||||
<ProDescriptions.Item label="审核记录">
|
|
||||||
<Space direction="vertical" style={{ width: '100%' }}>
|
|
||||||
<Steps
|
|
||||||
progressDot
|
|
||||||
direction="vertical"
|
|
||||||
current={config?.value?.approval_records?.length}
|
|
||||||
items={config?.value?.approval_records?.map(
|
|
||||||
(item: any) =>
|
|
||||||
item?.node_type === 'Approver'
|
|
||||||
? {
|
|
||||||
title: `${
|
|
||||||
item.company_employee?.name || '-'
|
|
||||||
}-${item?.company_employee?.phone}`,
|
|
||||||
description: `${
|
|
||||||
item.status === 'Approved'
|
|
||||||
? `通过 - ${item.opinion || '-'} - ${
|
|
||||||
item.created_at || '-'
|
|
||||||
}`
|
|
||||||
: '待审核'
|
|
||||||
}`,
|
|
||||||
}
|
|
||||||
: '',
|
|
||||||
)}
|
|
||||||
/>
|
|
||||||
</Space>
|
|
||||||
</ProDescriptions.Item>
|
|
||||||
</ProDescriptions>
|
|
||||||
</ProCard>
|
|
||||||
</div>
|
|
||||||
</Space>
|
|
||||||
),
|
|
||||||
colProps: { span: 24 },
|
|
||||||
},
|
|
||||||
]}
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
@ -1,86 +0,0 @@
|
|||||||
import {
|
|
||||||
MyButtons,
|
|
||||||
MyColumns,
|
|
||||||
MyPageContainer,
|
|
||||||
MyProTableProps,
|
|
||||||
} from '@/common';
|
|
||||||
import { Apis } from '@/gen/Apis';
|
|
||||||
import {
|
|
||||||
ApprovalInstancesStatusEnum,
|
|
||||||
ApprovalTemplatesTypeEnum,
|
|
||||||
} from '@/gen/Enums';
|
|
||||||
import { ProTable } from '@ant-design/pro-components';
|
|
||||||
import { Space } from 'antd';
|
|
||||||
import Audit from './modals/Audit';
|
|
||||||
import Forwarded from './modals/Forwarded';
|
|
||||||
export default function Index({ title = '我的待办' }) {
|
|
||||||
return (
|
|
||||||
<MyPageContainer
|
|
||||||
title={title}
|
|
||||||
enableTabs={true}
|
|
||||||
tabKey="my_apply_list"
|
|
||||||
tabLabel={title}
|
|
||||||
>
|
|
||||||
<ProTable
|
|
||||||
{...MyProTableProps.props}
|
|
||||||
request={async (params, sort) =>
|
|
||||||
MyProTableProps.request(
|
|
||||||
{
|
|
||||||
...params,
|
|
||||||
status: ApprovalInstancesStatusEnum.Pending.value,
|
|
||||||
},
|
|
||||||
sort,
|
|
||||||
Apis.Approval.ApprovalInstances.PendingList,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
headerTitle={title}
|
|
||||||
columns={[
|
|
||||||
MyColumns.ID({ search: false }),
|
|
||||||
{
|
|
||||||
title: '申请事项',
|
|
||||||
dataIndex: ['approval_instance', 'title'],
|
|
||||||
search: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: '关联项目',
|
|
||||||
dataIndex: ['approval_instance', 'asset_project', 'name'],
|
|
||||||
search: false,
|
|
||||||
},
|
|
||||||
MyColumns.EnumTag({
|
|
||||||
title: '状态',
|
|
||||||
dataIndex: ['approval_instance', 'status'],
|
|
||||||
valueEnum: ApprovalInstancesStatusEnum,
|
|
||||||
}),
|
|
||||||
MyColumns.EnumTag({
|
|
||||||
dataIndex: ['approval_instance', 'type'],
|
|
||||||
title: '业务类型',
|
|
||||||
valueEnum: ApprovalTemplatesTypeEnum,
|
|
||||||
search: false,
|
|
||||||
}),
|
|
||||||
MyColumns.CreatedAt(),
|
|
||||||
MyColumns.Option({
|
|
||||||
render: (_, item: any, index, action) => (
|
|
||||||
<Space key={index}>
|
|
||||||
<Audit item={item} reload={action?.reload} title={title} />
|
|
||||||
<Forwarded item={item} reload={action?.reload} title="转办" />
|
|
||||||
<MyButtons.Default
|
|
||||||
title="撤销"
|
|
||||||
isConfirm
|
|
||||||
description="确认撤销该申请吗?"
|
|
||||||
disabled={item.status !== 'Pending'}
|
|
||||||
color="danger"
|
|
||||||
variant="solid"
|
|
||||||
onConfirm={() =>
|
|
||||||
Apis.Approval.ApprovalInstances.Cancel({
|
|
||||||
id: item.id,
|
|
||||||
}).then(() => action?.reload())
|
|
||||||
}
|
|
||||||
/>
|
|
||||||
</Space>
|
|
||||||
),
|
|
||||||
}),
|
|
||||||
]}
|
|
||||||
/>
|
|
||||||
</MyPageContainer>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
@ -1,320 +0,0 @@
|
|||||||
import {
|
|
||||||
MyBetaModalFormProps,
|
|
||||||
MyButtons,
|
|
||||||
MyFormItems,
|
|
||||||
MyModalFormProps,
|
|
||||||
renderTextHelper,
|
|
||||||
rulesHelper,
|
|
||||||
} from '@/common';
|
|
||||||
|
|
||||||
import { Apis } from '@/gen/Apis';
|
|
||||||
import { HouseRegistersStatusEnum, RefundsTypeEnum } from '@/gen/Enums';
|
|
||||||
import BIllInfo from '@/pages/bills/house_bills/modals/BIllInfo';
|
|
||||||
import {
|
|
||||||
BetaSchemaForm,
|
|
||||||
ProCard,
|
|
||||||
ProDescriptions,
|
|
||||||
} from '@ant-design/pro-components';
|
|
||||||
import { useNavigate } from '@umijs/max';
|
|
||||||
import { Form, message, Space, Steps } from 'antd';
|
|
||||||
|
|
||||||
export default function Update(props: MyBetaModalFormProps) {
|
|
||||||
const [form] = Form.useForm();
|
|
||||||
const navigate = useNavigate();
|
|
||||||
|
|
||||||
// 监听status字段变化,动态设置默认审批意见
|
|
||||||
const handleStatusChange = (changedValues: any) => {
|
|
||||||
if (changedValues.status) {
|
|
||||||
if (changedValues.status === HouseRegistersStatusEnum.Approved.value) {
|
|
||||||
form.setFieldsValue({ opinion: '同意' });
|
|
||||||
} else if (
|
|
||||||
changedValues.status === HouseRegistersStatusEnum.Rejected.value
|
|
||||||
) {
|
|
||||||
form.setFieldsValue({ opinion: '不同意' });
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
return (
|
|
||||||
<BetaSchemaForm<ApiTypes.Archive.HouseRegisters.Update>
|
|
||||||
{...MyModalFormProps.props}
|
|
||||||
title={props.title}
|
|
||||||
trigger={<MyButtons.Default title="审核" type="primary" />}
|
|
||||||
wrapperCol={{ span: 24 }}
|
|
||||||
width="600px"
|
|
||||||
key={new Date().getTime()}
|
|
||||||
form={form}
|
|
||||||
onOpenChange={() => {
|
|
||||||
if (props?.item?.id) {
|
|
||||||
Apis.Approval.ApprovalInstances.Show({
|
|
||||||
id: props.item?.approval_instances_id,
|
|
||||||
}).then((res) => {
|
|
||||||
form.setFieldsValue({
|
|
||||||
info_display: res?.data,
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}}
|
|
||||||
initialValues={{
|
|
||||||
// 默认选择通过,审批意见为同意
|
|
||||||
status: HouseRegistersStatusEnum.Approved.value,
|
|
||||||
opinion: '同意',
|
|
||||||
}}
|
|
||||||
onValuesChange={handleStatusChange}
|
|
||||||
onFinish={async (values: any) =>
|
|
||||||
Apis.Approval.ApprovalInstances.Approve({
|
|
||||||
record_id: props.item?.id ?? 0,
|
|
||||||
...values,
|
|
||||||
})
|
|
||||||
.then(() => {
|
|
||||||
props.reload?.();
|
|
||||||
message.success(props.title + '成功');
|
|
||||||
return true;
|
|
||||||
})
|
|
||||||
.catch(() => false)
|
|
||||||
}
|
|
||||||
columns={[
|
|
||||||
{
|
|
||||||
// title: '登记信息',
|
|
||||||
dataIndex: 'info_display',
|
|
||||||
valueType: 'text',
|
|
||||||
renderFormItem: (_, config) => (
|
|
||||||
<Space direction="vertical" style={{ width: '100%' }}>
|
|
||||||
<div>
|
|
||||||
{/* 退款详情 */}
|
|
||||||
{config?.value?.type === 'Refund' && (
|
|
||||||
<ProCard size="small">
|
|
||||||
<ProDescriptions size="small" column={2}>
|
|
||||||
<ProDescriptions.Item label="申请事项" span={2}>
|
|
||||||
{config?.value?.title || '-'}
|
|
||||||
</ProDescriptions.Item>
|
|
||||||
<ProDescriptions.Item label="账单类型">
|
|
||||||
<renderTextHelper.Tag
|
|
||||||
Enums={RefundsTypeEnum}
|
|
||||||
value={config?.value?.model?.type}
|
|
||||||
/>
|
|
||||||
</ProDescriptions.Item>
|
|
||||||
<ProDescriptions.Item label="退款金额">
|
|
||||||
<Space>
|
|
||||||
{config?.value?.model?.refund_amount || '-'}
|
|
||||||
元
|
|
||||||
<BIllInfo
|
|
||||||
item={{
|
|
||||||
id: config?.value?.model?.refundable_id,
|
|
||||||
type: 'link',
|
|
||||||
}}
|
|
||||||
title="查看账单"
|
|
||||||
/>
|
|
||||||
</Space>
|
|
||||||
</ProDescriptions.Item>
|
|
||||||
<ProDescriptions.Item label="付款信息" span={2}>
|
|
||||||
{config?.value?.model?.payer_name || '-'}|
|
|
||||||
{config?.value?.model?.payer_bank || '-'}|
|
|
||||||
{config?.value?.model?.payer_account || '-'}
|
|
||||||
</ProDescriptions.Item>
|
|
||||||
<ProDescriptions.Item label="收款信息" span={2}>
|
|
||||||
{config?.value?.model?.payee_name || '-'}
|
|
||||||
{config?.value?.model?.payee_bank || '-'}
|
|
||||||
{config?.value?.model?.payee_account || '-'}
|
|
||||||
</ProDescriptions.Item>
|
|
||||||
|
|
||||||
<ProDescriptions.Item label="申请时间">
|
|
||||||
{props?.item?.created_at || '-'}
|
|
||||||
</ProDescriptions.Item>
|
|
||||||
</ProDescriptions>
|
|
||||||
</ProCard>
|
|
||||||
)}
|
|
||||||
{/* 合同详情 */}
|
|
||||||
{config?.value?.type === 'Contract' && (
|
|
||||||
<ProCard size="small">
|
|
||||||
<ProDescriptions size="small" column={2}>
|
|
||||||
<ProDescriptions.Item label="合同名称" span={2}>
|
|
||||||
{config?.value?.model?.name || '-'}
|
|
||||||
</ProDescriptions.Item>
|
|
||||||
|
|
||||||
<ProDescriptions.Item label="合同编号" span={2}>
|
|
||||||
<Space>
|
|
||||||
{config?.value?.model?.code || '-'}
|
|
||||||
<BIllInfo
|
|
||||||
item={{
|
|
||||||
id: config?.value?.model?.refundable_id,
|
|
||||||
type: 'Contract',
|
|
||||||
}}
|
|
||||||
title="查看合同"
|
|
||||||
/>
|
|
||||||
<MyButtons.View
|
|
||||||
title="查看"
|
|
||||||
key="configInfo"
|
|
||||||
onClick={() => {
|
|
||||||
navigate(
|
|
||||||
`/contract/contracts/show/${config?.value?.model?.id}`,
|
|
||||||
);
|
|
||||||
}}
|
|
||||||
/>
|
|
||||||
</Space>
|
|
||||||
</ProDescriptions.Item>
|
|
||||||
{/* <ProDescriptions.Item label="收支类型">
|
|
||||||
<renderTextHelper.Tag
|
|
||||||
Enums={ContractTemplatesIncomeExpenseTypeEnum}
|
|
||||||
value={config?.value?.model?.income_expense_type}
|
|
||||||
/>
|
|
||||||
</ProDescriptions.Item> */}
|
|
||||||
{/* <ProDescriptions.Item label="合同性质">
|
|
||||||
<renderTextHelper.Tag
|
|
||||||
Enums={ContractsContractNatureEnum}
|
|
||||||
value={config?.value?.model?.contract_nature}
|
|
||||||
/>
|
|
||||||
</ProDescriptions.Item> */}
|
|
||||||
<ProDescriptions.Item label="合同类型">
|
|
||||||
{config?.value?.model?.contract_type_name || '-'}
|
|
||||||
</ProDescriptions.Item>
|
|
||||||
{/* <ProDescriptions.Item label="结算模式">
|
|
||||||
<renderTextHelper.Tag
|
|
||||||
Enums={ContractsSettlementModeEnum}
|
|
||||||
value={config?.value?.model?.settlement_mode}
|
|
||||||
/>
|
|
||||||
</ProDescriptions.Item> */}
|
|
||||||
<ProDescriptions.Item label="合同金额">
|
|
||||||
{config?.value?.model?.total_amount || '-'}
|
|
||||||
</ProDescriptions.Item>
|
|
||||||
<ProDescriptions.Item label="保证金金额">
|
|
||||||
{config?.value?.model?.deposit_amount || '无'}
|
|
||||||
</ProDescriptions.Item>
|
|
||||||
<ProDescriptions.Item label="签约主体">
|
|
||||||
{config?.value?.model?.sign_subject || '-'}
|
|
||||||
</ProDescriptions.Item>
|
|
||||||
<ProDescriptions.Item label="签约部门">
|
|
||||||
{config?.value?.model?.sign_department || '-'}
|
|
||||||
</ProDescriptions.Item>
|
|
||||||
<ProDescriptions.Item label="关联项目">
|
|
||||||
{config?.value?.model?.project_name || '-'}
|
|
||||||
</ProDescriptions.Item>
|
|
||||||
<ProDescriptions.Item label="合同对接人">
|
|
||||||
{config?.value?.model?.contract_liaison || '-'}
|
|
||||||
</ProDescriptions.Item>
|
|
||||||
<ProDescriptions.Item label="合同有效期" span={2}>
|
|
||||||
{config?.value?.model?.start_time?.substring(0, 10)}至
|
|
||||||
{config?.value?.model?.end_time?.substring(0, 10)}
|
|
||||||
</ProDescriptions.Item>
|
|
||||||
<ProDescriptions.Item label="申请时间" span={2}>
|
|
||||||
{props?.item?.created_at || '-'}
|
|
||||||
</ProDescriptions.Item>
|
|
||||||
<ProDescriptions.Item label="附件" span={2}>
|
|
||||||
{config?.value?.model?.attachments.map((item: any) => {
|
|
||||||
const handleDownload = async (
|
|
||||||
e: React.MouseEvent,
|
|
||||||
) => {
|
|
||||||
e.preventDefault();
|
|
||||||
try {
|
|
||||||
const response = await fetch(item.url);
|
|
||||||
const blob = await response.blob();
|
|
||||||
const url = window.URL.createObjectURL(blob);
|
|
||||||
const a = document.createElement('a');
|
|
||||||
a.href = url;
|
|
||||||
a.download = item.name;
|
|
||||||
document.body.appendChild(a);
|
|
||||||
a.click();
|
|
||||||
window.URL.revokeObjectURL(url);
|
|
||||||
document.body.removeChild(a);
|
|
||||||
} catch (error) {
|
|
||||||
console.error('下载失败:', error);
|
|
||||||
// 如果下载失败,则在新窗口打开
|
|
||||||
window.open(item.url, '_blank');
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
return (
|
|
||||||
<div key={item.url}>
|
|
||||||
<a href={item.url} onClick={handleDownload}>
|
|
||||||
{item.name};
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
})}
|
|
||||||
</ProDescriptions.Item>
|
|
||||||
</ProDescriptions>
|
|
||||||
</ProCard>
|
|
||||||
)}
|
|
||||||
<ProCard>
|
|
||||||
<ProDescriptions>
|
|
||||||
<ProDescriptions.Item label="审核记录">
|
|
||||||
<Space direction="vertical" style={{ width: '100%' }}>
|
|
||||||
<Steps
|
|
||||||
progressDot
|
|
||||||
direction="vertical"
|
|
||||||
current={config?.value?.approval_records.length}
|
|
||||||
items={config?.value?.approval_records.map(
|
|
||||||
(item: any) =>
|
|
||||||
item?.node_type === 'Approver'
|
|
||||||
? {
|
|
||||||
title: `${
|
|
||||||
item.company_employee?.name || '-'
|
|
||||||
}-${item?.company_employee?.phone}`,
|
|
||||||
description: `${
|
|
||||||
item.status === 'Approved'
|
|
||||||
? `通过 - ${item.opinion || '-'} - ${
|
|
||||||
item.created_at || '-'
|
|
||||||
}`
|
|
||||||
: '待审核'
|
|
||||||
}`,
|
|
||||||
}
|
|
||||||
: '',
|
|
||||||
)}
|
|
||||||
/>
|
|
||||||
</Space>
|
|
||||||
</ProDescriptions.Item>
|
|
||||||
</ProDescriptions>
|
|
||||||
</ProCard>
|
|
||||||
</div>
|
|
||||||
</Space>
|
|
||||||
),
|
|
||||||
colProps: { span: 24 },
|
|
||||||
},
|
|
||||||
{
|
|
||||||
valueType: 'group',
|
|
||||||
// title: '审核操作',
|
|
||||||
columns: [
|
|
||||||
MyFormItems.EnumRadio({
|
|
||||||
key: 'status',
|
|
||||||
title: '审核操作',
|
|
||||||
colProps: { span: 24 },
|
|
||||||
valueEnum: () => {
|
|
||||||
let obj: any = JSON.parse(
|
|
||||||
JSON.stringify(HouseRegistersStatusEnum),
|
|
||||||
);
|
|
||||||
delete obj.Pending;
|
|
||||||
return obj;
|
|
||||||
},
|
|
||||||
required: true,
|
|
||||||
}),
|
|
||||||
{
|
|
||||||
valueType: 'dependency',
|
|
||||||
name: ['status'],
|
|
||||||
columns: ({ status }) => {
|
|
||||||
return status === 'Rejected'
|
|
||||||
? [
|
|
||||||
{
|
|
||||||
title: '审批意见',
|
|
||||||
dataIndex: 'opinion',
|
|
||||||
valueType: 'textarea',
|
|
||||||
formItemProps: { ...rulesHelper.text },
|
|
||||||
colProps: { span: 24 },
|
|
||||||
},
|
|
||||||
]
|
|
||||||
: [
|
|
||||||
{
|
|
||||||
title: '审批意见',
|
|
||||||
dataIndex: 'opinion',
|
|
||||||
valueType: 'textarea',
|
|
||||||
formItemProps: { ...rulesHelper.text },
|
|
||||||
colProps: { span: 24 },
|
|
||||||
},
|
|
||||||
];
|
|
||||||
},
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
]}
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
@ -1,59 +0,0 @@
|
|||||||
import {
|
|
||||||
MyBetaModalFormProps,
|
|
||||||
MyButtons,
|
|
||||||
MyModalFormProps,
|
|
||||||
rulesHelper,
|
|
||||||
} from '@/common';
|
|
||||||
import { Selects } from '@/components/Select';
|
|
||||||
import { Apis } from '@/gen/Apis';
|
|
||||||
import { BetaSchemaForm } from '@ant-design/pro-components';
|
|
||||||
import { Form, message } from 'antd';
|
|
||||||
|
|
||||||
export default function Index(props: MyBetaModalFormProps & { item: any }) {
|
|
||||||
const [form] = Form.useForm();
|
|
||||||
return (
|
|
||||||
<BetaSchemaForm<ApiTypes.Asset.AssetItemInventories.Assign>
|
|
||||||
{...MyModalFormProps.props}
|
|
||||||
title={`转交他人审核`}
|
|
||||||
wrapperCol={{ span: 24 }}
|
|
||||||
width="600px"
|
|
||||||
trigger={
|
|
||||||
<MyButtons.Default title={props.title || '转办'} type="primary" />
|
|
||||||
}
|
|
||||||
onOpenChange={(open: any) => {
|
|
||||||
if (open && props.item) {
|
|
||||||
form.setFieldsValue({});
|
|
||||||
}
|
|
||||||
}}
|
|
||||||
key={new Date().getTime()}
|
|
||||||
form={form}
|
|
||||||
onFinish={async (values: any) => {
|
|
||||||
Apis.Approval.ApprovalInstances.Transfer({
|
|
||||||
...values,
|
|
||||||
record_id: props.item.id,
|
|
||||||
})
|
|
||||||
.then(() => {
|
|
||||||
props.reload?.();
|
|
||||||
message.success('转交成功!');
|
|
||||||
return true;
|
|
||||||
})
|
|
||||||
.catch(() => false);
|
|
||||||
}}
|
|
||||||
columns={[
|
|
||||||
Selects?.Employees({
|
|
||||||
title: '选择新的审核人',
|
|
||||||
key: 'to_employee_id',
|
|
||||||
colProps: { span: 24 },
|
|
||||||
formItemProps: { ...rulesHelper.text },
|
|
||||||
required: true,
|
|
||||||
}),
|
|
||||||
{
|
|
||||||
title: '转交理由',
|
|
||||||
valueType: 'textarea',
|
|
||||||
key: 'opinion',
|
|
||||||
colProps: { span: 24 },
|
|
||||||
},
|
|
||||||
]}
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
@ -1,83 +0,0 @@
|
|||||||
import {
|
|
||||||
MyButtons,
|
|
||||||
MyColumns,
|
|
||||||
MyPageContainer,
|
|
||||||
MyProTableProps,
|
|
||||||
} from '@/common';
|
|
||||||
import { Apis } from '@/gen/Apis';
|
|
||||||
import { ApprovalTemplatesTypeEnum } from '@/gen/Enums';
|
|
||||||
import { ProTable } from '@ant-design/pro-components';
|
|
||||||
import { Space } from 'antd';
|
|
||||||
import BatchModifyApprover from './modals/BatchModifyApprover';
|
|
||||||
import Create from './modals/Create';
|
|
||||||
import Update from './modals/Update';
|
|
||||||
|
|
||||||
export default function Index({ title = '审批模板' }) {
|
|
||||||
return (
|
|
||||||
<MyPageContainer
|
|
||||||
title={title}
|
|
||||||
enableTabs={true}
|
|
||||||
tabKey="contract_types"
|
|
||||||
tabLabel={title}
|
|
||||||
>
|
|
||||||
<ProTable
|
|
||||||
{...MyProTableProps.props}
|
|
||||||
request={async (params, sort) =>
|
|
||||||
MyProTableProps.request(
|
|
||||||
params,
|
|
||||||
sort,
|
|
||||||
Apis.Approval.ApprovalTemplates.List,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
headerTitle={title}
|
|
||||||
toolBarRender={(action) => [
|
|
||||||
<BatchModifyApprover
|
|
||||||
key="BatchModifyApprover"
|
|
||||||
reload={action?.reload}
|
|
||||||
title="批量修改审批人"
|
|
||||||
/>,
|
|
||||||
<Create key="Create" reload={action?.reload} title={title} />,
|
|
||||||
]}
|
|
||||||
columns={[
|
|
||||||
MyColumns.ID({
|
|
||||||
search: false,
|
|
||||||
}),
|
|
||||||
MyColumns.EnumTag({
|
|
||||||
title: '业务类型',
|
|
||||||
dataIndex: 'type',
|
|
||||||
valueEnum: ApprovalTemplatesTypeEnum,
|
|
||||||
}),
|
|
||||||
{
|
|
||||||
title: '模版名称',
|
|
||||||
dataIndex: 'name',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: '模版编码',
|
|
||||||
dataIndex: 'code',
|
|
||||||
search: false,
|
|
||||||
},
|
|
||||||
|
|
||||||
MyColumns.ToggleEnabled({
|
|
||||||
onToggleEnabled: Apis.Approval.ApprovalTemplates.ToggleEnabled,
|
|
||||||
search: false,
|
|
||||||
}),
|
|
||||||
MyColumns.CreatedAt(),
|
|
||||||
MyColumns.Option({
|
|
||||||
render: (_, item: any, index, action) => (
|
|
||||||
<Space key={index}>
|
|
||||||
<Update item={item} reload={action?.reload} title={title} />
|
|
||||||
<MyButtons.Delete
|
|
||||||
onConfirm={() =>
|
|
||||||
Apis.Approval.ApprovalTemplates.SoftDelete({
|
|
||||||
id: item.id,
|
|
||||||
}).then(() => action?.reload())
|
|
||||||
}
|
|
||||||
/>
|
|
||||||
</Space>
|
|
||||||
),
|
|
||||||
}),
|
|
||||||
]}
|
|
||||||
/>
|
|
||||||
</MyPageContainer>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
@ -1,62 +0,0 @@
|
|||||||
import {
|
|
||||||
MyBetaModalFormProps,
|
|
||||||
MyButtons,
|
|
||||||
MyModalFormProps,
|
|
||||||
rulesHelper,
|
|
||||||
} from '@/common';
|
|
||||||
import { Selects } from '@/components/Select';
|
|
||||||
import { Apis } from '@/gen/Apis';
|
|
||||||
import { BetaSchemaForm } from '@ant-design/pro-components';
|
|
||||||
import { Form, message } from 'antd';
|
|
||||||
|
|
||||||
export default function Index(props: MyBetaModalFormProps) {
|
|
||||||
const [form] = Form.useForm();
|
|
||||||
return (
|
|
||||||
<BetaSchemaForm<ApiTypes.Asset.AssetItemInventories.Assign>
|
|
||||||
{...MyModalFormProps.props}
|
|
||||||
title={`批量修改审批人`}
|
|
||||||
wrapperCol={{ span: 24 }}
|
|
||||||
width="600px"
|
|
||||||
trigger={
|
|
||||||
<MyButtons.Default
|
|
||||||
title={props.title || '批量修改审批人'}
|
|
||||||
type="primary"
|
|
||||||
size="middle"
|
|
||||||
/>
|
|
||||||
}
|
|
||||||
onOpenChange={(open: any) => {
|
|
||||||
if (open) {
|
|
||||||
form.resetFields();
|
|
||||||
}
|
|
||||||
}}
|
|
||||||
key={new Date().getTime()}
|
|
||||||
form={form}
|
|
||||||
onFinish={async (values: any) => {
|
|
||||||
return Apis.Approval.ApprovalTemplates.ReplaceApprover(values)
|
|
||||||
.then(() => {
|
|
||||||
props.reload?.();
|
|
||||||
message.success('修改成功!');
|
|
||||||
return true;
|
|
||||||
})
|
|
||||||
.catch(() => false);
|
|
||||||
}}
|
|
||||||
columns={[
|
|
||||||
Selects?.Employees({
|
|
||||||
title: '原审批人',
|
|
||||||
key: 'from_employee_id',
|
|
||||||
colProps: { span: 24 },
|
|
||||||
formItemProps: { ...rulesHelper.text },
|
|
||||||
required: true,
|
|
||||||
}),
|
|
||||||
Selects?.Employees({
|
|
||||||
title: '选择新的审批人',
|
|
||||||
key: 'to_employee_id',
|
|
||||||
tooltip: '所有涉及到的审批模版,都修改成当前人',
|
|
||||||
colProps: { span: 24 },
|
|
||||||
formItemProps: { ...rulesHelper.text },
|
|
||||||
required: true,
|
|
||||||
}),
|
|
||||||
]}
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
@ -1,141 +0,0 @@
|
|||||||
import {
|
|
||||||
MyBetaModalFormProps,
|
|
||||||
MyButtons,
|
|
||||||
MyFormItems,
|
|
||||||
MyModalFormProps,
|
|
||||||
rulesHelper,
|
|
||||||
} from '@/common';
|
|
||||||
import { Selects } from '@/components/Select';
|
|
||||||
import { Apis } from '@/gen/Apis';
|
|
||||||
import {
|
|
||||||
ApprovalTemplateNodesNodeTypeEnum,
|
|
||||||
ApprovalTemplatesTypeEnum,
|
|
||||||
} from '@/gen/Enums';
|
|
||||||
import { BetaSchemaForm } from '@ant-design/pro-components';
|
|
||||||
import { Form, message } from 'antd';
|
|
||||||
|
|
||||||
export default function Create(props: MyBetaModalFormProps) {
|
|
||||||
const [form] = Form.useForm();
|
|
||||||
return (
|
|
||||||
<BetaSchemaForm<ApiTypes.Approval.ApprovalTemplates.Store>
|
|
||||||
{...MyModalFormProps.props}
|
|
||||||
title={`添加${props.title}`}
|
|
||||||
wrapperCol={{ span: 24 }}
|
|
||||||
width="700px"
|
|
||||||
key={new Date().getTime()}
|
|
||||||
form={form}
|
|
||||||
onOpenChange={(open: any) => {
|
|
||||||
if (open) {
|
|
||||||
form.resetFields(); // 清空表单数据
|
|
||||||
}
|
|
||||||
}}
|
|
||||||
trigger={<MyButtons.Create title={`${props.title}`} />}
|
|
||||||
onFinish={async (values) =>
|
|
||||||
Apis.Approval.ApprovalTemplates.Store({
|
|
||||||
...values,
|
|
||||||
is_enabled: true,
|
|
||||||
})
|
|
||||||
.then(() => {
|
|
||||||
props.reload?.();
|
|
||||||
message.success(props.title + '成功');
|
|
||||||
return true;
|
|
||||||
})
|
|
||||||
.catch(() => false)
|
|
||||||
}
|
|
||||||
columns={[
|
|
||||||
MyFormItems.EnumRadio({
|
|
||||||
key: 'type',
|
|
||||||
title: '业务类型',
|
|
||||||
valueEnum: ApprovalTemplatesTypeEnum,
|
|
||||||
required: true,
|
|
||||||
colProps: { span: 24 },
|
|
||||||
}),
|
|
||||||
{
|
|
||||||
key: 'name',
|
|
||||||
title: '模板名称',
|
|
||||||
formItemProps: { ...rulesHelper.text },
|
|
||||||
colProps: { span: 12 },
|
|
||||||
},
|
|
||||||
{
|
|
||||||
key: 'code',
|
|
||||||
title: '模板编码',
|
|
||||||
formItemProps: { ...rulesHelper.text },
|
|
||||||
colProps: { span: 12 },
|
|
||||||
},
|
|
||||||
{
|
|
||||||
valueType: 'formList',
|
|
||||||
dataIndex: 'nodes',
|
|
||||||
title: '设置审批节点',
|
|
||||||
fieldProps: {
|
|
||||||
copyIconProps: false,
|
|
||||||
// deleteIconProps: false,
|
|
||||||
},
|
|
||||||
formItemProps: {
|
|
||||||
...rulesHelper.array,
|
|
||||||
wrapperCol: { span: 24 },
|
|
||||||
},
|
|
||||||
columns: [
|
|
||||||
{
|
|
||||||
valueType: 'group',
|
|
||||||
colProps: { span: 24 },
|
|
||||||
columns: [
|
|
||||||
MyFormItems.EnumSelect({
|
|
||||||
key: 'node_type',
|
|
||||||
title: `类型`,
|
|
||||||
valueEnum: ApprovalTemplateNodesNodeTypeEnum,
|
|
||||||
colProps: { span: 5 },
|
|
||||||
formItemProps: {
|
|
||||||
...rulesHelper.text,
|
|
||||||
},
|
|
||||||
}),
|
|
||||||
{
|
|
||||||
title: '节点名称',
|
|
||||||
key: 'name',
|
|
||||||
colProps: { span: 6 },
|
|
||||||
formItemProps: {
|
|
||||||
...rulesHelper.text,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
// MyFormItems.EnumSelect({
|
|
||||||
// key: 'approve_type',
|
|
||||||
// title: `审批方式`,
|
|
||||||
// valueEnum: ApprovalTemplateNodesApproveTypeEnum,
|
|
||||||
// colProps: { span: 5 },
|
|
||||||
// }),
|
|
||||||
|
|
||||||
{
|
|
||||||
valueType: 'dependency',
|
|
||||||
name: ['node_type'],
|
|
||||||
columns: ({ node_type }) => {
|
|
||||||
return [
|
|
||||||
Selects.Employees({
|
|
||||||
key: 'members',
|
|
||||||
title: `审批人员`,
|
|
||||||
colProps: { span: 13 },
|
|
||||||
fieldProps: {
|
|
||||||
mode: 'multiple',
|
|
||||||
maxCount:
|
|
||||||
node_type ===
|
|
||||||
ApprovalTemplateNodesNodeTypeEnum.Approver.value
|
|
||||||
? 1
|
|
||||||
: 9,
|
|
||||||
},
|
|
||||||
}),
|
|
||||||
];
|
|
||||||
},
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: '备注',
|
|
||||||
key: 'description',
|
|
||||||
colProps: { span: 24 },
|
|
||||||
valueType: 'textarea',
|
|
||||||
},
|
|
||||||
]}
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
@ -1,168 +0,0 @@
|
|||||||
import {
|
|
||||||
MyBetaModalFormProps,
|
|
||||||
MyButtons,
|
|
||||||
MyFormItems,
|
|
||||||
MyModalFormProps,
|
|
||||||
rulesHelper,
|
|
||||||
} from '@/common';
|
|
||||||
import { Selects } from '@/components/Select';
|
|
||||||
import { Apis } from '@/gen/Apis';
|
|
||||||
import {
|
|
||||||
ApprovalTemplateNodesNodeTypeEnum,
|
|
||||||
ApprovalTemplatesTypeEnum,
|
|
||||||
} from '@/gen/Enums';
|
|
||||||
import { BetaSchemaForm } from '@ant-design/pro-components';
|
|
||||||
import { Form, message } from 'antd';
|
|
||||||
let showInfo: any = [];
|
|
||||||
export default function Update(props: MyBetaModalFormProps) {
|
|
||||||
const [form] = Form.useForm();
|
|
||||||
return (
|
|
||||||
<BetaSchemaForm<ApiTypes.Approval.ApprovalTemplates.Update>
|
|
||||||
{...MyModalFormProps.props}
|
|
||||||
title={`编辑${props.title}`}
|
|
||||||
trigger={<MyButtons.Edit />}
|
|
||||||
key={new Date().getTime()}
|
|
||||||
wrapperCol={{ span: 24 }}
|
|
||||||
width="700px"
|
|
||||||
form={form}
|
|
||||||
onOpenChange={(open: any) => {
|
|
||||||
if (open && props.item) {
|
|
||||||
Apis.Approval.ApprovalTemplates.Show({
|
|
||||||
id: props.item?.id ?? 0,
|
|
||||||
}).then((res: any) => {
|
|
||||||
showInfo = res?.data?.approval_template_nodes;
|
|
||||||
form.setFieldsValue({
|
|
||||||
...res?.data,
|
|
||||||
nodes: res?.data?.approval_template_nodes?.map((item: any) => ({
|
|
||||||
...item,
|
|
||||||
members: item?.approval_template_node_members?.map(
|
|
||||||
(member: any) => member?.company_employees_id,
|
|
||||||
),
|
|
||||||
})),
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}}
|
|
||||||
onFinish={async (values) =>
|
|
||||||
Apis.Approval.ApprovalTemplates.Update({
|
|
||||||
...values,
|
|
||||||
id: props.item?.id ?? 0,
|
|
||||||
})
|
|
||||||
.then(() => {
|
|
||||||
props.reload?.();
|
|
||||||
message.success(props.title + '编辑成功');
|
|
||||||
return true;
|
|
||||||
})
|
|
||||||
.catch(() => false)
|
|
||||||
}
|
|
||||||
columns={[
|
|
||||||
MyFormItems.EnumRadio({
|
|
||||||
key: 'type',
|
|
||||||
title: '业务类型',
|
|
||||||
valueEnum: ApprovalTemplatesTypeEnum,
|
|
||||||
required: true,
|
|
||||||
colProps: { span: 24 },
|
|
||||||
}),
|
|
||||||
{
|
|
||||||
key: 'name',
|
|
||||||
title: '名称',
|
|
||||||
formItemProps: { ...rulesHelper.text },
|
|
||||||
colProps: { span: 12 },
|
|
||||||
},
|
|
||||||
{
|
|
||||||
key: 'code',
|
|
||||||
title: '模板编码',
|
|
||||||
formItemProps: { ...rulesHelper.text },
|
|
||||||
colProps: { span: 12 },
|
|
||||||
},
|
|
||||||
|
|
||||||
{
|
|
||||||
valueType: 'formList',
|
|
||||||
dataIndex: 'nodes',
|
|
||||||
title: '审批节点',
|
|
||||||
fieldProps: {
|
|
||||||
copyIconProps: false,
|
|
||||||
// deleteIconProps: false,
|
|
||||||
},
|
|
||||||
formItemProps: {
|
|
||||||
...rulesHelper.array,
|
|
||||||
wrapperCol: { span: 24 },
|
|
||||||
},
|
|
||||||
columns: [
|
|
||||||
{
|
|
||||||
valueType: 'group',
|
|
||||||
colProps: { span: 24 },
|
|
||||||
columns: [
|
|
||||||
MyFormItems.EnumSelect({
|
|
||||||
key: 'node_type',
|
|
||||||
title: `类型`,
|
|
||||||
valueEnum: ApprovalTemplateNodesNodeTypeEnum,
|
|
||||||
colProps: { span: 5 },
|
|
||||||
formItemProps: {
|
|
||||||
...rulesHelper.text,
|
|
||||||
},
|
|
||||||
}),
|
|
||||||
{
|
|
||||||
title: '节点名称',
|
|
||||||
key: 'name',
|
|
||||||
colProps: { span: 6 },
|
|
||||||
formItemProps: {
|
|
||||||
...rulesHelper.text,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
valueType: 'dependency',
|
|
||||||
name: ['node_type', 'name'],
|
|
||||||
columns: ({ node_type, name }) => {
|
|
||||||
return [
|
|
||||||
Selects.Employees({
|
|
||||||
key: 'members',
|
|
||||||
title: `审批人员`,
|
|
||||||
colProps: { span: 13 },
|
|
||||||
fieldProps: {
|
|
||||||
mode: 'multiple',
|
|
||||||
maxCount:
|
|
||||||
node_type ===
|
|
||||||
ApprovalTemplateNodesNodeTypeEnum.Approver.value
|
|
||||||
? 1
|
|
||||||
: 9,
|
|
||||||
maxTagTextLength: 3,
|
|
||||||
labelRender: (res: any) => {
|
|
||||||
console.log(res, showInfo, name, '222');
|
|
||||||
if (res?.label) {
|
|
||||||
return res?.label;
|
|
||||||
} else {
|
|
||||||
return showInfo?.map((i: any) => {
|
|
||||||
if (i?.name === name) {
|
|
||||||
return i?.approval_template_node_members?.map(
|
|
||||||
(k: any) => {
|
|
||||||
if (
|
|
||||||
k?.company_employees_id === res?.value
|
|
||||||
) {
|
|
||||||
return k?.company_employee?.name || '-';
|
|
||||||
}
|
|
||||||
},
|
|
||||||
);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}),
|
|
||||||
];
|
|
||||||
},
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: '备注',
|
|
||||||
key: 'description',
|
|
||||||
colProps: { span: 24 },
|
|
||||||
valueType: 'textarea',
|
|
||||||
},
|
|
||||||
]}
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
@ -52,17 +52,21 @@ export default function Index({ title = '账单明细' }) {
|
|||||||
return { full_name: value };
|
return { full_name: value };
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
render: (_, res) => {
|
render: (_, record) => {
|
||||||
return res.asset_houses_id ? (
|
return record.asset_houses_id ? (
|
||||||
<MyButtons.View
|
<MyButtons.View
|
||||||
title={res?.asset_house?.full_name || '-'}
|
title={record?.asset_house?.full_name || '-'}
|
||||||
type="link"
|
type="link"
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
navigate(`/bills/summary/show/${res.asset_houses_id}`);
|
record.asset_houses_id
|
||||||
|
? navigate(
|
||||||
|
`/bills/summary/show/${record.asset_houses_id}`,
|
||||||
|
)
|
||||||
|
: '';
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
) : (
|
) : (
|
||||||
'车位| ' + res.asset_car_port.full_name
|
'车位| ' + record.asset_car_port.full_name
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -135,18 +139,22 @@ export default function Index({ title = '账单明细' }) {
|
|||||||
title="查看"
|
title="查看"
|
||||||
/>
|
/>
|
||||||
<BillUpdate item={item} reload={action?.reload} title={title} />
|
<BillUpdate item={item} reload={action?.reload} title={title} />
|
||||||
|
{item.bill_status ===
|
||||||
|
HouseBillsBillStatusEnum.PartiallyPaid.value ||
|
||||||
|
(item.bill_status === HouseBillsBillStatusEnum.Paid.value && (
|
||||||
<BillRefund
|
<BillRefund
|
||||||
item={{
|
item={{
|
||||||
...item,
|
...item,
|
||||||
// 跟据发起的页面传递的type来判断退款类型
|
// 跟据发起的页面传递的type来判断退款类型
|
||||||
// type: RefundsTypeEnum.HouseOrder.value,
|
// type: RefundsTypeEnum.HouseOrder.value,
|
||||||
// // 审批模板的类型
|
// 审批模板的类型
|
||||||
approval_type: 'Refund',
|
// approval_type: ApprovalTemplatesTypeEnum.Refund.value,
|
||||||
total_paid_amount: item.total_paid_amount,
|
total_paid_amount: item.total_paid_amount,
|
||||||
}}
|
}}
|
||||||
reload={action?.reload}
|
reload={action?.reload}
|
||||||
title={title}
|
title={title}
|
||||||
/>
|
/>
|
||||||
|
))}
|
||||||
<MyButtons.Delete
|
<MyButtons.Delete
|
||||||
onConfirm={() =>
|
onConfirm={() =>
|
||||||
Apis.Bill.HouseBills.Delete({ id: item.id }).then(() =>
|
Apis.Bill.HouseBills.Delete({ id: item.id }).then(() =>
|
||||||
|
|||||||
@ -9,22 +9,19 @@ import { Selects } from '@/components/Select';
|
|||||||
import { Apis } from '@/gen/Apis';
|
import { Apis } from '@/gen/Apis';
|
||||||
import { BetaSchemaForm } from '@ant-design/pro-components';
|
import { BetaSchemaForm } from '@ant-design/pro-components';
|
||||||
import { Form, message } from 'antd';
|
import { Form, message } from 'antd';
|
||||||
import { useState } from 'react';
|
import { useRef, useState } from 'react';
|
||||||
|
|
||||||
export default function Update(props: MyBetaModalFormProps) {
|
export default function Update(props: MyBetaModalFormProps) {
|
||||||
const [form] = Form.useForm();
|
const [form] = Form.useForm();
|
||||||
|
const modalRef = useRef<any>();
|
||||||
|
const [selectedRow, setSelectedRow] = useState<any>({});
|
||||||
const [ApprovalTemplates, setApprovalTemplates] = useState<any>([]);
|
const [ApprovalTemplates, setApprovalTemplates] = useState<any>([]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<BetaSchemaForm<ApiTypes.Refund.Refunds.Store>
|
<BetaSchemaForm<ApiTypes.Refund.Refunds.Store>
|
||||||
{...MyModalFormProps.props}
|
{...MyModalFormProps.props}
|
||||||
title={`退款申请单`}
|
title={`退款申请单`}
|
||||||
trigger={
|
trigger={<MyButtons.Default title="申请退款" />}
|
||||||
<MyButtons.Default
|
|
||||||
title="申请退款"
|
|
||||||
disabled={props?.item?.bill_status !== 'Paid'}
|
|
||||||
/>
|
|
||||||
}
|
|
||||||
layout="horizontal"
|
layout="horizontal"
|
||||||
labelCol={{ span: 4 }}
|
labelCol={{ span: 4 }}
|
||||||
wrapperCol={{ span: 20 }}
|
wrapperCol={{ span: 20 }}
|
||||||
@ -184,7 +181,7 @@ export default function Update(props: MyBetaModalFormProps) {
|
|||||||
{
|
{
|
||||||
valueType: 'dependency',
|
valueType: 'dependency',
|
||||||
name: ['node_type'],
|
name: ['node_type'],
|
||||||
columns: ({}) => {
|
columns: ({ node_type }) => {
|
||||||
return [
|
return [
|
||||||
Selects.Employees({
|
Selects.Employees({
|
||||||
key: 'members',
|
key: 'members',
|
||||||
|
|||||||
@ -1,136 +0,0 @@
|
|||||||
import { MyColumns, MyPageContainer, MyProTableProps } from '@/common';
|
|
||||||
import { Selects } from '@/components/Select';
|
|
||||||
import { Apis } from '@/gen/Apis';
|
|
||||||
import { RefundsStatusEnum, RefundsTypeEnum } from '@/gen/Enums';
|
|
||||||
import BIllInfo from '@/pages/bills/house_bills/modals/BIllInfo';
|
|
||||||
import { ProTable } from '@ant-design/pro-components';
|
|
||||||
import { Image, Space } from 'antd';
|
|
||||||
import Refund from './modals/Refund';
|
|
||||||
|
|
||||||
export default function Index({ title = '退款列表' }) {
|
|
||||||
return (
|
|
||||||
<MyPageContainer
|
|
||||||
title={title}
|
|
||||||
enableTabs={true}
|
|
||||||
tabKey="house_charge_refund"
|
|
||||||
tabLabel={title}
|
|
||||||
>
|
|
||||||
<ProTable
|
|
||||||
{...MyProTableProps.props}
|
|
||||||
headerTitle={title}
|
|
||||||
request={async (params, sort) =>
|
|
||||||
MyProTableProps.request(params, sort, Apis.Refund.Refunds.List)
|
|
||||||
}
|
|
||||||
// toolBarRender={(action) => [
|
|
||||||
// <TaskCreate key="Create" reload={action?.reload} title="账单任务" />,
|
|
||||||
// ]}
|
|
||||||
columns={[
|
|
||||||
MyColumns.ID({ search: false }),
|
|
||||||
Selects?.AssetProjects({
|
|
||||||
title: '选择项目',
|
|
||||||
key: 'asset_projects_id',
|
|
||||||
hidden: true,
|
|
||||||
}),
|
|
||||||
{
|
|
||||||
title: '项目名称',
|
|
||||||
dataIndex: ['asset_project', 'name'],
|
|
||||||
search: false,
|
|
||||||
},
|
|
||||||
MyColumns.EnumTag({
|
|
||||||
title: '类型',
|
|
||||||
dataIndex: 'type',
|
|
||||||
valueEnum: RefundsTypeEnum,
|
|
||||||
}),
|
|
||||||
MyColumns.EnumTag({
|
|
||||||
title: '退款状态',
|
|
||||||
dataIndex: 'refund_status',
|
|
||||||
valueEnum: RefundsStatusEnum,
|
|
||||||
}),
|
|
||||||
{
|
|
||||||
title: '退款申请时间',
|
|
||||||
dataIndex: 'apply_time',
|
|
||||||
valueType: 'dateTimeRange',
|
|
||||||
hidden: true,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: '退款金额',
|
|
||||||
dataIndex: 'refund_amount',
|
|
||||||
search: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
dataIndex: 'payee_name',
|
|
||||||
title: '收款人',
|
|
||||||
search: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
dataIndex: 'applicant_name',
|
|
||||||
title: '申请人',
|
|
||||||
hidden: true,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
dataIndex: 'payee_bank',
|
|
||||||
title: '收款银行',
|
|
||||||
search: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
dataIndex: 'payee_account',
|
|
||||||
title: '收款账号',
|
|
||||||
search: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: '退款原因',
|
|
||||||
dataIndex: 'remark',
|
|
||||||
search: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: '退款信息',
|
|
||||||
search: false,
|
|
||||||
render: (_, item: any) => {
|
|
||||||
return item?.serial_number ? (
|
|
||||||
<Space direction="vertical" size="small">
|
|
||||||
<div>流水号:{item?.serial_number}</div>
|
|
||||||
<div>退款时间:{item?.refund_time}</div>
|
|
||||||
</Space>
|
|
||||||
) : (
|
|
||||||
''
|
|
||||||
);
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: '退款凭证',
|
|
||||||
search: false,
|
|
||||||
render: (_, item: any) => {
|
|
||||||
return (
|
|
||||||
<Space direction="vertical" size="small">
|
|
||||||
{item?.voucher?.map((res: any, index: number) => {
|
|
||||||
return (
|
|
||||||
<Image
|
|
||||||
src={res?.url}
|
|
||||||
key={`item_${index}`}
|
|
||||||
style={{ width: 50 }}
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
})}
|
|
||||||
</Space>
|
|
||||||
);
|
|
||||||
},
|
|
||||||
},
|
|
||||||
// MyColumns.UpdatedAt(),
|
|
||||||
MyColumns.CreatedAt(),
|
|
||||||
MyColumns.Option({
|
|
||||||
render: (_, item: any, index, action) => (
|
|
||||||
<Space key={index}>
|
|
||||||
<BIllInfo
|
|
||||||
item={{ ...item, id: item?.refundable_id, type: 'primary' }}
|
|
||||||
reload={action?.reload}
|
|
||||||
title="查看"
|
|
||||||
/>
|
|
||||||
<Refund item={item} title="完成退款" reload={action?.reload} />
|
|
||||||
</Space>
|
|
||||||
),
|
|
||||||
}),
|
|
||||||
]}
|
|
||||||
/>
|
|
||||||
</MyPageContainer>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
@ -1,75 +0,0 @@
|
|||||||
import {
|
|
||||||
MyBetaModalFormProps,
|
|
||||||
MyButtons,
|
|
||||||
MyFormItems,
|
|
||||||
MyModalFormProps,
|
|
||||||
rulesHelper,
|
|
||||||
} from '@/common';
|
|
||||||
import { Apis } from '@/gen/Apis';
|
|
||||||
import { BetaSchemaForm } from '@ant-design/pro-components';
|
|
||||||
import { Form, message } from 'antd';
|
|
||||||
|
|
||||||
export default function Refund(props: MyBetaModalFormProps) {
|
|
||||||
const [form] = Form.useForm();
|
|
||||||
return (
|
|
||||||
<BetaSchemaForm<ApiTypes.Refund.Refunds.Complete>
|
|
||||||
{...MyModalFormProps.props}
|
|
||||||
title={props.title}
|
|
||||||
width="500px"
|
|
||||||
wrapperCol={{ span: 24 }}
|
|
||||||
trigger={
|
|
||||||
<MyButtons.Default
|
|
||||||
size="small"
|
|
||||||
type="primary"
|
|
||||||
disabled={props?.item?.refund_status !== 'Approved'}
|
|
||||||
title={props.title}
|
|
||||||
/>
|
|
||||||
}
|
|
||||||
key={new Date().getTime()}
|
|
||||||
form={form}
|
|
||||||
onOpenChange={(open: any) => {
|
|
||||||
if (open) {
|
|
||||||
form.resetFields(); // 清空表单数据
|
|
||||||
}
|
|
||||||
}}
|
|
||||||
onFinish={async (values) =>
|
|
||||||
Apis.Refund.Refunds.Complete({
|
|
||||||
...values,
|
|
||||||
id: props.item?.id ?? '',
|
|
||||||
})
|
|
||||||
.then(() => {
|
|
||||||
props.reload?.();
|
|
||||||
message.success('提交成功');
|
|
||||||
return true;
|
|
||||||
})
|
|
||||||
.catch(() => false)
|
|
||||||
}
|
|
||||||
columns={[
|
|
||||||
{
|
|
||||||
title: '退款流水号',
|
|
||||||
colProps: { span: 24 },
|
|
||||||
key: 'serial_number',
|
|
||||||
formItemProps: { ...rulesHelper.text },
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: '退款时间',
|
|
||||||
key: 'refund_time',
|
|
||||||
colProps: { span: 24 },
|
|
||||||
fieldProps: {
|
|
||||||
style: {
|
|
||||||
width: '100%',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
valueType: 'dateTime',
|
|
||||||
},
|
|
||||||
MyFormItems.UploadImages({
|
|
||||||
key: 'voucher',
|
|
||||||
title: ' 退款凭证',
|
|
||||||
uploadType: 'file',
|
|
||||||
colProps: { span: 24 },
|
|
||||||
max: 10,
|
|
||||||
}),
|
|
||||||
]}
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
Loading…
x
Reference in New Issue
Block a user