提交 9174bbb9 authored 作者: 钟是志's avatar 钟是志

附件上传组件增加对图片大小的限制

上级 4b542b71
import React from "react"; import React from 'react';
import {Button, Icon, message, Modal, Upload} from "antd"; import { Button, Icon, message, Modal, Upload } from 'antd';
import {queryApiActionPath} from "../utils/queryConfig"; import { queryApiActionPath } from '../utils/queryConfig';
import config from "@/webPublic/one_stop_public/config"; import config from '@/webPublic/one_stop_public/config';
import styles from "./style.less"; import styles from './style.less';
import UploadComDiyForQnZy from "@/webPublic/one_stop_public/libs/UploadComDiyForQnZy"; import UploadComDiyForQnZy from '@/webPublic/one_stop_public/libs/UploadComDiyForQnZy';
export function checkIsImage(path) { export function checkIsImage(path) {
if (!path) { if (!path) {
return false; return false;
} }
let p = path.toLowerCase(); let p = path.toLowerCase();
let find = ['.jpg', '.png', '.jpeg', '.bmp', '.gif', '.bmp', '.svg'].find((x) => { let find = ['.jpg', '.png', '.jpeg', '.bmp', '.gif', '.bmp', '.svg'].find(x => {
return path.indexOf(x) > -1; return path.indexOf(x) > -1;
}); });
return !!find; return !!find;
} }
export default function index(props) { export default function index(props) {
if (window.location.href.indexOf("jy/geren/subsidy") > -1) { if (window.location.href.indexOf('jy/geren/subsidy') > -1) {
return (<UploadComDiyForQnZy {...props} />); return <UploadComDiyForQnZy {...props} />;
} else { } else {
return <UploadCom {...props} />; return <UploadCom {...props} />;
} }
...@@ -32,21 +31,20 @@ class UploadCom extends React.Component { ...@@ -32,21 +31,20 @@ class UploadCom extends React.Component {
this.state = { this.state = {
files: value.files, files: value.files,
previewVisible: false, previewVisible: false,
previewImage: "", previewImage: '',
}; };
this.otherProps = {};
console.log(props); console.log(props);
if (props.json?.otherProps) { if (props.json?.otherProps) {
this.otherProps = props.json?.otherProps; this.otherProps = props.json?.otherProps;
try { try {
this.otherProps = new Function(this.otherProps); this.otherProps = new Function(this.otherProps)();
console.log(this.otherProps); console.log(this.otherProps);
} catch (e) { } catch (e) {}
}
} }
} }
triggerChange = (changedValue) => { triggerChange = changedValue => {
// Should provide an event to pass value to Form. // Should provide an event to pass value to Form.
const onChange = this.props.onChange; const onChange = this.props.onChange;
if (onChange) { if (onChange) {
...@@ -54,28 +52,61 @@ class UploadCom extends React.Component { ...@@ -54,28 +52,61 @@ class UploadCom extends React.Component {
} }
}; };
//图片上传之前进行判断
beforeUpload = file => {
return this.isSize(file).then(res => {
message.info('正在上传中,请等待');
return true;
});
};
//检测尺寸
isSize = file => {
const { limitWarnningMessage } = this.otherProps;
return new Promise((resolve, reject) => {
let { width, height } = this.otherProps.limitImageSize;
let _URL = window.URL || window.webkitURL;
let img = new Image();
img.onload = function() {
let valid = img.width >= width && img.height >= height;
valid ? resolve() : reject();
};
img.src = _URL.createObjectURL(file);
}).then(
() => {
return file;
},
() => {
message.error(
file.name + limitWarnningMessage,
);
return Promise.reject();
},
);
};
componentWillReceiveProps(nextProps) { componentWillReceiveProps(nextProps) {
// Should be a controlled component. // Should be a controlled component.
if ("value" in nextProps) { if ('value' in nextProps) {
const value = nextProps.value; const value = nextProps.value;
this.setState(value); this.setState(value);
} }
} }
changeUrl = (info) => { changeUrl = info => {
if (info.file.status === "done") { if (info.file.status === 'done') {
message.success(`${info.file.name} 上传成功`); message.success(`${info.file.name} 上传成功`);
const files = this.state.files; const files = this.state.files;
files.push({path: info.file.response, name: info.file.name}); files.push({ path: info.file.response, name: info.file.name });
if (!("value" in this.props)) { if (!('value' in this.props)) {
this.setState({files}); this.setState({ files });
} }
this.triggerChange({files}); this.triggerChange({ files });
} else if (info.file.status === "error") { } else if (info.file.status === 'error') {
message.error(`${info.file.name} 上传失败`); message.error(`${info.file.name} 上传失败`);
} }
}; };
remove = (path) => { remove = path => {
const files = this.state.files; const files = this.state.files;
for (var i = 0; i < files.length; i++) { for (var i = 0; i < files.length; i++) {
if (files[i].path == path) { if (files[i].path == path) {
...@@ -83,42 +114,43 @@ class UploadCom extends React.Component { ...@@ -83,42 +114,43 @@ class UploadCom extends React.Component {
break; break;
} }
} }
if (!("value" in this.props)) { if (!('value' in this.props)) {
this.setState({files}); this.setState({ files });
} }
this.triggerChange({files}); this.triggerChange({ files });
}; };
render() { render() {
const {files, previewVisible, previewImage} = this.state; const { files, previewVisible, previewImage } = this.state;
const {isMultiple, accept, btnName, disabled} = this.props; const { isMultiple, accept, btnName, disabled } = this.props;
const props = { const props = {
name: "file", name: 'file',
multiple: isMultiple, multiple: isMultiple,
accept: accept, accept: accept,
action: config.uploadUrl, action: config.uploadUrl,
showUploadList: false, showUploadList: false,
onChange: this.changeUrl onChange: this.changeUrl,
beforeUpload: this.otherProps?.limitImageSize ? this.beforeUpload : undefined,
}; };
return ( return (
<div> <div>
{" "} {' '}
<Upload {...props} disabled={disabled}> <Upload {...props} disabled={disabled}>
{!disabled && ( {!disabled && (
<Button> <Button>
<Icon type="upload"/> <Icon type="upload" />
{btnName ? btnName : "上传附件"} {btnName ? btnName : '上传附件'}
</Button> </Button>
)} )}
</Upload> </Upload>
<ul style={{paddingLeft: 8, display: "flex"}}> <ul style={{ paddingLeft: 8, display: 'flex' }}>
{(files || []).map((f) => { {(files || []).map(f => {
if (f.path && checkIsImage(f.path)) { if (f.path && checkIsImage(f.path)) {
return ( return (
<li key={f.path} className={styles.preview_img}> <li key={f.path} className={styles.preview_img}>
<div className={styles.preview_div}> <div className={styles.preview_div}>
<img <img
style={{width: '100px', height: 'auto'}} style={{ width: '100px', height: 'auto' }}
className={styles.img} className={styles.img}
src={queryApiActionPath() + f.path} src={queryApiActionPath() + f.path}
/> />
...@@ -128,15 +160,16 @@ class UploadCom extends React.Component { ...@@ -128,15 +160,16 @@ class UploadCom extends React.Component {
// window.open(queryApiActionPath() + f.path); // window.open(queryApiActionPath() + f.path);
this.setState({ this.setState({
previewVisible: true, previewVisible: true,
previewImage: queryApiActionPath() + f.path previewImage: queryApiActionPath() + f.path,
}); });
}}> }}
<Icon type="eye" className={styles.icon_eye}/> >
<Icon type="eye" className={styles.icon_eye} />
</div> </div>
</div> </div>
{!disabled && ( {!disabled && (
<Icon <Icon
style={{marginLeft: 10}} style={{ marginLeft: 10 }}
type="delete" type="delete"
onClick={this.remove.bind(this, f.path)} onClick={this.remove.bind(this, f.path)}
/> />
...@@ -148,10 +181,10 @@ class UploadCom extends React.Component { ...@@ -148,10 +181,10 @@ class UploadCom extends React.Component {
<li key={f.path}> <li key={f.path}>
<a target="_blank" key={f.path} href={queryApiActionPath() + f.path}> <a target="_blank" key={f.path} href={queryApiActionPath() + f.path}>
{f.name} {f.name}
</a>{" "} </a>{' '}
{!disabled && ( {!disabled && (
<Icon <Icon
style={{marginLeft: 10}} style={{ marginLeft: 10 }}
type="delete" type="delete"
onClick={this.remove.bind(this, f.path)} onClick={this.remove.bind(this, f.path)}
/> />
...@@ -163,10 +196,10 @@ class UploadCom extends React.Component { ...@@ -163,10 +196,10 @@ class UploadCom extends React.Component {
<Modal <Modal
visible={previewVisible} visible={previewVisible}
footer={null} footer={null}
onCancel={() => this.setState({previewVisible: false})} onCancel={() => this.setState({ previewVisible: false })}
width={'90vw'} width={'90vw'}
> >
<img alt="example" style={{width: "100%", height: 'auto'}} src={previewImage}/> <img alt="example" style={{ width: '100%', height: 'auto' }} src={previewImage} />
</Modal> </Modal>
</div> </div>
); );
......
...@@ -102,7 +102,7 @@ export default class UploadComDiyForQnZy extends React.Component { ...@@ -102,7 +102,7 @@ export default class UploadComDiyForQnZy extends React.Component {
action: config.uploadUrl, action: config.uploadUrl,
showUploadList: false, showUploadList: false,
onChange: this.changeUrl, onChange: this.changeUrl,
beforeUpload: this.beforeUpload beforeUpload: this.beforeUpload,
}; };
return ( return (
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论