Migration Summary: ant-design-vue → antdv-next Core Changes package.json - Replaced "ant-design-vue": "catalog:" with "antdv-next": "catalog:" bootstrap.ts - Changed @vben/styles/antd to @vben/styles/antdv-next adapter/component/index.ts - Major rewrite: Removed dynamic defineAsyncComponent imports from ant-design-vue/es/... Added static imports from antdv-next main entry Renamed RangePicker → DateRangePicker, Textarea → TextArea Defined local types for Rule, Locale, UploadRequestOption, FileType, Key Bulk Import Replacements (100+ files) from ant-design-vue → from antdv-next from ant-design-vue/es/locale/... → from antdv-next/locale/... from ant-design-vue/es/... → removed (use main entry) from ant-design-vue/lib/... → removed (use main entry) Component API Differences Handled ant-design-vue antdv-next Files affected Form.Item FormItem 475 references Tabs.TabPane TabPane 240 references Select.Option SelectOption 151 references Descriptions.Item DescriptionsItem 2 references Timeline.Item TimelineItem 2 references Radio.Group RadioGroup 20 references Collapse.Panel CollapsePanel 9 references Layout.Content/Sider/Header/Footer LayoutContent/LayoutSider/... 14 references Dropdown#overlay slot Dropdown#popupRender 6 references RangePicker DateRangePicker 15+ references Textarea TextArea 37 references ButtonGroup Space (fallback) 12 references Known Issues (requires manual attention) List component - Not available in antdv-next. 4 files have TODO comments where List/List.Item/List.Item.Meta are used @form-create/ant-design-vue - Kept as-is (compatible with antdv-next at runtime) Type errors - ~366 type errors remain (vs 189 in web-antd), mostly pre-existing business logic issues and minor API differences
64 lines
1.3 KiB
TypeScript
64 lines
1.3 KiB
TypeScript
import { message } from 'antdv-next';
|
|
|
|
enum UploadType {
|
|
Image = 'image',
|
|
Video = 'video',
|
|
Voice = 'voice',
|
|
}
|
|
|
|
const useBeforeUpload = (type: UploadType, maxSizeMB: number) => {
|
|
const fn = (file: File): boolean => {
|
|
let allowTypes: string[] = [];
|
|
let name = '';
|
|
|
|
switch (type) {
|
|
case UploadType.Image: {
|
|
allowTypes = [
|
|
'image/jpeg',
|
|
'image/png',
|
|
'image/gif',
|
|
'image/bmp',
|
|
'image/jpg',
|
|
];
|
|
maxSizeMB = 2;
|
|
name = '图片';
|
|
break;
|
|
}
|
|
case UploadType.Video: {
|
|
allowTypes = ['video/mp4'];
|
|
maxSizeMB = 10;
|
|
name = '视频';
|
|
break;
|
|
}
|
|
case UploadType.Voice: {
|
|
allowTypes = [
|
|
'audio/mp3',
|
|
'audio/mpeg',
|
|
'audio/wma',
|
|
'audio/wav',
|
|
'audio/amr',
|
|
];
|
|
maxSizeMB = 2;
|
|
name = '语音';
|
|
break;
|
|
}
|
|
}
|
|
// 格式不正确
|
|
if (!allowTypes.includes(file.type)) {
|
|
message.error(`上传${name}格式不对!`);
|
|
return false;
|
|
}
|
|
// 大小不正确
|
|
if (file.size / 1024 / 1024 > maxSizeMB) {
|
|
message.error(`上传${name}大小不能超过${maxSizeMB}M!`);
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
};
|
|
|
|
return fn;
|
|
};
|
|
|
|
export { UploadType, useBeforeUpload };
|