Compare commits
3 Commits
Editorial-
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| 4c7b191311 | |||
| c36145b848 | |||
| 6cd8b17bf3 |
@@ -24,7 +24,9 @@ a {
|
||||
text-decoration: none
|
||||
}
|
||||
|
||||
|
||||
.page-container {
|
||||
min-width: 1200px;
|
||||
}
|
||||
.content-box {
|
||||
position: absolute;
|
||||
left: 260px;
|
||||
|
||||
@@ -86,6 +86,7 @@ export default {
|
||||
props: ['home'],
|
||||
data() {
|
||||
return {
|
||||
localUsername: localStorage.getItem('U_name') || 'unknown user',
|
||||
isProofreading: false,
|
||||
collapse: false,
|
||||
fullscreen: false,
|
||||
@@ -131,9 +132,10 @@ export default {
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
|
||||
username() {
|
||||
let username = localStorage.getItem('U_name');
|
||||
return username ? username : this.name;
|
||||
|
||||
return this.localUsername ? this.localUsername : this.name;
|
||||
},
|
||||
onRoutes() {
|
||||
0;
|
||||
@@ -153,6 +155,11 @@ export default {
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
updateUsername() {
|
||||
|
||||
this.localUsername = localStorage.getItem('U_name');
|
||||
|
||||
},
|
||||
goHome() {
|
||||
this.$router.push('/');
|
||||
},
|
||||
@@ -272,10 +279,19 @@ export default {
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
if (this.$bus) { // 检查 $bus 是否存在,避免未定义错误
|
||||
this.$bus.$on('user-name-updated', this.updateUsername);
|
||||
}
|
||||
if (document.body.clientWidth < 1000) {
|
||||
this.collapseChage();
|
||||
}
|
||||
},
|
||||
beforeDestroy() {
|
||||
// 步骤 C2: 销毁前移除监听器
|
||||
if (this.$bus) {
|
||||
this.$bus.$off('user-name-updated', this.updateUsername);
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
$route: {
|
||||
handler: function (route) {
|
||||
|
||||
@@ -5,13 +5,13 @@
|
||||
// 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 = 'http://tougaotest.tmrjournals.com/public/';
|
||||
const mediaUrl = 'https://submission.tmrjournals.com/public/';
|
||||
// const mediaUrl = 'http://zmzm.tougao.dev.com/public/';
|
||||
const baseUrl = '/api';
|
||||
const baseUrl = '/api'
|
||||
|
||||
// const mediaUrl = 'http://tougaotest.tmrjournals.com/public/';
|
||||
// // const mediaUrl = 'http://zmzm.tougao.dev.com/public/';
|
||||
// const baseUrl = '/api';
|
||||
|
||||
//本地(正式环境 )
|
||||
|
||||
|
||||
@@ -1875,11 +1875,12 @@ export default {
|
||||
},
|
||||
handleAvatarError(res, file) {},
|
||||
beforeAvatarUpload(file) {
|
||||
// const isLt2M = file.size / 1024 / 1024 < 10;
|
||||
// if (!isLt2M) {
|
||||
// this.$message.error('Picture size cannot exceed 10M!');
|
||||
// }
|
||||
// return isLt2M;
|
||||
const isLt2M = file.size / 1024 / 1024 < 20;
|
||||
if (!isLt2M) {
|
||||
this.$message.error('Picture size cannot exceed 20M!');
|
||||
return false;
|
||||
}
|
||||
|
||||
const isValidFormat = ['image/jpeg', 'image/png', 'image/tiff'].includes(file.type);
|
||||
if (!isValidFormat) {
|
||||
this.$message.error(this.$t('commonTable.uploadImageInfo'));
|
||||
|
||||
@@ -124,7 +124,7 @@ export default {
|
||||
// formatter函数动态修改tooltip样式
|
||||
formatter: function (params) {
|
||||
var that = this;
|
||||
console.log('params at line 430:', params);
|
||||
|
||||
if (params) {
|
||||
var htmlStr = '';
|
||||
// htmlStr += params[0].name.replace(/\-/g, '/') + '<br/>'; //x轴的名称
|
||||
@@ -324,7 +324,7 @@ export default {
|
||||
var otherInfo = optionJournalData.map((e) => {
|
||||
for (let i in e.value) {
|
||||
if (i == key) {
|
||||
console.log('e at line 299:', e.value[i]);
|
||||
|
||||
return {
|
||||
key: e.key,
|
||||
value: e.value[i].split('/')[0]
|
||||
@@ -386,7 +386,7 @@ export default {
|
||||
var url = '';
|
||||
if (type == 'month') {
|
||||
for (let i in this.monthData) {
|
||||
console.log('i at line 386:', i);
|
||||
|
||||
timeData.push(i);
|
||||
}
|
||||
|
||||
@@ -396,7 +396,7 @@ export default {
|
||||
});
|
||||
} else if (type == 'year') {
|
||||
for (let i in this.yearData) {
|
||||
console.log('i at line 386:', i);
|
||||
|
||||
timeData.push(i);
|
||||
}
|
||||
tableData = this.JournalYearData.map((e) => {
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
{{ item.name }}
|
||||
</h5>
|
||||
<p v-if="index == 0">
|
||||
|
||||
<span style="color: #f56c6c; font-weight: 700" v-if="feeStatus == 0">
|
||||
<i class="el-icon-warning" style="margin-right: 10px"></i>Manuscript unpaid
|
||||
</span>
|
||||
@@ -89,6 +90,7 @@
|
||||
|
||||
<el-table-column prop="" :label="$t('pendingPayment.Paymentstatus')">
|
||||
<template slot-scope="scope">
|
||||
|
||||
<span v-if="feeStatus == 0" style="color: #f56c6c"><b>Manuscript unpaid</b></span>
|
||||
<span v-if="feeStatus == 1" style="color: #67c23a"><b>Paid already</b></span>
|
||||
<span v-if="feeStatus == 2" style="color: #67c23a"><b>No payment required</b></span>
|
||||
@@ -731,9 +733,11 @@ export default {
|
||||
paystation_currency: res.data.order && res.data.order.paystation ? res.data.order.paystation.currency : ''
|
||||
};
|
||||
|
||||
if (this.article_pay_info.is_buy == 1) {
|
||||
if (this.article_pay_info.is_buy == 1) {
|
||||
if (Number(this.article_pay_info.fee) == 0) {
|
||||
|
||||
this.feeStatus = 2;
|
||||
|
||||
} else {
|
||||
this.feeStatus = 1;
|
||||
}
|
||||
@@ -741,8 +745,8 @@ export default {
|
||||
this.feeStatus = 0;
|
||||
}
|
||||
this.tableData = [{ ...this.article_pay_info }];
|
||||
this.feeStatus = res.data.state;
|
||||
this.isShowCommit = res.data.state == 1 ? true : false;
|
||||
|
||||
this.isShowCommit = this.article_pay_info.is_buy == 1 ? true : false;
|
||||
console.log(this.isShowCommit);
|
||||
}
|
||||
});
|
||||
|
||||
@@ -128,7 +128,7 @@ export default {
|
||||
// formatter函数动态修改tooltip样式
|
||||
formatter: function (params) {
|
||||
var that = this;
|
||||
console.log('params at line 430:', params);
|
||||
|
||||
if (params) {
|
||||
var htmlStr = '';
|
||||
// htmlStr += params[0].name.replace(/\-/g, '/') + '<br/>'; //x轴的名称
|
||||
@@ -328,7 +328,7 @@ export default {
|
||||
var otherInfo = optionJournalData.map((e) => {
|
||||
for (let i in e.value) {
|
||||
if (i == key) {
|
||||
console.log('e at line 299:', e.value[i]);
|
||||
|
||||
return {
|
||||
key: e.key,
|
||||
value: e.value[i].split('/')[0]
|
||||
@@ -390,7 +390,7 @@ export default {
|
||||
var url = '';
|
||||
if (type == 'month') {
|
||||
for (let i in this.monthData) {
|
||||
console.log('i at line 386:', i);
|
||||
|
||||
timeData.push(i);
|
||||
}
|
||||
|
||||
@@ -400,7 +400,7 @@ export default {
|
||||
});
|
||||
} else if (type == 'year') {
|
||||
for (let i in this.yearData) {
|
||||
console.log('i at line 386:', i);
|
||||
|
||||
timeData.push(i);
|
||||
}
|
||||
tableData = this.JournalYearData.map((e) => {
|
||||
|
||||
@@ -154,7 +154,14 @@
|
||||
<el-input type="textarea" rows="2" v-model="form.approval_content"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="Abstract :" prop="abstrart">
|
||||
<el-input type="textarea" rows="6" v-model="form.abstrart"></el-input>
|
||||
<el-input
|
||||
type="textarea"
|
||||
v-model="form.abstrart"
|
||||
:autosize="{ minRows: 1, maxRows: 100 }"
|
||||
class="full-show-no-scroll"
|
||||
|
||||
placeholder=""
|
||||
/>
|
||||
</el-form-item>
|
||||
<!-- 话题 -->
|
||||
<!-- <el-form-item label="Topics :" prop="topics">
|
||||
@@ -166,29 +173,44 @@
|
||||
</el-form-item> -->
|
||||
|
||||
<el-form-item label="Key words :">
|
||||
<div v-if="keywordsList&&keywordsList.length > 0">
|
||||
<el-checkbox :indeterminate="isIndeterminate" v-model="checkAll" @change="handleCheckAllChange" style="color: #006699;">Select All</el-checkbox>
|
||||
<el-checkbox-group v-model="checkedCities" @change="handleCheckedCitiesChange">
|
||||
<div v-for="(item, index) in keywordsList" :key="index" style="margin-right:16px;display: inline-block;">
|
||||
<el-checkbox style="margin-right: 4px;" :label="index + 1" v-model="item.checked">{{item.keyword}}</el-checkbox>
|
||||
<el-input
|
||||
:name="index + 1"
|
||||
v-model="item.ke"
|
||||
clearable
|
||||
style="width: 150px; margin-right: 15px; margin-bottom: 3px"
|
||||
<div v-if="keywordsList && keywordsList.length > 0">
|
||||
<el-checkbox
|
||||
:indeterminate="isIndeterminate"
|
||||
v-model="checkAll"
|
||||
@change="handleCheckAllChange"
|
||||
style="color: #006699"
|
||||
>Select All</el-checkbox
|
||||
>
|
||||
</el-input>
|
||||
<el-checkbox-group v-model="checkedCities" @change="handleCheckedCitiesChange">
|
||||
<div
|
||||
v-for="(item, index) in keywordsList"
|
||||
:key="index"
|
||||
style="margin-right: 16px; display: inline-block"
|
||||
>
|
||||
<el-checkbox style="margin-right: 4px" :label="index + 1" v-model="item.checked">{{
|
||||
item.keyword
|
||||
}}</el-checkbox>
|
||||
<el-input
|
||||
:name="index + 1"
|
||||
v-model="item.ke"
|
||||
clearable
|
||||
style="width: 150px; margin-right: 15px; margin-bottom: 3px"
|
||||
>
|
||||
</el-input>
|
||||
</div>
|
||||
</el-checkbox-group>
|
||||
</div>
|
||||
</el-checkbox-group>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<el-button type="text" @click="addfund">
|
||||
<i class="el-icon-circle-plus-outline">Add</i>
|
||||
</el-button>
|
||||
<el-button v-if="checkedCities.length > 0" type="text" @click="deletefund" style="color: #f56c6c;margin-left: 20px;">
|
||||
<i class="el-icon-remove-outline" style="color: #f56c6c;">Delete</i>
|
||||
<el-button
|
||||
v-if="checkedCities.length > 0"
|
||||
type="text"
|
||||
@click="deletefund"
|
||||
style="color: #f56c6c; margin-left: 20px"
|
||||
>
|
||||
<i class="el-icon-remove-outline" style="color: #f56c6c">Delete</i>
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
<el-form-item label="Fund :">
|
||||
@@ -820,9 +842,13 @@
|
||||
<font style="color: #006699">3.Value:</font> This manuscript belongs to the advanced topic and can attract wide
|
||||
attention.
|
||||
<br />
|
||||
<span style="margin-top:6px"> please download the manuscript template <font @click="dowloadFileTemplate()" style="color: #006699;margin-left: 2px;cursor: pointer;"> <i class="el-icon-download" style="font-weight: bold"></i> Microsoft Word template</font>.
|
||||
</span>
|
||||
</p>
|
||||
<span style="margin-top: 6px">
|
||||
please download the manuscript template
|
||||
<font @click="dowloadFileTemplate()" style="color: #006699; margin-left: 2px; cursor: pointer">
|
||||
<i class="el-icon-download" style="font-weight: bold"></i> Microsoft Word template</font
|
||||
>.
|
||||
</span>
|
||||
</p>
|
||||
<common-word-html
|
||||
:articleId="stagingID"
|
||||
imgHeight="120px"
|
||||
@@ -1038,7 +1064,6 @@ export default {
|
||||
ProgressBar
|
||||
},
|
||||
data() {
|
||||
|
||||
// 自定义校验:禁止QQ邮箱
|
||||
const validateNotQQEmail = (rule, value, callback) => {
|
||||
// 通用邮箱格式正则(基础校验,匹配大多数标准邮箱格式)
|
||||
@@ -1602,17 +1627,16 @@ export default {
|
||||
},
|
||||
methods: {
|
||||
handleCheckAllChange(val) {
|
||||
this.checkedCities = val
|
||||
? this.keywordsList.map((_, index) => index + 1) // 遍历数组,取 index+1 作为选中值
|
||||
: [];
|
||||
this.isIndeterminate = false;
|
||||
this.checkedCities = val
|
||||
? this.keywordsList.map((_, index) => index + 1) // 遍历数组,取 index+1 作为选中值
|
||||
: [];
|
||||
this.isIndeterminate = false;
|
||||
},
|
||||
handleCheckedCitiesChange(){
|
||||
|
||||
console.log('this.checkedCities at line 1594:', this.checkedCities)
|
||||
handleCheckedCitiesChange() {
|
||||
console.log('this.checkedCities at line 1594:', this.checkedCities);
|
||||
},
|
||||
handleDelete(index){
|
||||
this.keywordsList.splice(index, 1);
|
||||
handleDelete(index) {
|
||||
this.keywordsList.splice(index, 1);
|
||||
},
|
||||
closeAuthorDialog() {
|
||||
this.getAuthorList();
|
||||
@@ -1856,7 +1880,7 @@ this.keywordsList.splice(index, 1);
|
||||
this.form.journal = '';
|
||||
this.reviewerof.journal = 1;
|
||||
|
||||
console.log('this.form at line 1386:', this.form);
|
||||
|
||||
if (localStorage.getItem('ms_journal_alias')) {
|
||||
localStorage.removeItem('ms_journal_alias');
|
||||
}
|
||||
@@ -1960,22 +1984,21 @@ this.keywordsList.splice(index, 1);
|
||||
deletefund() {
|
||||
if (!this.checkedCities.length) {
|
||||
this.$message.error('please select the key word to delete');
|
||||
return;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// 2. 将选中的序号(index+1)转成原始索引(index),并存入集合(提高查询效率)
|
||||
const selectedIndexes = new Set(
|
||||
this.checkedCities.map(seq => seq - 1) // 序号 - 1 = 原始索引
|
||||
);
|
||||
// 2. 将选中的序号(index+1)转成原始索引(index),并存入集合(提高查询效率)
|
||||
const selectedIndexes = new Set(
|
||||
this.checkedCities.map((seq) => seq - 1) // 序号 - 1 = 原始索引
|
||||
);
|
||||
|
||||
// 3. 过滤 keywordsList:保留索引不在选中集合中的项
|
||||
this.keywordsList = this.keywordsList.filter((_, index) =>
|
||||
!selectedIndexes.has(index)
|
||||
);
|
||||
this.checkAll = false;
|
||||
// 4. 清空选中状态和半选状态(删除后无选中项)
|
||||
this.checkedCities = [];
|
||||
this.isIndeterminate = false; },
|
||||
// 3. 过滤 keywordsList:保留索引不在选中集合中的项
|
||||
this.keywordsList = this.keywordsList.filter((_, index) => !selectedIndexes.has(index));
|
||||
this.checkAll = false;
|
||||
// 4. 清空选中状态和半选状态(删除后无选中项)
|
||||
this.checkedCities = [];
|
||||
this.isIndeterminate = false;
|
||||
},
|
||||
//初始化期刊选项
|
||||
initSelect() {
|
||||
this.items = this.$store.state.journalList;
|
||||
@@ -2492,21 +2515,20 @@ this.checkAll = false;
|
||||
onDeleteTuijian(item, index) {
|
||||
this.tuiJianForm.splice(index, 1);
|
||||
},
|
||||
dowloadFileTemplate(){
|
||||
var filePath = 'https://submission.tmrjournals.com/public/ArticleTemplate/manuscirpt/ManuscirptWordTemplate.docx';
|
||||
dowloadFileTemplate() {
|
||||
var filePath = 'https://submission.tmrjournals.com/public/ArticleTemplate/manuscirpt/ManuscirptWordTemplate.docx';
|
||||
|
||||
// 获取heads中的filename文件名
|
||||
let downloadElement = document.createElement('a');
|
||||
// 创建下载的链接
|
||||
downloadElement.href = filePath; // 下载后文件名
|
||||
|
||||
// 获取heads中的filename文件名
|
||||
let downloadElement = document.createElement('a');
|
||||
// 创建下载的链接
|
||||
downloadElement.href = filePath; // 下载后文件名
|
||||
|
||||
downloadElement.target = '_blank';
|
||||
document.body.appendChild(downloadElement);
|
||||
// 点击下载
|
||||
downloadElement.click();
|
||||
// 下载完成移除元素
|
||||
document.body.removeChild(downloadElement);
|
||||
downloadElement.target = '_blank';
|
||||
document.body.appendChild(downloadElement);
|
||||
// 点击下载
|
||||
downloadElement.click();
|
||||
// 下载完成移除元素
|
||||
document.body.removeChild(downloadElement);
|
||||
},
|
||||
// 下载文件
|
||||
dowloadFile(file) {
|
||||
@@ -4016,6 +4038,30 @@ document.body.removeChild(downloadElement);
|
||||
margin-left: 10px;
|
||||
cursor: pointer;
|
||||
}
|
||||
/* 穿透Element UI的样式,强制覆盖所有限制 */
|
||||
.full-show-no-scroll::v-deep .el-textarea {
|
||||
|
||||
overflow: visible !important;
|
||||
}
|
||||
|
||||
.full-show-no-scroll::v-deep .el-textarea__inner {
|
||||
white-space: normal !important; /* 强制换行 */
|
||||
word-wrap: break-word !important; /* 长文本/长单词换行 */
|
||||
overflow: visible !important; /* 溢出内容显示,不隐藏 */
|
||||
|
||||
max-height: none !important; /* 取消最大高度限制 */
|
||||
resize: none !important; /* 禁止手动调整大小 */
|
||||
padding: 12px; /* 可选:调整内边距,避免内容贴边 */
|
||||
}
|
||||
|
||||
/* 隐藏滚动条(即使偶尔出现也看不见) */
|
||||
.full-show-no-scroll::v-deep ::-webkit-scrollbar {
|
||||
display: none !important;
|
||||
}
|
||||
::v-deep .el-textarea__inner {
|
||||
line-height: 1.5 !important;
|
||||
font-family: 'Helvetica Neue For Number', 'Elsevier Gulliver', Georgia, serif !important;
|
||||
}
|
||||
</style>
|
||||
|
||||
<style>
|
||||
|
||||
@@ -1620,7 +1620,7 @@ export default {
|
||||
this.form.journal = '';
|
||||
this.reviewerof.journal = 1;
|
||||
|
||||
console.log('this.form at line 1386:', this.form);
|
||||
|
||||
if (localStorage.getItem('ms_journal_alias')) {
|
||||
localStorage.removeItem('ms_journal_alias');
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div>
|
||||
<div class="crumbs">
|
||||
<div class="art_state_message_id" style="padding-left: 15px">
|
||||
<div class="art_state_message_id" style="padding-left: 18px">
|
||||
<font
|
||||
>ID : <b style="margin-right: 25px">{{ form.accept_sn }}</b></font
|
||||
>
|
||||
@@ -204,7 +204,7 @@
|
||||
height: 30px;
|
||||
margin-right: 4px;
|
||||
position: absolute;
|
||||
left: -16px;
|
||||
left: -15px;
|
||||
top: -30px;
|
||||
cursor: pointer;
|
||||
"
|
||||
@@ -216,7 +216,7 @@
|
||||
<img
|
||||
src="@/assets/img/ai.png"
|
||||
class="beautiful-gradient"
|
||||
style="width: 30px; height: 30px; margin-right: 4px; position: absolute; left: -18px; top: -30px; cursor: pointer"
|
||||
style="width: 30px; height: 30px; margin-right: 4px; position: absolute; left: -15px; top: -30px; cursor: pointer"
|
||||
@click="openAI()"
|
||||
/>
|
||||
</div>
|
||||
@@ -659,7 +659,7 @@
|
||||
>( {{ iken.rated }} )</span
|
||||
>
|
||||
<span
|
||||
v-if="iken.state != 0"
|
||||
|
||||
style="color: #888; float: right; margin-right: 20px"
|
||||
@click="handleClick(iken, 'detail')"
|
||||
>Detail</span
|
||||
@@ -964,6 +964,7 @@
|
||||
<p style="line-height: 20px">
|
||||
Manuscript submission :
|
||||
<b>{{ form.username }}</b>
|
||||
<span style="margin: 0 5px;color: #409EFF ;">({{ form.user_email }})</span>
|
||||
submitted to
|
||||
<b>{{ journal_me }}</b>
|
||||
</p>
|
||||
@@ -1922,6 +1923,7 @@ export default {
|
||||
return maxItem && maxItem.repeat ? maxItem.repeat.length : 0;
|
||||
},
|
||||
handleClick(item, type, repeatItem) {
|
||||
|
||||
this.reviewerDetail = item;
|
||||
this.reviewerVisible = true;
|
||||
this.$nextTick(() => {
|
||||
@@ -2338,6 +2340,7 @@ export default {
|
||||
|
||||
this.initMajor();
|
||||
this.form.username = res.article.account;
|
||||
this.form.user_email = res.article.user_email;
|
||||
this.form.is_figure_copyright = res.article.is_figure_copyright;
|
||||
this.form.title = res.article.title;
|
||||
this.form.journal = res.article.journal_id;
|
||||
|
||||
@@ -1088,7 +1088,7 @@ export default {
|
||||
this.detailDate.articlezip = '';
|
||||
},
|
||||
mystate(mystate) {
|
||||
console.log('mystate at line 1052:', mystate);
|
||||
|
||||
let str = '';
|
||||
switch (mystate) {
|
||||
case 1:
|
||||
|
||||
@@ -935,7 +935,7 @@
|
||||
>( {{ iken.rated }} )</span
|
||||
>
|
||||
<span
|
||||
v-if="iken.state != 0"
|
||||
|
||||
style="color: #006699; float: right; margin-top: 2px"
|
||||
@click="handleClick(iken)"
|
||||
>Detail</span
|
||||
@@ -1997,7 +1997,7 @@ export default {
|
||||
},
|
||||
// 获取数据
|
||||
async getdate(options) {
|
||||
console.log('options at line 1917:', options);
|
||||
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: 'Loading...',
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<div>
|
||||
<div class="page-container">
|
||||
<div class="crumbs">
|
||||
<el-breadcrumb separator="/">
|
||||
<el-breadcrumb-item> <i class="el-icon-lx-calendar"></i> Manuscript reviewer list </el-breadcrumb-item>
|
||||
@@ -103,9 +103,10 @@
|
||||
</font>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="" width="100" align="center">
|
||||
<el-table-column label="" width="180" align="center">
|
||||
<template slot-scope="scope">
|
||||
<el-button v-show="scope.row.state!=4"ize="mini" type="primary" plain icon="el-icon-tickets" @click="showdetail(scope.row)">Detail</el-button>
|
||||
<el-button style="margin-top: 8px;"v-show="scope.row.is_reapply==1"ize="mini" type="success" plain icon="el-icon-refresh-right" @click="reinviteReview(scope.row)">Resend Invitation</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
@@ -504,6 +505,40 @@ export default {
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
reinviteReview(row) {
|
||||
console.log(row);
|
||||
this.$confirm('Are you sure you want to resend the review invitation to this reviewer?', 'Tips', {
|
||||
confirmButtonText: 'Sure',
|
||||
cancelButtonText: 'Cancel',
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: 'please wait',
|
||||
spinner: 'el-icon-loading',
|
||||
background: 'rgba(0, 0, 0, 0.7)'
|
||||
});
|
||||
this.$api
|
||||
.post('api/Workbench/updateReviewerState', {
|
||||
|
||||
account: localStorage.getItem('U_name'),
|
||||
art_rev_id: row.art_rev_id,
|
||||
|
||||
})
|
||||
.then((res) => {
|
||||
loading.close();
|
||||
if (res.status == 1) {
|
||||
this.$message.success('Email sent successfully!');
|
||||
} else {
|
||||
this.$message.error(res.msg);
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
loading.close();
|
||||
});
|
||||
});
|
||||
|
||||
},
|
||||
initArticle() {
|
||||
this.$api
|
||||
.post('api/Article/getArticleDetail', {
|
||||
|
||||
@@ -386,7 +386,7 @@ export default {
|
||||
this.detailDate.articlezip = '';
|
||||
},
|
||||
mystate(mystate) {
|
||||
console.log('mystate at line 1052:', mystate);
|
||||
|
||||
let str = '';
|
||||
switch (mystate) {
|
||||
case 1:
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
<el-form-item label="CreateTime">
|
||||
<span>{{ formatDate(detailDate.ctime) }}</span>
|
||||
</el-form-item>
|
||||
<el-form-item label="Disclose name or anonymous" label-width="200px">
|
||||
<el-form-item label="Disclose name or anonymous" label-width="200px" v-if="reviewerDetail.state != 0">
|
||||
<span v-if="detailDate.is_anonymous == 0">Disclose name</span>
|
||||
<span v-if="detailDate.is_anonymous == 1">Remain anonymous</span>
|
||||
</el-form-item>
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
<template>
|
||||
<div class="success-box" v-if="articleInfo && (articleInfo.state == 0 || articleInfo.state == 1)">
|
||||
<div class="success-box">
|
||||
<div v-if="articleInfo && (articleInfo.state == 0 || articleInfo.state == 1)&&!paymentChecking">
|
||||
<div :class="{ 'payment-success': articleInfo.state == 1, 'payment-failed': articleInfo.state == 0 }">
|
||||
<div style="display: flex; align-items: center; margin-bottom: 10px">
|
||||
<h2 style="margin: 0 auto; display: flex; align-items: center">
|
||||
@@ -35,23 +36,73 @@
|
||||
<p v-if="articleInfo.state == 1">You will receive an email confirmation shortly.</p>
|
||||
<button @click="goBack" :class="articleInfo.state == 1 ? 'btn-success' : 'btn-danger'">Continue Operation</button>
|
||||
<p :style="articleInfo.state == 1 ? 'color:#67c23a' : 'color:#F56C6C'" style="font-size: 13px; line-height: 40px">
|
||||
Automatically jump after {{ hideSec }} seconds
|
||||
Automatically jump after {{ hideSec<=0 ? '0' : hideSec }} seconds
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="payment-result-card" v-if="paymentChecking">
|
||||
|
||||
<div class="result-header">
|
||||
<div class="result-header-text">
|
||||
<img src="@/assets/img/logo.png" alt="" style="height: 26px">
|
||||
|
||||
<p>Publishing Group</p>
|
||||
</div>
|
||||
<div class="header-icon">Processing Your Secure Payment</div>
|
||||
</div>
|
||||
|
||||
<div class="result-body">
|
||||
|
||||
<div class="manuscript-header">
|
||||
<div class="manuscript-meta">
|
||||
<span>
|
||||
<a :href="journalBaseInfo.website" target="_blank" class="titlink">{{ journalBaseInfo.title }}</a>
|
||||
<span style="margin: 0 10px"> >> </span>
|
||||
Manuscript ID : {{ articleBaseInfo.accept_sn }}
|
||||
</span>
|
||||
|
||||
</div>
|
||||
<h1>{{ articleBaseInfo.title }}</h1>
|
||||
</div>
|
||||
|
||||
<!-- <h4></h4> -->
|
||||
|
||||
|
||||
<!-- <p>This may take a few moments. Please remain on this page.</p> -->
|
||||
|
||||
<div class="loading-spinner"></div>
|
||||
|
||||
<div class="result-warning">
|
||||
<p>
|
||||
⚠️ DO NOT close this window or refresh your browser.
|
||||
</p>
|
||||
<span>We are waiting for final confirmation from the payment system.</span>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
paymentChecking: false,
|
||||
alertShow: true,
|
||||
urlList: {
|
||||
detail: 'api/Order/PaystationLookup',
|
||||
createdOrder: 'api/Order/creatArticleOrder'
|
||||
},
|
||||
|
||||
articleInfo: {},
|
||||
journalInfo: {},
|
||||
articleBaseInfo: {},
|
||||
journalBaseInfo: {},
|
||||
total: '',
|
||||
articleId: this.$route.query.id,
|
||||
dingshi: null,
|
||||
@@ -59,13 +110,14 @@ export default {
|
||||
};
|
||||
},
|
||||
created() {
|
||||
this.getDetail();
|
||||
this.getDetail()
|
||||
},
|
||||
mounted() {
|
||||
|
||||
|
||||
},
|
||||
methods: {
|
||||
hideAlert() {
|
||||
|
||||
this.dingshi = setInterval(() => {
|
||||
this.hideSec -= 1;
|
||||
if (this.hideSec == 1) {
|
||||
@@ -80,12 +132,38 @@ export default {
|
||||
return amount.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
|
||||
},
|
||||
getDetail() {
|
||||
const loading = this.$loading({
|
||||
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: 'Querying payment results...',
|
||||
text: 'Loading...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: 'rgba(0, 0, 0, 0.7)'
|
||||
});
|
||||
|
||||
this.$api
|
||||
.post('api/Order/preOrderDetail', {
|
||||
article_id: this.articleId
|
||||
})
|
||||
.then((res) => {
|
||||
loading.close();
|
||||
this.paymentChecking = true;
|
||||
console.log('res at line 191:', res);
|
||||
if (res.code == 0) {
|
||||
this.articleBaseInfo = res.data.article_detail;
|
||||
this.journalBaseInfo = res.data.journal_detail;
|
||||
this.getPayDetail();
|
||||
}
|
||||
})
|
||||
.catch(() => {
|
||||
loading.close();
|
||||
|
||||
|
||||
});
|
||||
},
|
||||
getPayDetail() {
|
||||
|
||||
|
||||
|
||||
this.$api
|
||||
.post(this.urlList.detail, {
|
||||
article_id: this.articleId
|
||||
@@ -93,8 +171,9 @@ export default {
|
||||
.then((res) => {
|
||||
console.log('res at line 191:', res);
|
||||
if (res.code == 0) {
|
||||
|
||||
this.hideAlert();
|
||||
setTimeout(() => {
|
||||
setTimeout(() => {this.paymentChecking = false;
|
||||
if (res.data.result == 'success') {
|
||||
this.articleInfo = res.data.paystation;
|
||||
this.articleInfo.state = 1;
|
||||
@@ -103,15 +182,17 @@ export default {
|
||||
this.articleInfo.state = 0;
|
||||
this.$forceUpdate();
|
||||
}
|
||||
loading.close();
|
||||
|
||||
}, 1000);
|
||||
} else {
|
||||
loading.close();
|
||||
this.paymentChecking = false;
|
||||
|
||||
this.$message.error(res.msg);
|
||||
}
|
||||
})
|
||||
.catch(() => {
|
||||
loading.close();
|
||||
this.paymentChecking = false;
|
||||
|
||||
});
|
||||
},
|
||||
goBack() {
|
||||
@@ -119,18 +200,7 @@ export default {
|
||||
type = this.$route.query.type ? this.$route.query.type : '';
|
||||
var id = this.$route.query.id;
|
||||
console.log('id at line 83:', id);
|
||||
// 跳转到新的路由
|
||||
|
||||
// if (type == 'Pre-accept') {
|
||||
// this.$router.replace({ name: 'success' });
|
||||
// this.$router.push({
|
||||
// path: '/PreIngested',
|
||||
// query:{
|
||||
// id: id
|
||||
// }
|
||||
|
||||
// });
|
||||
// } else {
|
||||
|
||||
this.$router.replace({ name: 'success' });
|
||||
this.$router.push({
|
||||
path: '/PreIngested',
|
||||
@@ -138,14 +208,150 @@ export default {
|
||||
id: id
|
||||
}
|
||||
});
|
||||
// }
|
||||
//
|
||||
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.titlink {
|
||||
color: #006699;
|
||||
text-decoration: underline;
|
||||
cursor: pointer;
|
||||
}
|
||||
/* --- 稿件信息样式 --- */
|
||||
.manuscript-header {
|
||||
/* border-bottom: 1px solid #eee; */
|
||||
padding-bottom: 10px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.manuscript-header h1 {
|
||||
color: #303133; /* 深蓝色/专业色 */
|
||||
font-size: 20px;
|
||||
margin: 0 0 5px 0;
|
||||
font-weight: 700;
|
||||
margin-top: 12px;
|
||||
}
|
||||
|
||||
.manuscript-meta {
|
||||
color: #7f8c8d; /* 浅灰色元数据 */
|
||||
font-size: 0.9em;
|
||||
margin-top: 5px;
|
||||
}
|
||||
/* --- 核心卡片容器 (原 .card-container) --- */
|
||||
.payment-result-card {
|
||||
width: 800px;
|
||||
|
||||
background-color: #ffffff;
|
||||
border-radius: 10px;
|
||||
/* 柔和且明显的阴影,模拟浮动效果 */
|
||||
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.15);
|
||||
overflow: hidden;
|
||||
border: 1px solid #e0e0e0;
|
||||
}
|
||||
|
||||
/* --- 头部品牌信息 (原 .header) --- */
|
||||
.result-header {
|
||||
padding: 30px;
|
||||
padding-bottom: 20px;
|
||||
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.09);
|
||||
}
|
||||
|
||||
.result-header-text h1 {
|
||||
color: #1a5276;
|
||||
font-size: 14px;
|
||||
font-weight: 700;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.result-header-text p {
|
||||
color: #777;
|
||||
font-size: 0.85em;
|
||||
margin: 5px 0 0 0;
|
||||
font-weight: 300;
|
||||
}
|
||||
|
||||
|
||||
.header-icon {
|
||||
font-size: 18px;
|
||||
color: #1a5276;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
|
||||
.result-body {
|
||||
padding: 30px;
|
||||
|
||||
border-top: 1px solid #f0f0f0;
|
||||
margin-top: 15px;
|
||||
|
||||
|
||||
box-shadow: 0 10px 52px rgba(0, 0, 0, 0.09);
|
||||
}
|
||||
|
||||
.result-body h3 {
|
||||
color: #555;
|
||||
font-size: 1em;
|
||||
font-weight: 400;
|
||||
margin: 0 0 15px 0;
|
||||
}
|
||||
|
||||
.result-body h4 {
|
||||
color: #1a5276;
|
||||
font-size:14px;
|
||||
font-weight: 700;
|
||||
margin: 0 0 15px 0;
|
||||
}
|
||||
|
||||
.result-body p {
|
||||
color: #555;
|
||||
line-height: 1.6;
|
||||
margin: 0 0 10px 0;
|
||||
}
|
||||
|
||||
/* --- 动画加载器 (原 .spinner) --- */
|
||||
.loading-spinner {
|
||||
border: 5px solid #e0f0ff;
|
||||
border-top: 5px solid #1a5276;
|
||||
border-radius: 50%;
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
animation: spin 1s linear infinite;
|
||||
margin: 0px auto 30px auto;
|
||||
}
|
||||
|
||||
@keyframes spin {
|
||||
0% { transform: rotate(0deg); }
|
||||
100% { transform: rotate(360deg); }
|
||||
}
|
||||
|
||||
/* --- 警告信息 (原 .warning) --- */
|
||||
.result-warning {
|
||||
/* border-top: 1px solid #f0f0f0; */
|
||||
padding-top: 10px;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.result-warning p {
|
||||
color: #e67e22;
|
||||
font-weight: 700;
|
||||
font-size: 0.95em;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.result-warning span {
|
||||
color: #555;
|
||||
font-weight: 400;
|
||||
display: block;
|
||||
margin-top: 5px;
|
||||
font-size: 0.9em;
|
||||
}
|
||||
.payment-success {
|
||||
margin-top: 40px;
|
||||
margin: 0 auto;
|
||||
@@ -156,7 +362,7 @@ export default {
|
||||
border-radius: 16px;
|
||||
color: #155724;
|
||||
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); /* 添加阴影效果 */
|
||||
width: 600px;
|
||||
width: 800px;
|
||||
}
|
||||
.payment-failed {
|
||||
margin-top: 40px;
|
||||
@@ -168,7 +374,7 @@ export default {
|
||||
border-radius: 16px;
|
||||
color: #f56c6c;
|
||||
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); /* 添加阴影效果 */
|
||||
width: 600px;
|
||||
width: 800px;
|
||||
}
|
||||
|
||||
h2 {
|
||||
@@ -207,8 +413,9 @@ button:hover {
|
||||
.success-box {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
/* justify-content: center; */
|
||||
justify-content: center;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-color: #eef1f5;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -529,7 +529,7 @@
|
||||
class="rightTabs"
|
||||
type="border-card"
|
||||
:style="rightW ? `width:${rightW + 1}px` : ''"
|
||||
style="width: 310px; position: fixed; top: 58px; box-sizing: border-box; right: 14px"
|
||||
style="width: 310px; position: fixed; top: 40px; box-sizing: border-box; right: 14px"
|
||||
>
|
||||
<el-tab-pane :label="`AI Proofreading`" name="proofreading" v-if="isEditComment">
|
||||
<span slot="label">
|
||||
@@ -547,7 +547,7 @@
|
||||
v-loading="proofreadingLoading"
|
||||
v-if="!isPreview"
|
||||
:style="rightW ? `width:${rightW}px` : ''"
|
||||
style="width: 310px; position: fixed; top: 104px; box-sizing: border-box; right: 14px; bottom: 0"
|
||||
style="width: 310px; position: fixed; top: 90px; box-sizing: border-box; right: 14px; bottom: 0"
|
||||
class="commentList"
|
||||
>
|
||||
<li
|
||||
@@ -862,7 +862,7 @@
|
||||
style="
|
||||
width: 310px;
|
||||
position: fixed;
|
||||
top: 104px;
|
||||
top: 90px;
|
||||
box-sizing: border-box;
|
||||
right: 14px;
|
||||
bottom: 0;
|
||||
@@ -3723,7 +3723,7 @@ return false
|
||||
getContent1(type, content) {
|
||||
console.log('content at line 2986:', content);
|
||||
content = this.$commonJS.transformHtmlString(content);
|
||||
console.log('content at line 2997:', content);
|
||||
|
||||
|
||||
var div = document.createElement('div');
|
||||
div.innerHTML = content; // 将 HTML 字符串加载到 div 中
|
||||
@@ -4308,7 +4308,7 @@ return false
|
||||
/* background-color: #fff; */
|
||||
/* box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05); */
|
||||
position: fixed;
|
||||
top: 58px;
|
||||
top: 40px;
|
||||
box-sizing: border-box;
|
||||
right: 24px;
|
||||
z-index: 2;
|
||||
|
||||
@@ -814,7 +814,8 @@ export default {
|
||||
affiliation: '',
|
||||
website: '',
|
||||
realname: '',
|
||||
type: ''
|
||||
type: '',
|
||||
field: ''
|
||||
},
|
||||
editForm: {
|
||||
journal_id: 0
|
||||
@@ -1087,7 +1088,7 @@ export default {
|
||||
type: [
|
||||
{
|
||||
required: true,
|
||||
message: 'Please input type',
|
||||
message: 'Please select Identity',
|
||||
trigger: 'blur'
|
||||
}
|
||||
],
|
||||
|
||||
@@ -469,7 +469,7 @@ export default {
|
||||
// formatter函数动态修改tooltip样式
|
||||
formatter: function (params) {
|
||||
var that = this;
|
||||
console.log('params at line 430:', params);
|
||||
|
||||
if (params) {
|
||||
var htmlStr = '';
|
||||
// htmlStr += params[0].name.replace(/\-/g, '/') + '<br/>'; //x轴的名称
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
<template>
|
||||
<div style="background-color: #fafafa;height: 100%;">
|
||||
|
||||
<div style="height: 100%;"
|
||||
class="container_l"
|
||||
v-loading="loading"
|
||||
@@ -8,14 +7,13 @@
|
||||
element-loading-spinner="el-icon-loading"
|
||||
element-loading-background="rgba(0, 0, 0, 0.8)"
|
||||
>
|
||||
<el-row :gutter="20" style="height: 100%;">
|
||||
<el-col :span="10" style="height: 100%;">
|
||||
<el-row :gutter="20" style="height: 100%;" v-if="txt_mess&&txt_mess.accept_sn&&add_apply==0">
|
||||
<el-col :span="10" style="height: 100%;" v-if="this.add_apply == 0">
|
||||
<iframe ref="mainiframe" :src="pdfUrl" class="lookpdf" frameborder="0"></iframe>
|
||||
</el-col>
|
||||
<el-col :span="14" style="height: 100%; overflow-y: scroll">
|
||||
<!-- <el-col :span="24"> -->
|
||||
<el-col :span="this.add_apply == 0?14:24" style="height: 100%; overflow-y: scroll" >
|
||||
<el-card class="box-card">
|
||||
<div class="tet_list" :model="txt_mess">
|
||||
<div class="tet_list" :model="txt_mess" >
|
||||
<h4>{{ txt_mess.article_title }}</h4>
|
||||
<h5>
|
||||
<a :href="txt_mess.website" target="_blank" class="titlink">{{ txt_mess.title }}</a>
|
||||
@@ -23,8 +21,8 @@
|
||||
Manuscript ID: {{ txt_mess.accept_sn }}
|
||||
</h5>
|
||||
<p style="display: inline-block; margin: 0 35px"><b>Type :</b> {{ txt_mess.atype }}</p>
|
||||
<p style="display: inline-block"><b>Submitted time :</b> {{ txt_mess.ctime }}</p>
|
||||
<div>
|
||||
<p style="display: inline-block"><b>Submitted time :</b> {{ txt_mess.ctime | formatDatehms}}</p>
|
||||
<div v-if="this.add_apply == 0">
|
||||
<p><b>Abstract :</b> <br />{{ txt_mess.abstrart }}</p>
|
||||
<div class="file_sty" v-for="item in fileList" style="margin-top: 15px">
|
||||
<img src="../../assets/img/icon_0.png" alt="" class="icon_img" />
|
||||
@@ -51,304 +49,107 @@
|
||||
<i class="el-icon-download" style="margin-left: 20px; color: #66b1ff; font-weight: bold"></i> </a
|
||||
><br />
|
||||
</div>
|
||||
|
||||
<p style="margin-top: 5px; color: #999; font-size: 14px;">
|
||||
<b style="color: #e41411">Download failed?</b>
|
||||
<p style="line-height: 18px;color: #999; font-size: 14px;margin-top: 4px;">
|
||||
<!-- If you have upgraded the Google Chrome browser to version 86, released on October 6, 2020, you may
|
||||
have noticed that some file downloads don't work anymore in the browser. You click on the download link
|
||||
and nothing happens. <br />1. Right now, the easiest option available is to
|
||||
<b style="color: #e41411">right-click on the download link and select "save link as".</b>
|
||||
The download is executed when you do that.
|
||||
<br />2. Please try to use a different browser for downloads. For now, a browser like Firefox, Internet
|
||||
Explorer, Brave, Vivaldi, the new Edge, or Opera all allow the download. -->
|
||||
|
||||
It seems like you're encountering a download issue with Google Chrome version 86. Here are the steps you can follow to resolve or bypass the issue:
|
||||
<br />1. Right-click on the download link: Instead of clicking the link normally, right-click on it and select <b style="color: #e41411">"save link as".</b> This should allow the download to start.
|
||||
<br />2. Try a different browser:
|
||||
If you're still having trouble with Chrome, you could use other browsers to complete your downloads. Browsers like Firefox, Internet Explorer, Brave, Vivaldi, the new Edge, or Opera are known to work well for downloads without this issue.
|
||||
|
||||
|
||||
</p>
|
||||
|
||||
</p>
|
||||
</div>
|
||||
<!-- <p class="morSou" v-if="!morShow" @click="morShow=true">
|
||||
<i class="el-icon-bottom"></i>
|
||||
More article information
|
||||
</p>
|
||||
<p class="morSou" v-if="morShow" @click="morShow=false">
|
||||
<i class="el-icon-top"></i>
|
||||
More article information
|
||||
</p> -->
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
<el-card class="box-card" v-if="this.add_apply == 1">
|
||||
<!-- <el-card class="box-card" v-if="this.add_apply == 1">
|
||||
Thank you for your time and consideration on the manuscript. We are sorry that this manuscript has went through peer
|
||||
review and the final review has been obtained according to the timetable. Accordingly, your review process has
|
||||
been discontinued. Your comments do not need to be submitted now. We would like to express our sincere gratitude for
|
||||
your contributions as well.
|
||||
</el-card>
|
||||
|
||||
<el-card class="box-card" v-if="this.add_apply == 2">
|
||||
The review link has expired. If you would like to review the manuscript again, please click the 'Apply to Review Manuscript' button.
|
||||
|
||||
</el-card> -->
|
||||
<el-card class="box-card" v-if="this.add_apply == 0">
|
||||
<!-- 审稿人表单修改 -->
|
||||
<common-review-article @refresh="getData" type="questionform" :form="questionform" :txt_mess="txt_mess" :btn_submit="btn_submit" :articleId="articleId" :journal_id="journal_id"></common-review-article>
|
||||
<!-- <el-form :model="questionform" :rules="rules" ref="question" label-width="300px" label-position="top">
|
||||
<el-divider content-position="center">REFEREE'S ASSESSMENT</el-divider>
|
||||
<el-row :gutter="24">
|
||||
<el-col :span="24">
|
||||
<el-form-item prop="qu6">
|
||||
<span slot="label">
|
||||
1.Does the manuscript fall within the aim and scope of the journal?
|
||||
<a :href="txt_mess.aim_web" target="_blank" class="jouLink">( Aims & Scope ) </a>
|
||||
</span>
|
||||
<el-radio-group v-model="questionform.qu6">
|
||||
<el-radio :label="1">Excellent</el-radio>
|
||||
<el-radio :label="2">Good</el-radio>
|
||||
<el-radio :label="3">Fair</el-radio>
|
||||
<el-radio :label="4">Poor</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="2.Originality of the topic">
|
||||
<el-radio-group v-model="questionform.qu1">
|
||||
<el-radio :label="1">Excellent</el-radio>
|
||||
<el-radio :label="2">Good</el-radio>
|
||||
<el-radio :label="3">Fair</el-radio>
|
||||
<el-radio :label="4">Poor</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="3.Importance in its Field">
|
||||
<el-radio-group v-model="questionform.qu3">
|
||||
<el-radio :label="1">Excellent</el-radio>
|
||||
<el-radio :label="2">Good</el-radio>
|
||||
<el-radio :label="3">Fair</el-radio>
|
||||
<el-radio :label="4">Poor</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="4.English language">
|
||||
<el-radio-group v-model="questionform.qu8">
|
||||
<el-radio :label="1">Excellent</el-radio>
|
||||
<el-radio :label="2">Good</el-radio>
|
||||
<el-radio :label="3">Fair</el-radio>
|
||||
<el-radio :label="4">Poor</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="5.Readily Understandable">
|
||||
<el-radio-group v-model="questionform.qu5">
|
||||
<el-radio :label="1">Excellent</el-radio>
|
||||
<el-radio :label="2">Good</el-radio>
|
||||
<el-radio :label="3">Fair</el-radio>
|
||||
<el-radio :label="4">Poor</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-collapse>
|
||||
<el-form-item label="6.Does the title represent manuscript's contents?">
|
||||
<el-col :span="4">
|
||||
<el-radio-group v-model="questionform.qu9">
|
||||
<el-radio :label="true">Yes</el-radio>
|
||||
<el-radio :label="false">No</el-radio>
|
||||
</el-radio-group>
|
||||
</el-col>
|
||||
<el-col :span="20">
|
||||
<el-collapse-item name="1" style="margin-top: -10px">
|
||||
<template slot="title"> <i class="el-icon-edit"></i>Comments/ Suggestions </template>
|
||||
<el-input
|
||||
type="textarea"
|
||||
placeholder="please input content"
|
||||
v-model="questionform.qu9contents"
|
||||
:rows="4"
|
||||
></el-input>
|
||||
</el-collapse-item>
|
||||
</el-col>
|
||||
</el-form-item>
|
||||
</el-collapse>
|
||||
|
||||
<el-collapse>
|
||||
<el-form-item label="7.Is the Abstract accurate and concise?">
|
||||
<el-col :span="4">
|
||||
<el-radio-group v-model="questionform.qu10">
|
||||
<el-radio :label="true">Yes</el-radio>
|
||||
<el-radio :label="false">No</el-radio>
|
||||
</el-radio-group>
|
||||
</el-col>
|
||||
<el-col :span="20">
|
||||
<el-collapse-item name="2" style="margin-top: -10px">
|
||||
<template slot="title"> <i class="el-icon-edit"></i>Comments/ Suggestions </template>
|
||||
<el-input
|
||||
type="textarea"
|
||||
placeholder="please input content"
|
||||
v-model="questionform.qu10contents"
|
||||
:rows="4"
|
||||
></el-input>
|
||||
</el-collapse-item>
|
||||
</el-col>
|
||||
</el-form-item>
|
||||
<el-form-item label="8.Are the approach/ methods properly described?">
|
||||
<el-col :span="4">
|
||||
<el-radio-group v-model="questionform.qu11">
|
||||
<el-radio :label="true">Yes</el-radio>
|
||||
<el-radio :label="false">No</el-radio>
|
||||
</el-radio-group>
|
||||
</el-col>
|
||||
<el-col :span="20">
|
||||
<el-collapse-item name="3" style="margin-top: -10px">
|
||||
<template slot="title"> <i class="el-icon-edit"></i>Comments/ Suggestions </template>
|
||||
<el-input
|
||||
type="textarea"
|
||||
placeholder="please input content"
|
||||
v-model="questionform.qu11contents"
|
||||
:rows="4"
|
||||
></el-input>
|
||||
</el-collapse-item>
|
||||
</el-col>
|
||||
</el-form-item>
|
||||
<el-form-item label="9.Are the conclusions and interpretations sound?">
|
||||
<el-col :span="4">
|
||||
<el-radio-group v-model="questionform.qu12">
|
||||
<el-radio :label="true">Yes</el-radio>
|
||||
<el-radio :label="false">No</el-radio>
|
||||
</el-radio-group>
|
||||
</el-col>
|
||||
<el-col :span="20">
|
||||
<el-collapse-item name="4" style="margin-top: -10px">
|
||||
<template slot="title"> <i class="el-icon-edit"></i>Comments/ Suggestions </template>
|
||||
<el-input
|
||||
type="textarea"
|
||||
placeholder="please input content"
|
||||
v-model="questionform.qu12contents"
|
||||
:rows="4"
|
||||
></el-input>
|
||||
</el-collapse-item>
|
||||
</el-col>
|
||||
</el-form-item>
|
||||
<el-form-item label="10.Are the references properly cited?">
|
||||
<el-col :span="4">
|
||||
<el-radio-group v-model="questionform.qu13">
|
||||
<el-radio :label="true">Yes</el-radio>
|
||||
<el-radio :label="false">No</el-radio>
|
||||
</el-radio-group>
|
||||
</el-col>
|
||||
<el-col :span="20">
|
||||
<el-collapse-item name="5" style="margin-top: -10px">
|
||||
<template slot="title"> <i class="el-icon-edit"></i>Comments/ Suggestions </template>
|
||||
<el-input
|
||||
type="textarea"
|
||||
placeholder="please input content"
|
||||
v-model="questionform.qu13contents"
|
||||
:rows="4"
|
||||
></el-input>
|
||||
</el-collapse-item>
|
||||
</el-col>
|
||||
</el-form-item>
|
||||
|
||||
<el-divider content-position="center">REFEREE'S RECOMMENDATIONS</el-divider>
|
||||
<el-form-item label="Overall the Paper is Rated" prop="rated">
|
||||
( <span style="color: #e41411">←←←←← Bad ←←← Poor</span>
|
||||
<span style="width: 10px; display: inline-block"></span>
|
||||
<span style="color: #369916">Accept → Superior → Excellent</span>)
|
||||
<br />
|
||||
<el-radio-group v-model="questionform.rated" size="small">
|
||||
<el-radio-button label="1"></el-radio-button>
|
||||
<el-radio-button label="2"></el-radio-button>
|
||||
<el-radio-button label="3"></el-radio-button>
|
||||
<el-radio-button label="4"></el-radio-button>
|
||||
<el-radio-button label="5"></el-radio-button>
|
||||
<el-radio-button label="6"></el-radio-button>
|
||||
<el-radio-button label="7"></el-radio-button>
|
||||
<el-radio-button label="8"></el-radio-button>
|
||||
<el-radio-button label="9"></el-radio-button>
|
||||
<el-radio-button label="10"></el-radio-button>
|
||||
</el-radio-group>
|
||||
<span style="margin-left: 20px">Your score : {{ questionform.rated }}</span>
|
||||
</el-form-item>
|
||||
<el-form-item label="REFEREE'S RECOMMENDATIONS" prop="recommend">
|
||||
<el-radio-group v-model="questionform.recommend" style="line-height: 30px">
|
||||
<el-radio :label="1">Minor revision</el-radio>
|
||||
<br />
|
||||
<el-radio :label="2">Major revision</el-radio>
|
||||
<br />
|
||||
|
||||
<div v-if="journal_id == 1 || journal_id == 23 || journal_id == 10">
|
||||
<el-radio :label="3">Reject in current form, but may be resubmitted</el-radio>
|
||||
<br />
|
||||
<el-radio :label="4">Reject</el-radio>
|
||||
</div>
|
||||
|
||||
<div v-else>
|
||||
<el-radio :label="4">Reject</el-radio>
|
||||
</div>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item
|
||||
label="Comments for the Authors"
|
||||
v-if="this.txt_mess.atype == 'Comment' || this.txt_mess.atype == 'News'"
|
||||
>
|
||||
<el-input
|
||||
type="textarea"
|
||||
placeholder="please input content"
|
||||
v-model="questionform.comment"
|
||||
:rows="8"
|
||||
></el-input>
|
||||
</el-form-item> <el-form-item label="" v-if="articleId">
|
||||
<common-word-html :articleId="articleId" style="box-sizing: border-box"
|
||||
></common-word-html>
|
||||
</el-form-item>
|
||||
<el-form-item
|
||||
label="Comments for the Authors"
|
||||
prop="comment"
|
||||
v-if="this.txt_mess.atype != 'Comment' && this.txt_mess.atype != 'News'"
|
||||
>
|
||||
<el-input
|
||||
type="textarea"
|
||||
placeholder="please input content"
|
||||
v-model="questionform.comment"
|
||||
:rows="8"
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="Confidential Comments to the Editor">
|
||||
<el-input
|
||||
type="textarea"
|
||||
placeholder="please input content"
|
||||
v-model="questionform.confident"
|
||||
:rows="8"
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="Please choose disclose your name or remain anonymous">
|
||||
<el-radio-group v-model="questionform.is_anonymous" style="line-height: 30px">
|
||||
<el-radio :label="0">Disclose name</el-radio>
|
||||
<br />
|
||||
<el-radio :label="1">Remain anonymous</el-radio>
|
||||
</el-radio-group>
|
||||
<p style="line-height: 20px; color: #aaa; font-size: 13px; margin: 12px 0 0 0">
|
||||
If you agree to disclose your name, we will acknowledge you by name in the published PDF. However,
|
||||
if you prefer to remain anonymous, we will still express our gratitude by thanking you as an
|
||||
anonymous reviewer.
|
||||
<br />For example, {{ txt_mess.title }} would like to thank AAAAAAAA, BBBBBBBB, and other anonymous
|
||||
reviewers for their invaluable contributions to the peer review process of this paper.
|
||||
</p>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="this.btn_submit == 0">
|
||||
<el-button type="primary" @click="questionSubmit">submit</el-button>
|
||||
</el-form-item>
|
||||
</el-collapse>
|
||||
</el-form> -->
|
||||
</el-card>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<div class="invitation-expired-box" v-else-if="txt_mess&&txt_mess.accept_sn&&add_apply!=0&&add_apply!=null">
|
||||
<div class="invitation-expired-card">
|
||||
|
||||
<div class="manuscript-header">
|
||||
<div class="manuscript-meta">
|
||||
<span>
|
||||
<a :href="txt_mess.website" target="_blank" class="titlink">{{ txt_mess.title }}</a>
|
||||
<span style="margin: 0 10px"> >> </span>
|
||||
Manuscript ID: {{ txt_mess.accept_sn }}
|
||||
</span>
|
||||
<span style="display: inline-block; margin: 0 35px"><b>Type :</b> {{ txt_mess.atype }}</span>
|
||||
<span style="display: inline-block"><b>Submitted time :</b> {{ txt_mess.ctime |formatDatehms }}</span>
|
||||
</div>
|
||||
<h1>{{ txt_mess.article_title }}</h1>
|
||||
</div>
|
||||
|
||||
<div class="notification-card" v-if="add_apply == 2">
|
||||
<i class="el-icon-time icon"></i>
|
||||
|
||||
<h2>Review Invitation Expired</h2>
|
||||
|
||||
<p>
|
||||
The review link has expired. If you would like to review the manuscript again,<br/> please click the 'Apply to Review Manuscript' button.
|
||||
</p>
|
||||
|
||||
<div class="cta-button" style="" @click="applyReview">
|
||||
<i class="el-icon-refresh-right" style="font-weight: 700;font-size: 18px;"></i> Apply to Review Manuscript
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="notification-card notification-card-success" v-if="add_apply == 1">
|
||||
<i class="el-icon-success icon"></i>
|
||||
|
||||
<h2>Manuscript Review Completed</h2>
|
||||
|
||||
<p>Thank you for your time and consideration on the manuscript. We are sorry that this manuscript has went through peer
|
||||
review and the final review has been obtained according to the timetable. Accordingly, your review process has
|
||||
been discontinued. Your comments do not need to be submitted now. We would like to express our sincere gratitude for
|
||||
your contributions as well.
|
||||
</p>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div class="notification-card notification-card-grey" v-if="add_apply == -1">
|
||||
<i class="el-icon-success icon"></i>
|
||||
|
||||
<h2>Manuscript review canceled</h2>
|
||||
|
||||
<!-- <p>Thank you for your time and consideration on the manuscript. We are sorry that this manuscript has went through peer
|
||||
review and the final review has been obtained according to the timetable. Accordingly, your review process has
|
||||
been discontinued. Your comments do not need to be submitted now. We would like to express our sincere gratitude for
|
||||
your contributions as well.
|
||||
</p>
|
||||
-->
|
||||
|
||||
</div>
|
||||
<div class="notification-card notification-card-grey" v-if="add_apply == 3">
|
||||
<i class="el-icon-warning-outline icon"></i>
|
||||
|
||||
<h2>Review Record Unavailable</h2>
|
||||
|
||||
<p>Inquiries regarding the manuscript status and subsequent handling, please feel free to reach out to {{ txt_mess.journal_email }}.
|
||||
</p>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
@@ -411,7 +212,7 @@ export default {
|
||||
is_anonymous: '',
|
||||
type: '',
|
||||
},
|
||||
add_apply: 0,
|
||||
add_apply: null,
|
||||
btn_submit: 0,
|
||||
pdfUrl: '',
|
||||
journal_id: null,
|
||||
@@ -449,7 +250,7 @@ export default {
|
||||
},
|
||||
created() {
|
||||
if (this.Direct_log == null) {
|
||||
this.getData();
|
||||
this.CheckReviewerPermissions();
|
||||
} else {
|
||||
this.$api
|
||||
.post('api/Chief/autoLoginForChief', {
|
||||
@@ -462,16 +263,24 @@ export default {
|
||||
localStorage.setItem('U_id', res.data.user.user_id);
|
||||
localStorage.setItem('U_relname', res.data.user.realname);
|
||||
|
||||
this.$api
|
||||
.post('api/Reviewer/agreeReviewerArticle', {
|
||||
art_rev_id: this.Art_id
|
||||
})
|
||||
.then((res) => {
|
||||
this.getData();
|
||||
})
|
||||
.catch((err) => {
|
||||
this.$message.error(err);
|
||||
});
|
||||
|
||||
if (res.data.user.account == 'superadmin' || res.data.user.account ==
|
||||
'wuxiongzhi2') {
|
||||
localStorage.setItem('U_status', '0'); //超级管理员
|
||||
|
||||
|
||||
} else if (res.data.roles.includes('editor')) {
|
||||
localStorage.setItem('U_status', '1'); //编辑
|
||||
|
||||
|
||||
} else {
|
||||
localStorage.setItem('U_status', '2'); //其余的身份
|
||||
|
||||
}
|
||||
|
||||
|
||||
this.$bus.$emit('user-name-updated');
|
||||
this.CheckReviewerPermissions()
|
||||
} else {
|
||||
this.$message.error(res.msg);
|
||||
}
|
||||
@@ -482,7 +291,105 @@ export default {
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
applyReview() {
|
||||
|
||||
this.$confirm('Are you sure you want to send an email to the Editor?', 'Tips', {
|
||||
confirmButtonText: 'Sure',
|
||||
cancelButtonText: 'Cancel',
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: 'please wait',
|
||||
spinner: 'el-icon-loading',
|
||||
background: 'rgba(0, 0, 0, 0.7)'
|
||||
});
|
||||
this.$api
|
||||
.post('api/Workbench/applySendEmail', {
|
||||
|
||||
account: localStorage.getItem('U_name'),
|
||||
art_rev_id: this.$route.query.Art_id,
|
||||
|
||||
})
|
||||
.then((res) => {
|
||||
loading.close();
|
||||
if (res.status == 1) {
|
||||
this.$message.success('Email sent successfully!');
|
||||
} else {
|
||||
this.$message.error(res.msg);
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
loading.close();
|
||||
});
|
||||
});
|
||||
|
||||
},
|
||||
//审稿人权限判断
|
||||
CheckReviewerPermissions() {
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: 'Loading...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: 'rgba(0, 0, 0, 0.7)'
|
||||
});
|
||||
let params = {
|
||||
art_rev_id: this.Art_id,
|
||||
account: localStorage.getItem('U_name'),
|
||||
};
|
||||
if (this.Direct_log) {
|
||||
params.act = this.Direct_log;
|
||||
}
|
||||
var that = this;
|
||||
this.$api
|
||||
.post('api/Workbench/getReviewerAuth', params)
|
||||
.then((res) => {
|
||||
loading.close();
|
||||
if(res.status==1){
|
||||
|
||||
that.getData()
|
||||
}else{
|
||||
this.txt_mess={...res.data.article,title:res.data.article.journal_name,ctime:res.data.review.ctime,atype:res.data.article.type_name};
|
||||
|
||||
}
|
||||
|
||||
switch (res.status) {
|
||||
|
||||
case 1:
|
||||
// 有权限操作
|
||||
this.add_apply = 0;
|
||||
|
||||
break;
|
||||
case 7||16:
|
||||
// 7文章状态不在审稿中 16同意审稿后14天未进行审稿
|
||||
this.add_apply = 1;
|
||||
break;
|
||||
case 8:
|
||||
//拒绝审稿
|
||||
this.add_apply = -1;
|
||||
break;
|
||||
case 13:
|
||||
//13 邀请审稿超过5天未同意邀请
|
||||
this.add_apply = 2;
|
||||
break;
|
||||
default:
|
||||
this.add_apply = 3;
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
})
|
||||
.catch((err) => {loading
|
||||
this.$message.error(err);
|
||||
});
|
||||
},
|
||||
getData() {
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: 'Loading...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: 'rgba(0, 0, 0, 0.7)'
|
||||
});
|
||||
// 获取文章信息
|
||||
this.$api
|
||||
.post('api/Reviewer/getartrevdate', {
|
||||
@@ -494,28 +401,19 @@ export default {
|
||||
if (res.state != 0) {
|
||||
this.btn_submit = 1;
|
||||
}
|
||||
|
||||
let date = new Date(parseInt(res.ctime) * 1000);
|
||||
let Y = date.getFullYear() + '-';
|
||||
let M = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) + '-' : date.getMonth() + 1 + '-';
|
||||
let D = date.getDate() < 10 ? '0' + date.getDate() : date.getDate();
|
||||
res.ctime = Y + M + D;
|
||||
|
||||
this.txt_mess = res;
|
||||
this.journal_id = res.journal_id;
|
||||
console.log('journal_id', this.journal_id);
|
||||
|
||||
// 文章状态
|
||||
if (res.astate == 2) {
|
||||
this.add_apply = 0;
|
||||
} else {
|
||||
this.add_apply = 1;
|
||||
}
|
||||
loading.close();
|
||||
})
|
||||
.catch((err) => {
|
||||
loading.close();
|
||||
this.$message.error(err);
|
||||
});
|
||||
|
||||
this.$api
|
||||
.post('api/Reviewer/getAFilelistByID ', {
|
||||
revid: this.Art_id
|
||||
@@ -529,10 +427,8 @@ export default {
|
||||
res.data[i].ctime = Y + M + D;
|
||||
}
|
||||
this.fileList = res.data;
|
||||
|
||||
// 获取格式
|
||||
let pdfOut = this.fileList[this.fileList.length - 1].file_url;
|
||||
|
||||
if (pdfOut.substring(pdfOut.lastIndexOf('.') + 1) == 'docx') {
|
||||
this.pdfUrl =
|
||||
'https://view.officeapps.live.com/op/view.aspx?src=https://submission.tmrjournals.com/public/' + pdfOut+`&ui=en-US`;
|
||||
@@ -546,7 +442,6 @@ export default {
|
||||
.catch((err) => {
|
||||
this.$message.error(err);
|
||||
});
|
||||
|
||||
this.$api
|
||||
.post('api/Reviewer/getBFilelistByID', {
|
||||
revid: this.Art_id
|
||||
@@ -581,7 +476,6 @@ export default {
|
||||
.catch((err) => {
|
||||
this.$message.error(err);
|
||||
});
|
||||
|
||||
//初始化问卷
|
||||
this.$api
|
||||
.post('api/Reviewer/getQuestion', {
|
||||
@@ -589,8 +483,6 @@ export default {
|
||||
})
|
||||
.then((res) => {
|
||||
if (res.code == 0) {
|
||||
|
||||
|
||||
this.questionform.rev_qu_id = res.data.rev_qu_id;
|
||||
this.questionform.qu1 = res.data.qu1;
|
||||
this.questionform.qu2 = res.data.qu2;
|
||||
@@ -628,7 +520,6 @@ export default {
|
||||
questionSubmit() {
|
||||
if (this.questionform.is_anonymous == '' && this.questionform.is_anonymous != '0') {
|
||||
this.$message.error('Please choose disclose your name or remain anonymous.');
|
||||
|
||||
return false;
|
||||
}
|
||||
const regex = /[\u4E00-\u9FA5\uF900-\uFA2D]{1,}/;
|
||||
@@ -636,7 +527,6 @@ export default {
|
||||
if (regex.test(this.questionform.comment)) {
|
||||
// 如果输入的是中文,则清空输入框
|
||||
this.$message.error('Comments for the Authors cannot use Chinese.');
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -644,7 +534,6 @@ export default {
|
||||
if (regex.test(this.questionform.confident)) {
|
||||
// 如果输入的是中文,则清空输入框
|
||||
this.$message.error('Confidential Comments to the Editor cannot be in Chinese.');
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -673,7 +562,6 @@ export default {
|
||||
wenziCount++;
|
||||
}
|
||||
}
|
||||
|
||||
if (blankCount + wenziCount <= 60) {
|
||||
this.$message.error('We encourage you to enrich your comment further to help improve the peer paper.');
|
||||
this.$message({
|
||||
@@ -855,4 +743,114 @@ export default {
|
||||
.css-138 {
|
||||
display: none;
|
||||
} */
|
||||
.invitation-expired-box{
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
.invitation-expired-card {
|
||||
max-width: 1000px;
|
||||
margin-bottom: 10%;
|
||||
background-color: #fff;
|
||||
padding: 30px;
|
||||
border-radius: 8px; /* 轻微圆角 */
|
||||
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); /* 柔和阴影 */
|
||||
}
|
||||
|
||||
/* --- 稿件信息样式 --- */
|
||||
.manuscript-header {
|
||||
border-bottom: 1px solid #eee;
|
||||
padding-bottom: 15px;
|
||||
margin-bottom: 25px;
|
||||
}
|
||||
|
||||
.manuscript-header h1 {
|
||||
color: #303133; /* 深蓝色/专业色 */
|
||||
font-size: 20px;
|
||||
margin: 0 0 5px 0;
|
||||
font-weight: 700;
|
||||
margin-top: 12px;
|
||||
}
|
||||
|
||||
.manuscript-meta {
|
||||
color: #7f8c8d; /* 浅灰色元数据 */
|
||||
font-size: 0.9em;
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
||||
/* --- 提示框样式 --- */
|
||||
.notification-card {
|
||||
border: 1px solid #e0e0e0;
|
||||
padding: 30px;
|
||||
text-align: center;
|
||||
border-radius: 6px;
|
||||
background-color: #fff;
|
||||
margin-top: 30px;
|
||||
padding-bottom: 50px;
|
||||
}
|
||||
|
||||
.icon {
|
||||
font-size: 3.5em;
|
||||
color: #f39c12; /* 橙色,表示过期/警告 */
|
||||
margin-bottom: 15px;
|
||||
display: block;
|
||||
font-weight: bold;
|
||||
}
|
||||
.notification-card-success .icon{
|
||||
color: #67c23a;
|
||||
}
|
||||
.notification-card-grey .icon{
|
||||
color: #d3d4d6;
|
||||
margin-bottom: 25px;
|
||||
}
|
||||
|
||||
.notification-card h2 {
|
||||
color: #e67e22; /* 稍深的橙色 */
|
||||
margin-top: 0;
|
||||
margin-bottom: 30px;
|
||||
font-weight: 700;
|
||||
}
|
||||
.notification-card-success h2 {
|
||||
color: #67c23a; /* 稍深的橙色 */
|
||||
|
||||
}
|
||||
.notification-card-grey h2 {
|
||||
color: #909399; /* 稍深的橙色 */
|
||||
|
||||
}
|
||||
|
||||
.notification-card p {
|
||||
color: #555;
|
||||
line-height: 1.6;
|
||||
margin-bottom: 30px;
|
||||
max-width: 600px;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
/* --- 按钮样式 (CTA) --- */
|
||||
.cta-button {
|
||||
display: inline-block;
|
||||
background-color: #006699; /* 专业深蓝色 */
|
||||
color: white;
|
||||
padding: 12px 25px;
|
||||
border-radius: 4px;
|
||||
text-decoration: none;
|
||||
font-size: 1.1em;
|
||||
font-weight: 700;
|
||||
transition: background-color 0.3s ease;
|
||||
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
|
||||
border: none;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.cta-button:hover {
|
||||
background-color: #00c286; /* 鼠标悬停时变浅 */
|
||||
}
|
||||
|
||||
.cta-button i {
|
||||
margin-right: 8px;
|
||||
}
|
||||
</style>
|
||||
|
||||
85
src/main.js
85
src/main.js
@@ -17,6 +17,7 @@ import Common from './components/common/common'
|
||||
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);
|
||||
}
|
||||
@@ -52,46 +53,64 @@ import 'quill/dist/quill.bubble.css'
|
||||
// 注册富文本编辑器组件为全局组件
|
||||
Vue.use(VueQuillEditor)
|
||||
|
||||
|
||||
|
||||
|
||||
async function loadJournalType() {
|
||||
const localData = localStorage.getItem('journalType'); // 尝试从 localStorage 获取数据
|
||||
|
||||
if (!localData) {
|
||||
try {
|
||||
await api
|
||||
.post('api/Articletype/getArticleType', {})
|
||||
.then((res) => {
|
||||
|
||||
if (res.status == 1) {
|
||||
localStorage.setItem('journalTypeData', JSON.stringify(res.data.base)); // 将数据存储到 localStorage
|
||||
localStorage.setItem('journalTypeDataAll', JSON.stringify([...res.data.base, ...res.data.supplement])); // 将数据存储到 localStorage
|
||||
|
||||
}
|
||||
})
|
||||
await api
|
||||
.post('api/Articletype/getMedicalType', {})
|
||||
.then((res) => {
|
||||
|
||||
if (res.status == 1) {
|
||||
localStorage.setItem('opMedicalListData', JSON.stringify(res.data)); // 将数据存储到 localStorage
|
||||
|
||||
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
} catch (error) {
|
||||
|
||||
}
|
||||
} else {
|
||||
// 1. 获取并尝试解析缓存数据
|
||||
const cachedString = localStorage.getItem('journalTypeData');
|
||||
let parsedData = null;
|
||||
|
||||
if (cachedString) {
|
||||
try {
|
||||
// 必须先解析 JSON 字符串
|
||||
parsedData = JSON.parse(cachedString);
|
||||
} catch (e) {
|
||||
console.error("缓存数据解析失败,将重新请求 API:", e);
|
||||
}
|
||||
}
|
||||
|
||||
// 2. 检查解析后的数据是否有效(是数组且长度大于 0)
|
||||
if (parsedData && Array.isArray(parsedData) && parsedData.length > 0) {
|
||||
// 缓存有效,直接返回缓存数据
|
||||
return parsedData;
|
||||
}
|
||||
|
||||
// 3. 如果缓存无效或不存在,执行 API 调用
|
||||
try {
|
||||
// 第一个 API 调用,使用 await 接收结果
|
||||
const journalRes = await api.post('api/Articletype/getArticleType', {});
|
||||
if (journalRes.status === 1) {
|
||||
// 存储 journal data
|
||||
localStorage.setItem('journalTypeData', JSON.stringify(journalRes.data.base));
|
||||
localStorage.setItem('journalTypeDataAll', JSON.stringify([...journalRes.data.base, ...journalRes.data.supplement]));
|
||||
}
|
||||
|
||||
// 第二个 API 调用,串行执行
|
||||
const medicalRes = await api.post('api/Articletype/getMedicalType', {});
|
||||
if (medicalRes.status === 1) {
|
||||
// 存储 medical data
|
||||
localStorage.setItem('opMedicalListData', JSON.stringify(medicalRes.data));
|
||||
}
|
||||
|
||||
// 4. 返回第一个 API 调用的主要数据
|
||||
if (journalRes.status === 1) {
|
||||
return journalRes.data.base;
|
||||
}
|
||||
|
||||
} catch (error) {
|
||||
// 集中处理 API 调用失败
|
||||
console.error('Error loading data:', error);
|
||||
return []; // 失败时返回一个默认的空数组,避免程序崩溃
|
||||
}
|
||||
|
||||
// 如果所有流程都没有返回,默认返回空数组
|
||||
return [];
|
||||
}
|
||||
|
||||
|
||||
|
||||
async function loadJournalList() {
|
||||
try {
|
||||
const localData = store.state.journalList;
|
||||
|
||||
if (localData && Array.isArray(localData) && localData.length > 0) {
|
||||
return localData;
|
||||
}
|
||||
|
||||
@@ -24,7 +24,8 @@ export default new Router({
|
||||
component: () => import( /* webpackChunkName: "dashboard" */
|
||||
'../components/page/Dashboard_.vue'),
|
||||
meta: {
|
||||
title: 'Personal Center'
|
||||
title: 'Personal Center',
|
||||
hideJournal: true
|
||||
}
|
||||
},
|
||||
// {
|
||||
@@ -354,7 +355,9 @@ export default new Router({
|
||||
path: '/success',
|
||||
component: () => import('../components/page/components/pendingPayment/success.vue'),
|
||||
meta: {
|
||||
title: 'Success'
|
||||
title: 'Success',
|
||||
hideJournal: true,
|
||||
hideSidebar: true,
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -368,7 +371,8 @@ export default new Router({
|
||||
path: '/articleReviewer',
|
||||
component: () => import('../components/page/articleReviewer.vue'),
|
||||
meta: {
|
||||
title: 'Article reviewer'
|
||||
title: 'Article reviewer',
|
||||
hideJournal: true
|
||||
},
|
||||
hidden: true
|
||||
},
|
||||
@@ -376,7 +380,8 @@ export default new Router({
|
||||
path: '/articleEditorialBoard',
|
||||
component: () => import('../components/page/articleEditorialBoard.vue'),
|
||||
meta: {
|
||||
title: 'Article Editorial Board'
|
||||
title: 'Article Editorial Board',
|
||||
hideJournal: true
|
||||
},
|
||||
hidden: true
|
||||
},
|
||||
@@ -400,7 +405,8 @@ export default new Router({
|
||||
path: '/articleReviewerAdd',
|
||||
component: () => import('../components/page/articleReviewerAdd.vue'),
|
||||
meta: {
|
||||
title: 'Article reviewer'
|
||||
title: 'Article reviewer',
|
||||
hideJournal: true
|
||||
},
|
||||
hidden: true
|
||||
},
|
||||
@@ -676,6 +682,7 @@ export default new Router({
|
||||
component: () => import('../components/page/per_history'),
|
||||
meta: {
|
||||
title: 'Review History',
|
||||
hideJournal: true
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -705,14 +712,16 @@ export default new Router({
|
||||
component: () => import('../components/page/per_text'),
|
||||
meta: {
|
||||
title: 'Reviewer article details',
|
||||
hideSidebar: true
|
||||
hideSidebar: true,
|
||||
hideJournal: true
|
||||
}
|
||||
},
|
||||
{
|
||||
path: '/edit_per_text', //审稿人文章详情
|
||||
component: () => import('../components/page/edit_per_text'),
|
||||
meta: {
|
||||
title: 'Final decision article details'
|
||||
title: 'Final decision article details',
|
||||
hideJournal: true
|
||||
|
||||
}
|
||||
},
|
||||
@@ -720,42 +729,48 @@ export default new Router({
|
||||
path: '/per_text_yq', //审稿人文章详情-邀请
|
||||
component: () => import('../components/page/per_text_yq'),
|
||||
meta: {
|
||||
title: 'Reviewer article details'
|
||||
title: 'Reviewer article details',
|
||||
hideJournal: true
|
||||
}
|
||||
},
|
||||
{
|
||||
path: '/edit_per_text_yq', //审稿人文章详情-邀请
|
||||
component: () => import('../components/page/edit_per_text_yq'),
|
||||
meta: {
|
||||
title: 'Final decision article details'
|
||||
title: 'Final decision article details',
|
||||
hideJournal: true
|
||||
}
|
||||
},
|
||||
{
|
||||
path: '/per_text_success', //审稿人文章-审稿成功页
|
||||
component: () => import('../components/page/per_text_success'),
|
||||
meta: {
|
||||
title: 'Review completed'
|
||||
title: 'Review completed',
|
||||
hideJournal: true
|
||||
}
|
||||
},
|
||||
{
|
||||
path: '/edit_per_text_success', //审稿人文章-审稿成功页
|
||||
component: () => import('../components/page/edit_per_text_success'),
|
||||
meta: {
|
||||
title: 'Review completed'
|
||||
title: 'Review completed',
|
||||
hideJournal: true
|
||||
}
|
||||
},
|
||||
{
|
||||
path: '/per_text_repeat', //审稿人文章-重复审稿提示
|
||||
component: () => import('../components/page/per_text_repeat'),
|
||||
meta: {
|
||||
title: 'Review repeat'
|
||||
title: 'Review repeat',
|
||||
hideJournal: true
|
||||
}
|
||||
},
|
||||
{
|
||||
path: '/per_text_fail',
|
||||
component: () => import('../components/page/per_text_fail.vue'),
|
||||
meta: {
|
||||
title: 'Review fail'
|
||||
title: 'Review fail',
|
||||
hideJournal: true
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -769,7 +784,8 @@ export default new Router({
|
||||
path: '/edithistory', //编委历史列表
|
||||
component: () => import('../components/page/edit_history'),
|
||||
meta: {
|
||||
title: 'Accepted manuscript'
|
||||
title: 'Accepted manuscript',
|
||||
hideJournal: true
|
||||
}
|
||||
},
|
||||
{
|
||||
|
||||
@@ -76,8 +76,8 @@ module.exports = {
|
||||
// target: 'http://192.168.110.110/tougao/public/index.php/',
|
||||
// target: 'http://api.tmrjournals.com/public/index.php/',//正式
|
||||
// target: 'http://zmzm.tougao.dev.com/',//晓玲
|
||||
// target: 'https://submission.tmrjournals.com/',//正式
|
||||
target: 'http://tougaotest.tmrjournals.com/public/index.php/',//测试环境
|
||||
target: 'https://submission.tmrjournals.com/',//正式
|
||||
// target: 'http://tougaotest.tmrjournals.com/public/index.php/',//测试环境
|
||||
changeOrigin: true,
|
||||
pathRewrite: {
|
||||
'^/api': ''
|
||||
|
||||
Reference in New Issue
Block a user