💥 feat(模块): 加群

This commit is contained in:
chashaobao
2026-01-22 20:59:26 +08:00
parent b83a91e2f2
commit bab3770337

View File

@ -5,9 +5,8 @@ import {
ProFormInstance,
ProFormSelect,
ProFormText,
ProFormDigit,
ProFormMoney,
ProFormUploadButton,
ProFormDependency,
} from '@ant-design/pro-components';
import { ModalForm, PageContainer, ProTable } from '@ant-design/pro-components';
import '@umijs/max';
@ -37,6 +36,38 @@ const useStyles = createStyles(({ token }) => {
};
});
const MIN_GROUP_SIZE = 20;
export enum ProductSpecId {
GroupBatchPublish20 = 'GROUP_BATCH_PUSH_20',
GroupBatchPublish50 = 'GROUP_BATCH_PUSH_50',
GroupBatchPublish60 = 'GROUP_BATCH_PUSH_60',
GroupBatchPublish80 = 'GROUP_BATCH_PUSH_80',
GroupBatchPublish100 = 'GROUP_BATCH_PUSH_100',
GroupBatchPublish150 = 'GROUP_BATCH_PUSH_150',
GroupBatchPublish300 = 'GROUP_BATCH_PUSH_300',
GroupBatchPublish500 = 'GROUP_BATCH_PUSH_500',
GroupBatchPublish750 = 'GROUP_BATCH_PUSH_750',
GroupBatchPublish800 = 'GROUP_BATCH_PUSH_800',
GroupBatchPublish1000 = 'GROUP_BATCH_PUSH_1000',
}
const GROUP_OPTIONS = [
{ value: MIN_GROUP_SIZE, productSpecId: ProductSpecId.GroupBatchPublish20, label: '20', price: 18 },
{ value: 50, productSpecId: ProductSpecId.GroupBatchPublish50, label: '50', price: 40 },
{ value: 60, productSpecId: ProductSpecId.GroupBatchPublish60, label: '60', price: 48 },
{ value: 80, productSpecId: ProductSpecId.GroupBatchPublish80, label: '80', price: 58 },
{ value: 100, productSpecId: ProductSpecId.GroupBatchPublish100, label: '100', price: 68 },
{ value: 150, productSpecId: ProductSpecId.GroupBatchPublish150, label: '150', price: 98 },
{ value: 300, productSpecId: ProductSpecId.GroupBatchPublish300, label: '300', price: 128 },
{ value: 500, productSpecId: ProductSpecId.GroupBatchPublish500, label: '500', price: 168 },
{ value: 750, productSpecId: ProductSpecId.GroupBatchPublish750, label: '750', price: 188 },
{ value: 800, productSpecId: ProductSpecId.GroupBatchPublish800, label: '800', price: 198 },
{ value: 1000, productSpecId: ProductSpecId.GroupBatchPublish1000, label: '1000', price: 288 },
];
const calcPrice = (sendCount: number) => {
const originalPrice = sendCount * 1;
const price = GROUP_OPTIONS.find(o => o.value === sendCount)?.price || 18;
return { price, originalPrice };
};
const TableList: React.FC = () => {
const [updateModalOpen, handleUpdateModalOpen] = useState<boolean>(false);
const [currentRow, setCurrentRow] = useState<API.CityOperatorListItem>();
@ -228,7 +259,7 @@ const TableList: React.FC = () => {
groupLink: formData.groupLink,
sendCount: formData.sendCount,
groupQrCode: formData.qrCode[0].xhr.responseURL,
price: formData.price,
price: calcPrice(formData.sendCount).price,
};
console.log('update confirm', formData, params);
try {
@ -266,29 +297,22 @@ const TableList: React.FC = () => {
}}
action={handleUpload}
/>
<ProFormDigit name="sendCount" label="可群发数量" min={1} fieldProps={{ precision: 0 }} />
<ProFormMoney
name="price"
label="价格"
min={0}
fieldProps={{
precision: 0,
formatter: value => {
if (!value) return '0';
return `${Math.floor(value / 100)}`;
},
parser: value => {
if (!value) return 0;
const numValue = parseInt(value.toString().replace(/[^\d]/g, ''));
return numValue * 100;
},
}}
transform={(value, namePath) => {
return {
[namePath]: value ? Math.round(Number(value)) : 0,
};
}}
<ProFormSelect
mode="single"
name="sendCount"
label="可群发数量"
options={GROUP_OPTIONS}
rules={[{ required: true, message: '必填项' }]}
/>
<ProFormDependency name={['sendCount']}>
{({ sendCount }) =>
sendCount ? (
<div>
{calcPrice(sendCount).price}{calcPrice(sendCount).originalPrice}
</div>
) : null
}
</ProFormDependency>
</ModalForm>
</PageContainer>
);