From ea5695f9138214f6aa6caf2fe73b4664053558a6 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, 17 Jun 2026 09:35:15 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=9C=9F=E5=88=8A=E5=BC=95?= =?UTF-8?q?=E7=94=A8=E5=88=86=E6=9E=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 17 + scripts/test-ref-comment-standalone.mjs | 154 +++ scripts/test-ref-comment.mjs | 40 + scripts/test-ref-revision.mjs | 49 + src/components/common/langs/en.js | 66 + src/components/common/langs/zh.js | 66 + src/components/page/GenerateCharts.vue | 2 + .../JournalManagement/common.vue | 356 +++++ src/components/page/PreIngestedEditor.vue | 3 +- src/components/page/articleListEditor_B1.vue | 447 +++++- src/components/page/comArtHtmlCreatNew.vue | 3 +- .../page/components/ReferenceSearchLinks.vue | 87 ++ .../page/components/email/CkeditorMail.vue | 21 +- .../page/components/table/DynamicTable.vue | 56 +- src/components/page/components/table/word.vue | 266 ++++ .../components/table/wordHtmlTypesetting.vue | 161 ++- src/components/page/editPublicRefRdit.vue | 15 +- src/components/page/mailboxSend.vue | 220 ++- src/utils/exportFigureWord.js | 166 +++ src/utils/exportManuscriptAuthor.js | 377 +++++ src/utils/exportManuscriptWord.js | 1211 +++++++++++++++++ src/utils/exportTableWord.js | 640 +++++++++ src/utils/exportWordLayout.js | 102 ++ src/utils/manuscriptCitationRelevance.js | 406 ++++++ src/utils/manuscriptReferenceHtml.js | 236 ++++ src/utils/productionSubmissionImport.js | 409 ++++++ src/utils/referenceAuthorAma.js | 251 ++++ src/utils/referenceJournalAbbrev.js | 282 ++++ src/utils/referenceLinks.js | 116 ++ src/utils/zyMode.js | 7 + test-comment.docx | Bin 0 -> 7517 bytes test-h1-roundrect.docx | Bin 0 -> 23097 bytes test-h1-shape.docx | Bin 0 -> 23157 bytes test-h1.docx | Bin 0 -> 7615 bytes test-ref-comment-standalone.docx | Bin 0 -> 7706 bytes test-ref-revision.docx | Bin 0 -> 7552 bytes 36 files changed, 6129 insertions(+), 103 deletions(-) create mode 100644 scripts/test-ref-comment-standalone.mjs create mode 100644 scripts/test-ref-comment.mjs create mode 100644 scripts/test-ref-revision.mjs create mode 100644 src/components/page/components/ReferenceSearchLinks.vue create mode 100644 src/utils/exportFigureWord.js create mode 100644 src/utils/exportManuscriptAuthor.js create mode 100644 src/utils/exportManuscriptWord.js create mode 100644 src/utils/exportTableWord.js create mode 100644 src/utils/exportWordLayout.js create mode 100644 src/utils/manuscriptCitationRelevance.js create mode 100644 src/utils/manuscriptReferenceHtml.js create mode 100644 src/utils/productionSubmissionImport.js create mode 100644 src/utils/referenceAuthorAma.js create mode 100644 src/utils/referenceJournalAbbrev.js create mode 100644 src/utils/referenceLinks.js create mode 100644 src/utils/zyMode.js create mode 100644 test-comment.docx create mode 100644 test-h1-roundrect.docx create mode 100644 test-h1-shape.docx create mode 100644 test-h1.docx create mode 100644 test-ref-comment-standalone.docx create mode 100644 test-ref-revision.docx diff --git a/package-lock.json b/package-lock.json index f33c637..cdadde9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -33,6 +33,7 @@ "katex": "^0.16.21", "mammoth": "^1.5.1", "mathlive": "^0.104.0", + "mathml-to-latex": "^1.5.0", "mavon-editor": "^2.6.17", "multi-items-input": "^0.2.0", "pizzip": "^3.1.7", @@ -35543,6 +35544,22 @@ "url": "https://paypal.me/arnogourdol" } }, + "node_modules/mathml-to-latex": { + "version": "1.8.0", + "resolved": "https://registry.npmmirror.com/mathml-to-latex/-/mathml-to-latex-1.8.0.tgz", + "integrity": "sha512-gQ0uK3zqB8HwlfaXJkEL5rgaZNbKUiBMmBP/B/W+b+t6KcseLSuYb1b0BjLgS9ZiQa24ePkqTX8/6FaQuDL7wQ==", + "dependencies": { + "@xmldom/xmldom": "^0.9.10" + } + }, + "node_modules/mathml-to-latex/node_modules/@xmldom/xmldom": { + "version": "0.9.10", + "resolved": "https://registry.npmmirror.com/@xmldom/xmldom/-/xmldom-0.9.10.tgz", + "integrity": "sha512-A9gOqLdi6cV4ibazAjcQufGj0B1y/vDqYrcuP6d/6x8P27gRS8643Dj9o1dEKtB6O7fwxb2FgBmJS2mX7gpvdw==", + "engines": { + "node": ">=14.6" + } + }, "node_modules/mavon-editor": { "version": "2.10.4", "resolved": "https://registry.npmjs.org/mavon-editor/-/mavon-editor-2.10.4.tgz", diff --git a/scripts/test-ref-comment-standalone.mjs b/scripts/test-ref-comment-standalone.mjs new file mode 100644 index 0000000..c5d4649 --- /dev/null +++ b/scripts/test-ref-comment-standalone.mjs @@ -0,0 +1,154 @@ +import { + Document, + Paragraph, + TextRun, + CommentRangeStart, + CommentRangeEnd, + CommentReference, + LevelFormat, + LevelSuffix, + AlignmentType, + Packer +} from 'docx'; +import JSZip from 'jszip'; +import fs from 'fs'; + +function htmlToPlainText(html) { + return String(html || '') + .replace(/ /g, ' ') + .replace(//gi, ' ') + .replace(/<[^>]*>/g, '') + .replace(/\s+/g, ' ') + .trim(); +} + +function parseSingleAuthorName(nameStr) { + const token = String(nameStr || '').trim(); + if (!token || /^et al\.?$/i.test(token)) return null; + const parts = token.split(/\s+/).filter(Boolean); + if (!parts.length) return null; + if (parts.length === 1) return { first: '', last: parts[0] }; + return { first: parts.slice(0, -1).join(' '), last: parts[parts.length - 1] }; +} + +function firstNameToAmaInitials(first) { + return String(first || '') + .split(/[\s-]+/) + .filter(Boolean) + .map((part) => part.charAt(0).toUpperCase()) + .join(''); +} + +function formatOneAmaAuthor(nameStr) { + const parsed = parseSingleAuthorName(nameStr); + if (!parsed || !parsed.last) return ''; + const initials = firstNameToAmaInitials(parsed.first); + return initials ? parsed.last + ' ' + initials : parsed.last; +} + +function splitAuthorList(authorText) { + return String(authorText || '') + .split(/\s*,\s*/) + .map((part) => part.trim()) + .filter(Boolean); +} + +function isAmaAbbreviatedAuthorList(authorText) { + const authors = splitAuthorList(htmlToPlainText(authorText)); + if (!authors.length) return true; + return authors.every((token) => { + if (/^et al\.?$/i.test(token)) return true; + return /^[\p{L}][\p{L}\-'']*\s+[A-Z](?:-?[A-Z])*\.?$/u.test(token); + }); +} + +function needsAmaAuthorAbbreviation(authorText) { + const plain = htmlToPlainText(authorText).trim(); + if (!plain || isAmaAbbreviatedAuthorList(plain)) return false; + return splitAuthorList(plain).some((token) => { + const parts = token.split(/\s+/).filter(Boolean); + if (parts.length < 2) return false; + return parts[0].length > 2; + }); +} + +function buildAmaAuthorAbbreviation(authorText) { + const authors = splitAuthorList(htmlToPlainText(authorText)); + return authors + .map((token) => (/^et al\.?$/i.test(token) ? 'et al' : formatOneAmaAuthor(token))) + .filter(Boolean) + .join(', '); +} + +function buildBookAmaAuthorComment(ref) { + if (!ref || ref.refer_type !== 'book') return ''; + const authorSource = ref.author ? htmlToPlainText(ref.author) : ''; + if (!authorSource || !needsAmaAuthorAbbreviation(authorSource)) return ''; + const amaAuthors = buildAmaAuthorAbbreviation(authorSource); + return amaAuthors ? 'AMA格式作者缩写:' + amaAuthors : ''; +} + +const ref = { + refer_type: 'book', + author: 'Jacqueline Fawcett, Susan DeSanto-Madeya', + title: 'Contemporary Nursing Knowledge', + dateno: '(3rd Edition). Philadelphia, PA: F. A. Davis Company; 2013.', + isbn: '978-0-8036-2765-9' +}; + +const commentText = buildBookAmaAuthorComment(ref); +console.log('comment text:', commentText); + +const commentId = 0; +const doc = new Document({ + numbering: { + config: [{ + reference: 'ref-num', + levels: [{ + level: 0, + format: LevelFormat.DECIMAL, + text: '%1.', + alignment: AlignmentType.START, + suffix: LevelSuffix.TAB, + style: { paragraph: { indent: { left: 720, hanging: 360 } } } + }] + }] + }, + comments: { + children: [{ + id: commentId, + author: 'Editor', + initials: 'Ed', + date: new Date(), + children: [new Paragraph({ children: [new TextRun(commentText)] })] + }] + }, + sections: [{ + children: [new Paragraph({ + numbering: { reference: 'ref-num', level: 0 }, + children: [ + new CommentRangeStart(commentId), + new TextRun('Jacqueline Fawcett, Susan DeSanto-Madeya. Contemporary Nursing Knowledge.'), + new CommentRangeEnd(commentId), + new TextRun({ children: [new CommentReference(commentId)] }) + ] + })] + }] +}); + +const buf = await Packer.toBuffer(doc); +fs.writeFileSync('test-ref-comment-standalone.docx', buf); + +const zip = await JSZip.loadAsync(buf); +const docXml = await zip.file('word/document.xml').async('string'); +const commentsXml = zip.file('word/comments.xml'); +const relsXml = zip.file('word/_rels/document.xml.rels'); +const contentTypes = zip.file('[Content_Types].xml'); + +console.log('has comments.xml:', !!commentsXml); +console.log('has commentReference in document:', docXml.includes('commentReference')); +console.log('has comments rel in document.xml.rels:', relsXml ? (await relsXml.async('string')).includes('comments') : false); +console.log('has comments in Content_Types:', contentTypes ? (await contentTypes.async('string')).includes('comments') : false); +if (commentsXml) { + console.log('comments preview:', (await commentsXml.async('string')).slice(0, 800)); +} diff --git a/scripts/test-ref-comment.mjs b/scripts/test-ref-comment.mjs new file mode 100644 index 0000000..a2c896b --- /dev/null +++ b/scripts/test-ref-comment.mjs @@ -0,0 +1,40 @@ +import { + Document, + Paragraph, + TextRun, + CommentRangeStart, + CommentRangeEnd, + CommentReference, + LevelFormat, + LevelSuffix, + AlignmentType, + Packer +} from 'docx'; +import JSZip from 'jszip'; +import fs from 'fs'; +import { buildBookAmaAuthorComment } from '../src/utils/referenceAuthorAma.js'; +import { buildManuscriptWordDocument } from '../src/utils/exportManuscriptWord.js'; + +const ref = { + refer_type: 'book', + author: 'Jacqueline Fawcett, Susan DeSanto-Madeya', + title: 'Contemporary Nursing Knowledge', + dateno: '(3rd Edition). Philadelphia, PA: F. A. Davis Company; 2013.', + isbn: '978-0-8036-2765-9' +}; + +console.log('comment text:', buildBookAmaAuthorComment(ref)); + +const doc = buildManuscriptWordDocument([], '', [ref], null, null); +const buf = await Packer.toBuffer(doc); +fs.writeFileSync('test-ref-comment.docx', buf); + +const zip = await JSZip.loadAsync(buf); +const docXml = await zip.file('word/document.xml').async('string'); +const commentsXml = zip.file('word/comments.xml'); +console.log('has comments.xml:', !!commentsXml); +console.log('has commentReference:', docXml.includes('commentReference')); +console.log('has commentRangeStart:', docXml.includes('commentRangeStart')); +if (commentsXml) { + console.log('comments preview:', (await commentsXml.async('string')).slice(0, 500)); +} diff --git a/scripts/test-ref-revision.mjs b/scripts/test-ref-revision.mjs new file mode 100644 index 0000000..d77ef07 --- /dev/null +++ b/scripts/test-ref-revision.mjs @@ -0,0 +1,49 @@ +import { + Document, + Paragraph, + TextRun, + DeletedTextRun, + InsertedTextRun, + LevelFormat, + LevelSuffix, + AlignmentType, + Packer +} from 'docx'; +import JSZip from 'jszip'; +import fs from 'fs'; + +const doc = new Document({ + features: { trackRevisions: true }, + sections: [{ + children: [new Paragraph({ + children: [ + new DeletedTextRun({ + id: 1, + author: 'Editor', + date: new Date().toISOString(), + text: 'David Harvey ', + font: 'Charis SIL', + size: 15 + }), + new InsertedTextRun({ + id: 2, + author: 'Editor', + date: new Date().toISOString(), + text: 'Harvey D ', + font: 'Charis SIL', + size: 15 + }), + new TextRun('Contemporary Nursing Knowledge.') + ] + })] + }] +}); + +const buf = await Packer.toBuffer(doc); +fs.writeFileSync('test-ref-revision.docx', buf); +const zip = await JSZip.loadAsync(buf); +const docXml = await zip.file('word/document.xml').async('string'); +const settingsXml = await zip.file('word/settings.xml').async('string'); +console.log('has w:ins:', docXml.includes(' italics and other HTML). When done, click "Download edited HTML", then use "References HTML to Word" on the typesetting page.', + refHtmlSaveTip: 'Tip: save the HTML after editing, then import it on the typesetting page to export Word.', + refHtmlDownloadEdited: 'Download edited HTML', + refHtmlDownloadFileName: 'references-edited.html', exportImg: 'Export PNG', PaperRotation: 'Paper Rotation', removeAnnotations: 'Are you sure you want to delete this Annotation?', diff --git a/src/components/common/langs/zh.js b/src/components/common/langs/zh.js index 5d2b9da..a9482c6 100644 --- a/src/components/common/langs/zh.js +++ b/src/components/common/langs/zh.js @@ -158,6 +158,22 @@ const zh = { databases:'收录数据库', }, + journalCiteMate: { + button: '期刊引用分析', + yearRange: '统计范围', + yearOptionOne: '近 {n} 年', + yearOptionOther: '近 {n} 年', + yearPlaceholder: '输入年数', + yearInvalid: '请输入大于 0 的整数', + yearMax: '统计范围最多为 100 年', + refresh: '刷新', + topicTitle: '话题引用', + countryTitle: 'country', + name: '名称', + citeCount: '引用数量', + totalCites: '引用总数', + loadFail: '加载期刊引用分析失败', + }, paperArticleCount: { Periodroll: '期卷', article: '文章', @@ -924,6 +940,8 @@ const zh = { exitSourceMode: '退出源码编辑', sourcePlaceholder: '在此粘贴或编辑完整 HTML,支持 、、、 等', editorPlaceholder: '请输入邮件内容...', + clearEditor: '清空', + clearEditorConfirm: '确定清空邮件正文吗?', validateTo: '请至少添加一个收件人', validateSubject: '请输入邮件主题', sendSuccess: '发送成功', @@ -1114,6 +1132,54 @@ const zh = { AnnotationList: '批注列表', Annotations: '批注', exportWord: '导出 Word', + exportManuscriptEmpty: '没有可导出的内容。', + exportManuscriptSuccess: 'Word 已下载。', + exportManuscriptFail: 'Word 导出失败。', + citeRelevanceDetect: '下载相关性 HTML', + citeRelevanceTitle: '引文相关性核查', + citeRelevanceTitleProgress: '引文相关性核查 ({current}/{total})', + citeRelevanceEmpty: '当前没有可核查的引文。', + citeRelevanceNoContent: '没有正文内容。', + citeRelevanceNoCitations: '正文中未找到引用标记(如 [1]、[1-7])。', + citeRelevanceLoadFail: '加载参考文献失败。', + citeRelevanceParagraph: '正文段落 {n}', + citeRelevanceRefLabel: '参考文献 [{n}]', + citeRelevanceRefMissing: '未找到对应文献', + citeRelevanceParagraphTitle: '正文段落', + citeRelevanceReferenceTitle: '参考文献 [{n}]', + citeRelevanceWenaiTitle: '复制到 WenAI 的完整提示', + citeRelevanceCopy: '复制', + citeRelevanceCopyWenai: '复制完整提示', + citeRelevanceCopySuccess: '已复制到剪贴板', + citeRelevanceCopyFail: '复制失败', + citeRelevanceCopyEmpty: '没有可复制的内容', + citeRelevancePrev: '上一条', + citeRelevanceNext: '下一条', + citeRelevanceClose: '关闭', + citeRelevanceCopyAllWenai: '复制全部提示', + citeRelevanceBatchTip: '每段正文按 {n} 条参考文献一批提问', + citeRelevanceRefBatch: '本批文献 {nums}', + citeRelevanceBatchProgress: '本段第 {current}/{total} 批', + citeRelevanceGroupTotal: '共 {n} 段待核查', + citeRelevanceGroupNavLabel: '段落 {paragraph} · {refs}', + citeRelevanceJumpTo: '快速跳转', + citeRelevanceCopyGroup: '复制本段', + citeRelevanceDownloadHtml: '下载 HTML', + citeRelevanceDownloadHtmlSuccess: 'HTML 已下载', + refHtmlDownload: '下载参考文献 HTML', + refHtmlDownloadSuccess: '参考文献 HTML 已下载', + refHtmlToWord: '参考文献 HTML 转 Word', + refHtmlToWordSuccess: 'Word 已导出(含编辑后的参考文献)', + refHtmlToWordFail: '参考文献 HTML 转 Word 失败', + refHtmlLoadFail: '加载参考文献失败', + refHtmlEmpty: '暂无参考文献', + refHtmlParseEmpty: 'HTML 中未找到参考文献条目,请使用本系统下载的参考文献 HTML', + refHtmlPageTitle: '参考文献编辑', + refHtmlReferencesTitle: 'References', + refHtmlIntro: '可直接编辑每条文献,或粘贴 AI 返回的内容(支持 斜体等 HTML 标签)。编辑完成后点击「下载编辑后的 HTML」,再在排版页使用「参考文献 HTML 转 Word」。', + refHtmlSaveTip: '提示:编辑后请点击上方按钮保存 HTML;也可在排版页导入该文件导出 Word。', + refHtmlDownloadEdited: '下载编辑后的 HTML', + refHtmlDownloadFileName: 'references-edited.html', exportImg: '导出 图片', PaperRotation: '纸张方向', removeAnnotations: '确定要删除这条批注吗?', diff --git a/src/components/page/GenerateCharts.vue b/src/components/page/GenerateCharts.vue index b5fbafd..5ac6a44 100644 --- a/src/components/page/GenerateCharts.vue +++ b/src/components/page/GenerateCharts.vue @@ -92,6 +92,7 @@
{{ $t('menu.ClassificationmanagementInfo') }}

+

+ {{ $t('journalCiteMate.button') }} +

+

+ +

+
+ {{ $t('journalCiteMate.yearRange') }} + + + + + {{ $t('journalCiteMate.refresh') }} + + + {{ $t('journalCiteMate.totalCites') }}:{{ citeMateCitesNum }} + +
+ + +
+
+ {{ $t('journalCiteMate.topicTitle') }} + {{ citeMateTopicList.length }} +
+ + + + + + + + + +
+
+ +
+
+ {{ $t('journalCiteMate.countryTitle') }} + {{ citeMateCountryList.length }} +
+ + + + + + + + + +
+
+
+
+ { + this.updateCiteMateTableHeight(); + window.addEventListener('resize', this.updateCiteMateTableHeight); + }); + } else { + window.removeEventListener('resize', this.updateCiteMateTableHeight); + } + } + }, + computed: { + citeMateYearOptionList() { + const presets = this.citeMateYearOptions.slice(); + const current = parseInt(this.citeMateYear, 10); + if (Number.isFinite(current) && current > 0 && presets.indexOf(current) === -1) { + presets.push(current); + } + return presets.sort(function (a, b) { + return a - b; + }); } }, async created() { @@ -617,6 +764,9 @@ export default { async activated() { await this.getDate(); }, + beforeDestroy() { + window.removeEventListener('resize', this.updateCiteMateTableHeight); + }, methods: { // 失去焦点事件 onEditorBlur(quill) { @@ -960,6 +1110,118 @@ export default { that.$refs.commonAgreementRef.init(); }); }, + openJournalCiteMate(data) { + this.currentJournal = data || {}; + this.citeMateYear = '2'; + this.drawerCiteMate = true; + this.loadJournalCiteMate(); + }, + handleCiteMateClose(done) { + this.drawerCiteMate = false; + if (typeof done === 'function') { + done(); + } + }, + updateCiteMateTableHeight() { + this.$nextTick(() => { + const block = this.$refs.citeMateBlock; + if (!block) { + return; + } + const el = Array.isArray(block) ? block[0] : block; + const title = el.querySelector('.journal-cite-mate-block-title'); + const style = window.getComputedStyle(el); + const paddingTop = parseFloat(style.paddingTop) || 0; + const paddingBottom = parseFloat(style.paddingBottom) || 0; + let titleHeight = 0; + if (title) { + const titleStyle = window.getComputedStyle(title); + titleHeight = title.offsetHeight + (parseFloat(titleStyle.marginBottom) || 0); + } + const nextHeight = el.clientHeight - paddingTop - paddingBottom - titleHeight; + if (nextHeight > 0) { + this.citeMateTableHeight = nextHeight; + } + }); + }, + formatCiteMateYearLabel(years) { + const num = parseInt(years, 10); + if (!Number.isFinite(num) || num < 1) { + return String(years); + } + if (num === 1) { + return this.$t('journalCiteMate.yearOptionOne', { n: num }); + } + return this.$t('journalCiteMate.yearOptionOther', { n: num }); + }, + normalizeCiteMateYear(value) { + const parsed = parseInt(String(value || '').trim(), 10); + if (!Number.isFinite(parsed) || parsed < 1) { + this.$message.warning(this.$t('journalCiteMate.yearInvalid')); + return '2'; + } + if (parsed > 100) { + this.$message.warning(this.$t('journalCiteMate.yearMax')); + return '100'; + } + return String(parsed); + }, + handleCiteMateYearChange(value) { + this.citeMateYear = this.normalizeCiteMateYear(value); + this.loadJournalCiteMate(); + }, + getCiteMateRowName(row) { + if (!row) { + return '—'; + } + return row.topic_name || row.country || row.country_name || row.nation_name || row.name || row.title || '—'; + }, + getCiteMateRowCount(row) { + const value = row.num != null ? row.num : row.count != null ? row.count : row.cite_num; + return value != null ? value : '—'; + }, + loadJournalCiteMate() { + const journalId = this.currentJournal && this.currentJournal.journal_id; + if (!journalId) { + this.citeMateTopicList = []; + this.citeMateCountryList = []; + this.citeMateCitesNum = null; + return; + } + + this.citeMateLoading = true; + this.$api + .post('api/journal/citeMate', { + journal_id: String(journalId), + year: String(this.citeMateYear || '2') + }) + .then((res) => { + if (res.code == 0) { + const lists = normalizeCiteMateLists(res.data); + this.citeMateTopicList = lists.topics; + this.citeMateCountryList = lists.countries; + this.citeMateCitesNum = lists.citesNum; + } else { + this.citeMateTopicList = []; + this.citeMateCountryList = []; + this.citeMateCitesNum = null; + this.$message.error(res.msg || this.$t('journalCiteMate.loadFail')); + } + }) + .catch((err) => { + console.error(err); + this.citeMateTopicList = []; + this.citeMateCountryList = []; + this.citeMateCitesNum = null; + this.$message.error(this.$t('journalCiteMate.loadFail')); + }) + .finally(() => { + this.citeMateLoading = false; + if (this.drawerCiteMate) { + this.updateCiteMateTableHeight(); + } + }); + }, renameKeys(obj, oldKey, newKey) { if (obj[oldKey]) { obj[newKey] = obj[oldKey]; @@ -1457,6 +1719,100 @@ export default { padding: 22px 0 0 0; text-align: center; } + +.journal-cite-mate-panel { + display: flex; + flex-direction: column; + height: 100%; + min-height: 0; + padding: 0 20px 20px; + box-sizing: border-box; +} + +.journal-cite-mate-drawer .el-drawer__body { + display: flex; + flex-direction: column; + overflow: hidden; + padding-bottom: 0; +} + +.journal-cite-mate-body { + flex: 1; + min-height: 0; +} + +.journal-cite-mate-body.el-row { + display: flex; + flex-wrap: nowrap; + height: 100%; +} + +.journal-cite-mate-body > .el-col { + display: flex; + flex-direction: column; + height: 100%; +} + +.journal-cite-mate-block { + display: flex; + flex-direction: column; + height: 100%; + min-height: 0; + box-sizing: border-box; + background: #fff; + border: 1px solid #ebeef5; + border-radius: 4px; + padding: 12px; +} + +.journal-cite-mate-toolbar { + display: flex; + align-items: center; + gap: 12px; + margin-bottom: 16px; + flex-shrink: 0; +} + +.journal-cite-mate-year-select { + width: 150px; +} + +.journal-cite-mate-label { + font-size: 13px; + color: #606266; +} + +.journal-cite-mate-block-title { + flex-shrink: 0; + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 10px; +} + +.journal-cite-mate-block-name { + font-size: 14px; + font-weight: 600; + color: #303133; +} + +.journal-cite-mate-count { + font-weight: 600; + color: #409eff; + font-size: 16px; + line-height: 1; +} + +.journal-cite-mate-total { + margin-left: auto; + font-size: 14px; + color: #303133; +} + +.journal-cite-mate-total strong { + color: #409eff; + font-size: 16px; +} .WeChatCode .avatar-uploader .el-upload { width: 120px !important; height: 120px !important; diff --git a/src/components/page/PreIngestedEditor.vue b/src/components/page/PreIngestedEditor.vue index ae8ed63..efced6b 100644 --- a/src/components/page/PreIngestedEditor.vue +++ b/src/components/page/PreIngestedEditor.vue @@ -1421,7 +1421,8 @@ export default { this.$router.resolve({ path: '/GenerateCharts', query: { - id: this.$route.query.id + id: this.$route.query.id, + p_article_id: this.p_article_id } }).href, '_blank' diff --git a/src/components/page/articleListEditor_B1.vue b/src/components/page/articleListEditor_B1.vue index 4ab1442..ce652b1 100644 --- a/src/components/page/articleListEditor_B1.vue +++ b/src/components/page/articleListEditor_B1.vue @@ -54,7 +54,21 @@
-

{{ tabsList[0].name }}

+

+ {{ tabsList[0].name }} + + Import from Submission + +

@@ -235,7 +249,14 @@ Add Author - + @@ -895,6 +897,7 @@