tijiao
This commit is contained in:
@@ -50,10 +50,22 @@ const en = {
|
|||||||
plagiarismNotChecked: 'Not checked',
|
plagiarismNotChecked: 'Not checked',
|
||||||
plagiarismChecking: 'Checking…',
|
plagiarismChecking: 'Checking…',
|
||||||
plagiarismRecheck: 'Re-check',
|
plagiarismRecheck: 'Re-check',
|
||||||
|
plagiarismDuplicateCheck: 'Re-check',
|
||||||
plagiarismCheckFailed: 'Failed to start plagiarism check.',
|
plagiarismCheckFailed: 'Failed to start plagiarism check.',
|
||||||
plagiarismStatusFailed: 'Failed to load plagiarism status.',
|
plagiarismStatusFailed: 'Failed to load plagiarism status.',
|
||||||
plagiarismNoReportUrl: 'Report link is not available yet.',
|
plagiarismNoReportUrl: 'Report link is not available yet.',
|
||||||
plagiarismReportDetailFailed: 'Could not load manuscript details. Please try again.',
|
plagiarismReportDetailFailed: 'Could not load manuscript details. Please try again.',
|
||||||
|
plagiarismListTitle: 'Plagiarism check history',
|
||||||
|
plagiarismAutoCheck: 'Auto plagiarism check',
|
||||||
|
plagiarismRefresh: 'Refresh',
|
||||||
|
plagiarismEmptyList: 'No plagiarism checks yet',
|
||||||
|
plagiarismSimilarity: 'Similarity',
|
||||||
|
plagiarismFile: 'File',
|
||||||
|
plagiarismPreviewPdf: 'Preview report',
|
||||||
|
plagiarismReportLink: 'Report',
|
||||||
|
plagiarismNoPdfLink: 'No link',
|
||||||
|
plagiarismPreviewClose: 'Close',
|
||||||
|
plagiarismPreviewOpenTab: 'Open in new tab',
|
||||||
},
|
},
|
||||||
menu: {
|
menu: {
|
||||||
main: 'Personal Center',
|
main: 'Personal Center',
|
||||||
|
|||||||
@@ -48,10 +48,22 @@ const zh = {
|
|||||||
plagiarismNotChecked: '未检测',
|
plagiarismNotChecked: '未检测',
|
||||||
plagiarismChecking: '正在检测…',
|
plagiarismChecking: '正在检测…',
|
||||||
plagiarismRecheck: '重新查重',
|
plagiarismRecheck: '重新查重',
|
||||||
|
plagiarismDuplicateCheck: '重复检查',
|
||||||
plagiarismCheckFailed: '查重任务启动失败。',
|
plagiarismCheckFailed: '查重任务启动失败。',
|
||||||
plagiarismStatusFailed: '获取查重状态失败。',
|
plagiarismStatusFailed: '获取查重状态失败。',
|
||||||
plagiarismNoReportUrl: '报告链接暂不可用。',
|
plagiarismNoReportUrl: '报告链接暂不可用。',
|
||||||
plagiarismReportDetailFailed: '获取稿件详情失败,请稍后重试。',
|
plagiarismReportDetailFailed: '获取稿件详情失败,请稍后重试。',
|
||||||
|
plagiarismListTitle: '自动查重记录',
|
||||||
|
plagiarismAutoCheck: '自动查重',
|
||||||
|
plagiarismRefresh: '刷新',
|
||||||
|
plagiarismEmptyList: '暂无查重记录',
|
||||||
|
plagiarismSimilarity: '相似度',
|
||||||
|
plagiarismFile: '文件',
|
||||||
|
plagiarismPreviewPdf: '预览报告',
|
||||||
|
plagiarismReportLink: '报告',
|
||||||
|
plagiarismNoPdfLink: '无链接',
|
||||||
|
plagiarismPreviewClose: '关闭',
|
||||||
|
plagiarismPreviewOpenTab: '新窗口打开',
|
||||||
},
|
},
|
||||||
menu: {
|
menu: {
|
||||||
main: '个人中心',
|
main: '个人中心',
|
||||||
|
|||||||
@@ -947,6 +947,77 @@
|
|||||||
</a>
|
</a>
|
||||||
<el-button type="text" @click="changeRepe" icon="el-icon-edit">Change</el-button>
|
<el-button type="text" @click="changeRepe" icon="el-icon-edit">Change</el-button>
|
||||||
</div>
|
</div>
|
||||||
|
<div v-if="plagiarismListReady" class="plagiarism-check-shell">
|
||||||
|
<el-button
|
||||||
|
v-if="!plagiarismList.length"
|
||||||
|
class="plagiarism-auto-check-btn"
|
||||||
|
icon="el-icon-search"
|
||||||
|
:loading="plagiarismSubmitLoading"
|
||||||
|
@click="submitPlagiarismCheck"
|
||||||
|
>
|
||||||
|
{{ $t('articleListEditor.plagiarismAutoCheck') }}
|
||||||
|
</el-button>
|
||||||
|
<div
|
||||||
|
v-else
|
||||||
|
class="plagiarism-check-block"
|
||||||
|
v-loading="plagiarismListLoading"
|
||||||
|
element-loading-background="transparent"
|
||||||
|
>
|
||||||
|
<div class="plagiarism-check-header">
|
||||||
|
<span class="plagiarism-check-title">{{ $t('articleListEditor.plagiarismListTitle') }}</span>
|
||||||
|
<div class="plagiarism-check-actions">
|
||||||
|
<!-- <el-button
|
||||||
|
type="text"
|
||||||
|
size="mini"
|
||||||
|
icon="el-icon-document-checked"
|
||||||
|
:loading="plagiarismSubmitLoading"
|
||||||
|
@click="submitPlagiarismCheck"
|
||||||
|
>
|
||||||
|
{{ $t('articleListEditor.plagiarismDuplicateCheck') }}
|
||||||
|
</el-button> -->
|
||||||
|
<el-button
|
||||||
|
type="text"
|
||||||
|
size="mini"
|
||||||
|
icon="el-icon-refresh"
|
||||||
|
:loading="plagiarismListLoading"
|
||||||
|
@click="fetchPlagiarismList(true)"
|
||||||
|
>
|
||||||
|
{{ $t('articleListEditor.plagiarismRefresh') }}
|
||||||
|
</el-button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="plagiarism-check-list-wrap">
|
||||||
|
<div
|
||||||
|
v-for="row in plagiarismList"
|
||||||
|
:key="row.check_id || row.id"
|
||||||
|
class="plagiarism-check-row"
|
||||||
|
:title="row.source_file_name || ''"
|
||||||
|
>
|
||||||
|
<span class="plagiarism-sim-dot" :class="getPlagiarismSimilarityLevel(row)"></span>
|
||||||
|
<span class="plagiarism-sim-pct" :class="getPlagiarismSimilarityLevel(row)">
|
||||||
|
{{ formatPlagiarismSimilarity(row) }}
|
||||||
|
</span>
|
||||||
|
<span class="plagiarism-sim-date">{{ formatPlagiarismDate(row) }}</span>
|
||||||
|
<span class="plagiarism-sim-state" :class="getPlagiarismStateClass(row)">
|
||||||
|
{{ formatPlagiarismStateLabel(row) }}
|
||||||
|
</span>
|
||||||
|
<span class="plagiarism-sim-report">
|
||||||
|
<a
|
||||||
|
v-if="hasPlagiarismPdf(row)"
|
||||||
|
href="javascript:;"
|
||||||
|
class="plagiarism-report-preview"
|
||||||
|
:title="$t('articleListEditor.plagiarismPreviewOpenTab')"
|
||||||
|
@click.prevent="openPlagiarismReportPage(row)"
|
||||||
|
>
|
||||||
|
{{ $t('articleListEditor.plagiarismPreviewPdf') }}
|
||||||
|
<i class="el-icon-link"></i>
|
||||||
|
</a>
|
||||||
|
<span v-else class="plagiarism-check-no-pdf">{{ $t('articleListEditor.plagiarismNoPdfLink') }}</span>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<span style="display: inline-block; vertical-align: top; margin-top: 7px">Manuscript : </span>
|
<span style="display: inline-block; vertical-align: top; margin-top: 7px">Manuscript : </span>
|
||||||
<el-upload
|
<el-upload
|
||||||
@@ -1142,6 +1213,31 @@
|
|||||||
<el-button type="primary" @click="saveRepe">Save</el-button>
|
<el-button type="primary" @click="saveRepe">Save</el-button>
|
||||||
</span>
|
</span>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
|
<el-dialog
|
||||||
|
:title="plagiarismPdfPreviewTitle"
|
||||||
|
:visible.sync="plagiarismPdfPreviewVisible"
|
||||||
|
width="90%"
|
||||||
|
top="4vh"
|
||||||
|
append-to-body
|
||||||
|
custom-class="plagiarism-pdf-preview-dialog"
|
||||||
|
@closed="onPlagiarismPdfPreviewClosed"
|
||||||
|
>
|
||||||
|
<div v-loading="plagiarismPdfPreviewLoading" class="plagiarism-pdf-preview-body">
|
||||||
|
<iframe
|
||||||
|
v-if="plagiarismPdfPreviewUrl"
|
||||||
|
:src="plagiarismPdfPreviewUrl"
|
||||||
|
class="plagiarism-pdf-preview-iframe"
|
||||||
|
frameborder="0"
|
||||||
|
@load="plagiarismPdfPreviewLoading = false"
|
||||||
|
></iframe>
|
||||||
|
</div>
|
||||||
|
<span slot="footer" class="dialog-footer">
|
||||||
|
<el-button size="small" @click="plagiarismPdfPreviewVisible = false">{{ $t('articleListEditor.plagiarismPreviewClose') }}</el-button>
|
||||||
|
<el-button size="small" type="primary" v-if="plagiarismPdfPreviewUrl" @click="openPlagiarismPdfInNewTab">
|
||||||
|
{{ $t('articleListEditor.plagiarismPreviewOpenTab') }}
|
||||||
|
</el-button>
|
||||||
|
</span>
|
||||||
|
</el-dialog>
|
||||||
<el-dialog
|
<el-dialog
|
||||||
title="Resubmit the manuscript"
|
title="Resubmit the manuscript"
|
||||||
:visible.sync="resubmitVisible"
|
:visible.sync="resubmitVisible"
|
||||||
@@ -1743,7 +1839,16 @@ export default {
|
|||||||
underReview: ['1'],
|
underReview: ['1'],
|
||||||
finalDecision: ['1'],
|
finalDecision: ['1'],
|
||||||
is_figure_copyright: '',
|
is_figure_copyright: '',
|
||||||
figurecopyright_file: ''
|
figurecopyright_file: '',
|
||||||
|
plagiarismList: [],
|
||||||
|
plagiarismListLoading: false,
|
||||||
|
plagiarismListReady: false,
|
||||||
|
plagiarismPollTimer: null,
|
||||||
|
plagiarismSubmitLoading: false,
|
||||||
|
plagiarismPdfPreviewVisible: false,
|
||||||
|
plagiarismPdfPreviewUrl: '',
|
||||||
|
plagiarismPdfPreviewTitle: '',
|
||||||
|
plagiarismPdfPreviewLoading: false
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
async created() {
|
async created() {
|
||||||
@@ -1753,6 +1858,16 @@ export default {
|
|||||||
this.getWordimgList();
|
this.getWordimgList();
|
||||||
this.getWordTablesList();
|
this.getWordTablesList();
|
||||||
this.getFinalList();
|
this.getFinalList();
|
||||||
|
this.startPlagiarismPolling();
|
||||||
|
},
|
||||||
|
activated() {
|
||||||
|
this.startPlagiarismPolling(false);
|
||||||
|
},
|
||||||
|
deactivated() {
|
||||||
|
this.stopPlagiarismPolling();
|
||||||
|
},
|
||||||
|
beforeDestroy() {
|
||||||
|
this.stopPlagiarismPolling();
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
// coverLetterUrl: function() {
|
// coverLetterUrl: function() {
|
||||||
@@ -2857,6 +2972,189 @@ export default {
|
|||||||
// 关闭弹窗
|
// 关闭弹窗
|
||||||
closeResubmit() {
|
closeResubmit() {
|
||||||
(this.resubmitVisible = false), this.$refs['resubmitJournal'].resetFields();
|
(this.resubmitVisible = false), this.$refs['resubmitJournal'].resetFields();
|
||||||
|
},
|
||||||
|
startPlagiarismPolling(resetList) {
|
||||||
|
this.stopPlagiarismPolling();
|
||||||
|
if (resetList !== false) {
|
||||||
|
this.plagiarismListReady = false;
|
||||||
|
this.plagiarismList = [];
|
||||||
|
}
|
||||||
|
this.fetchPlagiarismList(false);
|
||||||
|
this.plagiarismPollTimer = setInterval(() => {
|
||||||
|
this.fetchPlagiarismList(false);
|
||||||
|
}, 3 * 60 * 1000);
|
||||||
|
},
|
||||||
|
stopPlagiarismPolling() {
|
||||||
|
if (this.plagiarismPollTimer) {
|
||||||
|
clearInterval(this.plagiarismPollTimer);
|
||||||
|
this.plagiarismPollTimer = null;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async submitPlagiarismCheck() {
|
||||||
|
const articleId = String((this.editform && this.editform.articleId) || this.$route.query.id || '').trim();
|
||||||
|
if (!articleId) {
|
||||||
|
this.$message.warning(this.$t('articleListEditor.plagiarismReportDetailFailed'));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.plagiarismSubmitLoading = true;
|
||||||
|
try {
|
||||||
|
const res = await this.$api.post('api/Plagiarism/submit', { article_id: articleId });
|
||||||
|
if (res && Number(res.code) === 0) {
|
||||||
|
this.$message.success((res && res.msg) || this.$t('articleListEditor.plagiarismChecking'));
|
||||||
|
await this.fetchPlagiarismList(true);
|
||||||
|
} else {
|
||||||
|
this.$message.error((res && res.msg) || this.$t('articleListEditor.plagiarismCheckFailed'));
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
this.$message.error(this.$t('articleListEditor.plagiarismCheckFailed'));
|
||||||
|
} finally {
|
||||||
|
this.plagiarismSubmitLoading = false;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async fetchPlagiarismList(manual) {
|
||||||
|
const articleId = String((this.editform && this.editform.articleId) || this.$route.query.id || '').trim();
|
||||||
|
if (!articleId) {
|
||||||
|
this.plagiarismListReady = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (manual && this.plagiarismList.length) {
|
||||||
|
this.plagiarismListLoading = true;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
const res = await this.$api.post('api/Plagiarism/getList', { article_id: articleId });
|
||||||
|
if (res && Number(res.code) === 0) {
|
||||||
|
const payload = res.data || {};
|
||||||
|
const list = Array.isArray(payload.list) ? payload.list : Array.isArray(payload) ? payload : [];
|
||||||
|
this.plagiarismList = list;
|
||||||
|
} else if (manual) {
|
||||||
|
this.$message.error((res && res.msg) || this.$t('articleListEditor.plagiarismStatusFailed'));
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
if (manual) {
|
||||||
|
this.$message.error(this.$t('articleListEditor.plagiarismStatusFailed'));
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
this.plagiarismListLoading = false;
|
||||||
|
this.plagiarismListReady = true;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
formatPlagiarismState(state) {
|
||||||
|
const s = String(state != null ? state : '').trim();
|
||||||
|
if (!s) return '-';
|
||||||
|
return s;
|
||||||
|
},
|
||||||
|
formatPlagiarismStateLabel(row) {
|
||||||
|
if (!row || typeof row !== 'object') return '—';
|
||||||
|
const label = String(row.state_label || row.stateLabel || '').trim();
|
||||||
|
if (label) return label;
|
||||||
|
const s = row.state;
|
||||||
|
if (s == null || String(s).trim() === '') return '—';
|
||||||
|
return this.formatPlagiarismState(s);
|
||||||
|
},
|
||||||
|
getPlagiarismStateClass(row) {
|
||||||
|
const s = Number(row && row.state);
|
||||||
|
if (s === 1) return 'state-uploading';
|
||||||
|
if (s === 2 || s === 3) return 'state-done';
|
||||||
|
if (s === 4 || s === 5) return 'state-fail';
|
||||||
|
return '';
|
||||||
|
},
|
||||||
|
getPlagiarismSimilarityScore(row) {
|
||||||
|
if (!row || typeof row !== 'object') return null;
|
||||||
|
const raw = row.similarity_score != null ? row.similarity_score : row.similarity;
|
||||||
|
if (raw == null || String(raw).trim() === '') return null;
|
||||||
|
const n = Number(raw);
|
||||||
|
return isNaN(n) ? null : n;
|
||||||
|
},
|
||||||
|
formatPlagiarismSimilarity(row) {
|
||||||
|
const n = this.getPlagiarismSimilarityScore(row);
|
||||||
|
return n == null ? '—' : n + '%';
|
||||||
|
},
|
||||||
|
/** Crossref 相似度色块:0 绿、1–29 蓝、30+ 橙 */
|
||||||
|
getPlagiarismSimilarityLevel(row) {
|
||||||
|
const n = this.getPlagiarismSimilarityScore(row);
|
||||||
|
if (n == null) return 'sim-unknown';
|
||||||
|
if (n <= 0) return 'sim-zero';
|
||||||
|
if (n < 30) return 'sim-low';
|
||||||
|
return 'sim-high';
|
||||||
|
},
|
||||||
|
formatPlagiarismDate(row) {
|
||||||
|
if (!row || typeof row !== 'object') return '—';
|
||||||
|
const raw =
|
||||||
|
row.finish_time ||
|
||||||
|
row.finished_at ||
|
||||||
|
row.update_time ||
|
||||||
|
row.ctime ||
|
||||||
|
row.create_time ||
|
||||||
|
row.created_at ||
|
||||||
|
'';
|
||||||
|
if (raw == null || String(raw).trim() === '') return '—';
|
||||||
|
const s = String(raw).trim();
|
||||||
|
if (/^\d+$/.test(s)) {
|
||||||
|
const num = Number(s);
|
||||||
|
const ts = num > 1e12 ? num : num * 1000;
|
||||||
|
try {
|
||||||
|
return this.formatDate(Math.floor(ts / 1000));
|
||||||
|
} catch (e) {
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const d = new Date(s.replace(/-/g, '/'));
|
||||||
|
if (!isNaN(d.getTime())) {
|
||||||
|
const pad = (v) => String(v).padStart(2, '0');
|
||||||
|
return d.getFullYear() + '-' + pad(d.getMonth() + 1) + '-' + pad(d.getDate());
|
||||||
|
}
|
||||||
|
return s.length > 10 ? s.slice(0, 10) : s;
|
||||||
|
},
|
||||||
|
resolvePlagiarismPdfUrl(row) {
|
||||||
|
if (!row || typeof row !== 'object') return '';
|
||||||
|
const raw = String(row.viewer_url || row.local_pdf_url || row.localPdfUrl || '').trim();
|
||||||
|
if (!raw) return '';
|
||||||
|
if (/^https?:\/\//i.test(raw)) return raw;
|
||||||
|
|
||||||
|
let path = raw.replace(/^\/+/, '');
|
||||||
|
if (!/^public\//i.test(path)) {
|
||||||
|
const media = String(this.mediaUrl || '/public/').replace(/\/+$/, '');
|
||||||
|
if (/^https?:\/\//i.test(media)) {
|
||||||
|
return media + '/' + path;
|
||||||
|
}
|
||||||
|
path = (media.startsWith('/') ? media : '/' + media) + '/' + path;
|
||||||
|
} else {
|
||||||
|
path = '/' + path;
|
||||||
|
}
|
||||||
|
path = path.replace(/\/+/g, '/');
|
||||||
|
|
||||||
|
if (typeof window !== 'undefined' && window.location && window.location.origin && path.startsWith('/')) {
|
||||||
|
return window.location.origin + path;
|
||||||
|
}
|
||||||
|
return path;
|
||||||
|
},
|
||||||
|
hasPlagiarismPdf(row) {
|
||||||
|
return !!this.resolvePlagiarismPdfUrl(row);
|
||||||
|
},
|
||||||
|
openPlagiarismReportPage(row) {
|
||||||
|
const url = this.resolvePlagiarismPdfUrl(row);
|
||||||
|
if (!url) return;
|
||||||
|
window.open(url, '_blank', 'noopener,noreferrer');
|
||||||
|
},
|
||||||
|
openPlagiarismPdfPreview(row) {
|
||||||
|
const url = this.resolvePlagiarismPdfUrl(row);
|
||||||
|
if (!url) return;
|
||||||
|
const name = row && row.source_file_name ? String(row.source_file_name) : 'report.pdf';
|
||||||
|
const id = row && row.check_id != null ? row.check_id : '';
|
||||||
|
this.plagiarismPdfPreviewTitle =
|
||||||
|
this.$t('articleListEditor.plagiarismPreviewPdf') + (id ? ' #' + id : '') + ' - ' + name;
|
||||||
|
this.plagiarismPdfPreviewUrl = url;
|
||||||
|
this.plagiarismPdfPreviewLoading = true;
|
||||||
|
this.plagiarismPdfPreviewVisible = true;
|
||||||
|
},
|
||||||
|
onPlagiarismPdfPreviewClosed() {
|
||||||
|
this.plagiarismPdfPreviewUrl = '';
|
||||||
|
this.plagiarismPdfPreviewTitle = '';
|
||||||
|
this.plagiarismPdfPreviewLoading = false;
|
||||||
|
},
|
||||||
|
openPlagiarismPdfInNewTab() {
|
||||||
|
if (!this.plagiarismPdfPreviewUrl) return;
|
||||||
|
window.open(this.plagiarismPdfPreviewUrl, '_blank', 'noopener');
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
@@ -2921,6 +3219,169 @@ export default {
|
|||||||
text-decoration: underline;
|
text-decoration: underline;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.plagiarism-check-shell {
|
||||||
|
margin: 0 0 10px 0;
|
||||||
|
}
|
||||||
|
.plagiarism-check-block >>> .el-loading-mask {
|
||||||
|
background-color: transparent !important;
|
||||||
|
}
|
||||||
|
.plagiarism-auto-check-btn.el-button {
|
||||||
|
display: block;
|
||||||
|
width: 200px;
|
||||||
|
border: none;
|
||||||
|
color: #fff;
|
||||||
|
font-size: 13px;
|
||||||
|
margin-left: 75px;
|
||||||
|
font-weight: 500;
|
||||||
|
letter-spacing: 0.3px;
|
||||||
|
padding: 11px 20px;
|
||||||
|
border-radius: 4px;
|
||||||
|
background: linear-gradient(135deg, #2ec4b6 0%, #0d9b8f 45%, #0a7f76 100%);
|
||||||
|
box-shadow: 0 2px 8px rgba(13, 155, 143, 0.35);
|
||||||
|
transition: opacity 0.2s ease, box-shadow 0.2s ease;
|
||||||
|
}
|
||||||
|
.plagiarism-auto-check-btn.el-button:hover,
|
||||||
|
.plagiarism-auto-check-btn.el-button:focus {
|
||||||
|
color: #fff;
|
||||||
|
background: linear-gradient(135deg, #3dd4c6 0%, #14b0a3 45%, #0e948a 100%);
|
||||||
|
box-shadow: 0 4px 12px rgba(13, 155, 143, 0.45);
|
||||||
|
}
|
||||||
|
.plagiarism-auto-check-btn.el-button.is-loading {
|
||||||
|
background: linear-gradient(135deg, #2ec4b6 0%, #0d9b8f 45%, #0a7f76 100%);
|
||||||
|
}
|
||||||
|
.plagiarism-check-block {
|
||||||
|
margin: 0 0 10px 0;
|
||||||
|
padding: 10px 12px;
|
||||||
|
background: #f8fafc;
|
||||||
|
border: 1px solid #e8edf3;
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
.plagiarism-check-header {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
margin-bottom: 8px;
|
||||||
|
}
|
||||||
|
.plagiarism-check-actions {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 4px;
|
||||||
|
}
|
||||||
|
.plagiarism-check-actions .el-button {
|
||||||
|
padding: 0 6px;
|
||||||
|
}
|
||||||
|
.plagiarism-check-title {
|
||||||
|
font-size: 13px;
|
||||||
|
color: #606266;
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
.plagiarism-check-list-wrap {
|
||||||
|
min-height: 32px;
|
||||||
|
}
|
||||||
|
.plagiarism-check-row {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 10px;
|
||||||
|
padding: 6px 0;
|
||||||
|
border-top: 1px solid #eef1f5;
|
||||||
|
font-size: 12px;
|
||||||
|
line-height: 20px;
|
||||||
|
}
|
||||||
|
.plagiarism-check-row:first-child {
|
||||||
|
border-top: none;
|
||||||
|
padding-top: 0;
|
||||||
|
}
|
||||||
|
.plagiarism-sim-dot {
|
||||||
|
flex-shrink: 0;
|
||||||
|
width: 10px;
|
||||||
|
height: 10px;
|
||||||
|
border-radius: 1px;
|
||||||
|
}
|
||||||
|
.plagiarism-sim-dot.sim-zero {
|
||||||
|
background: #00a99d;
|
||||||
|
}
|
||||||
|
.plagiarism-sim-dot.sim-low {
|
||||||
|
background: #0070c0;
|
||||||
|
}
|
||||||
|
.plagiarism-sim-dot.sim-high {
|
||||||
|
background: #c87f0a;
|
||||||
|
}
|
||||||
|
.plagiarism-sim-dot.sim-unknown {
|
||||||
|
background: #c0c4cc;
|
||||||
|
}
|
||||||
|
.plagiarism-sim-pct {
|
||||||
|
flex-shrink: 0;
|
||||||
|
min-width: 36px;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
.plagiarism-sim-pct.sim-zero {
|
||||||
|
color: #00a99d;
|
||||||
|
}
|
||||||
|
.plagiarism-sim-pct.sim-low {
|
||||||
|
color: #0070c0;
|
||||||
|
}
|
||||||
|
.plagiarism-sim-pct.sim-high {
|
||||||
|
color: #c87f0a;
|
||||||
|
}
|
||||||
|
.plagiarism-sim-pct.sim-unknown {
|
||||||
|
color: #909399;
|
||||||
|
}
|
||||||
|
.plagiarism-sim-date {
|
||||||
|
flex-shrink: 0;
|
||||||
|
color: #909399;
|
||||||
|
}
|
||||||
|
.plagiarism-sim-state {
|
||||||
|
flex: 1;
|
||||||
|
min-width: 48px;
|
||||||
|
color: #909399;
|
||||||
|
text-align: center;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
.plagiarism-sim-state.state-uploading {
|
||||||
|
color: #e6a23c;
|
||||||
|
}
|
||||||
|
.plagiarism-sim-state.state-done {
|
||||||
|
color: #67c23a;
|
||||||
|
}
|
||||||
|
.plagiarism-sim-state.state-fail {
|
||||||
|
color: #f56c6c;
|
||||||
|
}
|
||||||
|
.plagiarism-sim-report {
|
||||||
|
flex-shrink: 0;
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: flex-end;
|
||||||
|
gap: 6px;
|
||||||
|
}
|
||||||
|
.plagiarism-report-preview {
|
||||||
|
color: #409eff;
|
||||||
|
text-decoration: none;
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 4px;
|
||||||
|
}
|
||||||
|
.plagiarism-report-preview:hover {
|
||||||
|
text-decoration: underline;
|
||||||
|
color: #66b1ff;
|
||||||
|
}
|
||||||
|
.plagiarism-report-preview .el-icon-link {
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
.plagiarism-check-no-pdf {
|
||||||
|
color: #f56c6c;
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
.plagiarism-pdf-preview-body {
|
||||||
|
min-height: 70vh;
|
||||||
|
}
|
||||||
|
.plagiarism-pdf-preview-iframe {
|
||||||
|
width: 100%;
|
||||||
|
height: 70vh;
|
||||||
|
border: none;
|
||||||
|
background: #f5f7fa;
|
||||||
|
}
|
||||||
.el-upload__tip {
|
.el-upload__tip {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
line-height: 32px;
|
line-height: 32px;
|
||||||
|
|||||||
@@ -432,6 +432,14 @@
|
|||||||
count: counts.young,
|
count: counts.young,
|
||||||
jump: { path: '/youthList', queryKey: 'journal_id' }
|
jump: { path: '/youthList', queryKey: 'journal_id' }
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
value: '6',
|
||||||
|
label: this.$t('autoPromotion.factoryExpertReviewer'),
|
||||||
|
desc: this.$t('autoPromotion.factoryExpertReviewer'),
|
||||||
|
icon: 'el-icon-s-check',
|
||||||
|
count: counts.reviewer,
|
||||||
|
jump: { path: '/reviewerList', queryKey: 'journal_id' }
|
||||||
|
},
|
||||||
{
|
{
|
||||||
value: '4',
|
value: '4',
|
||||||
label: this.$t('autoPromotion.factoryExpertAuthor'),
|
label: this.$t('autoPromotion.factoryExpertAuthor'),
|
||||||
@@ -447,14 +455,6 @@
|
|||||||
icon: 'el-icon-collection',
|
icon: 'el-icon-collection',
|
||||||
count: counts.expertDb,
|
count: counts.expertDb,
|
||||||
jump: { path: '/expertDatabase', queryKey: 'journal_id' }
|
jump: { path: '/expertDatabase', queryKey: 'journal_id' }
|
||||||
},
|
|
||||||
{
|
|
||||||
value: '6',
|
|
||||||
label: this.$t('autoPromotion.factoryExpertReviewer'),
|
|
||||||
desc: this.$t('autoPromotion.factoryExpertReviewer'),
|
|
||||||
icon: 'el-icon-s-check',
|
|
||||||
count: counts.reviewer,
|
|
||||||
jump: { path: '/reviewerList', queryKey: 'journal_id' }
|
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user