From c0c820559b46f3a5ede6fbd7f66e77d09981829f Mon Sep 17 00:00:00 2001 From: Mr Ke <kelq@hugeinfo.com.cn> Date: Wed, 29 Apr 2020 11:56:31 +0800 Subject: [PATCH] 提升菜单栏体验,升级公共查询表单组件 --- src/components/page/DocumentEditPage/index.jsx | 256 ++++++++++++++++++++++++++++----------------------- 1 files changed, 140 insertions(+), 116 deletions(-) diff --git a/src/components/page/DocumentEditPage/index.jsx b/src/components/page/DocumentEditPage/index.jsx index ba3c510..4ec5c62 100644 --- a/src/components/page/DocumentEditPage/index.jsx +++ b/src/components/page/DocumentEditPage/index.jsx @@ -6,14 +6,16 @@ /** Happy Coding */ import React, { ReactNode, ReactEventHandler, Component } from 'react'; -// import { Link } from 'react-router-dom'; import { Card, Row, Col, Select, Button, Input, Upload, Icon, Spin, message } from 'antd'; -import './index.scss'; +import BraftEditor from 'braft-editor' const Option = Select.Option; const { TextArea } = Input; +import './index.scss'; +import 'braft-editor/dist/index.css' import fetch from '../../../api/request'; -import { BASE_URL } from '../../../api/httpurl' +import { BASE_URL } from '../../../api/httpurl'; +import { emoveTAG } from '../../../utils/utils'; const param = [{ value: 'DT00002', name: '通知公告' }, { value: 'DT00001', name: '规章制度' }] export default class DocumentEditPage extends Component { @@ -22,11 +24,13 @@ this.config = { }; this.state = { - loading: false, - iconLoading: false, - savedate: {}, - fileList: [], + loading: false,//页面加载loading + iconLoading: false,//提交按钮loading + saveData: {},//表单提交数据 + fileList: [],//附件列表 disabled: false, + editorContent: '',//富文本编辑内容 + editorState: BraftEditor.createEditorState(null) }; } @@ -38,8 +42,6 @@ loadData = () => { const { id } = this.props.match.params; - console.log(this.props) - console.log(id) let _this = this; _this.setState({ loading: true, @@ -51,40 +53,36 @@ id: id || 'new' } }).then(res => { - console.log(res) - _this.setState({ - savedate: { - ...res, - documentType: res.documentType || 'DT00002' - }, - loading: false, - }); + if (res) { + _this.setState({ + saveData: { + ...res, + documentType: res.documentType || 'DT00002' + }, + loading: false, + fileList: res.attachmentList && res.attachmentList.map((a) => ({ ...a, key: a.id, uid: a.id, name: a.fileName + '.' + a.suffix, })) || [] + }); + } }); } - saveInputChange = ({ target: { value, name } }) => { - this.setState(({ savedate }) => ({ - savedate: { - ...savedate, + this.setState(({ saveData }) => ({ + saveData: { + ...saveData, [name]: value } })) } submit = () => { - const { savedate } = this.state; - console.log(savedate) - if (savedate.documentType == 'DT00001') { - if (!savedate.documentTitle) { - return message.warning('规章制度标题不能为空') - } - } else { - if (!savedate.documentTitle) { - return message.warning('通知标题不能为空') - } else if (!savedate.documentContent) { - return message.warning('通知内容不能为空') - } + let { saveData, editorContent } = this.state; + // editorContent = emoveTAG(editorContent); + if (!saveData.documentTitle) { + return message.warning(this.switchWordByType(saveData.documentType).title + '标题不能为空'); + } + if (!emoveTAG(editorContent)) { + return message.warning('通知内容不能为空'); } let _this = this; _this.setState({ @@ -93,88 +91,99 @@ fetch({ url: 'api/document/saveOrUpdateNotice', method: 'POST', - data: savedate + data: { + ...saveData, + documentContent: editorContent + } }).then(res => { - console.log(res) _this.setState({ iconLoading: false, }); - message.success("提交成功!"); - this.props.history.goBack() + if (res) { + message.success("提交成功!"); + this.props.history.push(this.switchWordByType(saveData.documentType).href); + } }); - // Fetch.savePatrolCom(savedate) - // .then(res => { - // if (res.code === 0) { - // message.success("提交成功!"); - // this.props.history.push("/companyUpd") - // } else { - // message.error('保存失败,请联系管理员', 2) - // } - // }); } cancle = () => { - // this.props.history.push("/index/workbench"); const { id } = this.props.match.params; if (id) { this.props.history.goBack() } else { this.props.history.push("/index/workbench"); } - // console.log(this.props) + } + + // wen + switchWordByType = (type) => { + switch (type) { + case 'DT00002': + return { + title: '通知', + associateId: 1001, + href: '/index/workbench/announcement' + }; + case 'DT00001': + return { + title: '规章制度', + associateId: 1002, + href: '/index/rules' + } + } + } + + handleChange = (editorState) => { + console.log('htnl', editorState.toHTML()) + this.setState({ editorState, editorContent: editorState.toHTML() }) } render() { - const { savedate, fileList, loading, disabled } = this.state; + const { saveData, fileList, loading, disabled } = this.state; const props = { - action: BASE_URL + `api/attachment/materials?associateId=${savedate.documentType == 'DT00002' ? 1001 : 1002}&entityId=` + savedate.id, + action: BASE_URL + `api/attachment/materials?associateId=${saveData.documentType == 'DT00002' ? 1001 : 1002}&entityId=` + saveData.id, header: { Authorization: window.localStorage.getItem('token') }, onChange: ({ file, fileList }) => { - if (file.status !== 'uploading') { - console.log(file); - console.log(fileList); - - } + fileList = fileList.slice(-2); + fileList = fileList.map(file => { + if (file.response) { + // Component will show file.url as link + file.url = file.response.data[0].url; + } + return file; + }); this.setState({ fileList }); }, fileList: fileList, - // onDownload: (file) => { - // console.log(file) - // Fetch.attachmentDownload(file.uid) - // .then(res => { - // message.success("下载成功!"); - // }); - // }, - // onRemove: (file) => { - // Fetch.deleteAttachment(file.uid) - // .then(res => { - // message.success("移除成功!"); - // }); - // this.setState(({ fileList }) => { - // const index = fileList.indexOf(file); - // const newFileList = fileList.slice(); - // newFileList.splice(index, 1); - // return { - // fileList: newFileList, - // }; - // }); - // } + onPreview: (file) => { + window.open(file.url); + }, + showUploadList: { showPreviewIcon: true, showDownloadIcon: false, showRemoveIcon: disabled ? false : true } }; + + const controls = ['undo', 'redo', 'separator', + 'headings', 'separator', 'font-size', 'line-height', 'letter-spacing', 'separator', + 'text-color', 'bold', 'italic', 'underline', 'strike-through', 'separator', 'text-indent', 'text-align', 'separator', + 'list-ul', 'list-ol', 'blockquote', 'code', 'separator', + 'link', 'separator', 'hr', 'separator', + 'media', 'separator', 'remove-styles', + 'clear']; + return ( <div className="document-edit-page-main"> <Spin spinning={loading}> <Card style={{ border: 20, margin: 20, padding: 20 }}> <Row gutter={16}> - <Col className="gutter-row" > + <Col className="gutter-row marginTop" > 文档类型: </Col> </Row> <Row gutter={16}> - <Col className="gutter-row" style={{ margin: '12px 0' }} > - <Select disabled={disabled} style={{ width: "300px" }} onChange={(value) => this.saveInputChange({ target: { name: 'documentType', value } })} value={savedate.documentType}> + <Col className="gutter-row marginTB"> + <Select placeholder="请选择" disabled={disabled} style={{ width: "300px" }} onChange={(value) => this.saveInputChange({ target: { name: 'documentType', value } })} value={saveData.documentType}> { param.map((data, key) => ( <Option key={key} value={data.value}>{data.name}</Option> @@ -184,64 +193,79 @@ </Col> </Row> - { - savedate.documentType == 'DT00002' && - <Row gutter={16} style={{ marginTop: '12px' }}> - <Col className="gutter-row" style={{ marginTop: '12px' }}> - 通知标题: - </Col> - </Row> - } - { - savedate.documentType == 'DT00001' && - <Row gutter={16} style={{ marginTop: '12px' }}> - <Col className="gutter-row" style={{ marginTop: '12px' }}> - 规章制度标题: - </Col> - </Row> - } + <Row gutter={16} className="marginTop"> + <Col className="gutter-row marginTop"> + {saveData.documentType && this.switchWordByType(saveData.documentType).title}标题: + </Col> + </Row> + <Row gutter={16}> - <Col className="gutter-row" style={{ margin: '12px 0' }} > - <Input disabled={disabled} style={{ width: '300px' }} name='documentTitle' onChange={this.saveInputChange} value={savedate.documentTitle || ""} /> + <Col className="gutter-row marginTB"> + <Input placeholder="请输入" disabled={disabled} style={{ width: '300px' }} name='documentTitle' onChange={this.saveInputChange} value={saveData.documentTitle || ""} /> </Col> </Row> - { - savedate.documentType == 'DT00002' && + <Row gutter={16}> + <Col className="gutter-row marginTop"> + 通知内容: + </Col> + </Row> + {/* + <div ref="editorElem" className="marginTB"> + </div> */} + <BraftEditor value={this.state.editorState} onChange={this.handleChange} controls={controls} className="marginTB BraftEditor-style" /> + + <Row gutter={16}> + <Col className="gutter-row marginTop"> + 附件: + </Col> + </Row> + + <Row gutter={16} > + <Col className="gutter-row marginTB" > + <Upload {...props} > + <Button disabled={disabled} style={{ display: disabled ? 'none' : 'inline-block' }}> + <Icon type="upload" />上传文件</Button> + </Upload> + </Col> + </Row> + + {/* { + saveData.documentType == 'DT00002' && <Row gutter={16}> - <Col className="gutter-row" > + <Col className="gutter-row marginTop"> 通知内容: - </Col> - </Row> - } - { - savedate.documentType == 'DT00002' && - <Row gutter={16}> - <Col className="gutter-row" style={{ margin: '12px 0' }} > - <TextArea disabled={disabled} style={{ width: '500px' }} name='documentContent' onChange={this.saveInputChange} value={savedate.documentContent || ""} /> </Col> </Row> } { - savedate.documentType == 'DT00001' && + saveData.documentType == 'DT00002' && + <Row gutter={16}> + <Col className="gutter-row" style={{ margin: '12px 0' }} > + <TextArea disabled={disabled} style={{ width: '500px' }} name='documentContent' onChange={this.saveInputChange} value={saveData.documentContent || ""} /> + </Col> + </Row> + } + { + saveData.documentType == 'DT00001' && <Row gutter={16} style={{ marginTop: '12px' }}> <Col className="gutter-row" style={{ margin: '12px 0' }} > 规章制度源文件: </Col> </Row> } - {savedate.documentType == 'DT00001' && + {saveData.documentType == 'DT00001' && <Row gutter={16} > <Col className="gutter-row" > - <Upload {...props}> - <Button disabled={disabled}> + <Upload {...props} > + <Button disabled={disabled} style={{ display: disabled ? 'none' : 'inline-block' }}> <Icon type="upload" />上传文件</Button> </Upload> </Col> </Row> } { - savedate.documentType == 'DT00001' && + saveData.documentType == 'DT00001' && <Row gutter={16} style={{ marginTop: '12px' }}> <Col className="gutter-row" > 通知范围: @@ -249,20 +273,20 @@ </Row> } { - savedate.documentType == 'DT00002' && + saveData.documentType == 'DT00002' && <Row gutter={16} style={{ marginTop: '12px' }}> <Col className="gutter-row" style={{ margin: '12px 0' }} > 通知范围: </Col> </Row> } - {savedate.documentType == 'DT00002' && + {saveData.documentType == 'DT00002' && <Row gutter={16} > <Col className="gutter-row" > 目前仅支持全员通知 </Col> </Row> - } + } */} <Row type="flex" gutter={20} style={{ marginTop: '12px' }}> <Col className="gutter-row" ><Button onClick={this.cancle}>返回</Button></Col> <Col className="gutter-row" ><Button disabled={disabled} type="primary" loading={this.state.iconLoading} onClick={this.submit}>发布</Button></Col> -- Gitblit v1.8.0