Files
GDstarmotion-admin/src/pages/activity/activity/edit.tsx
PC-202306242200\Administrator 0744635890 1
2024-09-20 10:33:40 +08:00

148 lines
4.1 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import React, { useEffect, useState } from 'react';
import { contentcategoryPage } from '@/services/note/cate';
import {
ProForm,
ProFormDigit,
ProFormText,
ProFormDateTimePicker
} from '@ant-design/pro-components';
import { Form, Modal, InputNumber } from 'antd';
import { useIntl } from '@umijs/max';
import FilesManager from '@/components/FilesManage/index';
import { ContentUtils } from 'braft-utils'
// 引入编辑器组件
import BraftEditor from 'braft-editor'
// 引入编辑器样式
import 'braft-editor/dist/index.css'
const RoleForm: React.FC = (props: any) => {
const [editorState, setEditorState] = useState(BraftEditor.createEditorState(''))
const [form] = Form.useForm();
const { values } = props;
useEffect(() => {
setEditorState(BraftEditor.createEditorState(values.detail))
form.resetFields();
form.setFieldsValue(values);
}, [form, props]);
const intl = useIntl();
const handleOk = () => {
form.submit();
};
const handleCancel = () => {
props.onCancel();
};
const handleFinish = async (values: any) => {
values.detail = editorState.toHTML()
props.onSubmit(values);
};
const controls = [
'undo', 'redo', 'separator',
'font-size', 'line-height', 'letter-spacing', 'separator',
'text-color', 'bold', 'italic', 'underline', 'strike-through', 'separator',
'superscript', 'subscript', 'remove-styles', 'emoji', 'separator', 'text-indent', 'text-align', 'separator',
'headings', 'list-ul', 'list-ol', 'blockquote', 'code', 'separator',
'link', 'separator', 'hr', 'separator',
'clear'
]
const onChange = async (e) => {
const videoExtensions = ['.mp4', '.mkv', '.avi', '.mov', '.wmv', '.flv', '.webm', '.m4v', '.3gp', '.3g2'];
// 将URL转换为小写以便进行不区分大小写的比较
const lowerCaseUrl = e.toLowerCase();
// 检查链接是否以任何一个视频扩展名结尾
if (videoExtensions.some(e => lowerCaseUrl.endsWith(e))) {
setEditorState(ContentUtils.insertMedias(editorState, [{
type: 'VIDEO',
url: e
}]));
} else {
setEditorState(ContentUtils.insertMedias(editorState, [{ type: 'IMAGE', url: e, },]))
}
}
const extendControls = [
'separator',
{
key: 'FilesManagerImage', // 控件唯一标识,必传
title: '上传图片/视频', // 指定鼠标悬停提示文案
html: null, // 指定在按钮中渲染的html字符串
text: <FilesManager
fileType="images"
mode=""
imagesShow={false}
onChange={onChange}
count={1}
/>, // 指定按钮文字此处可传入jsx若已指定html则text不会显示
onClick: () => {
console.log('Hello World!');
},
}
]
return (
<Modal
width={800}
title={'公告管理'}
open={props.open}
forceRender
destroyOnClose
onOk={handleOk}
onCancel={handleCancel}
>
<ProForm
form={form}
submitter={false}
layout="horizontal"
onFinish={handleFinish}>
<ProFormDigit
name="id"
label={'ID'}
disabled
hidden={true}
/>
<ProForm.Group>
<ProFormText
name="title"
label={'标题'}
placeholder="请输入标题"
/>
</ProForm.Group>
<ProForm.Group>
<ProFormDateTimePicker
rules={[{ required: true, message: '请选择' }]}
name="startTime"
label="开始日期"
/>
<ProFormDateTimePicker
rules={[{ required: true, message: '请选择' }]}
name="endTime"
label="结束日期"
/>
</ProForm.Group>
<ProForm.Group>
<ProForm.Item
name="detail"
>
<div className="border-solid border-2 border-indigo-600">
<BraftEditor value={editorState} controls={controls} extendControls={extendControls} onChange={(val) => {
setEditorState(val)
}} />
</div>
</ProForm.Item>
</ProForm.Group>
</ProForm>
</Modal>
);
};
export default RoleForm;