提交 f189c30a 作者: 翁进城

论坛发布动态开发,错误图片资源升级为全局

上级 0cc4a930
import { Form, Input, Modal } from "antd"; import { PlusOutlined } from "@ant-design/icons";
import { Form, Input, Modal, Upload } from "antd";
import type { RcFile, UploadProps } from "antd/es/upload";
import type { UploadFile } from "antd/es/upload/interface";
import { useState } from "react"; import { useState } from "react";
const getBase64 = (file: RcFile): Promise<string> =>
new Promise((resolve, reject) => {
const reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = () => resolve(reader.result as string);
reader.onerror = (error) => reject(error);
});
type Props = { type Props = {
open: boolean; open: boolean;
onOk: () =>{}, onOk?: () => void;
onCancel: () => {} onCancel?: () => void;
}; };
export default function publishMessage() { export default function publishMessage(props: Props) {
const [isModalOpen, setIsModalOpen] = useState(false);
const [confirmLoading, setConfirmLoading] = useState(false); const [confirmLoading, setConfirmLoading] = useState(false);
const showModal = () => {
setIsModalOpen(true);
};
const handleOk = () => { const handleOk = () => {
setConfirmLoading(true); setConfirmLoading(true);
setTimeout(() => { setTimeout(() => {
setIsModalOpen(false); handleCancel();
setConfirmLoading(false); setConfirmLoading(false);
}, 2000); }, 2000);
}; };
const handleCancel = () => { const handleCancel = () => {
setIsModalOpen(false); props.onCancel && props.onCancel();
}; };
const [previewOpen, setPreviewOpen] = useState(false);
const [previewImage, setPreviewImage] = useState("");
const [previewTitle, setPreviewTitle] = useState("");
const [fileList, setFileList] = useState<UploadFile[]>([
{
uid: "-1",
name: "image.png",
status: "done",
url: "https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png",
},
{
uid: "-2",
name: "image.png",
status: "done",
url: "https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png",
},
{
uid: "-3",
name: "image.png",
status: "done",
url: "https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png",
},
{
uid: "-4",
name: "image.png",
status: "done",
url: "https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png",
},
{
uid: "-xxx",
percent: 50,
name: "image.png",
status: "uploading",
url: "https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png",
},
{
uid: "-5",
name: "image.png",
status: "error",
},
]);
const handlePreviewCancel = () => setPreviewOpen(false);
const handlePreview = async (file: UploadFile) => {
if (!file.url && !file.preview) {
file.preview = await getBase64(file.originFileObj as RcFile);
}
setPreviewImage(file.url || (file.preview as string));
setPreviewOpen(true);
setPreviewTitle(
file.name || file.url!.substring(file.url!.lastIndexOf("/") + 1)
);
};
const handleChange: UploadProps["onChange"] = ({ fileList: newFileList }) =>
setFileList(newFileList);
const uploadButton = (
<div>
<PlusOutlined />
<div style={{ marginTop: 8 }}>Upload</div>
</div>
);
return ( return (
<Modal <Modal
title="" title=""
open={isModalOpen} open={props.open}
onOk={handleOk} onOk={handleOk}
onCancel={handleCancel} onCancel={handleCancel}
width={500} width={500}
...@@ -51,7 +123,25 @@ export default function publishMessage() { ...@@ -51,7 +123,25 @@ export default function publishMessage() {
style={{ height: 120, resize: "none" }} style={{ height: 120, resize: "none" }}
></Input.TextArea> ></Input.TextArea>
</Form.Item> </Form.Item>
<Form.Item></Form.Item> <Form.Item>
<Upload
action="https://www.mocky.io/v2/5cc8019d300000980a055e76"
listType="picture-card"
fileList={fileList}
onPreview={handlePreview}
onChange={handleChange}
>
{fileList.length >= 8 ? null : uploadButton}
</Upload>
<Modal
open={previewOpen}
title={previewTitle}
footer={null}
onCancel={handlePreviewCancel}
>
<img alt="example" style={{ width: "100%" }} src={previewImage} />
</Modal>
</Form.Item>
</Form> </Form>
</Modal> </Modal>
); );
......
import { Button, Image, Space, Input, Modal, Form } from "antd"; import { Button, Image, Space, Input, Modal, Form } from "antd";
import Layout from "~/components/layout"; import Layout from "~/components/layout";
import styles from "./index.module.scss"; import styles from "./index.module.scss";
import errImg from "./assets/errImg"; import errImg from "~/assets/errImg";
import { RightOutlined } from "@ant-design/icons"; import { RightOutlined } from "@ant-design/icons";
import { useState } from "react"; import { useState } from "react";
import PublishMessage from './components/publishMessage'
export default function forum() { export default function forum() {
const [isModalOpen, setIsModalOpen] = useState(false); const [isModalOpen, setIsModalOpen] = useState(false);
const showModal = () => { const showModal = () => {
setIsModalOpen(true); setIsModalOpen(true);
}; };
const onPublishCancel = () => {
setIsModalOpen(false);
};
return ( return (
<Layout> <Layout>
<div className={styles.forum}> <div className={styles.forum}>
...@@ -157,6 +162,10 @@ export default function forum() { ...@@ -157,6 +162,10 @@ export default function forum() {
</div> </div>
</Space> </Space>
</div> </div>
<PublishMessage
open={isModalOpen}
onCancel={onPublishCancel}
></PublishMessage>
</Layout> </Layout>
); );
} }
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论