From a2497a8885dc01b65b0ce6bb2fb77ddbd4b5c8ca 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, 13 Feb 2026 11:44:31 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81English=20name=E8=BF=99=E5=9D=97?= =?UTF-8?q?=EF=BC=8C=E9=99=A4=E4=BA=86=E4=B8=AD=E6=96=87=EF=BC=8C=E6=95=B0?= =?UTF-8?q?=E5=AD=97=E4=B8=8D=E8=83=BD=E7=94=A8=EF=BC=8C=E5=85=B6=E4=BB=96?= =?UTF-8?q?=E9=83=BD=E5=8F=AF=E4=BB=A5=202=E3=80=81blue=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 | 32 ++++++++++++---- src/components/common/common.vue | 10 ++--- src/components/page/GenerateCharts.vue | 4 +- .../page/articleListEditor_A copy.vue | 8 ++-- src/components/page/articleListEditor_A.vue | 5 +-- .../page/components/Tinymce/index.vue | 38 +++++-------------- .../page/components/reviewerList/add.vue | 4 +- .../page/components/table/table.vue | 7 +--- src/components/page/partyList.vue | 4 +- src/components/page/partyRole.vue | 21 +++++----- src/main.js | 7 +++- 11 files changed, 68 insertions(+), 72 deletions(-) diff --git a/src/common/js/commonJS.js b/src/common/js/commonJS.js index 59bbe61..6192f53 100644 --- a/src/common/js/commonJS.js +++ b/src/common/js/commonJS.js @@ -219,9 +219,15 @@ export default { } // 获取单元格的 HTML 内容 let htmlContent = cell.trim(); + // 在第 21 行之后添加 + let processedContent = htmlContent.replace(/(<\/p>)\s*(?='); - str = this.transformHtmlString(htmlContent, 'table') + + + str = this.transformHtmlString(processedContent, 'table',{ keepBr: true }) + console.log("🚀 ~ extractContentWithoutOuterSpan888888 ~ str:", str); + // 创建一个临时的 DOM 元素来解析 HTML const div = document.createElement('div'); @@ -971,10 +977,14 @@ str = str.replace(regex, function (match, content, offset, fullString) { async parseTableToArray(tableString, callback) { + + const parser = new DOMParser(); const doc = parser.parseFromString(tableString, 'text/html'); const rows = doc.querySelectorAll('table tr'); // 获取所有的行() + + // 使用 Promise 来处理异步的 MathJax 解析 const result = await Promise.all( @@ -982,6 +992,8 @@ str = str.replace(regex, function (match, content, offset, fullString) { const cells = row.querySelectorAll('th, td'); // 获取每个行中的单元格(包括 和 ) return await Promise.all( Array.from(cells).map(async (cell) => { + console.log("🚀 ~ parseTableToArray777 ~ cell:", cell); + const text = await this.extractMathJaxLatex(cell); return { text, @@ -2125,14 +2137,18 @@ str = str.replace(regex, function (match, content, offset, fullString) { text: 'Blue', className: 'custom-button-blue', onAction: function () { - // 必须获取带 HTML 的内容,否则里面的 em/i 标签在拼接前就丢了 + // 获取选中的 HTML var selectedText = ed.selection.getContent({ format: 'html' }); - - if (selectedText) { - // 这就是你想要的:直接外层套一个 blue - var wrappedText = `${selectedText}`; - - // 使用 setContent 强行回写 + + if (selectedText && selectedText.trim().length > 0) { + + var processedText = selectedText.replace(/ /g, ' '); + + + + var wrappedText = `${processedText}`; + + // 使用 setContent 插入 ed.selection.setContent(wrappedText); } } diff --git a/src/components/common/common.vue b/src/components/common/common.vue index a1781ec..9bac70a 100644 --- a/src/components/common/common.vue +++ b/src/components/common/common.vue @@ -2,14 +2,14 @@ //记得切换 //正式 -// const mediaUrl = '/public/'; -// const baseUrl = '/'; +const mediaUrl = '/public/'; +const baseUrl = '/'; //正式环境 -const mediaUrl = 'https://submission.tmrjournals.com/public/'; -// const mediaUrl = 'http://zmzm.tougao.dev.com/public/'; -const baseUrl = '/api' +// const mediaUrl = 'https://submission.tmrjournals.com/public/'; +// // const mediaUrl = 'http://zmzm.tougao.dev.com/public/'; +// const baseUrl = '/api' //测试环境 diff --git a/src/components/page/GenerateCharts.vue b/src/components/page/GenerateCharts.vue index b08fb99..653bb6e 100644 --- a/src/components/page/GenerateCharts.vue +++ b/src/components/page/GenerateCharts.vue @@ -1974,6 +1974,7 @@ export default { }); }, async saveTable(content) { + const cleanTableData = (tableList) => { if (tableList.length == 0) { return []; @@ -1981,7 +1982,8 @@ export default { // 定义清理函数:去掉所有 br 标签和 TinyMCE 占位符 const cleanText = (text) => { if (!text) return ""; - return text.replace(//gi, '').trim(); + // return text.replace(//gi, '').trim(); + return text }; // 1. 获取处理后的干净表头 diff --git a/src/components/page/articleListEditor_A copy.vue b/src/components/page/articleListEditor_A copy.vue index bfa31df..df4e793 100644 --- a/src/components/page/articleListEditor_A copy.vue +++ b/src/components/page/articleListEditor_A copy.vue @@ -3135,12 +3135,10 @@ export default { } else { var date1 = new Date(parseInt(date * 1000)); var date2 = new Date().getTime(); - console.log('date2 at line 1564:', date2); - + // 计算时间差(以毫秒为单位) var timeDiff = Number(date2 - date1); - console.log('timeDiff at line 1569:', timeDiff); - + // 将半年转换为毫秒 var halfYearInMilliseconds = 1000 * 60 * 60 * 24 * 182.5; // 假设一年有 365 天 @@ -3152,7 +3150,7 @@ export default { } return status; - console.log('status at line 1578:', status); + }, changeSelectTabs(e) { console.log('e at line 1536:', e); diff --git a/src/components/page/articleListEditor_A.vue b/src/components/page/articleListEditor_A.vue index fcc7670..0e46db7 100644 --- a/src/components/page/articleListEditor_A.vue +++ b/src/components/page/articleListEditor_A.vue @@ -2209,11 +2209,10 @@ export default { } else { var date1 = new Date(parseInt(date * 1000)); var date2 = new Date().getTime(); - console.log('date2 at line 1564:', date2); - + // 计算时间差(以毫秒为单位) var timeDiff = Number(date2 - date1); - console.log('timeDiff at line 1569:', timeDiff); + // 将半年转换为毫秒 var halfYearInMilliseconds = 1000 * 60 * 60 * 24 * 182.5; // 假设一年有 365 天 diff --git a/src/components/page/components/Tinymce/index.vue b/src/components/page/components/Tinymce/index.vue index c3e922b..3e5a49c 100644 --- a/src/components/page/components/Tinymce/index.vue +++ b/src/components/page/components/Tinymce/index.vue @@ -473,18 +473,16 @@ export default { const cells = doc.querySelectorAll('td, th'); cells.forEach((cell) => { - // 1. 先把单元格内的非法 < 转义 + let cellText = cell.innerHTML; - // let cellText = escapeIllegalLT(cell.innerHTML); - // 2. 再清理空标签和多余空格 + cell.innerHTML = cellText .replace(cleanEmptyTags, '') .replace(replaceSpaces, ' '); }); processedHtml = doc.body.innerHTML; } else { - // 非表格逻辑也同样处理转义 - // processedHtml = escapeIllegalLT(rawValue) + processedHtml = rawValue .replace(cleanEmptyTags, '') .replace(replaceSpaces, ' '); @@ -817,13 +815,7 @@ export default { if (tempDiv.querySelector('table')) { if (_this.type == 'table') { - // 3. 在这里直接消费外部变量 currentPasteBase64Images - // content = content.replace(new RegExp(`src="${silentPlaceholder}"`, 'gi'), () => { - // // 按顺序取图 - // const base64Data = currentPasteBase64Images[globalImgCounter] || ''; - // globalImgCounter++; - // return `src="${base64Data}"`; - // }); + _this.$commonJS.parseTableToArray(content, (tableList) => { var contentHtml = `
@@ -835,10 +827,10 @@ export default { ${row .map((cell) => { return ` - - ${cell.text || ''} - - `; + + ${cell.text || ''} + + `; }) .join('')} @@ -851,21 +843,9 @@ export default { const container = document.createElement('div'); container.innerHTML = contentHtml; - - // _this.updateTableStyles(container); // 根据需要应用额外的样式 args.content = container.innerHTML; // 更新处理后的内容 }); - } else { - // _this.$confirm('检测到粘贴内容包含表格,是否需要以表格形式添加?', '提示', { - // confirmButtonText: '添加表格', - // cancelButtonText: '纯文本添加', - // type: 'info' - // }).then(() => { - // _this.$emit('openAddTable', content); - // return false - // }).catch(() => { - // }); - } + } } else { const mathRegex = /\$\$([\s\S]+?)\$\$|\$([\s\S]+?)\$/g; content = content.replace(mathRegex, function (match, blockFormula, inlineFormula) { diff --git a/src/components/page/components/reviewerList/add.vue b/src/components/page/components/reviewerList/add.vue index eefe224..0be2678 100644 --- a/src/components/page/components/reviewerList/add.vue +++ b/src/components/page/components/reviewerList/add.vue @@ -989,9 +989,9 @@ export default { } if (this.$validateString(data.realname)) { - console.log('Input string is valid.'); + } else { - console.log('Input string is invalid.'); + this.$message.error(this.$t('info.realname')); return false; } diff --git a/src/components/page/components/table/table.vue b/src/components/page/components/table/table.vue index b05d2a5..e63df4c 100644 --- a/src/components/page/components/table/table.vue +++ b/src/components/page/components/table/table.vue @@ -70,14 +70,11 @@ export default { this.tableData.forEach((row, i) => { modalContent += ``; row.forEach((cell) => { - modalContent += ` - - ${cell.text} - `; + >${cell.text}`; }); modalContent += ``; }); diff --git a/src/components/page/partyList.vue b/src/components/page/partyList.vue index 4b90e01..512ce8f 100644 --- a/src/components/page/partyList.vue +++ b/src/components/page/partyList.vue @@ -394,9 +394,9 @@ if (this.$validateString(this.addForm.realname)) { - console.log('Input string is valid.'); + } else { - console.log('Input string is invalid.'); + this.$message.error(this.$t('info.realname')) return false } diff --git a/src/components/page/partyRole.vue b/src/components/page/partyRole.vue index ad7a572..c4efc90 100644 --- a/src/components/page/partyRole.vue +++ b/src/components/page/partyRole.vue @@ -1608,7 +1608,7 @@ export default { this.userMessage.majorStr = res.data.baseInfo.majorStr; this.cvitaForm.user_id = res.data.baseInfo.user_id; this.userMessage.website = res.data.baseInfo.website; - console.log('res.data.baseInfo.majors.map at line 16124:', res.data.baseInfo.majors) + this.userMessage.majors=res.data.baseInfo.majors this.majorValueList = res.data.baseInfo.majors.map((item) => ({ @@ -1617,7 +1617,7 @@ export default { : typeof item.shu === 'string' ? item.shu.split(',').map(Number) : [item.shu] - }));console.log('this.majorValueList at line 1612:', this.majorValueList) + })); this.$forceUpdate() this.coreTable = res.data.baseInfo; this.cvitaTable = res.data.cvs; @@ -1746,9 +1746,9 @@ export default { // 保存个人信息 saveMessage() { if (this.$validateString(this.MessForm.realname)) { - console.log('Input string is valid.'); + } else { - console.log('Input string is invalid.'); + this.$message.error(this.$t('info.realname')); return false; } @@ -1818,13 +1818,13 @@ export default { }, isEditIndex(data) { - console.log('data at line 1543:', this.userMessage); + var status; var date = ''; switch (data) { case 'wos': date = this.userMessage.wos_time; - console.log('date at line 1714:', date); + break; case 'scopus': date = this.userMessage.scopus_time; @@ -1833,17 +1833,16 @@ export default { date = this.userMessage.google_time; break; } - console.log('date at line 1714:', date); + if (date == 0) { status = true; } else { var date1 = new Date(parseInt(date * 1000)); var date2 = new Date().getTime(); - console.log('date2 at line 1564:', date2); - + // 计算时间差(以毫秒为单位) var timeDiff = Number(date2 - date1); - console.log('timeDiff at line 1569:', timeDiff); + // 将半年转换为毫秒 var halfYearInMilliseconds = 1000 * 60 * 60 * 24 * 182.5; // 假设一年有 365 天 @@ -1854,7 +1853,7 @@ export default { status = true; } } - console.log('status at line 1578:', status); + return status; }, // 个人指数修改 diff --git a/src/main.js b/src/main.js index dd9b205..3496fd3 100644 --- a/src/main.js +++ b/src/main.js @@ -18,8 +18,13 @@ import store from './store' // 引入 store Vue.prototype.$bus = new Vue(); +// Vue.prototype.$validateString = function (str) { +// return /^[a-zA-Z\s\u00C0-\u00FF\u0100-\u017F-]+$/.test(str); +// } +//除了中文,数字不能用,其他都可以 Vue.prototype.$validateString = function (str) { - return /^[a-zA-Z\s\u00C0-\u00FF\u0100-\u017F-]+$/.test(str); + // 匹配规则:不包含数字 (0-9) 且 不包含中文字符 (\u4e00-\u9fa5) + return !/[0-9\u4e00-\u9fa5]/.test(str); } window.MathJax = { tex: {