From 68f52bed67e75d807e372f3a00b61ce7b2269a52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A7=8B=E4=BA=8E=E5=88=9D=E8=A7=81?= <752204717@qq.com> Date: Mon, 9 Mar 2026 16:50:59 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=A1=E7=A8=BF=E5=BD=95=E5=85=A5Latex?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/index.js | 4 +- src/components/page/Re_review.vue | 211 -------- src/components/page/articleEditorDetail.vue | 455 +---------------- src/components/page/articleList.vue | 66 ++- .../page/articleProcessRevision.vue | 77 ++- src/components/page/articleReviewerDetail.vue | 457 +----------------- .../page/components/EditorArticle/detail.vue | 176 ++++--- .../page/components/EditorArticle/index.vue | 90 +++- .../page/components/EditorArticle/new.vue | 4 +- .../Tinymce/AuthorCommentEditor.vue | 234 +++++++++ .../page/components/reviewArticle/index.vue | 181 ++++--- .../page/components/reviewArticle/new.vue | 4 +- .../page/components/reviewArticle/old.vue | 2 +- src/components/page/per_history_commen.vue | 218 +-------- src/main.js | 1 + 15 files changed, 699 insertions(+), 1481 deletions(-) create mode 100644 src/components/page/components/Tinymce/AuthorCommentEditor.vue diff --git a/src/api/index.js b/src/api/index.js index 487fb66..525753d 100644 --- a/src/api/index.js +++ b/src/api/index.js @@ -19,8 +19,8 @@ const service = axios.create({ // baseURL: 'https://submission.tmrjournals.com/', //正式 记得切换 // baseURL: 'http://www.tougao.com/', //测试本地 记得切换 // baseURL: 'http://192.168.110.110/tougao/public/index.php/', - baseURL: '/api', //本地 - // baseURL: '/', //正式 + // baseURL: '/api', //本地 + baseURL: '/', //正式 }); diff --git a/src/components/page/Re_review.vue b/src/components/page/Re_review.vue index 5fc796c..513b9f5 100644 --- a/src/components/page/Re_review.vue +++ b/src/components/page/Re_review.vue @@ -164,218 +164,7 @@ :articleId="articleId" :journal_id="journal_id" > - - - - - diff --git a/src/components/page/articleList.vue b/src/components/page/articleList.vue index b6f7d40..18f8cb9 100644 --- a/src/components/page/articleList.vue +++ b/src/components/page/articleList.vue @@ -420,7 +420,8 @@

Comments for the Authors -

{{item1.comments}}
+

+

@@ -474,7 +475,8 @@

Comments for the Authors -

{{item.suggest_for_author}}
+

+

@@ -537,6 +539,55 @@ this.getdate(); }, methods: { + formatToHtml(val) { + +if (!val) return ''; + + + +// 1. 创建临时的 textarea。目的是利用浏览器标准化的能力处理 \n + +const tempTextArea = document.createElement('textarea'); + +tempTextArea.value = val; + + + +// 此时 text 里的换行符已经被统一为 \n + +let text = tempTextArea.value; + + + +// 2. 处理换行:将 \n 转换为
+ +// 这样能确保你那 8 条审稿意见能正确分行 + +let processedText = text.replace(/\n/g, '
'); + + + + + + + + +return processedText; + +}, + getHtmlValue(val){ + + // const formula = 'a2+b2'; + + var str = `${val}`; + + setTimeout(() => { + if (window.renderMathJax) window.renderMathJax(); + }, 500); + return str ? this.formatToHtml(str) : ''; + + + }, //初始化期刊选项 initselect() { this.$api @@ -1174,4 +1225,15 @@ this.$router.push({ /deep/.research_area .el-collapse-item__content{ padding-bottom: 0 !important; } + ::v-deep wmath { + display: block !important; + width: 100% !important; + + +} +::v-deep wmath[data-wrap="inline"] { + display: inline-block !important; + width: auto !important; + +} \ No newline at end of file diff --git a/src/components/page/articleProcessRevision.vue b/src/components/page/articleProcessRevision.vue index 266bd2d..811e363 100644 --- a/src/components/page/articleProcessRevision.vue +++ b/src/components/page/articleProcessRevision.vue @@ -72,7 +72,9 @@

Comments for the Authors -

{{item1.comments}}
+ +

+

@@ -127,7 +129,8 @@

Comments for the Authors -

{{item.suggest_for_author}}
+

+

@@ -525,7 +528,7 @@ export default { data() { return { - questionform:{}, + questionform:{}, dialogFormVisible:false, baseUrl: this.Common.baseUrl, mediaUrl: this.Common.mediaUrl, @@ -599,7 +602,56 @@ return this.baseUrl + 'api/Article/up_response_file'; }, }, - methods: { + methods: { + formatToHtml(val) { + +if (!val) return ''; + + + +// 1. 创建临时的 textarea。目的是利用浏览器标准化的能力处理 \n + +const tempTextArea = document.createElement('textarea'); + +tempTextArea.value = val; + + + +// 此时 text 里的换行符已经被统一为 \n + +let text = tempTextArea.value; + + + +// 2. 处理换行:将 \n 转换为
+ +// 这样能确保你那 8 条审稿意见能正确分行 + +let processedText = text.replace(/\n/g, '
'); + + + + + + + + +return processedText; + +}, + getHtmlValue(val){ + + // const formula = 'a2+b2'; + + var str = `${val}`; + + setTimeout(() => { + if (window.renderMathJax) window.renderMathJax(); + }, 500); + return str ? this.formatToHtml(str) : ''; + + + }, showDetail(data){ this.questionform = data; @@ -678,7 +730,11 @@ if(item.question && item.question.length > 0) item.question = item.question.reverse() }) - +if(this.comentDeploy.length){ + setTimeout(() => { + if (window.renderMathJax) window.renderMathJax(); + }, 500); +} // 审稿人意见 this.comentFinal = res.suggest_final @@ -1284,4 +1340,15 @@ that.wordTables=wordTables letter-spacing: -0.5px; } .commentfs{} + ::v-deep wmath { + display: block !important; + width: 100% !important; + + +} +::v-deep wmath[data-wrap="inline"] { + display: inline-block !important; + width: auto !important; + +} diff --git a/src/components/page/articleReviewerDetail.vue b/src/components/page/articleReviewerDetail.vue index ae89c8b..d6c0cb0 100644 --- a/src/components/page/articleReviewerDetail.vue +++ b/src/components/page/articleReviewerDetail.vue @@ -408,7 +408,7 @@ - +
- - diff --git a/src/components/page/components/EditorArticle/detail.vue b/src/components/page/components/EditorArticle/detail.vue index 20d6a2a..ac7e20a 100644 --- a/src/components/page/components/EditorArticle/detail.vue +++ b/src/components/page/components/EditorArticle/detail.vue @@ -1,68 +1,54 @@ + \ No newline at end of file diff --git a/src/components/page/components/reviewArticle/index.vue b/src/components/page/components/reviewArticle/index.vue index 7409be9..9d759b3 100644 --- a/src/components/page/components/reviewArticle/index.vue +++ b/src/components/page/components/reviewArticle/index.vue @@ -100,63 +100,48 @@ - - + + + + + + + + + + - + id="tiny-confident" + :loading="JSON.stringify(questionform) == '{}'" + :value="editorContentMap.confident" + @input="getAuthorCommentEditorContent" + /> @@ -194,6 +179,7 @@ export default { oldForm, newForm }, + props: { // isEdit: { // type: Boolean, @@ -217,7 +203,7 @@ export default { default: true }, articleId: { - type: Number, + type: Number||String, default: 0 }, journal_id: { @@ -240,7 +226,15 @@ export default { watch: { form: { handler(e) { + + this.baseQuestionform = {}; + this. editorContentMap={ + comment:'', + comments:'', + confident:'', + } this.baseQuestionform = JSON.parse(JSON.stringify(e)); // 深拷贝,防止直接改 props + this.getData(); }, immediate: true, deep: true @@ -259,17 +253,34 @@ export default { loading: false, isEdit: true, baseQuestionform: {}, - questionform: {}, - rules: {} + questionform: null, + rules: {}, + editorContentMap: { + comment:'', + comments:'', + confident:'', + } }; }, created() { this.getData(); }, methods: { + getAuthorCommentEditorContent(key, val) { + this.$set(this.questionform, key, val); + + // 2. 更新本地缓存,但不触发子组件重新加载 props + this.editorContentMap[key] = val; +}, getData() { + // Fetch article data + this.questionform = null; this.questionform = { ...this.baseQuestionform }; + this.editorContentMap.comment = this.questionform.comment || ''; + this.editorContentMap.comments = this.questionform.comments || ''; + this.editorContentMap.confident = this.questionform.confident || ''; + if (this.baseQuestionform.type != 1) { this.isNewForm = true; this.rules = { @@ -296,9 +307,43 @@ export default { recommend: [{ required: true, message: 'please select', trigger: 'blur' }] }; } - }, - questionSubmit() { + async abstractFormat(content) { + content = this.$commonJS.transformHtmlString(content, 'content', { keepBr: true }); + var div = document.createElement('div'); + div.innerHTML = content; + var imgTags = div.getElementsByTagName('img'); + for (var i = imgTags.length - 1; i >= 0; i--) { + imgTags[i].parentNode.removeChild(imgTags[i]); + } + var tableTags = div.getElementsByTagName('table'); + for (var i = tableTags.length - 1; i >= 0; i--) { + tableTags[i].parentNode.removeChild(tableTags[i]); + } + var strongTags = div.getElementsByTagName('strong'); + for (var i = 0; i < strongTags.length; i++) { + var bTag = document.createElement('b'); + bTag.innerHTML = strongTags[i].innerHTML; + strongTags[i].parentNode.replaceChild(bTag, strongTags[i]); + } + var emTags = div.getElementsByTagName('em'); + for (var i = 0; i < emTags.length; i++) { + var iTag = document.createElement('i'); + iTag.innerHTML = emTags[i].innerHTML; + emTags[i].parentNode.replaceChild(iTag, emTags[i]); + } + // 处理 p 标签 + 解码 + content = div.innerHTML; + + content = content.replace(/^

\s*(.*?)\s*<\/p>$/, '$1').trim(); + + content = await this.$commonJS.decodeHtml(content); + content = content.replace(/ |\u00A0/g, ' '); + + return content; + }, + async questionSubmit() { + if (this.questionform.is_anonymous == '' && this.questionform.is_anonymous != '0') { this.$message.error('Please choose disclose your name or remain anonymous.'); @@ -388,6 +433,21 @@ export default { } // 提交接口 // this.loading = true; + var commentStr=''; + var commentsStr=''; + var confidentStr=''; + + if (this.questionform.comment&&this.questionform.comment != '') { + commentStr = await this.abstractFormat(this.questionform.comment); + } +if(this.questionform.comments&&this.questionform.comments != ''){ + commentsStr = await this.abstractFormat(this.questionform.comments); +} +if(this.questionform.confident != ''){ + confidentStr = await this.abstractFormat(this.questionform.confident); +} + + this.$refs.question.validate((valid) => { if (valid) { @@ -400,6 +460,9 @@ export default { this.$api .post(this.isNewForm ? 'api/Reviewer/questionSubmitNew' : 'api/Reviewer/questionSubmit', { ...this.questionform, + comment: commentStr, + comments: commentsStr, + confident: confidentStr, type: this.isNewForm ? (this.txt_mess.atype == 'REVIEW' || this.txt_mess.atype == 'MINI REVIEW' ? 3 : 2) : 1 }) .then((res) => { diff --git a/src/components/page/components/reviewArticle/new.vue b/src/components/page/components/reviewArticle/new.vue index d1f90cf..871eeb4 100644 --- a/src/components/page/components/reviewArticle/new.vue +++ b/src/components/page/components/reviewArticle/new.vue @@ -92,7 +92,7 @@ export default { this.$nextTick(() => { this.questionform = JSON.parse(JSON.stringify(e)); // 深拷贝,防止直接改 props if (this.questionform.qu5 !== '') { - console.log('this.questionform.qu5 at line 114:', this.questionform.qu5); + if (this.questionform.qu5 == 0) { this.questionform.qu5 = false; } else { @@ -135,7 +135,7 @@ export default { }, questionform: { handler(newVal) { - console.log('newVal at line 93:', newVal); + // 变化时通知父组件 this.$emit('update', newVal); // 或自定义事件:this.$emit('formChanged', newVal) }, diff --git a/src/components/page/components/reviewArticle/old.vue b/src/components/page/components/reviewArticle/old.vue index 0d4217f..0f606c7 100644 --- a/src/components/page/components/reviewArticle/old.vue +++ b/src/components/page/components/reviewArticle/old.vue @@ -97,7 +97,7 @@ export default { }, questionform: { handler(newVal) { - console.log('newVal at line 93:', newVal); + // 变化时通知父组件 this.$emit('update', newVal); // 或自定义事件:this.$emit('formChanged', newVal) }, diff --git a/src/components/page/per_history_commen.vue b/src/components/page/per_history_commen.vue index 3cad526..9b42524 100644 --- a/src/components/page/per_history_commen.vue +++ b/src/components/page/per_history_commen.vue @@ -79,230 +79,16 @@ - - diff --git a/src/main.js b/src/main.js index 3496fd3..9bbe1be 100644 --- a/src/main.js +++ b/src/main.js @@ -184,6 +184,7 @@ Vue.component("Editor", Editor); //自定义组件 const components = { 'common-table': () => import('@/components/page/components/table/table.vue'), + 'common-author-comment-editor': () => import('@/components/page/components/Tinymce/AuthorCommentEditor.vue'), 'common-review-article': () => import('@/components/page/components/reviewArticle/index.vue'), 'common-author-article': () => import('@/components/page/components/reviewArticle/author.vue'), 'common-editor-article': () => import('@/components/page/components/EditorArticle/index.vue'),