UNPKG

1.42 kBJavaScriptView Raw
1import React, { useState, Suspense } from "react";
2import styles from "./index.scss";
3import getSrcPrefix from "@script/getSrcPrefix";
4import Cropper from "./_cropper";
5
6/**
7 * @param {String} value - 图片回显路径
8 * @param {Function} onChange(base64) - 裁切完成回调, 参数中包含base64格式图片
9 * @param {String,Optional} name - 按钮文字,默认为"选择图片"
10 * @param {Number,Optional} width - 图片的宽度, 默认500
11 * @param {Object,Optional} cropper - cropper选项, 默认值 { aspectRatio: 16/9, viewMode:2, ...}
12 */
13export default function CropperBox(props) {
14 const { name, onChange, value, ...rest } = props;
15 const [file, setfile] = useState(null);
16
17 const onInputChange = e => {
18 const file = e.nativeEvent.target.files[0];
19 setfile(file);
20 };
21
22 return (
23 <div className={styles.container}>
24 <div className={styles.input}>
25 <label className={styles.label}>
26 {name || "选择图片"}
27 <input
28 type="file"
29 onChange={onInputChange}
30 style={{ display: "none" }}
31 />
32 </label>
33 </div>
34 <img
35 src={getSrcPrefix(value)}
36 className={styles.img}
37 width="100%"
38 style={{ maxWidth: props.width + "px" }}
39 />
40 <Suspense fallback={null}>
41 <Cropper file={file} onSubmit={onChange} width={500} {...rest} />
42 </Suspense>
43 </div>
44 );
45}