From 637ce0fc9a6ba1b04c1ad37c5a1da07c14d96fce Mon Sep 17 00:00:00 2001 From: caicai8 <1149225589@qq.com> Date: Tue, 17 Mar 2020 17:23:47 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B7=A5=E5=8D=95=E9=83=A8=E5=88=86=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E7=9A=84=E9=83=BD=E6=94=B9=E6=88=90quill=E7=BC=96?= =?UTF-8?q?=E8=BE=91=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/AppConfig.js | 21 +- src/common/UrlTool.js | 12 +- src/forge/Order/Detail.js | 95 +++++++-- src/forge/Order/New.js | 55 ++++- src/forge/Order/UpdateDetail.js | 57 ++++-- src/forge/Order/order.css | 15 +- src/forge/css/index.css | 4 +- src/forge/quillForEditor/FillBlot.js | 35 ++++ src/forge/quillForEditor/ImageBlot.js | 70 +++++++ src/forge/quillForEditor/README.md | 95 +++++++++ src/forge/quillForEditor/deepEqual.js | 47 +++++ src/forge/quillForEditor/index.js | 280 ++++++++++++++++++++++++++ src/forge/quillForEditor/index.scss | 132 ++++++++++++ 13 files changed, 846 insertions(+), 72 deletions(-) create mode 100644 src/forge/quillForEditor/FillBlot.js create mode 100644 src/forge/quillForEditor/ImageBlot.js create mode 100644 src/forge/quillForEditor/README.md create mode 100644 src/forge/quillForEditor/deepEqual.js create mode 100644 src/forge/quillForEditor/index.js create mode 100644 src/forge/quillForEditor/index.scss diff --git a/src/AppConfig.js b/src/AppConfig.js index c9346918..fcc74368 100644 --- a/src/AppConfig.js +++ b/src/AppConfig.js @@ -126,21 +126,10 @@ export function initAxiosInterceptors(props) { // https://github.com/axios/axios/issues/1497 // TODO 读取到package.json中的配置? - var proxy = "http://localhost:3000" - // proxy = "http://testbdweb.trustie.net" - // proxy = "http://testbdweb.educoder.net" - // proxy = "https://testeduplus2.educoder.net" - //proxy="http://47.96.87.25:48080" - // proxy="https://pre-newweb.educoder.net" - // proxy="https://test-newweb.educoder.net" - // proxy="https://test-jupyterweb.educoder.net" - // proxy="https://test-newweb.educoder.net" - // proxy="https://test-jupyterweb.educoder.net" - //proxy="http://192.168.2.63:3001" - + var //proxy = "http://localhost:3000" - // proxy="http://123.59.135.93:56666" - proxy="http://localhost:3000" + proxy="http://123.59.135.93:56666" + // proxy="http://localhost:3000" // 在这里使用requestMap控制,避免用户通过双击等操作发出重复的请求; // 如果需要支持重复的请求,考虑config里面自定义一个allowRepeat参考来控制 @@ -236,7 +225,7 @@ export function initAxiosInterceptors(props) { // let timestamp=railsgettimes(proxy); // console.log(timestamp) // `https://api.m.taobao.com/rest/api3.do?api=mtop.common.getTimestamp` - railsgettimes( `${proxy}/api/main/first_stamp.json`); + // railsgettimes( `${proxy}/api/main/first_stamp.json`); let newopens=md5(opens+timestamp) config.url = `${proxy}${url}`; if (config.url.indexOf('?') == -1) { @@ -248,7 +237,7 @@ export function initAxiosInterceptors(props) { // 加api前缀 // railsgettimes(`http://api.m.taobao.com/rest/api3.do?api=mtop.common.getTimestamp`); - railsgettimes( `/api/main/first_stamp.json`); + // railsgettimes( `/api/main/first_stamp.json`); let newopens=md5(opens+timestamp) config.url = url; if (config.url.indexOf('?') == -1) { diff --git a/src/common/UrlTool.js b/src/common/UrlTool.js index 30afcf8a..c33fe4a7 100644 --- a/src/common/UrlTool.js +++ b/src/common/UrlTool.js @@ -106,31 +106,31 @@ export function getmyUrl(geturl) { } export function getUploadActionUrl(path, goTest) { - Railsgettimes() + // Railsgettimes() let anewopens=md5(newopens+newtimestamp); return `${getUrl()}/api/attachments.json${isDev ? `?debug=${window._debugType || 'admin'}&randomcode=${newtimestamp}&client_key=${anewopens}` : `?randomcode=${newtimestamp}&client_key=${anewopens}`}`; } export function getUploadActionUrltwo(id) { - Railsgettimes() + // Railsgettimes() let anewopens=md5(newopens+newtimestamp); return `${getUrlmys()}/api/shixuns/${id}/upload_data_sets.json${isDev ? `?debug=${window._debugType || 'admin'}&randomcode=${newtimestamp}&client_key=${anewopens}` : `?randomcode=${newtimestamp}&client_key=${anewopens}`}` } export function getUploadActionUrlthree() { - Railsgettimes() + // Railsgettimes() let anewopens=md5(newopens+newtimestamp); return `${getUrlmys()}/api/jupyters/import_with_tpm.json${isDev ? `?debug=${window._debugType || 'admin'}&randomcode=${newtimestamp}&client_key=${anewopens}` : `?randomcode=${newtimestamp}&client_key=${anewopens}`}` } export function getUploadActionUrlOfAuth(id) { - Railsgettimes() + // Railsgettimes() let anewopens=md5(newopens+newtimestamp); return `${getUrl()}/api/users/accounts/${id}/auth_attachment.json${isDev ? `?debug=${window._debugType || 'admin'}&randomcode=${newtimestamp}&client_key=${anewopens}` : `?randomcode=${newtimestamp}&client_key=${anewopens}`}` } export function getRandomNumber(type) { - Railsgettimes() + // Railsgettimes() let anewopens=md5(newopens+newtimestamp); return type===true?`randomcode=${newtimestamp}&client_key=${anewopens}`:`?randomcode=${newtimestamp}&client_key=${anewopens}` } @@ -149,7 +149,7 @@ export function getTaskUrlById(id) { } export function getRandomcode(url) { - Railsgettimes() + // Railsgettimes() let anewopens=md5(newopens+newtimestamp); if (url.indexOf('?') == -1) { diff --git a/src/forge/Order/Detail.js b/src/forge/Order/Detail.js index 5d13b9e6..a8431dd5 100644 --- a/src/forge/Order/Detail.js +++ b/src/forge/Order/Detail.js @@ -5,13 +5,20 @@ import axios from 'axios'; import Nav from './Nav'; import UploadComponent from '../Upload/Index'; import { getImageUrl } from 'educoder'; -import {Modal, Col, Form, Input, Tooltip, Popconfirm, Pagination , Spin} from 'antd' -import NoneData from '../../modules/courses/coursesPublic/NoneData'; -import Attachments from '../Upload/attachment' +import {Modal , Form, Input, Tooltip, Popconfirm, Pagination , Spin} from 'antd' +import Attachments from '../Upload/attachment'; +import QuillForEditor from '../quillForEditor'; +import { QuillDeltaToHtmlConverter } from 'quill-delta-to-html' const TextArea = Input.TextArea; - +const options = [ + ['bold', 'italic', 'underline'], + [{header: [1,2,3,false]}], + ['blockquote', 'code-block'], + ['link', 'image'], + ['formula'] +]; class Detail extends Component{ constructor(props){ @@ -32,7 +39,9 @@ class Detail extends Component{ page:1, search_count:undefined, isSpin:false, - showFiles: true + showFiles: true, + quillValue:'', + quillFlag:false } } @@ -74,12 +83,26 @@ class Detail extends Component{ //添加评论 addjournals=()=>{ + const { quillValue } = this.state; + if(!quillValue){ + this.setState({ + quillFlag:true + }) + return; + } + let _html = ''; + try { + _html = new QuillDeltaToHtmlConverter(quillValue.ops, {}).convert(); + } catch (error) { + console.log(error); + } this.props.form.validateFieldsAndScroll((err, values) => { if(!err){ const { data, page, limit, fileList } = this.state; const url = `/issues/${data.id}/journals.json`; axios.post(url,{ ...values, + content:_html, issue_id:data.id, attachment_ids:fileList }).then(result=>{ @@ -88,11 +111,12 @@ class Detail extends Component{ content: "" }); this.setState({ - showFiles: false + showFiles: false, + quillValue:'', + quillFlag:false }) this.getjournalslist(page, limit); this.props.showNotification("评论成功!"); - // this.UploadFunc(undefined) } }).catch(error=>{ console.log(error); @@ -215,7 +239,7 @@ class Detail extends Component{ } renderJournalList=(list)=>{ - console.log(list); + // console.log(list); if(list && list.length >0){ return( list.map((item,key)=>{ @@ -280,10 +304,18 @@ class Detail extends Component{ showFiles:flag }) } + onContentChange=(value)=>{ + if(value){ + this.setState({ + quillValue:value, + quillFlag:false + }) + } + } render(){ const { projectsId,orderId} = this.props.match.params; - const { data,journalsdata, page, limit, search_count, isSpin, isedit, showFiles } = this.state; + const { data,journalsdata, page, limit, search_count, isSpin, isedit, showFiles , quillValue , quillFlag } = this.state; const { getFieldDecorator } = this.props.form; const { current_user } = this.props; const Paginations = ( @@ -325,7 +357,10 @@ class Detail extends Component{
{ item.content ? -
{item.content}
+ :
{this.renderJournalList(item.journal_details)} @@ -370,6 +405,8 @@ class Detail extends Component{ } } + + return(
@@ -388,7 +425,7 @@ class Detail extends Component{ { data && data.subject }

-

+

{data&&data.issue_status==="关闭"?"关闭中":"开启中"} 由 { data && data.author_name} 于 { data && data.created_at }创建{ data && data.journals_count && data.journals_count > 0 ?` · ${data.journals_count} 条评论`:""} @@ -411,7 +448,10 @@ class Detail extends Component{

- { data && data.description } +
{ data && data.attachments && data.attachments.length > 0 ? @@ -435,15 +475,26 @@ class Detail extends Component{
- - {getFieldDecorator('content', { - rules: [{ - required: true, message: '请输入内容' - }], - })( -