feat:更新账单任务、项目公告、项目活动
All checks were successful
Build and Push Docker Image / build (push) Successful in 3m47s
All checks were successful
Build and Push Docker Image / build (push) Successful in 3m47s
This commit is contained in:
parent
5dcfd4f5b1
commit
6f8acbd7b2
@ -14,6 +14,8 @@
|
||||
"@ant-design/icons": "^5.0.1",
|
||||
"@ant-design/pro-components": "^2.8.10",
|
||||
"@umijs/max": "^4.3.10",
|
||||
"@wangeditor/editor": "^5.1.23",
|
||||
"@wangeditor/editor-for-react": "^1.0.6",
|
||||
"antd": "^5.4.0",
|
||||
"axios": "^1.7.2",
|
||||
"dayjs": "^1.11.12",
|
||||
|
||||
@ -25,10 +25,10 @@ function MyEditor(props: any) {
|
||||
file: any,
|
||||
onSuccess: (url: string, file: any) => void,
|
||||
) => {
|
||||
Apis.Auth.PreUpload({
|
||||
Apis.Common.Auth.PreUpload({
|
||||
filename: file.name,
|
||||
alc: 'public-read',
|
||||
}).then(async (res) => {
|
||||
}).then(async (res: any) => {
|
||||
axios
|
||||
.put(res.data.url, file, {
|
||||
headers: res.data.headers,
|
||||
@ -102,9 +102,9 @@ function MyEditor(props: any) {
|
||||
value={html}
|
||||
key="Editor2"
|
||||
onCreated={setEditor}
|
||||
onChange={(editor) => props?.onChange?.(editor.getHtml())}
|
||||
onChange={(editor: any) => props?.onChange?.(editor.getHtml())}
|
||||
mode="default"
|
||||
style={{ height: '500px', overflowY: 'hidden' }}
|
||||
style={{ height: '320px', overflowY: 'hidden' }}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
|
||||
@ -1,12 +1,19 @@
|
||||
import { MyButtons } from '@/common';
|
||||
import { Modal } from 'antd';
|
||||
import { useImperativeHandle, useState } from 'react';
|
||||
import { useEffect, useImperativeHandle, useState } from 'react';
|
||||
|
||||
export function MyModal(props?: any) {
|
||||
const [open, setOpen] = useState(false);
|
||||
const close = () => {
|
||||
setOpen(false);
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
if (open && props?.onOpen) {
|
||||
props.onOpen();
|
||||
}
|
||||
}, [open, props?.onOpen]);
|
||||
|
||||
useImperativeHandle(props.myRef, () => ({
|
||||
close,
|
||||
}));
|
||||
|
||||
60
src/gen/ApiTypes.d.ts
vendored
60
src/gen/ApiTypes.d.ts
vendored
@ -1,4 +1,64 @@
|
||||
declare namespace ApiTypes {
|
||||
namespace Activity {
|
||||
namespace Activities {
|
||||
type List = {
|
||||
"title"?: string; // 模糊搜索:名称
|
||||
"status"?: string; // 状态,[enum:ActivitiesStatusEnum]
|
||||
"publish_status"?: string; // 发布状态,[enum:ActivitiesPublishStatusEnum]
|
||||
};
|
||||
type Store = {
|
||||
"title": string; // 活动标题
|
||||
"start_time": Date; // 活动开始时间
|
||||
"end_time": Date; // 活动结束时间
|
||||
"publish_type"?: string; // 发布类型,[enum:ActivitiesPublishTypeEnum]
|
||||
"schedule_publish_at"?: Date; // 定时发布时间
|
||||
"is_enroll"?: boolean; // 是否报名:1 是、0 否
|
||||
"project_ids"?: string[]; // 项目ID
|
||||
"content": string; // 内容
|
||||
};
|
||||
type Update = {
|
||||
"id": number; // id
|
||||
"title": string; // 活动标题
|
||||
"start_time": Date; // 活动开始时间
|
||||
"end_time": Date; // 活动结束时间
|
||||
"publish_type"?: string; // 发布类型,[enum:ActivitiesPublishTypeEnum]
|
||||
"schedule_publish_at"?: Date; // 定时发布时间
|
||||
"is_enroll"?: boolean; // 是否报名:1 是、0 否
|
||||
"project_ids"?: string[]; // 项目ID
|
||||
"content": string; // 内容
|
||||
};
|
||||
type ChangePublishStatus = {
|
||||
"id": number; // id
|
||||
"publish_status": string; // 状态,[enum:ActivitiesPublishStatusEnum]
|
||||
};
|
||||
type Show = {
|
||||
"id": number; // id
|
||||
};
|
||||
type SoftDelete = {
|
||||
"id": number; // id
|
||||
};
|
||||
type Restore = {
|
||||
"id": number; // id
|
||||
};
|
||||
type Delete = {
|
||||
"id": number; // id
|
||||
};
|
||||
}
|
||||
namespace ActivityEnrolls {
|
||||
type List = {
|
||||
"activities_id"?: number; // 活动id,[ref:activities]
|
||||
"customer_name"?: string; // 模糊搜索:客户名称
|
||||
"customer_phone"?: string; // 模糊搜索:客户电话
|
||||
};
|
||||
type Show = {
|
||||
"id": number; // id
|
||||
};
|
||||
type ChangeStatus = {
|
||||
"id": number; // id
|
||||
"status": string; // 状态:[ActivityEnrollsStatusEnum]
|
||||
};
|
||||
}
|
||||
}
|
||||
namespace Archive {
|
||||
namespace HouseOccupants {
|
||||
type List = {
|
||||
|
||||
@ -2,6 +2,45 @@ import { MyResponseType } from '@/common';
|
||||
import { request } from '@umijs/max';
|
||||
|
||||
export const Apis = {
|
||||
Activity: {
|
||||
Activities: {
|
||||
List(data?: ApiTypes.Activity.Activities.List): Promise<MyResponseType> {
|
||||
return request('admin/activity/activities/list', { data });
|
||||
},
|
||||
Store(data: ApiTypes.Activity.Activities.Store): Promise<MyResponseType> {
|
||||
return request('admin/activity/activities/store', { data });
|
||||
},
|
||||
Update(data: ApiTypes.Activity.Activities.Update): Promise<MyResponseType> {
|
||||
return request('admin/activity/activities/update', { data });
|
||||
},
|
||||
ChangePublishStatus(data: ApiTypes.Activity.Activities.ChangePublishStatus): Promise<MyResponseType> {
|
||||
return request('admin/activity/activities/change_publish_status', { data });
|
||||
},
|
||||
Show(data: ApiTypes.Activity.Activities.Show): Promise<MyResponseType> {
|
||||
return request('admin/activity/activities/show', { data });
|
||||
},
|
||||
SoftDelete(data: ApiTypes.Activity.Activities.SoftDelete): Promise<MyResponseType> {
|
||||
return request('admin/activity/activities/soft_delete', { data });
|
||||
},
|
||||
Restore(data: ApiTypes.Activity.Activities.Restore): Promise<MyResponseType> {
|
||||
return request('admin/activity/activities/restore', { data });
|
||||
},
|
||||
Delete(data: ApiTypes.Activity.Activities.Delete): Promise<MyResponseType> {
|
||||
return request('admin/activity/activities/delete', { data });
|
||||
},
|
||||
},
|
||||
ActivityEnrolls: {
|
||||
List(data?: ApiTypes.Activity.ActivityEnrolls.List): Promise<MyResponseType> {
|
||||
return request('admin/activity/activity_enrolls/list', { data });
|
||||
},
|
||||
Show(data: ApiTypes.Activity.ActivityEnrolls.Show): Promise<MyResponseType> {
|
||||
return request('admin/activity/activity_enrolls/show', { data });
|
||||
},
|
||||
ChangeStatus(data: ApiTypes.Activity.ActivityEnrolls.ChangeStatus): Promise<MyResponseType> {
|
||||
return request('admin/activity/activity_enrolls/change_status', { data });
|
||||
},
|
||||
},
|
||||
},
|
||||
Archive: {
|
||||
HouseOccupants: {
|
||||
List(data?: ApiTypes.Archive.HouseOccupants.List): Promise<MyResponseType> {
|
||||
|
||||
@ -1,3 +1,31 @@
|
||||
// ActivitiesPublishStatusEnum
|
||||
export const ActivitiesPublishStatusEnum= {
|
||||
'Unpublished': {"text":"未发布","color":"#9e9e9e","value":"Unpublished"},
|
||||
'Published': {"text":"已发布","color":"#00c853","value":"Published"},
|
||||
'Unlisted': {"text":"已下架","color":"#d32f2f","value":"Unlisted"},
|
||||
};
|
||||
|
||||
// ActivitiesPublishTypeEnum
|
||||
export const ActivitiesPublishTypeEnum= {
|
||||
'Manual': {"text":"手动","color":"#4caf50","value":"Manual"},
|
||||
'Schedule': {"text":"定时","color":"#2196f3","value":"Schedule"},
|
||||
};
|
||||
|
||||
// ActivitiesStatusEnum
|
||||
export const ActivitiesStatusEnum= {
|
||||
'NotStarted': {"text":"未开始","color":"#9e9e9e","value":"NotStarted"},
|
||||
'InProgress': {"text":"进行中","color":"#00c853","value":"InProgress"},
|
||||
'Finished': {"text":"已结束","color":"#d32f2f","value":"Finished"},
|
||||
};
|
||||
|
||||
// ActivityEnrollsStatusEnum
|
||||
export const ActivityEnrollsStatusEnum= {
|
||||
'PendingReview': {"text":"待审核","color":"#2196f3","value":"PendingReview"},
|
||||
'Success': {"text":"成功","color":"#00c853","value":"Success"},
|
||||
'Failed': {"text":"失败","color":"#d32f2f","value":"Failed"},
|
||||
'Cancelled': {"text":"取消","color":"#ff9800","value":"Cancelled"},
|
||||
};
|
||||
|
||||
// AssetHousesOrientationEnum
|
||||
export const AssetHousesOrientationEnum= {
|
||||
'East': {"text":"东","color":"#007bff","value":"East"},
|
||||
@ -126,7 +154,7 @@ export const BannersTypeEnum= {
|
||||
|
||||
// 缓存类型
|
||||
export const CacheTypeEnum= {
|
||||
'MobilePhoneVerificationCode': {"text":"手机验证码","color":"#69355c","value":"MobilePhoneVerificationCode"},
|
||||
'MobilePhoneVerificationCode': {"text":"手机验证码","color":"#5acfb3","value":"MobilePhoneVerificationCode"},
|
||||
};
|
||||
|
||||
// CompaniesMerchantTypeEnum
|
||||
|
||||
@ -46,7 +46,7 @@ export default function Index({ title = '项目账户' }) {
|
||||
// width: 360,
|
||||
},
|
||||
{
|
||||
title: '收款账号名称',
|
||||
title: '收款名称',
|
||||
dataIndex: ['receipt_account', 'company_name'],
|
||||
},
|
||||
{
|
||||
|
||||
176
src/pages/asset/activities/index.tsx
Normal file
176
src/pages/asset/activities/index.tsx
Normal file
@ -0,0 +1,176 @@
|
||||
import {
|
||||
MyButtons,
|
||||
MyColumns,
|
||||
MyPageContainer,
|
||||
MyProTableProps,
|
||||
usePageTabs,
|
||||
} from '@/common';
|
||||
import { Apis } from '@/gen/Apis';
|
||||
import {
|
||||
ActivitiesPublishStatusEnum,
|
||||
ActivitiesPublishTypeEnum,
|
||||
ActivitiesStatusEnum,
|
||||
} from '@/gen/Enums';
|
||||
import { ProTable } from '@ant-design/pro-components';
|
||||
import { useNavigate } from '@umijs/max';
|
||||
import { Space } from 'antd';
|
||||
import ActivityCreate from './modals/ActivityCreate';
|
||||
import ActivityShow from './modals/ActivityShow';
|
||||
import ActivityUpdate from './modals/ActivityUpdate';
|
||||
import EnrollsList from './modals/EnrollsList';
|
||||
|
||||
export default function Index({ title = '项目活动' }) {
|
||||
const navigate = useNavigate();
|
||||
|
||||
// 注册当前页面为标签页
|
||||
usePageTabs({
|
||||
tabKey: 'activity',
|
||||
tabLabel: title,
|
||||
});
|
||||
|
||||
return (
|
||||
<MyPageContainer
|
||||
title={title}
|
||||
enableTabs={true}
|
||||
tabKey="activity"
|
||||
tabLabel={title}
|
||||
>
|
||||
<ProTable
|
||||
{...MyProTableProps.props}
|
||||
request={async (params, sort) =>
|
||||
MyProTableProps.request(params, sort, Apis.Activity.Activities.List)
|
||||
}
|
||||
toolBarRender={(action) => [
|
||||
<ActivityCreate key="Create" reload={action?.reload} title={title} />,
|
||||
]}
|
||||
columns={[
|
||||
MyColumns.ID(),
|
||||
{
|
||||
title: '活动标题',
|
||||
dataIndex: 'title',
|
||||
},
|
||||
MyColumns.EnumTag({
|
||||
title: '发布方式',
|
||||
dataIndex: 'publish_type',
|
||||
valueEnum: ActivitiesPublishTypeEnum,
|
||||
search: false,
|
||||
}),
|
||||
MyColumns.EnumTag({
|
||||
title: '发布状态',
|
||||
dataIndex: 'publish_status',
|
||||
valueEnum: ActivitiesPublishStatusEnum,
|
||||
search: false,
|
||||
}),
|
||||
MyColumns.EnumTag({
|
||||
title: '活动状态',
|
||||
dataIndex: 'status',
|
||||
valueEnum: ActivitiesStatusEnum,
|
||||
search: false,
|
||||
}),
|
||||
{
|
||||
title: '开始时间',
|
||||
dataIndex: 'start_time',
|
||||
search: false,
|
||||
},
|
||||
{
|
||||
title: '结束时间',
|
||||
dataIndex: 'end_time',
|
||||
search: false,
|
||||
},
|
||||
{
|
||||
title: '发布时间',
|
||||
dataIndex: 'publish_time',
|
||||
search: false,
|
||||
},
|
||||
{
|
||||
title: '活动报名',
|
||||
dataIndex: 'is_enroll',
|
||||
search: false,
|
||||
render(_, record) {
|
||||
return `${record?.is_enroll ? '开启' : '关闭'} `;
|
||||
},
|
||||
},
|
||||
MyColumns.SoftDelete({
|
||||
onRestore: Apis.Activity.Activities.Restore,
|
||||
onSoftDelete: Apis.Activity.Activities.SoftDelete,
|
||||
search: false,
|
||||
}),
|
||||
MyColumns.UpdatedAt(),
|
||||
MyColumns.Option({
|
||||
render: (_, item: any, index, action) => (
|
||||
<Space key={index}>
|
||||
<ActivityShow item={item} />
|
||||
{(!item.end_time || new Date(item.end_time) > new Date()) && (
|
||||
<ActivityUpdate
|
||||
item={item}
|
||||
reload={action?.reload}
|
||||
// title={title}
|
||||
/>
|
||||
)}
|
||||
{(!item.end_time || new Date(item.end_time) > new Date()) && (
|
||||
<MyButtons.Default
|
||||
title={
|
||||
item.publish_status ===
|
||||
ActivitiesPublishStatusEnum.Unpublished.value
|
||||
? '发布'
|
||||
: item.publish_status ===
|
||||
ActivitiesPublishStatusEnum.Published.value
|
||||
? '下架'
|
||||
: '重新发布'
|
||||
}
|
||||
type="primary"
|
||||
isConfirm
|
||||
description={
|
||||
item.publish_status ===
|
||||
ActivitiesPublishStatusEnum.Unpublished.value
|
||||
? '确认发布此活动吗?'
|
||||
: item.publish_status ===
|
||||
ActivitiesPublishStatusEnum.Published.value
|
||||
? '确认下架此活动吗?'
|
||||
: '确认重新发布此活动吗?'
|
||||
}
|
||||
onConfirm={() => {
|
||||
let newStatus;
|
||||
if (
|
||||
item.publish_status ===
|
||||
ActivitiesPublishStatusEnum.Unpublished.value
|
||||
) {
|
||||
newStatus = ActivitiesPublishStatusEnum.Published.value;
|
||||
} else if (
|
||||
item.publish_status ===
|
||||
ActivitiesPublishStatusEnum.Published.value
|
||||
) {
|
||||
newStatus = ActivitiesPublishStatusEnum.Unlisted.value;
|
||||
} else {
|
||||
newStatus = ActivitiesPublishStatusEnum.Published.value;
|
||||
}
|
||||
Apis.Activity.Activities.ChangePublishStatus({
|
||||
id: item.id,
|
||||
publish_status: newStatus,
|
||||
}).then(() => action?.reload());
|
||||
}}
|
||||
/>
|
||||
)}
|
||||
|
||||
{item.is_enroll === 1 && (
|
||||
<EnrollsList
|
||||
item={item}
|
||||
title="报名"
|
||||
reload={action?.reload}
|
||||
/>
|
||||
)}
|
||||
<MyButtons.Delete
|
||||
onConfirm={() =>
|
||||
Apis.Activity.Activities.Delete({
|
||||
id: item.id,
|
||||
}).then(() => action?.reload())
|
||||
}
|
||||
/>
|
||||
</Space>
|
||||
),
|
||||
}),
|
||||
]}
|
||||
/>
|
||||
</MyPageContainer>
|
||||
);
|
||||
}
|
||||
159
src/pages/asset/activities/modals/ActivityCreate.tsx
Normal file
159
src/pages/asset/activities/modals/ActivityCreate.tsx
Normal file
@ -0,0 +1,159 @@
|
||||
import {
|
||||
MyBetaModalFormProps,
|
||||
MyButtons,
|
||||
MyFormItems,
|
||||
MyModalFormProps,
|
||||
rulesHelper,
|
||||
} from '@/common';
|
||||
import MyEditor from '@/common/components/Editor';
|
||||
import { Selects } from '@/components/Select';
|
||||
import { Apis } from '@/gen/Apis';
|
||||
import { ActivitiesPublishTypeEnum } 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.Activity.Activities.Store>
|
||||
{...MyModalFormProps.props}
|
||||
title={`添加活动`}
|
||||
layout="horizontal"
|
||||
labelCol={{ span: 4 }}
|
||||
wrapperCol={{ span: 20 }}
|
||||
labelAlign="left"
|
||||
width="950px"
|
||||
trigger={<MyButtons.Create title={`添加活动`} />}
|
||||
key={new Date().getTime()}
|
||||
form={form}
|
||||
onOpenChange={(open: any) => {
|
||||
if (open) {
|
||||
form.resetFields(); // 清空表单数据
|
||||
}
|
||||
}}
|
||||
onFinish={async (values) =>
|
||||
Apis.Activity.Activities.Store({
|
||||
...values,
|
||||
project_ids: values?.project_ids
|
||||
? [values?.project_ids]
|
||||
: [props.item?.id],
|
||||
})
|
||||
.then(() => {
|
||||
props.reload?.();
|
||||
message.success('添加活动成功');
|
||||
return true;
|
||||
})
|
||||
.catch(() => false)
|
||||
}
|
||||
columns={[
|
||||
...(props?.item?.id
|
||||
? []
|
||||
: [
|
||||
Selects?.AssetProjects({
|
||||
key: 'project_ids',
|
||||
title: '关联项目',
|
||||
colProps: { span: 24 },
|
||||
required: true,
|
||||
fieldProps: {
|
||||
showSearch: true,
|
||||
fieldNames: {
|
||||
label: 'label',
|
||||
value: 'value',
|
||||
},
|
||||
},
|
||||
}),
|
||||
]),
|
||||
{
|
||||
key: 'title',
|
||||
title: '活动标题',
|
||||
colProps: { span: 16 },
|
||||
required: true,
|
||||
formItemProps: {
|
||||
labelCol: { span: 6 },
|
||||
wrapperCol: { span: 16 },
|
||||
...rulesHelper.text,
|
||||
},
|
||||
},
|
||||
{
|
||||
key: 'is_enroll',
|
||||
title: '活动报名',
|
||||
colProps: { span: 8 },
|
||||
valueType: 'switch',
|
||||
required: true,
|
||||
formItemProps: {
|
||||
labelCol: { span: 8 },
|
||||
wrapperCol: { span: 14 },
|
||||
required: true,
|
||||
},
|
||||
fieldProps: {
|
||||
checkedChildren: '开启',
|
||||
unCheckedChildren: '关闭',
|
||||
},
|
||||
},
|
||||
{
|
||||
key: 'activity_time',
|
||||
title: '活动时间',
|
||||
valueType: 'dateTimeRange',
|
||||
colProps: { span: 24 },
|
||||
fieldProps: {
|
||||
style: { width: '50%' },
|
||||
showTime: true,
|
||||
format: 'YYYY-MM-DD HH:mm',
|
||||
},
|
||||
formItemProps: { ...rulesHelper.text },
|
||||
transform: (value: any) => {
|
||||
return {
|
||||
start_time: value?.[0],
|
||||
end_time: value?.[1],
|
||||
};
|
||||
},
|
||||
},
|
||||
MyFormItems.EnumRadio({
|
||||
key: 'publish_type',
|
||||
title: '发布方式',
|
||||
colProps: { span: 8 },
|
||||
valueEnum: ActivitiesPublishTypeEnum,
|
||||
formItemProps: {
|
||||
labelCol: { span: 12 },
|
||||
wrapperCol: { span: 12 },
|
||||
...rulesHelper.text,
|
||||
},
|
||||
}),
|
||||
{
|
||||
name: ['publish_type'],
|
||||
valueType: 'dependency',
|
||||
columns: ({ publish_type }) => {
|
||||
return publish_type === ActivitiesPublishTypeEnum.Schedule.value
|
||||
? [
|
||||
{
|
||||
key: 'schedule_publish_at',
|
||||
// title: '定时发布时间',
|
||||
valueType: 'dateTime',
|
||||
colProps: { span: 16 },
|
||||
fieldProps: {
|
||||
style: { width: '40%' },
|
||||
format: 'YYYY-MM-DD HH:mm',
|
||||
},
|
||||
formItemProps: {
|
||||
...rulesHelper.text,
|
||||
wrapperCol: { span: 24 },
|
||||
placeholder: '请设置定时发布时间',
|
||||
},
|
||||
},
|
||||
]
|
||||
: [];
|
||||
},
|
||||
},
|
||||
{
|
||||
key: 'content',
|
||||
title: '活动内容',
|
||||
colProps: { span: 24 },
|
||||
fieldProps: {
|
||||
mode: 'simple',
|
||||
},
|
||||
renderFormItem: () => <MyEditor />,
|
||||
},
|
||||
]}
|
||||
/>
|
||||
);
|
||||
}
|
||||
112
src/pages/asset/activities/modals/ActivityShow.tsx
Normal file
112
src/pages/asset/activities/modals/ActivityShow.tsx
Normal file
@ -0,0 +1,112 @@
|
||||
import { MyBetaModalFormProps, renderTextHelper } from '@/common';
|
||||
import { MyModal } from '@/components/MyModal';
|
||||
import { Apis } from '@/gen/Apis';
|
||||
import {
|
||||
ActivitiesPublishStatusEnum,
|
||||
ActivitiesPublishTypeEnum,
|
||||
ActivitiesStatusEnum,
|
||||
} from '@/gen/Enums';
|
||||
import { ProCard, ProDescriptions } from '@ant-design/pro-components';
|
||||
import { Space, Spin } from 'antd';
|
||||
import { useState } from 'react';
|
||||
|
||||
export default function Show(props: MyBetaModalFormProps) {
|
||||
const [show, setShow] = useState<any>({});
|
||||
const [loading, setLoading] = useState(false);
|
||||
const [hasLoaded, setHasLoaded] = useState(false);
|
||||
|
||||
const getShow = () => {
|
||||
if (props?.item?.id && !loading && !hasLoaded) {
|
||||
setLoading(true);
|
||||
setHasLoaded(true);
|
||||
Apis.Activity.Activities.Show({
|
||||
id: props?.item?.id,
|
||||
})
|
||||
.then((res: any) => {
|
||||
setShow(res?.data);
|
||||
})
|
||||
.catch(() => {
|
||||
setHasLoaded(false); // 如果请求失败,允许重试
|
||||
})
|
||||
.finally(() => {
|
||||
setLoading(false);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
return (
|
||||
<MyModal
|
||||
title={props.title || '查看'}
|
||||
width={800}
|
||||
onOpen={getShow}
|
||||
node={
|
||||
<ProCard>
|
||||
<Spin spinning={loading}>
|
||||
<ProDescriptions
|
||||
// bordered
|
||||
column={1}
|
||||
size="small"
|
||||
>
|
||||
<ProDescriptions.Item label=" 关联项目">
|
||||
{show?.activity_projects
|
||||
?.map((project: any) => project?.asset_project?.name)
|
||||
.join(', ') || '-'}
|
||||
</ProDescriptions.Item>
|
||||
<ProDescriptions.Item label="活动标题">
|
||||
{show?.title || '-'}
|
||||
</ProDescriptions.Item>
|
||||
<ProDescriptions.Item label="活动时间">
|
||||
<Space>
|
||||
<renderTextHelper.Tag
|
||||
Enums={ActivitiesStatusEnum}
|
||||
value={props?.item?.status}
|
||||
key="status"
|
||||
/>
|
||||
{show?.start_time || '-'} 至 {show?.end_time || '-'}
|
||||
</Space>
|
||||
</ProDescriptions.Item>
|
||||
<ProDescriptions.Item label="发布时间">
|
||||
<Space>
|
||||
<renderTextHelper.Tag
|
||||
Enums={ActivitiesPublishStatusEnum}
|
||||
value={props?.item?.publish_status}
|
||||
key="publish_status"
|
||||
/>
|
||||
<renderTextHelper.Tag
|
||||
Enums={ActivitiesPublishTypeEnum}
|
||||
value={props?.item?.publish_type}
|
||||
key="publish_type"
|
||||
/>
|
||||
{show?.publish_time || '-'}
|
||||
</Space>
|
||||
</ProDescriptions.Item>
|
||||
|
||||
<ProDescriptions.Item label="活动内容">
|
||||
<div
|
||||
style={{
|
||||
border: '1px solid #ccc',
|
||||
borderRadius: '6px',
|
||||
padding: '12px',
|
||||
maxHeight: '300px',
|
||||
width: '100%',
|
||||
overflow: 'auto',
|
||||
backgroundColor: '#fafafa',
|
||||
}}
|
||||
dangerouslySetInnerHTML={{
|
||||
__html: show?.content || '暂无内容',
|
||||
}}
|
||||
/>
|
||||
</ProDescriptions.Item>
|
||||
<ProDescriptions.Item label="创建时间">
|
||||
{show?.created_at || '-'}
|
||||
</ProDescriptions.Item>
|
||||
<ProDescriptions.Item label="最近修改">
|
||||
{show?.updated_at || '-'}
|
||||
</ProDescriptions.Item>
|
||||
</ProDescriptions>
|
||||
</Spin>
|
||||
</ProCard>
|
||||
}
|
||||
/>
|
||||
);
|
||||
}
|
||||
159
src/pages/asset/activities/modals/ActivityUpdate.tsx
Normal file
159
src/pages/asset/activities/modals/ActivityUpdate.tsx
Normal file
@ -0,0 +1,159 @@
|
||||
import {
|
||||
MyBetaModalFormProps,
|
||||
MyButtons,
|
||||
MyFormItems,
|
||||
MyModalFormProps,
|
||||
rulesHelper,
|
||||
} from '@/common';
|
||||
import MyEditor from '@/common/components/Editor';
|
||||
import { Selects } from '@/components/Select';
|
||||
import { Apis } from '@/gen/Apis';
|
||||
import { ActivitiesPublishTypeEnum } from '@/gen/Enums';
|
||||
import { BetaSchemaForm } from '@ant-design/pro-components';
|
||||
import { Form, message } from 'antd';
|
||||
|
||||
export default function Update(props: MyBetaModalFormProps) {
|
||||
const [form] = Form.useForm();
|
||||
return (
|
||||
<BetaSchemaForm<ApiTypes.Activity.Activities.Update>
|
||||
{...MyModalFormProps.props}
|
||||
title={`编辑活动内容`}
|
||||
trigger={<MyButtons.Edit />}
|
||||
layout="horizontal"
|
||||
labelCol={{ span: 4 }}
|
||||
wrapperCol={{ span: 20 }}
|
||||
labelAlign="left"
|
||||
width="1000px"
|
||||
key={new Date().getTime()}
|
||||
form={form}
|
||||
onOpenChange={(open: any) => {
|
||||
if (open && props.item) {
|
||||
form.setFieldsValue(props.item);
|
||||
form.setFieldValue('project_ids', props.item?.project_ids[0]);
|
||||
form.setFieldValue('activity_time', [
|
||||
props.item?.start_time,
|
||||
props.item?.end_time,
|
||||
]);
|
||||
form.setFieldValue('content', props.item?.content);
|
||||
}
|
||||
}}
|
||||
onFinish={async (values) =>
|
||||
Apis.Activity.Activities.Update({
|
||||
...values,
|
||||
id: props.item?.id ?? 0,
|
||||
project_ids: values?.project_ids
|
||||
? [values?.project_ids]
|
||||
: [props.item?.id],
|
||||
})
|
||||
.then(() => {
|
||||
props.reload?.();
|
||||
message.success('编辑公告内容成功');
|
||||
return true;
|
||||
})
|
||||
.catch(() => false)
|
||||
}
|
||||
columns={[
|
||||
Selects?.AssetProjects({
|
||||
key: 'project_ids',
|
||||
title: '关联项目',
|
||||
colProps: { span: 24 },
|
||||
required: true,
|
||||
fieldProps: {
|
||||
showSearch: true,
|
||||
fieldNames: {
|
||||
label: 'label',
|
||||
value: 'value',
|
||||
},
|
||||
},
|
||||
}),
|
||||
{
|
||||
key: 'title',
|
||||
title: '活动标题',
|
||||
colProps: { span: 16 },
|
||||
required: true,
|
||||
formItemProps: {
|
||||
labelCol: { span: 6 },
|
||||
wrapperCol: { span: 16 },
|
||||
required: true,
|
||||
},
|
||||
},
|
||||
{
|
||||
key: 'is_enroll',
|
||||
title: '活动报名',
|
||||
colProps: { span: 8 },
|
||||
valueType: 'switch',
|
||||
formItemProps: {
|
||||
labelCol: { span: 8 },
|
||||
wrapperCol: { span: 14 },
|
||||
...rulesHelper.number,
|
||||
},
|
||||
fieldProps: {
|
||||
checkedChildren: '开启',
|
||||
unCheckedChildren: '关闭',
|
||||
},
|
||||
},
|
||||
{
|
||||
key: 'activity_time',
|
||||
title: '活动时间',
|
||||
valueType: 'dateTimeRange',
|
||||
colProps: { span: 24 },
|
||||
fieldProps: {
|
||||
style: { width: '50%' },
|
||||
showTime: true,
|
||||
format: 'YYYY-MM-DD HH:mm',
|
||||
},
|
||||
formItemProps: { ...rulesHelper.text },
|
||||
transform: (value: any) => {
|
||||
return {
|
||||
start_time: value?.[0],
|
||||
end_time: value?.[1],
|
||||
};
|
||||
},
|
||||
},
|
||||
MyFormItems.EnumRadio({
|
||||
key: 'publish_type',
|
||||
title: '发布方式',
|
||||
colProps: { span: 8 },
|
||||
valueEnum: ActivitiesPublishTypeEnum,
|
||||
required: true,
|
||||
formItemProps: {
|
||||
labelCol: { span: 12 },
|
||||
wrapperCol: { span: 12 },
|
||||
},
|
||||
}),
|
||||
{
|
||||
name: ['publish_type'],
|
||||
valueType: 'dependency',
|
||||
columns: ({ publish_type }) => {
|
||||
return publish_type === ActivitiesPublishTypeEnum.Schedule.value
|
||||
? [
|
||||
{
|
||||
key: 'schedule_publish_at',
|
||||
// title: '定时发布时间',
|
||||
valueType: 'dateTime',
|
||||
colProps: { span: 16 },
|
||||
fieldProps: {
|
||||
style: { width: '40%' },
|
||||
format: 'YYYY-MM-DD HH:mm',
|
||||
},
|
||||
formItemProps: {
|
||||
...rulesHelper.text,
|
||||
wrapperCol: { span: 24 },
|
||||
placeholder: '请设置定时发布时间',
|
||||
},
|
||||
},
|
||||
]
|
||||
: [];
|
||||
},
|
||||
},
|
||||
{
|
||||
key: 'content',
|
||||
title: '活动内容',
|
||||
colProps: { span: 24 },
|
||||
renderFormItem: () => <MyEditor />,
|
||||
initialValue: props.item?.content,
|
||||
},
|
||||
]}
|
||||
/>
|
||||
);
|
||||
}
|
||||
100
src/pages/asset/activities/modals/EnrollsList.tsx
Normal file
100
src/pages/asset/activities/modals/EnrollsList.tsx
Normal file
@ -0,0 +1,100 @@
|
||||
import {
|
||||
MyBetaModalFormProps,
|
||||
MyButtons,
|
||||
MyColumns,
|
||||
MyProTableProps,
|
||||
} from '@/common';
|
||||
import { MyModal } from '@/components/MyModal';
|
||||
import { Apis } from '@/gen/Apis';
|
||||
import { ActivityEnrollsStatusEnum } from '@/gen/Enums';
|
||||
import { ProTable } from '@ant-design/pro-components';
|
||||
import { Space } from 'antd';
|
||||
|
||||
export default function EnrollsList(props: MyBetaModalFormProps) {
|
||||
return (
|
||||
<MyModal
|
||||
title={props.title || '报名'}
|
||||
type={props.item?.type || 'primary'}
|
||||
width="900px"
|
||||
node={
|
||||
<ProTable
|
||||
{...MyProTableProps.props}
|
||||
request={async (params, sort) =>
|
||||
MyProTableProps.request(
|
||||
{ ...params, activities_id: props?.item?.id },
|
||||
sort,
|
||||
Apis.Activity.ActivityEnrolls.List,
|
||||
)
|
||||
}
|
||||
columns={[
|
||||
MyColumns.ID(),
|
||||
{
|
||||
title: '客户姓名',
|
||||
dataIndex: 'customer_name',
|
||||
search: false,
|
||||
},
|
||||
{
|
||||
title: '客户电话',
|
||||
dataIndex: 'customer_phone',
|
||||
search: false,
|
||||
},
|
||||
MyColumns.EnumTag({
|
||||
title: '状态',
|
||||
dataIndex: 'status',
|
||||
valueEnum: ActivityEnrollsStatusEnum,
|
||||
}),
|
||||
MyColumns.Option({
|
||||
render: (_, item: any, index, action) => (
|
||||
<Space key={index}>
|
||||
<MyButtons.Default
|
||||
title={
|
||||
item.status === ActivityEnrollsStatusEnum.Success.value
|
||||
? '取消报名'
|
||||
: item.status ===
|
||||
ActivityEnrollsStatusEnum.Cancelled.value
|
||||
? '重新报名'
|
||||
: '报名'
|
||||
}
|
||||
isConfirm
|
||||
description={
|
||||
item.status === ActivityEnrollsStatusEnum.Success.value
|
||||
? '确认取消报名吗?'
|
||||
: item.status ===
|
||||
ActivityEnrollsStatusEnum.Cancelled.value
|
||||
? '确认重新报名吗?'
|
||||
: '确认报名吗?'
|
||||
}
|
||||
onConfirm={() => {
|
||||
let newStatus;
|
||||
if (
|
||||
item.status === ActivityEnrollsStatusEnum.Success.value
|
||||
) {
|
||||
newStatus = ActivityEnrollsStatusEnum.Cancelled.value;
|
||||
} else if (
|
||||
item.status ===
|
||||
ActivityEnrollsStatusEnum.Cancelled.value
|
||||
) {
|
||||
newStatus = ActivityEnrollsStatusEnum.Success.value;
|
||||
} else {
|
||||
newStatus = ActivityEnrollsStatusEnum.Success.value;
|
||||
}
|
||||
Apis.Activity.ActivityEnrolls.ChangeStatus({
|
||||
id: item.id,
|
||||
status: newStatus,
|
||||
}).then(() => action?.reload());
|
||||
}}
|
||||
/>
|
||||
<EnrollsList
|
||||
item={item}
|
||||
title="报名信息"
|
||||
reload={action?.reload}
|
||||
/>
|
||||
</Space>
|
||||
),
|
||||
}),
|
||||
]}
|
||||
/>
|
||||
}
|
||||
/>
|
||||
);
|
||||
}
|
||||
@ -6,6 +6,7 @@ import {
|
||||
usePageTabs,
|
||||
} from '@/common';
|
||||
import { Apis } from '@/gen/Apis';
|
||||
import { MsgPropertyAnnouncementsPublishTypeEnum } from '@/gen/Enums';
|
||||
import { ProTable } from '@ant-design/pro-components';
|
||||
import { useNavigate } from '@umijs/max';
|
||||
import { Space } from 'antd';
|
||||
@ -76,52 +77,37 @@ export default function Index({ title = '项目公告' }) {
|
||||
),
|
||||
},
|
||||
{
|
||||
title: '公告内容',
|
||||
dataIndex: 'content',
|
||||
valueType: 'textarea', // 仅影响表单编辑时的输入类型,不影响表格展示
|
||||
search: false,
|
||||
width: 200, // 关键:固定列宽(若父容器过窄,可设 minWidth: 200 优先保证列宽)
|
||||
render: (text) => (
|
||||
<div
|
||||
style={{
|
||||
width: '100%', // 继承列宽
|
||||
// height: '60px', // 设置固定高度,约显示3行文本
|
||||
overflow: 'hidden', // 超出隐藏
|
||||
textOverflow: 'ellipsis', // 省略号
|
||||
display: '-webkit-box',
|
||||
WebkitBoxOrient: 'vertical',
|
||||
WebkitLineClamp: 2, // 显示3行
|
||||
}}
|
||||
>
|
||||
{text}
|
||||
</div>
|
||||
),
|
||||
},
|
||||
{
|
||||
title: '发布日期',
|
||||
title: '落款日期',
|
||||
dataIndex: 'publish_at',
|
||||
valueType: 'date',
|
||||
search: false,
|
||||
},
|
||||
MyColumns.EnumTag({
|
||||
title: '发布方式',
|
||||
dataIndex: 'publish_type',
|
||||
valueEnum: MsgPropertyAnnouncementsPublishTypeEnum,
|
||||
search: false,
|
||||
}),
|
||||
{
|
||||
title: '是否发布小程序',
|
||||
dataIndex: 'is_publish',
|
||||
render: (text) => (text ? '是' : '否'),
|
||||
title: '发布时间',
|
||||
dataIndex: 'schedule_publish_at',
|
||||
valueType: 'dateTime',
|
||||
search: false,
|
||||
},
|
||||
{
|
||||
title: '是否发布',
|
||||
dataIndex: 'is_publish',
|
||||
search: false,
|
||||
render: (text) => (text ? '是' : '否'),
|
||||
},
|
||||
|
||||
MyColumns.SoftDelete({
|
||||
title: '启/禁用',
|
||||
onRestore: Apis.Msg.MsgPropertyAnnouncements.Restore,
|
||||
onSoftDelete: Apis.Msg.MsgPropertyAnnouncements.SoftDelete,
|
||||
search: false,
|
||||
}),
|
||||
{
|
||||
//创建日期
|
||||
title: '创建日期',
|
||||
dataIndex: 'created_at',
|
||||
valueType: 'date',
|
||||
search: false,
|
||||
},
|
||||
MyColumns.UpdatedAt(),
|
||||
MyColumns.Option({
|
||||
render: (_, item: any, index, action) => (
|
||||
<Space key={index}>
|
||||
@ -131,6 +117,30 @@ export default function Index({ title = '项目公告' }) {
|
||||
reload={action?.reload}
|
||||
// title={title}
|
||||
/>
|
||||
|
||||
<MyButtons.Default
|
||||
title={item.is_publish === 0 ? '发布' : '下架'}
|
||||
type="primary"
|
||||
isConfirm
|
||||
description={
|
||||
item.is_publish === 0
|
||||
? '确认发布此公告吗?'
|
||||
: '确认下架此公告吗?'
|
||||
}
|
||||
onConfirm={() => {
|
||||
let newStatus: boolean;
|
||||
if (item.is_publish === 0) {
|
||||
newStatus = true;
|
||||
} else {
|
||||
newStatus = false;
|
||||
}
|
||||
Apis.Msg.MsgPropertyAnnouncements.IsPublish({
|
||||
id: item.id,
|
||||
is_publish: Boolean(newStatus),
|
||||
}).then(() => action?.reload());
|
||||
}}
|
||||
/>
|
||||
|
||||
<MyButtons.Delete
|
||||
onConfirm={() =>
|
||||
Apis.Msg.MsgPropertyAnnouncements.Delete({
|
||||
|
||||
@ -1,11 +1,14 @@
|
||||
import {
|
||||
MyBetaModalFormProps,
|
||||
MyButtons,
|
||||
MyFormItems,
|
||||
MyModalFormProps,
|
||||
rulesHelper,
|
||||
} from '@/common';
|
||||
import MyEditor from '@/common/components/Editor';
|
||||
import { Selects } from '@/components/Select';
|
||||
import { Apis } from '@/gen/Apis';
|
||||
import { MsgPropertyAnnouncementsPublishTypeEnum } from '@/gen/Enums';
|
||||
import { BetaSchemaForm } from '@ant-design/pro-components';
|
||||
import { Form, message } from 'antd';
|
||||
|
||||
@ -15,14 +18,18 @@ export default function Create(props: MyBetaModalFormProps) {
|
||||
<BetaSchemaForm<ApiTypes.Msg.MsgPropertyAnnouncements.Store>
|
||||
{...MyModalFormProps.props}
|
||||
title={`添加公告`}
|
||||
wrapperCol={{ span: 24 }}
|
||||
width="600px"
|
||||
layout="horizontal"
|
||||
labelCol={{ span: 4 }}
|
||||
wrapperCol={{ span: 20 }}
|
||||
labelAlign="left"
|
||||
width="950px"
|
||||
trigger={<MyButtons.Create title={`添加公告`} />}
|
||||
key={new Date().getTime()}
|
||||
form={form}
|
||||
onOpenChange={(open: any) => {
|
||||
if (open) {
|
||||
form.resetFields(); // 清空表单数据
|
||||
form.setFieldValue('is_publish', 1);
|
||||
}
|
||||
}}
|
||||
onFinish={async (values) =>
|
||||
@ -48,58 +55,88 @@ export default function Create(props: MyBetaModalFormProps) {
|
||||
required: true,
|
||||
}),
|
||||
]),
|
||||
|
||||
{
|
||||
key: 'title',
|
||||
title: '公告标题',
|
||||
colProps: { span: 24 },
|
||||
formItemProps: { ...rulesHelper.text },
|
||||
required: true,
|
||||
formItemProps: {
|
||||
labelCol: { span: 4 },
|
||||
wrapperCol: { span: 20 },
|
||||
...rulesHelper.text,
|
||||
},
|
||||
},
|
||||
MyFormItems.EnumRadio({
|
||||
key: 'publish_type',
|
||||
title: '发布方式',
|
||||
colProps: { span: 8 },
|
||||
valueEnum: MsgPropertyAnnouncementsPublishTypeEnum,
|
||||
formItemProps: {
|
||||
labelCol: { span: 12 },
|
||||
wrapperCol: { span: 12 },
|
||||
...rulesHelper.text,
|
||||
},
|
||||
}),
|
||||
|
||||
{
|
||||
name: ['publish_type'],
|
||||
valueType: 'dependency',
|
||||
columns: ({ publish_type }) => {
|
||||
return publish_type ===
|
||||
MsgPropertyAnnouncementsPublishTypeEnum.Schedule.value
|
||||
? [
|
||||
{
|
||||
key: 'schedule_publish_at',
|
||||
// title: '定时发布时间',
|
||||
valueType: 'dateTime',
|
||||
colProps: { span: 16 },
|
||||
fieldProps: {
|
||||
style: { width: '40%' },
|
||||
format: 'YYYY-MM-DD HH:mm',
|
||||
},
|
||||
formItemProps: {
|
||||
...rulesHelper.text,
|
||||
wrapperCol: { span: 24 },
|
||||
placeholder: '请设置定时发布时间',
|
||||
},
|
||||
},
|
||||
]
|
||||
: [];
|
||||
},
|
||||
},
|
||||
{
|
||||
key: 'content',
|
||||
title: '公告内容',
|
||||
valueType: 'textarea',
|
||||
colProps: { span: 24 },
|
||||
formItemProps: { ...rulesHelper.text },
|
||||
fieldProps: {
|
||||
autoSize: { minRows: 4, maxRows: 6 },
|
||||
mode: 'simple',
|
||||
},
|
||||
renderFormItem: () => <MyEditor />,
|
||||
},
|
||||
{
|
||||
key: 'publish_at',
|
||||
title: '内容显示的发布日期',
|
||||
title: '落款日期',
|
||||
valueType: 'date',
|
||||
colProps: { span: 12 },
|
||||
colProps: { span: 24 },
|
||||
fieldProps: {
|
||||
style: { width: '100%' },
|
||||
style: { width: '40%' },
|
||||
},
|
||||
formItemProps: { ...rulesHelper.text },
|
||||
},
|
||||
// Selects?.AssetProjects({
|
||||
// title: '请选择项目',
|
||||
// key: 'asset_projects_id',
|
||||
// {
|
||||
// key: 'sort',
|
||||
// title: '排序',
|
||||
// valueType: 'digit',
|
||||
// colProps: { span: 12 },
|
||||
// formItemProps: { ...rulesHelper.text },
|
||||
// }),
|
||||
{
|
||||
key: 'is_publish',
|
||||
title: '是否立刻发布',
|
||||
tooltip: '如果选择了,那么内容会立刻发布到小程序中',
|
||||
valueType: 'switch',
|
||||
colProps: { span: 8 },
|
||||
},
|
||||
{
|
||||
key: 'sort',
|
||||
title: '排序',
|
||||
valueType: 'digit',
|
||||
colProps: { span: 12 },
|
||||
tooltip: '数值越大越靠前',
|
||||
fieldProps: {
|
||||
placeholder: '数值越大越靠前',
|
||||
min: 0,
|
||||
style: { width: '100%' },
|
||||
},
|
||||
initialValue: 0,
|
||||
},
|
||||
// tooltip: '数值越大越靠前',
|
||||
// fieldProps: {
|
||||
// placeholder: '数值越大越靠前',
|
||||
// min: 0,
|
||||
// style: { width: '100%' },
|
||||
// },
|
||||
// initialValue: 0,
|
||||
// },
|
||||
]}
|
||||
/>
|
||||
);
|
||||
|
||||
@ -1,17 +1,39 @@
|
||||
import { MyBetaModalFormProps } from '@/common';
|
||||
import { MyBetaModalFormProps, renderTextHelper } from '@/common';
|
||||
import { MyModal } from '@/components/MyModal';
|
||||
import { Apis } from '@/gen/Apis';
|
||||
import { MsgPropertyAnnouncementsPublishTypeEnum } from '@/gen/Enums';
|
||||
import { ProCard, ProDescriptions } from '@ant-design/pro-components';
|
||||
import { Typography } from 'antd';
|
||||
import { Space } from 'antd';
|
||||
import { useState } from 'react';
|
||||
|
||||
const { Text } = Typography;
|
||||
export default function Show(props: MyBetaModalFormProps) {
|
||||
const [show, setShow] = useState<any>({});
|
||||
const [loading, setLoading] = useState(false);
|
||||
const [hasLoaded, setHasLoaded] = useState(false);
|
||||
|
||||
export default function info(props: MyBetaModalFormProps) {
|
||||
const getShow = () => {
|
||||
if (props?.item?.id && !loading && !hasLoaded) {
|
||||
setLoading(true);
|
||||
setHasLoaded(true);
|
||||
Apis.Msg.MsgPropertyAnnouncements.Show({
|
||||
id: props?.item?.id,
|
||||
})
|
||||
.then((res: any) => {
|
||||
setShow(res?.data);
|
||||
})
|
||||
.catch(() => {
|
||||
setHasLoaded(false); // 如果请求失败,允许重试
|
||||
})
|
||||
.finally(() => {
|
||||
setLoading(false);
|
||||
});
|
||||
}
|
||||
};
|
||||
return (
|
||||
<MyModal
|
||||
title={props.title || '查看'}
|
||||
// width="40vw"
|
||||
width={600}
|
||||
// style={{ maxWidth: '650px' }}
|
||||
width={800}
|
||||
onOpen={getShow}
|
||||
node={
|
||||
<ProCard>
|
||||
<ProDescriptions
|
||||
@ -27,25 +49,42 @@ export default function info(props: MyBetaModalFormProps) {
|
||||
{props?.item?.title || '-'}
|
||||
</ProDescriptions.Item>
|
||||
|
||||
<ProDescriptions.Item label="发布方式">
|
||||
<Space>
|
||||
{props?.item?.is_publish ? '已发布' : '未发布'}
|
||||
<renderTextHelper.Tag
|
||||
Enums={MsgPropertyAnnouncementsPublishTypeEnum}
|
||||
value={props?.item?.publish_type}
|
||||
key="publish_type"
|
||||
/>
|
||||
{show?.schedule_publish_at || '-'}
|
||||
</Space>
|
||||
</ProDescriptions.Item>
|
||||
<ProDescriptions.Item label="公告内容">
|
||||
<div
|
||||
style={{
|
||||
whiteSpace: 'pre-wrap',
|
||||
border: '1px solid #ccc',
|
||||
borderRadius: '6px',
|
||||
padding: '12px',
|
||||
maxHeight: '300px',
|
||||
width: '100%',
|
||||
overflow: 'auto',
|
||||
backgroundColor: '#fafafa',
|
||||
}}
|
||||
>
|
||||
{props?.item?.content || '-'}
|
||||
</div>
|
||||
dangerouslySetInnerHTML={{
|
||||
__html: props?.item?.content || '暂无内容',
|
||||
}}
|
||||
/>
|
||||
</ProDescriptions.Item>
|
||||
<ProDescriptions.Item label="发布日期">
|
||||
|
||||
<ProDescriptions.Item label="落款日期">
|
||||
{props?.item?.publish_at || '-'}
|
||||
</ProDescriptions.Item>
|
||||
<ProDescriptions.Item label="创建时间">
|
||||
{props?.item?.created_at || '-'}
|
||||
</ProDescriptions.Item>
|
||||
<ProDescriptions.Item label="是否发布小程序">
|
||||
{props?.item?.is_publish ? '是' : '否'}
|
||||
<ProDescriptions.Item label="最近修改">
|
||||
{props?.item?.updated_at || '-'}
|
||||
</ProDescriptions.Item>
|
||||
</ProDescriptions>
|
||||
</ProCard>
|
||||
|
||||
@ -1,10 +1,13 @@
|
||||
import {
|
||||
MyBetaModalFormProps,
|
||||
MyButtons,
|
||||
MyFormItems,
|
||||
MyModalFormProps,
|
||||
rulesHelper,
|
||||
} from '@/common';
|
||||
import MyEditor from '@/common/components/Editor';
|
||||
import { Apis } from '@/gen/Apis';
|
||||
import { MsgPropertyAnnouncementsPublishTypeEnum } from '@/gen/Enums';
|
||||
import { BetaSchemaForm } from '@ant-design/pro-components';
|
||||
import { Form, message } from 'antd';
|
||||
|
||||
@ -15,8 +18,11 @@ export default function Update(props: MyBetaModalFormProps) {
|
||||
{...MyModalFormProps.props}
|
||||
title={`编辑公告内容`}
|
||||
trigger={<MyButtons.Edit />}
|
||||
wrapperCol={{ span: 24 }}
|
||||
width="600px"
|
||||
layout="horizontal"
|
||||
labelCol={{ span: 4 }}
|
||||
wrapperCol={{ span: 20 }}
|
||||
labelAlign="left"
|
||||
width="950px"
|
||||
key={new Date().getTime()}
|
||||
form={form}
|
||||
onOpenChange={(open: any) => {
|
||||
@ -42,49 +48,68 @@ export default function Update(props: MyBetaModalFormProps) {
|
||||
key: 'title',
|
||||
title: '公告标题',
|
||||
colProps: { span: 24 },
|
||||
formItemProps: { ...rulesHelper.text },
|
||||
required: true,
|
||||
formItemProps: {
|
||||
labelCol: { span: 4 },
|
||||
wrapperCol: { span: 20 },
|
||||
...rulesHelper.text,
|
||||
},
|
||||
},
|
||||
MyFormItems.EnumRadio({
|
||||
key: 'publish_type',
|
||||
title: '发布方式',
|
||||
colProps: { span: 8 },
|
||||
valueEnum: MsgPropertyAnnouncementsPublishTypeEnum,
|
||||
formItemProps: {
|
||||
labelCol: { span: 12 },
|
||||
wrapperCol: { span: 12 },
|
||||
...rulesHelper.text,
|
||||
},
|
||||
}),
|
||||
|
||||
{
|
||||
name: ['publish_type'],
|
||||
valueType: 'dependency',
|
||||
columns: ({ publish_type }) => {
|
||||
return publish_type ===
|
||||
MsgPropertyAnnouncementsPublishTypeEnum.Schedule.value
|
||||
? [
|
||||
{
|
||||
key: 'schedule_publish_at',
|
||||
// title: '定时发布时间',
|
||||
valueType: 'dateTime',
|
||||
colProps: { span: 16 },
|
||||
fieldProps: {
|
||||
style: { width: '40%' },
|
||||
format: 'YYYY-MM-DD HH:mm',
|
||||
},
|
||||
formItemProps: {
|
||||
...rulesHelper.text,
|
||||
wrapperCol: { span: 24 },
|
||||
placeholder: '请设置定时发布时间',
|
||||
},
|
||||
},
|
||||
]
|
||||
: [];
|
||||
},
|
||||
},
|
||||
{
|
||||
key: 'content',
|
||||
title: '公告内容',
|
||||
valueType: 'textarea',
|
||||
colProps: { span: 24 },
|
||||
formItemProps: { ...rulesHelper.text },
|
||||
fieldProps: {
|
||||
autoSize: { minRows: 4, maxRows: 6 },
|
||||
},
|
||||
renderFormItem: () => <MyEditor />,
|
||||
initialValue: props.item?.content,
|
||||
},
|
||||
{
|
||||
key: 'publish_at',
|
||||
title: '内容显示的发布日期',
|
||||
title: '落款日期',
|
||||
valueType: 'date',
|
||||
colProps: { span: 12 },
|
||||
colProps: { span: 24 },
|
||||
fieldProps: {
|
||||
style: { width: '100%' },
|
||||
style: { width: '40%' },
|
||||
},
|
||||
formItemProps: { ...rulesHelper.text },
|
||||
},
|
||||
|
||||
{
|
||||
key: 'is_publish',
|
||||
title: '是否立刻发布',
|
||||
tooltip: '如果选择了,那么内容会立刻发布到小程序中',
|
||||
valueType: 'switch',
|
||||
colProps: { span: 8 },
|
||||
},
|
||||
{
|
||||
key: 'sort',
|
||||
title: '排序',
|
||||
valueType: 'digit',
|
||||
colProps: { span: 12 },
|
||||
tooltip: '数值越大越靠前',
|
||||
fieldProps: {
|
||||
placeholder: '数值越大越靠前',
|
||||
min: 0,
|
||||
style: { width: '100%' },
|
||||
},
|
||||
initialValue: 0,
|
||||
},
|
||||
]}
|
||||
/>
|
||||
);
|
||||
|
||||
@ -7,6 +7,7 @@ import { useEffect, useState } from 'react';
|
||||
import AssetInfo from '../modals/AssetInfo';
|
||||
import AssetUpdate from '../modals/AssetUpdate';
|
||||
import BindCompany from '../modals/BindCompany';
|
||||
import Activities from '../table/Activities';
|
||||
import Announcement from '../table/Announcement';
|
||||
import AssetAccounts from '../table/AssetAccounts';
|
||||
import MyAssetBuildings from '../table/AssetBuildings';
|
||||
@ -79,6 +80,12 @@ export default function Show({ title }: { title?: string } = {}) {
|
||||
closable: false,
|
||||
children: <Announcement item={data} />,
|
||||
},
|
||||
{
|
||||
label: '项目活动',
|
||||
key: 'activities',
|
||||
closable: false,
|
||||
children: <Activities item={data} />,
|
||||
},
|
||||
{
|
||||
label: '便民服务',
|
||||
key: 'convenience_services',
|
||||
|
||||
156
src/pages/asset/list/table/Activities.tsx
Normal file
156
src/pages/asset/list/table/Activities.tsx
Normal file
@ -0,0 +1,156 @@
|
||||
import { MyButtons, MyColumns, MyProTableProps } from '@/common';
|
||||
import { Apis } from '@/gen/Apis';
|
||||
import {
|
||||
ActivitiesPublishStatusEnum,
|
||||
ActivitiesPublishTypeEnum,
|
||||
ActivitiesStatusEnum,
|
||||
} from '@/gen/Enums';
|
||||
import { ProTable } from '@ant-design/pro-components';
|
||||
import { Space } from 'antd';
|
||||
import { useEffect, useRef } from 'react';
|
||||
import ActivityCreate from '../../activities/modals/ActivityCreate';
|
||||
import ActivityShow from '../../activities/modals/ActivityShow';
|
||||
import ActivityUpdate from '../../activities/modals/ActivityUpdate';
|
||||
import EnrollsList from '../../activities/modals/EnrollsList';
|
||||
|
||||
export default function Index({ ...rest }) {
|
||||
const actionLooks = useRef<any>();
|
||||
useEffect(() => {
|
||||
actionLooks?.current.reloadAndRest();
|
||||
}, [rest.loadmore]);
|
||||
|
||||
return (
|
||||
<>
|
||||
<ProTable<Record<any, any>>
|
||||
{...MyProTableProps.props}
|
||||
actionRef={actionLooks}
|
||||
request={async (params, sort) =>
|
||||
MyProTableProps.request(
|
||||
{ ...params, asset_projects_id: rest.item?.id },
|
||||
sort,
|
||||
Apis.Activity.Activities.List,
|
||||
)
|
||||
}
|
||||
search={false}
|
||||
toolBarRender={(action) => [
|
||||
<ActivityCreate
|
||||
key="Create"
|
||||
item={rest.item}
|
||||
reload={action?.reload}
|
||||
/>,
|
||||
]}
|
||||
columns={[
|
||||
MyColumns.ID(),
|
||||
{
|
||||
title: '活动标题',
|
||||
dataIndex: 'title',
|
||||
},
|
||||
MyColumns.EnumTag({
|
||||
title: '发布方式',
|
||||
dataIndex: 'publish_type',
|
||||
valueEnum: ActivitiesPublishTypeEnum,
|
||||
search: false,
|
||||
}),
|
||||
MyColumns.EnumTag({
|
||||
title: '发布状态',
|
||||
dataIndex: 'publish_status',
|
||||
valueEnum: ActivitiesPublishStatusEnum,
|
||||
search: false,
|
||||
}),
|
||||
MyColumns.EnumTag({
|
||||
title: '活动状态',
|
||||
dataIndex: 'status',
|
||||
valueEnum: ActivitiesStatusEnum,
|
||||
search: false,
|
||||
}),
|
||||
{
|
||||
title: '开始时间',
|
||||
dataIndex: 'start_time',
|
||||
search: false,
|
||||
},
|
||||
{
|
||||
title: '结束时间',
|
||||
dataIndex: 'end_time',
|
||||
search: false,
|
||||
},
|
||||
{
|
||||
title: '发布时间',
|
||||
dataIndex: 'publish_time',
|
||||
search: false,
|
||||
},
|
||||
MyColumns.SoftDelete({
|
||||
onRestore: Apis.Activity.Activities.Restore,
|
||||
onSoftDelete: Apis.Activity.Activities.SoftDelete,
|
||||
search: false,
|
||||
}),
|
||||
MyColumns.UpdatedAt(),
|
||||
MyColumns.Option({
|
||||
render: (_, item: any, index, action) => (
|
||||
<Space key={index}>
|
||||
<ActivityShow item={item} />
|
||||
<ActivityUpdate
|
||||
item={item}
|
||||
reload={action?.reload}
|
||||
// title={title}
|
||||
/>
|
||||
<MyButtons.Default
|
||||
title={
|
||||
item.publish_status ===
|
||||
ActivitiesPublishStatusEnum.Unpublished.value
|
||||
? '发布'
|
||||
: item.publish_status ===
|
||||
ActivitiesPublishStatusEnum.Published.value
|
||||
? '下架'
|
||||
: '重新发布'
|
||||
}
|
||||
isConfirm
|
||||
description={
|
||||
item.publish_status ===
|
||||
ActivitiesPublishStatusEnum.Unpublished.value
|
||||
? '确认发布此活动吗?'
|
||||
: item.publish_status ===
|
||||
ActivitiesPublishStatusEnum.Published.value
|
||||
? '确认下架此活动吗?'
|
||||
: '确认重新发布此活动吗?'
|
||||
}
|
||||
onConfirm={() => {
|
||||
let newStatus;
|
||||
if (
|
||||
item.publish_status ===
|
||||
ActivitiesPublishStatusEnum.Unpublished.value
|
||||
) {
|
||||
newStatus = ActivitiesPublishStatusEnum.Published.value;
|
||||
} else if (
|
||||
item.publish_status ===
|
||||
ActivitiesPublishStatusEnum.Published.value
|
||||
) {
|
||||
newStatus = ActivitiesPublishStatusEnum.Unlisted.value;
|
||||
} else {
|
||||
newStatus = ActivitiesPublishStatusEnum.Published.value;
|
||||
}
|
||||
Apis.Activity.Activities.ChangePublishStatus({
|
||||
id: item.id,
|
||||
publish_status: newStatus,
|
||||
}).then(() => action?.reload());
|
||||
}}
|
||||
/>
|
||||
<EnrollsList
|
||||
item={item}
|
||||
title="报名信息"
|
||||
reload={action?.reload}
|
||||
/>
|
||||
<MyButtons.Delete
|
||||
onConfirm={() =>
|
||||
Apis.Activity.Activities.Delete({
|
||||
id: item.id,
|
||||
}).then(() => action?.reload())
|
||||
}
|
||||
/>
|
||||
</Space>
|
||||
),
|
||||
}),
|
||||
]}
|
||||
/>
|
||||
</>
|
||||
);
|
||||
}
|
||||
@ -1,5 +1,6 @@
|
||||
import { MyButtons, MyColumns, MyProTableProps } from '@/common';
|
||||
import { Apis } from '@/gen/Apis';
|
||||
import { MsgPropertyAnnouncementsPublishTypeEnum } from '@/gen/Enums';
|
||||
import { ProTable } from '@ant-design/pro-components';
|
||||
import { Space } from 'antd';
|
||||
import { useEffect, useRef } from 'react';
|
||||
@ -35,6 +36,14 @@ export default function Index({ ...rest }) {
|
||||
search={false}
|
||||
columns={[
|
||||
MyColumns.ID(),
|
||||
{
|
||||
title: '关联项目',
|
||||
dataIndex: ['asset_project', 'name'],
|
||||
search: false,
|
||||
render: (_, record) => {
|
||||
return record?.asset_project?.name;
|
||||
},
|
||||
},
|
||||
{
|
||||
title: '公告标题',
|
||||
dataIndex: 'title',
|
||||
@ -56,38 +65,28 @@ export default function Index({ ...rest }) {
|
||||
),
|
||||
},
|
||||
{
|
||||
title: '公告内容',
|
||||
dataIndex: 'content',
|
||||
valueType: 'textarea', // 仅影响表单编辑时的输入类型,不影响表格展示
|
||||
search: false,
|
||||
width: 200, // 关键:固定列宽(若父容器过窄,可设 minWidth: 200 优先保证列宽)
|
||||
render: (text) => (
|
||||
<div
|
||||
style={{
|
||||
width: '100%', // 继承列宽
|
||||
// height: '60px', // 设置固定高度,约显示3行文本
|
||||
overflow: 'hidden', // 超出隐藏
|
||||
textOverflow: 'ellipsis', // 省略号
|
||||
display: '-webkit-box',
|
||||
WebkitBoxOrient: 'vertical',
|
||||
WebkitLineClamp: 2, // 显示3行
|
||||
}}
|
||||
>
|
||||
{text}
|
||||
</div>
|
||||
),
|
||||
},
|
||||
{
|
||||
title: '发布日期',
|
||||
title: '落款日期',
|
||||
dataIndex: 'publish_at',
|
||||
valueType: 'date',
|
||||
search: false,
|
||||
},
|
||||
{
|
||||
title: '是否发布小程序',
|
||||
dataIndex: 'is_publish',
|
||||
render: (text) => (text ? '是' : '否'),
|
||||
MyColumns.EnumTag({
|
||||
title: '发布方式',
|
||||
dataIndex: 'publish_type',
|
||||
valueEnum: MsgPropertyAnnouncementsPublishTypeEnum,
|
||||
search: false,
|
||||
}),
|
||||
{
|
||||
title: '发布时间',
|
||||
dataIndex: 'schedule_publish_at',
|
||||
valueType: 'dateTime',
|
||||
search: false,
|
||||
},
|
||||
{
|
||||
title: '是否发布',
|
||||
dataIndex: 'is_publish',
|
||||
search: false,
|
||||
render: (text) => (text ? '是' : '否'),
|
||||
},
|
||||
MyColumns.SoftDelete({
|
||||
title: '启/禁用',
|
||||
@ -95,13 +94,7 @@ export default function Index({ ...rest }) {
|
||||
onSoftDelete: Apis.Msg.MsgPropertyAnnouncements.SoftDelete,
|
||||
search: false,
|
||||
}),
|
||||
{
|
||||
//创建日期
|
||||
title: '创建日期',
|
||||
dataIndex: 'created_at',
|
||||
valueType: 'date',
|
||||
search: false,
|
||||
},
|
||||
MyColumns.UpdatedAt(),
|
||||
MyColumns.Option({
|
||||
render: (_, item: any, index, action) => (
|
||||
<Space key={index}>
|
||||
@ -111,6 +104,30 @@ export default function Index({ ...rest }) {
|
||||
reload={action?.reload}
|
||||
// title={title}
|
||||
/>
|
||||
|
||||
<MyButtons.Default
|
||||
title={item.is_publish === 0 ? '发布' : '下架'}
|
||||
type="primary"
|
||||
isConfirm
|
||||
description={
|
||||
item.is_publish === 0
|
||||
? '确认发布此公告吗?'
|
||||
: '确认下架此公告吗?'
|
||||
}
|
||||
onConfirm={() => {
|
||||
let newStatus: boolean;
|
||||
if (item.is_publish === 0) {
|
||||
newStatus = true;
|
||||
} else {
|
||||
newStatus = false;
|
||||
}
|
||||
Apis.Msg.MsgPropertyAnnouncements.IsPublish({
|
||||
id: item.id,
|
||||
is_publish: Boolean(newStatus),
|
||||
}).then(() => action?.reload());
|
||||
}}
|
||||
/>
|
||||
|
||||
<MyButtons.Delete
|
||||
onConfirm={() =>
|
||||
Apis.Msg.MsgPropertyAnnouncements.Delete({
|
||||
|
||||
@ -12,9 +12,9 @@ import {
|
||||
HouseChargeStandardsCalculationPeriodEnum,
|
||||
HouseChargeStandardsPriceAlgorithmEnum,
|
||||
} from '@/gen/Enums';
|
||||
import ChargeStandardCreate from '@/pages/house_charge_standard/modals/ChargeStandardCreate';
|
||||
import ChargeStandardHasHouse from '@/pages/house_charge_standard/modals/ChargeStandardHasHouse';
|
||||
import ChargeStandardUpdate from '@/pages/house_charge_standard/modals/ChargeStandardUpdate';
|
||||
import ChargeStandardCreate from '@/pages/charge/standard/modals/ChargeStandardCreate';
|
||||
import ChargeStandardHasHouse from '@/pages/charge/standard/modals/ChargeStandardHasHouse';
|
||||
import ChargeStandardUpdate from '@/pages/charge/standard/modals/ChargeStandardUpdate';
|
||||
import { ProTable } from '@ant-design/pro-components';
|
||||
import { useNavigate } from '@umijs/max';
|
||||
import { Space } from 'antd';
|
||||
|
||||
@ -12,12 +12,13 @@ import {
|
||||
} from '@/gen/Enums';
|
||||
import { ProTable } from '@ant-design/pro-components';
|
||||
import { Space } from 'antd';
|
||||
import ChargeTasksCreate from './modals/ChargeTasksCreate';
|
||||
import TaskCreate from './modals/TaskCreate';
|
||||
import TaskShow from './modals/TaskShow';
|
||||
|
||||
export default function Index({ title = '账单任务' }) {
|
||||
// 注册当前页面为标签页
|
||||
usePageTabs({
|
||||
tabKey: 'charge_tasks',
|
||||
tabKey: 'house_charge_tasks',
|
||||
tabLabel: title,
|
||||
});
|
||||
|
||||
@ -25,7 +26,7 @@ export default function Index({ title = '账单任务' }) {
|
||||
<MyPageContainer
|
||||
title={title}
|
||||
enableTabs={true}
|
||||
tabKey="bills"
|
||||
tabKey="house_charge_tasks"
|
||||
tabLabel={title}
|
||||
>
|
||||
<ProTable
|
||||
@ -38,66 +39,65 @@ export default function Index({ title = '账单任务' }) {
|
||||
)
|
||||
}
|
||||
toolBarRender={(action) => [
|
||||
<ChargeTasksCreate
|
||||
key="Create"
|
||||
reload={action?.reload}
|
||||
title={title}
|
||||
/>,
|
||||
<TaskCreate key="Create" reload={action?.reload} title="账单任务" />,
|
||||
]}
|
||||
columns={[
|
||||
MyColumns.ID(),
|
||||
MyColumns.EnumTag({
|
||||
title: '任务状态',
|
||||
dataIndex: 'status',
|
||||
valueEnum: HouseChargeTasksStatusEnum,
|
||||
}),
|
||||
{
|
||||
title: '机构',
|
||||
dataIndex: ['company', 'name'],
|
||||
search: false,
|
||||
},
|
||||
{
|
||||
title: '任务ID',
|
||||
dataIndex: 'id',
|
||||
search: false,
|
||||
},
|
||||
MyColumns.EnumTag({
|
||||
title: '创建类型',
|
||||
dataIndex: 'type',
|
||||
valueEnum: HouseChargeTasksTypeEnum,
|
||||
}),
|
||||
MyColumns.EnumTag({
|
||||
title: '任务状态',
|
||||
dataIndex: 'status',
|
||||
valueEnum: HouseChargeTasksStatusEnum,
|
||||
}),
|
||||
{
|
||||
title: '收费标准名称',
|
||||
dataIndex: 'charge_standard_name',
|
||||
title: '收费标准',
|
||||
dataIndex: ['house_charge_standard', 'name'],
|
||||
search: false,
|
||||
},
|
||||
{
|
||||
title: '账单月份',
|
||||
render: (_, record) => {
|
||||
return `${record.year}-${String(record.month).padStart(2, '0')}`;
|
||||
return `${record.bill_year}-${String(record.bill_month).padStart(
|
||||
2,
|
||||
'0',
|
||||
)}`;
|
||||
},
|
||||
},
|
||||
{
|
||||
title: '计费开始日期',
|
||||
dataIndex: 'start_date',
|
||||
title: '计费周期',
|
||||
|
||||
render: (_, record) => {
|
||||
return `${record.start_date}-${String(record.end_date).padStart(
|
||||
2,
|
||||
'0',
|
||||
)}`;
|
||||
},
|
||||
search: false,
|
||||
},
|
||||
{
|
||||
title: '计费结束日期',
|
||||
dataIndex: 'end_date',
|
||||
title: '账单数',
|
||||
dataIndex: 'task_count',
|
||||
search: false,
|
||||
},
|
||||
{
|
||||
title: '项目名称',
|
||||
dataIndex: 'project_name',
|
||||
search: false,
|
||||
},
|
||||
{
|
||||
title: '机构名称',
|
||||
dataIndex: 'company_name',
|
||||
search: false,
|
||||
},
|
||||
MyColumns.SoftDelete({
|
||||
title: '启/禁用',
|
||||
onRestore: Apis.HouseCharage.HouseChargeTasks.Restore,
|
||||
onSoftDelete: Apis.HouseCharage.HouseChargeTasks.SoftDelete,
|
||||
search: false,
|
||||
}),
|
||||
MyColumns.UpdatedAt(),
|
||||
// MyColumns.UpdatedAt(),
|
||||
MyColumns.CreatedAt(),
|
||||
MyColumns.Option({
|
||||
render: (_, item: any, index, action) => (
|
||||
<Space key={index}>
|
||||
<TaskShow item={item} title="查看" reload={action?.reload} />
|
||||
<MyButtons.Delete
|
||||
onConfirm={() =>
|
||||
Apis.HouseCharage.HouseChargeTasks.Delete({
|
||||
69
src/pages/charge/tasks/modals/TaskShow.tsx
Normal file
69
src/pages/charge/tasks/modals/TaskShow.tsx
Normal file
@ -0,0 +1,69 @@
|
||||
import { MyBetaModalFormProps, MyColumns, MyProTableProps } from '@/common';
|
||||
import { MyModal } from '@/components/MyModal';
|
||||
import { Apis } from '@/gen/Apis';
|
||||
import { HouseChargeTaskDetailsStatusEnum } from '@/gen/Enums';
|
||||
import { ProTable } from '@ant-design/pro-components';
|
||||
|
||||
export default function AssetInfo(props: MyBetaModalFormProps) {
|
||||
return (
|
||||
<MyModal
|
||||
title={props.title || '查看'}
|
||||
type={props.item?.type || 'primary'}
|
||||
width="1000px"
|
||||
node={
|
||||
<ProTable
|
||||
{...MyProTableProps.props}
|
||||
request={async (params, sort) =>
|
||||
MyProTableProps.request(
|
||||
{ ...params, house_charge_tasks_id: props?.item?.id },
|
||||
sort,
|
||||
Apis.HouseCharage.HouseChargeTaskDetails.List,
|
||||
)
|
||||
}
|
||||
columns={[
|
||||
MyColumns.ID(),
|
||||
{
|
||||
title: '对象',
|
||||
dataIndex: 'full_name',
|
||||
search: false,
|
||||
},
|
||||
MyColumns.EnumTag({
|
||||
title: '状态',
|
||||
dataIndex: 'status',
|
||||
valueEnum: HouseChargeTaskDetailsStatusEnum,
|
||||
}),
|
||||
|
||||
{
|
||||
title: '收费标准',
|
||||
dataIndex: ['house_charge_task', 'house_charge_standard', 'name'],
|
||||
search: false,
|
||||
},
|
||||
{
|
||||
title: '账单月份',
|
||||
render: (_, record) => {
|
||||
return `${record.year}-${String(record.month).padStart(
|
||||
2,
|
||||
'0',
|
||||
)}`;
|
||||
},
|
||||
},
|
||||
{
|
||||
title: '计费周期',
|
||||
render: (_, record) => {
|
||||
return `${record.house_charge_task.start_date} 至 ${String(
|
||||
record.house_charge_task.end_date,
|
||||
).padStart(2, '0')}`;
|
||||
},
|
||||
search: false,
|
||||
},
|
||||
{
|
||||
title: '完成时间',
|
||||
dataIndex: 'processed_time',
|
||||
search: false,
|
||||
},
|
||||
]}
|
||||
/>
|
||||
}
|
||||
/>
|
||||
);
|
||||
}
|
||||
@ -1,109 +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 Create(props: MyBetaModalFormProps) {
|
||||
const [form] = Form.useForm();
|
||||
return (
|
||||
<BetaSchemaForm<ApiTypes.HouseCharage.HouseChargeTasks.Store>
|
||||
{...MyModalFormProps.props}
|
||||
title={`创建${props.title}`}
|
||||
width="480px"
|
||||
layout="horizontal"
|
||||
labelCol={{ span: 8 }}
|
||||
wrapperCol={{ span: 16 }}
|
||||
labelAlign="left"
|
||||
trigger={<MyButtons.Create title={`创建${props.title}`} />}
|
||||
key={new Date().getTime()}
|
||||
form={form}
|
||||
onOpenChange={(open: any) => {
|
||||
if (open) {
|
||||
form.resetFields(); // 清空表单数据
|
||||
}
|
||||
}}
|
||||
onFinish={async (values) =>
|
||||
Apis.HouseCharage.HouseChargeTasks.Store(values)
|
||||
.then(() => {
|
||||
props.reload?.();
|
||||
message.success(props.title + '账单任务创建成功');
|
||||
return true;
|
||||
})
|
||||
.catch(() => false)
|
||||
}
|
||||
columns={[
|
||||
Selects?.AssetProjects({
|
||||
title: '选择项目',
|
||||
key: 'asset_projects_id',
|
||||
colProps: { span: 24 },
|
||||
formItemProps: { ...rulesHelper.text },
|
||||
}),
|
||||
{
|
||||
valueType: 'dependency',
|
||||
name: ['asset_projects_id'],
|
||||
columns: ({ asset_projects_id }) => {
|
||||
return [
|
||||
Selects?.ChargeStandard({
|
||||
title: '选择收费标准',
|
||||
key: 'house_charge_standards_id',
|
||||
params: {
|
||||
asset_projects_id: asset_projects_id,
|
||||
},
|
||||
colProps: { span: 24 },
|
||||
formItemProps: { ...rulesHelper.text },
|
||||
fieldProps: {
|
||||
showSearch: true,
|
||||
},
|
||||
}),
|
||||
];
|
||||
},
|
||||
},
|
||||
{
|
||||
key: 'month',
|
||||
title: '选择生成月份',
|
||||
valueType: 'date',
|
||||
colProps: { span: 24 },
|
||||
fieldProps: {
|
||||
picker: 'month',
|
||||
format: 'YYYY-MM',
|
||||
valueFormat: 'YYYY-MM',
|
||||
style: {
|
||||
width: '100%',
|
||||
},
|
||||
},
|
||||
formItemProps: { ...rulesHelper.text },
|
||||
},
|
||||
{
|
||||
key: 'start_date',
|
||||
title: '计费开始日期',
|
||||
valueType: 'date',
|
||||
colProps: { span: 24 },
|
||||
fieldProps: {
|
||||
style: {
|
||||
width: '100%',
|
||||
},
|
||||
},
|
||||
formItemProps: { ...rulesHelper.text },
|
||||
},
|
||||
{
|
||||
key: 'end_date',
|
||||
title: '计费结束日期',
|
||||
valueType: 'date',
|
||||
colProps: { span: 24 },
|
||||
fieldProps: {
|
||||
style: {
|
||||
width: '100%',
|
||||
},
|
||||
},
|
||||
formItemProps: { ...rulesHelper.text },
|
||||
},
|
||||
]}
|
||||
/>
|
||||
);
|
||||
}
|
||||
@ -1,100 +0,0 @@
|
||||
import {
|
||||
MyButtons,
|
||||
MyColumns,
|
||||
MyPageContainer,
|
||||
MyProTableProps,
|
||||
usePageTabs,
|
||||
} from '@/common';
|
||||
import { Apis } from '@/gen/Apis';
|
||||
import { HouseChargeTaskDetailsStatusEnum } from '@/gen/Enums';
|
||||
import { ProTable } from '@ant-design/pro-components';
|
||||
import { Space } from 'antd';
|
||||
import ChargeTasksCreate from './modals/ChargeTasksCreate';
|
||||
|
||||
export default function Index({ title = '账单任务' }) {
|
||||
// 注册当前页面为标签页
|
||||
usePageTabs({
|
||||
tabKey: 'house_charge_tasks',
|
||||
tabLabel: title,
|
||||
});
|
||||
|
||||
return (
|
||||
<MyPageContainer
|
||||
title={title}
|
||||
enableTabs={true}
|
||||
tabKey="house_charge_tasks"
|
||||
tabLabel={title}
|
||||
>
|
||||
<ProTable
|
||||
{...MyProTableProps.props}
|
||||
request={async (params, sort) =>
|
||||
MyProTableProps.request(
|
||||
params,
|
||||
sort,
|
||||
Apis.HouseCharage.HouseChargeTasks.List,
|
||||
)
|
||||
}
|
||||
toolBarRender={(action) => [
|
||||
<ChargeTasksCreate
|
||||
key="Create"
|
||||
reload={action?.reload}
|
||||
title="账单任务"
|
||||
/>,
|
||||
]}
|
||||
columns={[
|
||||
{
|
||||
title: '任务ID',
|
||||
dataIndex: 'house_charge_tasks_id',
|
||||
search: false,
|
||||
},
|
||||
MyColumns.EnumTag({
|
||||
title: '任务状态',
|
||||
dataIndex: 'status',
|
||||
valueEnum: HouseChargeTaskDetailsStatusEnum,
|
||||
}),
|
||||
{
|
||||
title: '账单ID',
|
||||
dataIndex: 'id',
|
||||
search: false,
|
||||
},
|
||||
{
|
||||
title: '关联对象',
|
||||
dataIndex: 'full_name',
|
||||
search: false,
|
||||
},
|
||||
{
|
||||
title: '账单月份',
|
||||
render: (_, record) => {
|
||||
return `${record.year}-${String(record.month).padStart(2, '0')}`;
|
||||
},
|
||||
},
|
||||
{
|
||||
title: '计费开始日期',
|
||||
dataIndex: ['house_charge_task', 'start_date'],
|
||||
search: false,
|
||||
},
|
||||
{
|
||||
title: '计费结束日期',
|
||||
dataIndex: ['house_charge_task', 'end_date'],
|
||||
search: false,
|
||||
},
|
||||
// MyColumns.UpdatedAt(),
|
||||
MyColumns.CreatedAt(),
|
||||
MyColumns.Option({
|
||||
render: (_, item: any, index, action) => (
|
||||
<Space key={index}>
|
||||
<MyButtons.Delete
|
||||
onConfirm={() =>
|
||||
Apis.HouseCharage.HouseChargeTaskDetails.Delete({
|
||||
id: item.id,
|
||||
}).then(() => action?.reload())
|
||||
}
|
||||
/>
|
||||
</Space>
|
||||
),
|
||||
}),
|
||||
]}
|
||||
/>
|
||||
</MyPageContainer>
|
||||
);
|
||||
}
|
||||
257
yarn.lock
257
yarn.lock
@ -629,6 +629,11 @@
|
||||
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.27.6.tgz#ec4070a04d76bae8ddbb10770ba55714a417b7c6"
|
||||
integrity sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==
|
||||
|
||||
"@babel/runtime@^7.12.0":
|
||||
version "7.28.4"
|
||||
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.28.4.tgz#a70226016fabe25c5783b2f22d3e1c9bc5ca3326"
|
||||
integrity sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==
|
||||
|
||||
"@babel/template@^7.22.15", "@babel/template@^7.27.2", "@babel/template@^7.3.3":
|
||||
version "7.27.2"
|
||||
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.27.2.tgz#fa78ceed3c4e7b63ebf6cb39e5852fca45f6809d"
|
||||
@ -1772,6 +1777,11 @@
|
||||
"@tanstack/query-core" "4.40.0"
|
||||
use-sync-external-store "^1.2.0"
|
||||
|
||||
"@transloadit/prettier-bytes@0.0.7":
|
||||
version "0.0.7"
|
||||
resolved "https://registry.yarnpkg.com/@transloadit/prettier-bytes/-/prettier-bytes-0.0.7.tgz#cdb5399f445fdd606ed833872fa0cabdbc51686b"
|
||||
integrity sha512-VeJbUb0wEKbcwaSlj5n+LscBl9IPgLPkHVGBkh00cztv6X4L/TJXK58LzFuBKX7/GAfiGhIwH67YTLTlzvIzBA==
|
||||
|
||||
"@trysound/sax@0.2.0":
|
||||
version "0.2.0"
|
||||
resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad"
|
||||
@ -1810,6 +1820,11 @@
|
||||
dependencies:
|
||||
"@babel/types" "^7.20.7"
|
||||
|
||||
"@types/event-emitter@^0.3.3":
|
||||
version "0.3.5"
|
||||
resolved "https://registry.yarnpkg.com/@types/event-emitter/-/event-emitter-0.3.5.tgz#ce9b513f72c50dcf0443a12165a93a79ba7a7092"
|
||||
integrity sha512-zx2/Gg0Eg7gwEiOIIh5w9TrhKKTeQh7CPCOPNc0el4pLSwzebA8SmnHwZs2dWlLONvyulykSwGSQxQHLhjGLvQ==
|
||||
|
||||
"@types/graceful-fs@^4.1.3":
|
||||
version "4.1.9"
|
||||
resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.9.tgz#2a06bc0f68a20ab37b3e36aa238be6abdf49e8b4"
|
||||
@ -2521,6 +2536,49 @@
|
||||
resolved "https://registry.yarnpkg.com/@umijs/zod2ts/-/zod2ts-4.4.11.tgz#f41d646739d06fd08ae8bcdc8c748c40f3c7daf3"
|
||||
integrity sha512-B4CGKU6N9Qws5zNEu8TJjQgp61xAEdrBEmXGStXLl32f3zz0oUcIq/N4vBYciCDbwjHQKviqGcl3iSy2pbn7BA==
|
||||
|
||||
"@uppy/companion-client@^2.2.2":
|
||||
version "2.2.2"
|
||||
resolved "https://registry.yarnpkg.com/@uppy/companion-client/-/companion-client-2.2.2.tgz#c70b42fdcca728ef88b3eebf7ee3e2fa04b4923b"
|
||||
integrity sha512-5mTp2iq97/mYSisMaBtFRry6PTgZA6SIL7LePteOV5x0/DxKfrZW3DEiQERJmYpHzy7k8johpm2gHnEKto56Og==
|
||||
dependencies:
|
||||
"@uppy/utils" "^4.1.2"
|
||||
namespace-emitter "^2.0.1"
|
||||
|
||||
"@uppy/core@^2.1.1":
|
||||
version "2.3.4"
|
||||
resolved "https://registry.yarnpkg.com/@uppy/core/-/core-2.3.4.tgz#260b85b6bf3aa03cdc67da231f8c69cfbfdcc84a"
|
||||
integrity sha512-iWAqppC8FD8mMVqewavCz+TNaet6HPXitmGXpGGREGrakZ4FeuWytVdrelydzTdXx6vVKkOmI2FLztGg73sENQ==
|
||||
dependencies:
|
||||
"@transloadit/prettier-bytes" "0.0.7"
|
||||
"@uppy/store-default" "^2.1.1"
|
||||
"@uppy/utils" "^4.1.3"
|
||||
lodash.throttle "^4.1.1"
|
||||
mime-match "^1.0.2"
|
||||
namespace-emitter "^2.0.1"
|
||||
nanoid "^3.1.25"
|
||||
preact "^10.5.13"
|
||||
|
||||
"@uppy/store-default@^2.1.1":
|
||||
version "2.1.1"
|
||||
resolved "https://registry.yarnpkg.com/@uppy/store-default/-/store-default-2.1.1.tgz#62a656a099bdaa012306e054d093754cb2d36e3e"
|
||||
integrity sha512-xnpTxvot2SeAwGwbvmJ899ASk5tYXhmZzD/aCFsXePh/v8rNvR2pKlcQUH7cF/y4baUGq3FHO/daKCok/mpKqQ==
|
||||
|
||||
"@uppy/utils@^4.1.2", "@uppy/utils@^4.1.3":
|
||||
version "4.1.3"
|
||||
resolved "https://registry.yarnpkg.com/@uppy/utils/-/utils-4.1.3.tgz#9d0be6ece4df25f228d30ef40be0f14208258ce3"
|
||||
integrity sha512-nTuMvwWYobnJcytDO3t+D6IkVq/Qs4Xv3vyoEZ+Iaf8gegZP+rEyoaFT2CK5XLRMienPyqRqNbIfRuFaOWSIFw==
|
||||
dependencies:
|
||||
lodash.throttle "^4.1.1"
|
||||
|
||||
"@uppy/xhr-upload@^2.0.3":
|
||||
version "2.1.3"
|
||||
resolved "https://registry.yarnpkg.com/@uppy/xhr-upload/-/xhr-upload-2.1.3.tgz#0d4e355332fe0c6eb372d7731315e04d02aeeb18"
|
||||
integrity sha512-YWOQ6myBVPs+mhNjfdWsQyMRWUlrDLMoaG7nvf/G6Y3GKZf8AyjFDjvvJ49XWQ+DaZOftGkHmF1uh/DBeGivJQ==
|
||||
dependencies:
|
||||
"@uppy/companion-client" "^2.2.2"
|
||||
"@uppy/utils" "^4.1.2"
|
||||
nanoid "^3.1.25"
|
||||
|
||||
"@vitejs/plugin-react@4.0.0":
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/@vitejs/plugin-react/-/plugin-react-4.0.0.tgz#46d1c37c507447d10467be1c111595174555ef28"
|
||||
@ -2531,6 +2589,84 @@
|
||||
"@babel/plugin-transform-react-jsx-source" "^7.19.6"
|
||||
react-refresh "^0.14.0"
|
||||
|
||||
"@wangeditor/basic-modules@^1.1.7":
|
||||
version "1.1.7"
|
||||
resolved "https://registry.yarnpkg.com/@wangeditor/basic-modules/-/basic-modules-1.1.7.tgz#a9c3ccf4ef53332f29550d59d3676e15f395946f"
|
||||
integrity sha512-cY9CPkLJaqF05STqfpZKWG4LpxTMeGSIIF1fHvfm/mz+JXatCagjdkbxdikOuKYlxDdeqvOeBmsUBItufDLXZg==
|
||||
dependencies:
|
||||
is-url "^1.2.4"
|
||||
|
||||
"@wangeditor/code-highlight@^1.0.3":
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/@wangeditor/code-highlight/-/code-highlight-1.0.3.tgz#90256857714d5c0cf83ac475aea64db7bf29a7cd"
|
||||
integrity sha512-iazHwO14XpCuIWJNTQTikqUhGKyqj+dUNWJ9288Oym9M2xMVHvnsOmDU2sgUDWVy+pOLojReMPgXCsvvNlOOhw==
|
||||
dependencies:
|
||||
prismjs "^1.23.0"
|
||||
|
||||
"@wangeditor/core@^1.1.19":
|
||||
version "1.1.19"
|
||||
resolved "https://registry.yarnpkg.com/@wangeditor/core/-/core-1.1.19.tgz#f9155f7fd92d03cb1982405b3b82e54c31f1c2b0"
|
||||
integrity sha512-KevkB47+7GhVszyYF2pKGKtCSj/YzmClsD03C3zTt+9SR2XWT5T0e3yQqg8baZpcMvkjs1D8Dv4fk8ok/UaS2Q==
|
||||
dependencies:
|
||||
"@types/event-emitter" "^0.3.3"
|
||||
event-emitter "^0.3.5"
|
||||
html-void-elements "^2.0.0"
|
||||
i18next "^20.4.0"
|
||||
scroll-into-view-if-needed "^2.2.28"
|
||||
slate-history "^0.66.0"
|
||||
|
||||
"@wangeditor/editor-for-react@^1.0.6":
|
||||
version "1.0.6"
|
||||
resolved "https://registry.yarnpkg.com/@wangeditor/editor-for-react/-/editor-for-react-1.0.6.tgz#c77fa5651e196bb7e5a63e4abf0e32d54d4f38af"
|
||||
integrity sha512-KJNSfgMr5Blzae3oyaiz20flMKHZHnvsz4bCYQKDCUs/qkvC+xNTnwedlCmhGP187oPWPEypCIYI8Zg6sz0psQ==
|
||||
|
||||
"@wangeditor/editor@^5.1.23":
|
||||
version "5.1.23"
|
||||
resolved "https://registry.yarnpkg.com/@wangeditor/editor/-/editor-5.1.23.tgz#c9d2007b7cb0ceef6b72692b4ee87b01ee2367b3"
|
||||
integrity sha512-0RxfeVTuK1tktUaPROnCoFfaHVJpRAIE2zdS0mpP+vq1axVQpLjM8+fCvKzqYIkH0Pg+C+44hJpe3VVroSkEuQ==
|
||||
dependencies:
|
||||
"@uppy/core" "^2.1.1"
|
||||
"@uppy/xhr-upload" "^2.0.3"
|
||||
"@wangeditor/basic-modules" "^1.1.7"
|
||||
"@wangeditor/code-highlight" "^1.0.3"
|
||||
"@wangeditor/core" "^1.1.19"
|
||||
"@wangeditor/list-module" "^1.0.5"
|
||||
"@wangeditor/table-module" "^1.1.4"
|
||||
"@wangeditor/upload-image-module" "^1.0.2"
|
||||
"@wangeditor/video-module" "^1.1.4"
|
||||
dom7 "^3.0.0"
|
||||
is-hotkey "^0.2.0"
|
||||
lodash.camelcase "^4.3.0"
|
||||
lodash.clonedeep "^4.5.0"
|
||||
lodash.debounce "^4.0.8"
|
||||
lodash.foreach "^4.5.0"
|
||||
lodash.isequal "^4.5.0"
|
||||
lodash.throttle "^4.1.1"
|
||||
lodash.toarray "^4.4.0"
|
||||
nanoid "^3.2.0"
|
||||
slate "^0.72.0"
|
||||
snabbdom "^3.1.0"
|
||||
|
||||
"@wangeditor/list-module@^1.0.5":
|
||||
version "1.0.5"
|
||||
resolved "https://registry.yarnpkg.com/@wangeditor/list-module/-/list-module-1.0.5.tgz#3fc0b167acddf885536b45fa0c127f9c6adaea33"
|
||||
integrity sha512-uDuYTP6DVhcYf7mF1pTlmNn5jOb4QtcVhYwSSAkyg09zqxI1qBqsfUnveeDeDqIuptSJhkh81cyxi+MF8sEPOQ==
|
||||
|
||||
"@wangeditor/table-module@^1.1.4":
|
||||
version "1.1.4"
|
||||
resolved "https://registry.yarnpkg.com/@wangeditor/table-module/-/table-module-1.1.4.tgz#757d4a5868b2b658041cd323854a4d707c8347e9"
|
||||
integrity sha512-5saanU9xuEocxaemGdNi9t8MCDSucnykEC6jtuiT72kt+/Hhh4nERYx1J20OPsTCCdVr7hIyQenFD1iSRkIQ6w==
|
||||
|
||||
"@wangeditor/upload-image-module@^1.0.2":
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/@wangeditor/upload-image-module/-/upload-image-module-1.0.2.tgz#89e9b9467e10cbc6b11dc5748e08dd23aaebee30"
|
||||
integrity sha512-z81lk/v71OwPDYeQDxj6cVr81aDP90aFuywb8nPD6eQeECtOymrqRODjpO6VGvCVxVck8nUxBHtbxKtjgcwyiA==
|
||||
|
||||
"@wangeditor/video-module@^1.1.4":
|
||||
version "1.1.4"
|
||||
resolved "https://registry.yarnpkg.com/@wangeditor/video-module/-/video-module-1.1.4.tgz#b9df1b3ab2cd53f678b19b4d927e200774a6f532"
|
||||
integrity sha512-ZdodDPqKQrgx3IwWu4ZiQmXI8EXZ3hm2/fM6E3t5dB8tCaIGWQZhmqd6P5knfkRAd3z2+YRSRbxOGfoRSp/rLg==
|
||||
|
||||
"@xobotyi/scrollbar-width@^1.9.5":
|
||||
version "1.9.5"
|
||||
resolved "https://registry.yarnpkg.com/@xobotyi/scrollbar-width/-/scrollbar-width-1.9.5.tgz#80224a6919272f405b87913ca13b92929bdf3c4d"
|
||||
@ -4113,6 +4249,13 @@ dom-walk@^0.1.0:
|
||||
resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84"
|
||||
integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==
|
||||
|
||||
dom7@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/dom7/-/dom7-3.0.0.tgz#b861ce5d67a6becd7aaa3ad02942ff14b1240331"
|
||||
integrity sha512-oNlcUdHsC4zb7Msx7JN3K0Nro1dzJ48knvBOnDPKJ2GV9wl1i5vydJZUSyOfrkKFDZEud/jBsTk92S/VGSAe/g==
|
||||
dependencies:
|
||||
ssr-window "^3.0.0-alpha.1"
|
||||
|
||||
domain-browser@^1.1.1:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda"
|
||||
@ -5504,6 +5647,11 @@ html-tags@^3.2.0:
|
||||
resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.3.1.tgz#a04026a18c882e4bba8a01a3d39cfe465d40b5ce"
|
||||
integrity sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==
|
||||
|
||||
html-void-elements@^2.0.0:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-2.0.1.tgz#29459b8b05c200b6c5ee98743c41b979d577549f"
|
||||
integrity sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==
|
||||
|
||||
html-webpack-plugin@5.5.0:
|
||||
version "5.5.0"
|
||||
resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz#c3911936f57681c1f9f4d8b68c158cd9dfe52f50"
|
||||
@ -5569,6 +5717,13 @@ hyphenate-style-name@^1.0.3:
|
||||
resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.1.0.tgz#1797bf50369588b47b72ca6d5e65374607cf4436"
|
||||
integrity sha512-WDC/ui2VVRrz3jOVi+XtjqkDjiVjTtFaAGiW37k6b+ohyQ5wYDOGkvCZa8+H0nx3gyvv0+BST9xuOgIyGQ00gw==
|
||||
|
||||
i18next@^20.4.0:
|
||||
version "20.6.1"
|
||||
resolved "https://registry.yarnpkg.com/i18next/-/i18next-20.6.1.tgz#535e5f6e5baeb685c7d25df70db63bf3cc0aa345"
|
||||
integrity sha512-yCMYTMEJ9ihCwEQQ3phLo7I/Pwycf8uAx+sRHwwk5U9Aui/IZYgQRyMqXafQOw5QQ7DM1Z+WyEXWIqSuJHhG2A==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.12.0"
|
||||
|
||||
iconv-lite@0.4.24:
|
||||
version "0.4.24"
|
||||
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
|
||||
@ -5615,6 +5770,11 @@ immer@^8.0.4:
|
||||
resolved "https://registry.yarnpkg.com/immer/-/immer-8.0.4.tgz#3a21605a4e2dded852fb2afd208ad50969737b7a"
|
||||
integrity sha512-jMfL18P+/6P6epANRvRk6q8t+3gGhqsJ9EuJ25AXE+9bNTYtssvzeYbEd0mXRYWCmmXSIbnlpz6vd6iJlmGGGQ==
|
||||
|
||||
immer@^9.0.6:
|
||||
version "9.0.21"
|
||||
resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.21.tgz#1e025ea31a40f24fb064f1fef23e931496330176"
|
||||
integrity sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==
|
||||
|
||||
import-fresh@^3.0.0, import-fresh@^3.2.1, import-fresh@^3.3.0:
|
||||
version "3.3.1"
|
||||
resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.1.tgz#9cecb56503c0ada1f2741dbbd6546e4b13b57ccf"
|
||||
@ -5899,6 +6059,11 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1:
|
||||
dependencies:
|
||||
is-extglob "^2.1.1"
|
||||
|
||||
is-hotkey@^0.2.0:
|
||||
version "0.2.0"
|
||||
resolved "https://registry.yarnpkg.com/is-hotkey/-/is-hotkey-0.2.0.tgz#1835a68171a91e5c9460869d96336947c8340cef"
|
||||
integrity sha512-UknnZK4RakDmTgz4PI1wIph5yxSs/mvChWs9ifnlXsKuXgWmOkY/hAE0H/k2MIqH0RlRye0i1oC07MCRSD28Mw==
|
||||
|
||||
is-inside-container@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/is-inside-container/-/is-inside-container-1.0.0.tgz#e81fba699662eb31dbdaf26766a61d4814717ea4"
|
||||
@ -6017,6 +6182,11 @@ is-typed-array@^1.1.13, is-typed-array@^1.1.14, is-typed-array@^1.1.15:
|
||||
dependencies:
|
||||
which-typed-array "^1.1.16"
|
||||
|
||||
is-url@^1.2.4:
|
||||
version "1.2.4"
|
||||
resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.4.tgz#04a4df46d28c4cff3d73d01ff06abeb318a1aa52"
|
||||
integrity sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==
|
||||
|
||||
is-weakmap@^2.0.2:
|
||||
version "2.0.2"
|
||||
resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.2.tgz#bf72615d649dfe5f699079c54b83e47d1ae19cfd"
|
||||
@ -6515,11 +6685,31 @@ lodash-es@^4.17.21:
|
||||
resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee"
|
||||
integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==
|
||||
|
||||
lodash.camelcase@^4.3.0:
|
||||
version "4.3.0"
|
||||
resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6"
|
||||
integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==
|
||||
|
||||
lodash.clonedeep@^4.5.0:
|
||||
version "4.5.0"
|
||||
resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef"
|
||||
integrity sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==
|
||||
|
||||
lodash.debounce@^4.0.8:
|
||||
version "4.0.8"
|
||||
resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af"
|
||||
integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==
|
||||
|
||||
lodash.foreach@^4.5.0:
|
||||
version "4.5.0"
|
||||
resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53"
|
||||
integrity sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ==
|
||||
|
||||
lodash.isequal@^4.5.0:
|
||||
version "4.5.0"
|
||||
resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0"
|
||||
integrity sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==
|
||||
|
||||
lodash.merge@^4.6.2:
|
||||
version "4.6.2"
|
||||
resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
|
||||
@ -6530,6 +6720,11 @@ lodash.throttle@^4.1.1:
|
||||
resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4"
|
||||
integrity sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==
|
||||
|
||||
lodash.toarray@^4.4.0:
|
||||
version "4.4.0"
|
||||
resolved "https://registry.yarnpkg.com/lodash.toarray/-/lodash.toarray-4.4.0.tgz#24c4bfcd6b2fba38bfd0594db1179d8e9b656561"
|
||||
integrity sha512-QyffEA3i5dma5q2490+SgCvDN0pXLmRGSyAANuVi0HQ01Pkfr9fuoKQW8wm1wGBnJITs/mS7wQvS6VshUEBFCw==
|
||||
|
||||
lodash.truncate@^4.4.2:
|
||||
version "4.4.2"
|
||||
resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193"
|
||||
@ -6717,6 +6912,13 @@ mime-db@1.52.0:
|
||||
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.54.0.tgz#cddb3ee4f9c64530dff640236661d42cb6a314f5"
|
||||
integrity sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==
|
||||
|
||||
mime-match@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/mime-match/-/mime-match-1.0.2.tgz#3f87c31e9af1a5fd485fb9db134428b23bbb7ba8"
|
||||
integrity sha512-VXp/ugGDVh3eCLOBCiHZMYWQaTNUHv2IJrut+yXA6+JbLPXHglHwfS/5A5L0ll+jkCY7fIzRJcH6OIunF+c6Cg==
|
||||
dependencies:
|
||||
wildcard "^1.1.0"
|
||||
|
||||
mime-types@^2.1.12, mime-types@~2.1.24, mime-types@~2.1.34:
|
||||
version "2.1.35"
|
||||
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
|
||||
@ -6816,6 +7018,11 @@ ms@2.1.3, ms@^2.1.1, ms@^2.1.3:
|
||||
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
|
||||
integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
|
||||
|
||||
namespace-emitter@^2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/namespace-emitter/-/namespace-emitter-2.0.1.tgz#978d51361c61313b4e6b8cf6f3853d08dfa2b17c"
|
||||
integrity sha512-N/sMKHniSDJBjfrkbS/tpkPj4RAbvW3mr8UAzvlMHyun93XEm83IAvhWtJVHo+RHn/oO8Job5YN4b+wRjSVp5g==
|
||||
|
||||
nano-css@^5.6.2:
|
||||
version "5.6.2"
|
||||
resolved "https://registry.yarnpkg.com/nano-css/-/nano-css-5.6.2.tgz#584884ddd7547278f6d6915b6805069742679a32"
|
||||
@ -6830,7 +7037,7 @@ nano-css@^5.6.2:
|
||||
stacktrace-js "^2.0.2"
|
||||
stylis "^4.3.0"
|
||||
|
||||
nanoid@^3.3.11:
|
||||
nanoid@^3.1.25, nanoid@^3.2.0, nanoid@^3.3.11:
|
||||
version "3.3.11"
|
||||
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.11.tgz#4f4f112cefbe303202f2199838128936266d185b"
|
||||
integrity sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==
|
||||
@ -7793,6 +8000,11 @@ postcss@^8.4.13, postcss@^8.4.21, postcss@^8.4.27, postcss@^8.4.31, postcss@^8.4
|
||||
picocolors "^1.1.1"
|
||||
source-map-js "^1.2.1"
|
||||
|
||||
preact@^10.5.13:
|
||||
version "10.27.2"
|
||||
resolved "https://registry.yarnpkg.com/preact/-/preact-10.27.2.tgz#19b9009c1be801a76a0aaf0fe5ba665985a09312"
|
||||
integrity sha512-5SYSgFKSyhCbk6SrXyMpqjb5+MQBgfvEKE/OC+PujcY34sOpqtr+0AZQtPYx5IA6VxynQ7rUPCtKzyovpj9Bpg==
|
||||
|
||||
prelude-ls@^1.2.1:
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
|
||||
@ -7842,6 +8054,11 @@ pretty-format@^24:
|
||||
ansi-styles "^3.2.0"
|
||||
react-is "^16.8.4"
|
||||
|
||||
prismjs@^1.23.0:
|
||||
version "1.30.0"
|
||||
resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.30.0.tgz#d9709969d9d4e16403f6f348c63553b19f0975a9"
|
||||
integrity sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==
|
||||
|
||||
process-nextick-args@~2.0.0:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
|
||||
@ -9217,7 +9434,7 @@ screenfull@^5.1.0:
|
||||
resolved "https://registry.yarnpkg.com/screenfull/-/screenfull-5.2.0.tgz#6533d524d30621fc1283b9692146f3f13a93d1ba"
|
||||
integrity sha512-9BakfsO2aUQN2K9Fdbj87RJIEZ82Q9IGim7FqM5OsebfoFC6ZHXgDq/KvniuLTPdeM8wY2o6Dj3WQ7KeQCj3cA==
|
||||
|
||||
scroll-into-view-if-needed@^2.2.25:
|
||||
scroll-into-view-if-needed@^2.2.25, scroll-into-view-if-needed@^2.2.28:
|
||||
version "2.2.31"
|
||||
resolved "https://registry.yarnpkg.com/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.31.tgz#d3c482959dc483e37962d1521254e3295d0d1587"
|
||||
integrity sha512-dGCXy99wZQivjmjIqihaBQNjryrz5rueJY7eHfTdyWEiR4ttYpsajb14rn9s5d4DY4EcY6+4+U/maARBXJedkA==
|
||||
@ -9422,6 +9639,22 @@ slash@^4.0.0:
|
||||
resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7"
|
||||
integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==
|
||||
|
||||
slate-history@^0.66.0:
|
||||
version "0.66.0"
|
||||
resolved "https://registry.yarnpkg.com/slate-history/-/slate-history-0.66.0.tgz#ac63fddb903098ceb4c944433e3f75fe63acf940"
|
||||
integrity sha512-6MWpxGQZiMvSINlCbMW43E2YBSVMCMCIwQfBzGssjWw4kb0qfvj0pIdblWNRQZD0hR6WHP+dHHgGSeVdMWzfng==
|
||||
dependencies:
|
||||
is-plain-object "^5.0.0"
|
||||
|
||||
slate@^0.72.0:
|
||||
version "0.72.8"
|
||||
resolved "https://registry.yarnpkg.com/slate/-/slate-0.72.8.tgz#5a018edf24e45448655293a68bfbcf563aa5ba81"
|
||||
integrity sha512-/nJwTswQgnRurpK+bGJFH1oM7naD5qDmHd89JyiKNT2oOKD8marW0QSBtuFnwEbL5aGCS8AmrhXQgNOsn4osAw==
|
||||
dependencies:
|
||||
immer "^9.0.6"
|
||||
is-plain-object "^5.0.0"
|
||||
tiny-warning "^1.0.3"
|
||||
|
||||
slice-ansi@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b"
|
||||
@ -9439,6 +9672,11 @@ slice-ansi@^5.0.0:
|
||||
ansi-styles "^6.0.0"
|
||||
is-fullwidth-code-point "^4.0.0"
|
||||
|
||||
snabbdom@^3.1.0:
|
||||
version "3.6.2"
|
||||
resolved "https://registry.yarnpkg.com/snabbdom/-/snabbdom-3.6.2.tgz#57dd66878f6320497fa7f67941df356a045c75a1"
|
||||
integrity sha512-ig5qOnCDbugFntKi6c7Xlib8bA6xiJVk8O+WdFrV3wxbMqeHO0hXFQC4nAhPVWfZfi8255lcZkNhtIBINCc4+Q==
|
||||
|
||||
sonic-boom@^2.2.1:
|
||||
version "2.8.0"
|
||||
resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-2.8.0.tgz#c1def62a77425090e6ad7516aad8eb402e047611"
|
||||
@ -9578,6 +9816,11 @@ sprintf-js@~1.0.2:
|
||||
resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
|
||||
integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==
|
||||
|
||||
ssr-window@^3.0.0-alpha.1:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/ssr-window/-/ssr-window-3.0.0.tgz#fd5b82801638943e0cc704c4691801435af7ac37"
|
||||
integrity sha512-q+8UfWDg9Itrg0yWK7oe5p/XRCJpJF9OBtXfOPgSJl+u3Xd5KI328RUEvUqSMVM9CiQUEf1QdBzJMkYGErj9QA==
|
||||
|
||||
stable@^0.1.8:
|
||||
version "0.1.8"
|
||||
resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf"
|
||||
@ -10044,6 +10287,11 @@ timers-browserify@^2.0.4:
|
||||
dependencies:
|
||||
setimmediate "^1.0.4"
|
||||
|
||||
tiny-warning@^1.0.3:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754"
|
||||
integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==
|
||||
|
||||
tinycolor2@^1.4.2:
|
||||
version "1.6.0"
|
||||
resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.6.0.tgz#f98007460169b0263b97072c5ae92484ce02d09e"
|
||||
@ -10552,6 +10800,11 @@ which@^2.0.1:
|
||||
dependencies:
|
||||
isexe "^2.0.0"
|
||||
|
||||
wildcard@^1.1.0:
|
||||
version "1.1.2"
|
||||
resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-1.1.2.tgz#a7020453084d8cd2efe70ba9d3696263de1710a5"
|
||||
integrity sha512-DXukZJxpHA8LuotRwL0pP1+rS6CS7FF2qStDDE1C7DDg2rLud2PXRMuEDYIPhgEezwnlHNL4c+N6MfMTjCGTng==
|
||||
|
||||
word-wrap@^1.2.5:
|
||||
version "1.2.5"
|
||||
resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34"
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user