From 1844d2d125d27e99ab65312d9f65c13a255bb414 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: Wed, 15 Apr 2026 10:39:44 +0800
Subject: [PATCH 01/20] =?UTF-8?q?=E5=AE=A1=E7=A8=BF=E6=8A=A5=E5=91=8A?=
=?UTF-8?q?=E5=AD=97=E6=95=B0=E7=BB=9F=E8=AE=A1=20=E5=8A=A0=E5=85=A5?=
=?UTF-8?q?=E9=99=90=E5=88=B6=20=E6=8E=92=E9=99=A4=20=E7=A9=BA=E6=A0=BC?=
=?UTF-8?q?=E4=B9=8B=E7=B1=BB=E7=9A=84?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/api/index.js | 4 +-
src/common/js/commonJS.js | 33 +++++++++++-
.../page/components/reviewArticle/author.vue | 51 +++++++++----------
.../page/components/reviewArticle/index.vue | 50 +++++++++---------
4 files changed, 82 insertions(+), 56 deletions(-)
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/common/js/commonJS.js b/src/common/js/commonJS.js
index 60bb1ab..eae4459 100644
--- a/src/common/js/commonJS.js
+++ b/src/common/js/commonJS.js
@@ -1244,7 +1244,38 @@ str = str.replace(regex, function (match, content, offset, fullString) {
},
-
+ getCleanTextForCount(html) {
+ if (!html) return "";
+
+ // 创建临时容器解析 HTML
+ const tempDiv = document.createElement('div');
+ tempDiv.innerHTML = html;
+
+ // A. 特殊处理 wmath:只拿它里面的公式文本,扔掉里面生成的 mjx-container 等标签
+ const wmaths = tempDiv.querySelectorAll('wmath');
+ wmaths.forEach(wm => {
+ // textContent 会拿到最原始的公式字符,忽略内部所有标签
+ const textNode = document.createTextNode(wm.textContent);
+ wm.parentNode.replaceChild(textNode, wm);
+ });
+
+ // B. 获取现在的 HTML 内容
+ let result = tempDiv.innerHTML;
+
+ // C. 去掉特定排版标签的“壳”(保留里面的文字)
+ // 包含 b, strong, br, em, i, sup, sub 等
+ result = result.replace(/<(p|div|b|strong|br|em|i|sup|sub)[^>]*>/gi, "");
+ result = result.replace(/<\/(p|div|b|strong|br|em|i|sup|sub)>/gi, "");
+
+
+
+ // E. 彻底“脱水”:去掉 HTML 实体、换行符、所有空格
+ result = result.replace(/ /ig, "");
+ result = result.replace(/[\r\n\t]/g, "");
+ result = result.replace(/\s+/g, "");
+
+ return result;
+ },
diff --git a/src/components/page/components/reviewArticle/author.vue b/src/components/page/components/reviewArticle/author.vue
index c990abd..070732e 100644
--- a/src/components/page/components/reviewArticle/author.vue
+++ b/src/components/page/components/reviewArticle/author.vue
@@ -17,9 +17,6 @@
:form="baseQuestionform"
@update="(e) => (questionform = e)"
>
-
-
-
@@ -134,7 +131,6 @@ export default {
recommend: [{ required: true, message: 'please select', trigger: 'blur' }]
};
}
-
},
questionSubmit() {
if (this.questionform.is_anonymous == '' && this.questionform.is_anonymous != '0') {
@@ -161,30 +157,29 @@ export default {
}
let Char_Cter = null;
// 验证相加的字数
- if (this.isNewForm) {
- Char_Cter = [
- this.questionform.qu5contents,
- this.questionform.qu6contents,
- this.questionform.qu7contents,
- this.questionform.qu8contents,
- this.questionform.qu9contents,
- this.questionform.qu10contents,
- this.questionform.qu11contents,
- this.questionform.qu12contents,
- this.questionform.qu13contents,
- this.questionform.qu14contents,
- this.questionform.comment
- ].join(' ');
- } else {
- Char_Cter = [
- this.questionform.qu9contents,
- this.questionform.qu10contents,
- this.questionform.qu11contents,
- this.questionform.qu12contents,
- this.questionform.qu13contents,
- this.questionform.comment
- ].join(' ');
- }
+ const contents = this.isNewForm
+ ? [
+ this.questionform.qu5contents,
+ this.questionform.qu6contents,
+ this.questionform.qu7contents,
+ this.questionform.qu8contents,
+ this.questionform.qu9contents,
+ this.questionform.qu10contents,
+ this.questionform.qu11contents,
+ this.questionform.qu12contents,
+ this.questionform.qu13contents,
+ this.questionform.qu14contents,
+ this.questionform.comment
+ ]
+ : [
+ this.questionform.qu9contents,
+ this.questionform.qu10contents,
+ this.questionform.qu11contents,
+ this.questionform.qu12contents,
+ this.questionform.qu13contents,
+ this.questionform.comment
+ ];
+ Char_Cter = this.$commonJS.getCleanTextForCount(contents.join(' '));
if (new RegExp('[\\u4E00-\\u9FFF]+', 'g').test(Char_Cter)) {
//中文
diff --git a/src/components/page/components/reviewArticle/index.vue b/src/components/page/components/reviewArticle/index.vue
index 9d759b3..40c1a70 100644
--- a/src/components/page/components/reviewArticle/index.vue
+++ b/src/components/page/components/reviewArticle/index.vue
@@ -342,6 +342,7 @@ export default {
return content;
},
+
async questionSubmit() {
if (this.questionform.is_anonymous == '' && this.questionform.is_anonymous != '0') {
@@ -368,30 +369,29 @@ export default {
}
let Char_Cter = null;
// 验证相加的字数
- if (this.isNewForm) {
- Char_Cter = [
- this.questionform.qu5contents,
- this.questionform.qu6contents,
- this.questionform.qu7contents,
- this.questionform.qu8contents,
- this.questionform.qu9contents,
- this.questionform.qu10contents,
- this.questionform.qu11contents,
- this.questionform.qu12contents,
- this.questionform.qu13contents,
- this.questionform.qu14contents,
- this.questionform.comment
- ].join(' ');
- } else {
- Char_Cter = [
- this.questionform.qu9contents,
- this.questionform.qu10contents,
- this.questionform.qu11contents,
- this.questionform.qu12contents,
- this.questionform.qu13contents,
- this.questionform.comment
- ].join(' ');
- }
+ const contents = this.isNewForm ? [
+ this.questionform.qu5contents,
+ this.questionform.qu6contents,
+ this.questionform.qu7contents,
+ this.questionform.qu8contents,
+ this.questionform.qu9contents,
+ this.questionform.qu10contents,
+ this.questionform.qu11contents,
+ this.questionform.qu12contents,
+ this.questionform.qu13contents,
+ this.questionform.qu14contents,
+ this.questionform.comment
+] : [
+ this.questionform.qu9contents,
+ this.questionform.qu10contents,
+ this.questionform.qu11contents,
+ this.questionform.qu12contents,
+ this.questionform.qu13contents,
+ this.questionform.comment
+];
+Char_Cter = this.$commonJS.getCleanTextForCount(contents.join(' '));
+
+
if (new RegExp('[\\u4E00-\\u9FFF]+', 'g').test(Char_Cter)) {
//中文
@@ -447,7 +447,7 @@ if(this.questionform.confident != ''){
confidentStr = await this.abstractFormat(this.questionform.confident);
}
-
+return
this.$refs.question.validate((valid) => {
if (valid) {
From ec74b6e38c3b47210fc4ac3da58c16d025c5943f 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: Wed, 15 Apr 2026 10:47:09 +0800
Subject: [PATCH 02/20] =?UTF-8?q?=E5=AE=A1=E7=A8=BF=E6=8A=A5=E5=91=8A?=
=?UTF-8?q?=E9=AA=8C=E8=AF=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/components/page/components/reviewArticle/index.vue | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/components/page/components/reviewArticle/index.vue b/src/components/page/components/reviewArticle/index.vue
index 40c1a70..0cbbf96 100644
--- a/src/components/page/components/reviewArticle/index.vue
+++ b/src/components/page/components/reviewArticle/index.vue
@@ -447,7 +447,7 @@ if(this.questionform.confident != ''){
confidentStr = await this.abstractFormat(this.questionform.confident);
}
-return
+
this.$refs.question.validate((valid) => {
if (valid) {
From 64b1d20b3291c70a562b046d9124181375643db5 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: Wed, 15 Apr 2026 13:09:08 +0800
Subject: [PATCH 03/20] =?UTF-8?q?=E6=8E=92=E7=89=88=E6=8B=96=E6=8B=BD?=
=?UTF-8?q?=E6=98=BE=E7=A4=BA=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/components/page/GenerateCharts.vue | 14 +++++++++++---
1 file changed, 11 insertions(+), 3 deletions(-)
diff --git a/src/components/page/GenerateCharts.vue b/src/components/page/GenerateCharts.vue
index 653bb6e..4896df4 100644
--- a/src/components/page/GenerateCharts.vue
+++ b/src/components/page/GenerateCharts.vue
@@ -1679,13 +1679,13 @@ export default {
},
async onDrop(event, dataId) {
- const loading = this.$loading({
+ if (event.dataTransfer.getData('image')) {
+ const loading = this.$loading({
lock: true,
text: 'Loading...',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
});
- if (event.dataTransfer.getData('image')) {
const draggedImage = JSON.parse(event.dataTransfer.getData('image'));
const draggedImageIndex = JSON.parse(event.dataTransfer.getData('imageIndex'));
this.$nextTick(async () => {
@@ -1712,7 +1712,13 @@ export default {
this.$message.error(err.msg);
});
});
- } else {
+ } else if(event.dataTransfer.getData('table')) {
+ const loading = this.$loading({
+ lock: true,
+ text: 'Loading...',
+ spinner: 'el-icon-loading',
+ background: 'rgba(0, 0, 0, 0.7)'
+ });
const draggedtable = JSON.parse(event.dataTransfer.getData('table'));
this.$nextTick(async () => {
@@ -1739,6 +1745,8 @@ export default {
this.$message.error(err.msg);
});
});
+ }else{
+
}
},
getCommentList() {
From 1e2e8146cc6cece6c1af51b9abc8e06b154b536b 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: Thu, 16 Apr 2026 11:02:01 +0800
Subject: [PATCH 04/20] =?UTF-8?q?=E5=AE=A1=E7=A8=BF=E6=A0=A1=E9=AA=8C?=
=?UTF-8?q?=E7=A9=BA=E6=A0=BC?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/common/js/commonJS.js | 31 ++++++++++++-------------------
1 file changed, 12 insertions(+), 19 deletions(-)
diff --git a/src/common/js/commonJS.js b/src/common/js/commonJS.js
index eae4459..3f15913 100644
--- a/src/common/js/commonJS.js
+++ b/src/common/js/commonJS.js
@@ -1246,35 +1246,28 @@ str = str.replace(regex, function (match, content, offset, fullString) {
getCleanTextForCount(html) {
if (!html) return "";
-
- // 创建临时容器解析 HTML
const tempDiv = document.createElement('div');
tempDiv.innerHTML = html;
- // A. 特殊处理 wmath:只拿它里面的公式文本,扔掉里面生成的 mjx-container 等标签
+ // 1. 处理公式 (保留公式文本内容)
const wmaths = tempDiv.querySelectorAll('wmath');
wmaths.forEach(wm => {
- // textContent 会拿到最原始的公式字符,忽略内部所有标签
- const textNode = document.createTextNode(wm.textContent);
+ const textNode = document.createTextNode(" " + wm.textContent + " ");
wm.parentNode.replaceChild(textNode, wm);
});
- // B. 获取现在的 HTML 内容
- let result = tempDiv.innerHTML;
+ // 2. 移除所有引用标签 [1], [2] (防止用户靠狂刷引用来凑字数)
+ const refs = tempDiv.querySelectorAll('span.reference-link, a.ref'); // 根据你系统的 class 名调整
+ refs.forEach(r => r.remove());
- // C. 去掉特定排版标签的“壳”(保留里面的文字)
- // 包含 b, strong, br, em, i, sup, sub 等
- result = result.replace(/<(p|div|b|strong|br|em|i|sup|sub)[^>]*>/gi, "");
- result = result.replace(/<\/(p|div|b|strong|br|em|i|sup|sub)>/gi, "");
+ // 3. 获取纯文本 (textContent 是浏览器原生方法,能处理所有标签及其属性)
+ let text = tempDiv.textContent || tempDiv.innerText || "";
-
-
- // E. 彻底“脱水”:去掉 HTML 实体、换行符、所有空格
- result = result.replace(/ /ig, "");
- result = result.replace(/[\r\n\t]/g, "");
- result = result.replace(/\s+/g, "");
-
- return result;
+ // 4. 标准化空格:将 HTML 实体、换行、多个空格统一转为一个空格
+ return text.replace(/ /ig, " ")
+ .replace(/[\r\n\t]+/g, " ")
+ .replace(/\s+/g, " ")
+ .trim();
},
From 8fbcf39a251479fa7b9bdcc5390c7d5ddfe35d16 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: Fri, 17 Apr 2026 10:36:48 +0800
Subject: [PATCH 05/20] =?UTF-8?q?=E6=8F=90=E4=BA=A4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/api/index.js | 4 +-
src/components/common/Sidebar.vue | 153 +++++----
src/components/common/langs/en.js | 53 ++++
src/components/common/langs/zh.js | 53 ++++
src/components/page/countryManagement.vue | 362 ++++++++++++++++++++++
src/components/page/expertDatabase.vue | 70 ++++-
src/router/index.js | 11 +-
7 files changed, 614 insertions(+), 92 deletions(-)
create mode 100644 src/components/page/countryManagement.vue
diff --git a/src/api/index.js b/src/api/index.js
index 525753d..487fb66 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/common/Sidebar.vue b/src/components/common/Sidebar.vue
index 3e4417e..0d93f07 100644
--- a/src/components/common/Sidebar.vue
+++ b/src/components/common/Sidebar.vue
@@ -64,8 +64,8 @@
-
-
+
+
{{ $t('expertDatabase.fields.acquisitionTimeLabel') }} - {{ scope.row.ctime_text ? scope.row.ctime_text : '-' }} + {{ scope.row.ctime_text ? scope.row.ctime_text : $t('expertDatabase.emptyMark') }}
{{ scope.row.state_text }} - -+ {{ $t('expertDatabase.fields.nameLabel') }} + {{ fieldDetailExpert.name }} +
+{{ $t('expertDatabase.noFieldDetail') }}
+ +{{ $t('countryManagement.batchPartitionHelp') }}
+{{ $t('countryManagement.batchPartitionSelectionHint') }}
+ +{{ $t('countryManagement.batchPartitionHelp') }}
-{{ $t('countryManagement.batchPartitionSelectionHint') }}
- -{{ $t('countryManagement.batchPartitionHelp') }}
++ {{ $t('countryManagement.batchPartitionSelectionHint') }} +
+ ++ We have a WeChat group for academic discussions. Please feel free to scan the QR code below to join. +
++ Your application is currently under review. We appreciate your patience, and our team will notify you of the final decision via email as soon as possible. +
+ +Your registration has been submitted. We will contact you by email.
+