tijiao
This commit is contained in:
@@ -229,11 +229,11 @@ const en = {
|
||||
man_ing1: 'Journal information',
|
||||
man_ing2: 'Article List',
|
||||
edit_oria: 'Editorial board member',
|
||||
edit_oria1: 'Final Review',
|
||||
edit_oria1: 'Final Decision',
|
||||
edit_oria2: 'Accepted manuscript',
|
||||
edit_ewer: 'Reviewer',
|
||||
edit_ewer1: 'Final Review',
|
||||
edit_ewer2: 'Final Review History',
|
||||
edit_ewer1: 'Final Decision',
|
||||
edit_ewer2: 'Final Decision History',
|
||||
you_thed: 'Young scholar',
|
||||
you_thed1: 'Pending review',
|
||||
guest: 'Guest editor',
|
||||
@@ -277,7 +277,7 @@ const en = {
|
||||
state4: 'Revision',
|
||||
state5: 'Accept',
|
||||
state6: 'Pre-accept',
|
||||
state8: 'Final Review',
|
||||
state8: 'Final Decision',
|
||||
act1: 'Dealing',
|
||||
act2: 'Finished'
|
||||
},
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<el-dialog destroy-on-close title="Final Reviewer Detail" :visible.sync="editVisible1" width="1200px">
|
||||
<el-dialog destroy-on-close title="Final Decision Detail" :visible.sync="editVisible1" width="1200px">
|
||||
<div>
|
||||
<div class="crumbs">
|
||||
<!-- <el-breadcrumb separator="/">
|
||||
@@ -15,10 +15,10 @@
|
||||
<el-form-item label="Article : ">
|
||||
<span>{{ detailDate.article }}</span>
|
||||
</el-form-item>
|
||||
<el-form-item label="Final Reviewer : ">
|
||||
<el-form-item label="Final Decision : ">
|
||||
<span>{{ detailDate.reviewer }}</span>
|
||||
</el-form-item>
|
||||
<el-form-item label="Final Review Time : ">
|
||||
<el-form-item label="Final Decision Time : ">
|
||||
<span>{{ detailDate.ctime }}</span>
|
||||
</el-form-item>
|
||||
<el-form-item label="Feedback : ">
|
||||
@@ -166,7 +166,7 @@
|
||||
</el-col>
|
||||
<el-col :span="8" v-if="recordList && recordList.length > 0">
|
||||
<div class="clearfix fsheader">
|
||||
<h4>Final Review Archive</h4>
|
||||
<h4>Final Decision Archive</h4>
|
||||
</div>
|
||||
<div class="time">
|
||||
<el-timeline>
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<div>
|
||||
<div class="crumbs">
|
||||
<el-breadcrumb separator="/">
|
||||
<el-breadcrumb-item> <i class="el-icon-lx-calendar"></i> Manuscript final reviewer list </el-breadcrumb-item>
|
||||
<el-breadcrumb-item> <i class="el-icon-lx-calendar"></i> Manuscript Final Decision list </el-breadcrumb-item>
|
||||
<el-breadcrumb-item>
|
||||
<div>
|
||||
<span>ID:{{ articleBaseInfo.accept_sn }} </span>
|
||||
@@ -131,7 +131,7 @@
|
||||
custom-class="editorialBoardDialog"
|
||||
>
|
||||
<el-select
|
||||
v-model="editorialBoardForm.type"
|
||||
v-model="editorialBoardForm.board_type"
|
||||
placeholder=""
|
||||
@change="selectEditorialBoardType"
|
||||
style="margin-bottom: 20px; width: 200px"
|
||||
@@ -276,7 +276,7 @@ export default {
|
||||
editorialBoardForm: {
|
||||
page: 1,
|
||||
size: 10,
|
||||
type: 0
|
||||
board_type: 0
|
||||
},
|
||||
majorData: [],
|
||||
baseUrl: this.Common.baseUrl,
|
||||
@@ -363,6 +363,7 @@ export default {
|
||||
methods: {
|
||||
selectEditorialBoardType(type) {
|
||||
console.log('type at line 525:', type);
|
||||
this.editorialBoardForm.board_type = type;
|
||||
this.editorialBoardForm.page = 1;
|
||||
this.$forceUpdate();
|
||||
this.getEditorialBoardType();
|
||||
@@ -507,6 +508,7 @@ export default {
|
||||
},
|
||||
|
||||
getEditorialBoardType() {
|
||||
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: 'Loading',
|
||||
@@ -532,6 +534,11 @@ export default {
|
||||
},
|
||||
// 添加推荐审稿人
|
||||
async openSuggRev() {
|
||||
this. editorialBoardForm= {
|
||||
page: 1,
|
||||
size: 10,
|
||||
board_type: 0
|
||||
}
|
||||
await this.getEditorialBoardType();
|
||||
},
|
||||
selSuggest(e) {
|
||||
|
||||
@@ -445,7 +445,7 @@
|
||||
class="art_author_list">
|
||||
<template slot="title">
|
||||
<b class="com_shu">{{index+1}}</b>
|
||||
Final Reviewer Comment
|
||||
Final Decision Comment
|
||||
<font style="margin: 0 0 0 17px;color: #888;">
|
||||
<i class="el-icon-time" style="margin:0 2px 0 0;"></i>
|
||||
{{item.review_time?item.review_time.split(' ')[0]:''}}
|
||||
@@ -894,7 +894,7 @@ this.$router.push({
|
||||
sfr = '#5a90e105;';
|
||||
sgr = '#5a90e14D;';
|
||||
skr = '#5a90e1;';
|
||||
slr = 'Final Review';
|
||||
slr = 'Final Decision';
|
||||
break;
|
||||
default:
|
||||
str = '#8888881F;';
|
||||
|
||||
@@ -552,79 +552,234 @@
|
||||
</div>
|
||||
</template>
|
||||
<template v-if="query.state == 8">
|
||||
<div class="fixCard reviewer_decision" style="width: 280px; flex-shrink: 0; position: relative">
|
||||
<div
|
||||
class="fixCard reviewer_decision"
|
||||
style="width: calc((100% - 320px - 18px) / 2); flex-shrink: 0; position: relative"
|
||||
>
|
||||
<b style="font-size: 16px; letter-spacing: -0.5px">Reviewer Decision</b>
|
||||
<p style="height: 5px"></p>
|
||||
<div class="overflow-x-auto">
|
||||
<!-- 上面的表格代码放在这里 -->
|
||||
|
||||
<table class="review_table" >
|
||||
<thead>
|
||||
<tr>
|
||||
<th></th>
|
||||
<!-- 补充表头文本,原代码是空,建议加上 -->
|
||||
<th>1<sup>st</sup> review</th>
|
||||
<!-- 表头:按最大重复次数遍历,生成2nd、3rd...列 -->
|
||||
<template v-for="(_, index1) in maxRepeatReviewCount(item)">
|
||||
<th>{{ index1 + 2 }}<sup>nd</sup> review</th>
|
||||
</template>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<!-- 遍历每个评审者 -->
|
||||
<tr v-for="(iken, reviewerIndex) in item.reviewScore">
|
||||
<td>Reviewer {{ reviewerIndex + 1 }}</td>
|
||||
<!-- 1st review:原逻辑不变 -->
|
||||
<td >
|
||||
<span style="display: inline-block; margin-left: 4px; margin-right: 8px">
|
||||
<font
|
||||
v-if="iken.state == 0"
|
||||
style="
|
||||
width: 12px;
|
||||
height: 12px;
|
||||
display: block;
|
||||
border-radius: 10px;
|
||||
background-color: #ccc;
|
||||
"
|
||||
>
|
||||
</font>
|
||||
<font
|
||||
v-if="iken.state == 1 || iken.state == 3"
|
||||
style="
|
||||
width: 12px;
|
||||
height: 12px;
|
||||
display: block;
|
||||
border-radius: 10px;
|
||||
background-color: #67c23a;
|
||||
"
|
||||
>
|
||||
</font>
|
||||
<font
|
||||
v-if="iken.state == 2"
|
||||
style="
|
||||
width: 12px;
|
||||
height: 12px;
|
||||
display: block;
|
||||
border-radius: 10px;
|
||||
background-color: #f56c6c;
|
||||
"
|
||||
>
|
||||
</font>
|
||||
</span>
|
||||
<span>{{ mystate(iken.state) }}</span>
|
||||
</td>
|
||||
<!-- 关键:按最大重复次数遍历,而非仅遍历当前iken.repeat -->
|
||||
<template v-for="(_1,index1) in maxRepeatReviewCount(item)">
|
||||
<td>
|
||||
<!-- 补全逻辑:判断当前评审者的repeat中是否有第index1条数据 -->
|
||||
<span v-if="Array.isArray(iken.repeat) && iken.repeat[index1]">
|
||||
<span style="display: inline-block; margin-left: 4px; margin-right: 8px">
|
||||
<font
|
||||
v-if="iken.repeat[index1].recommend == 1"
|
||||
style="
|
||||
width: 12px;
|
||||
height: 12px;
|
||||
display: block;
|
||||
border-radius: 10px;
|
||||
background-color: #67c23a;
|
||||
"
|
||||
>
|
||||
</font>
|
||||
<font
|
||||
v-if="iken.repeat[index1].recommend == 2"
|
||||
style="
|
||||
width: 12px;
|
||||
height: 12px;
|
||||
display: block;
|
||||
border-radius: 10px;
|
||||
background-color: #f56c6c;
|
||||
"
|
||||
>
|
||||
</font>
|
||||
<font
|
||||
v-if="iken.repeat[index1].recommend == 3"
|
||||
style="
|
||||
width: 12px;
|
||||
height: 12px;
|
||||
display: block;
|
||||
border-radius: 10px;
|
||||
background-color: #006699;
|
||||
"
|
||||
>
|
||||
</font>
|
||||
</span>
|
||||
<!-- 有数据:按原逻辑显示Accept/Reject等 -->
|
||||
<span v-if="iken.repeat[index1].recommend == 1">Accept</span>
|
||||
<span v-else-if="iken.repeat[index1].recommend == 2">Reject</span>
|
||||
<span v-else-if="iken.repeat[index1].recommend == 3">Revision</span>
|
||||
<span v-else>No reply</span>
|
||||
</span>
|
||||
<span v-else>
|
||||
<!-- 无数据:补全空内容(可自定义为“-”“无”等) -->
|
||||
-
|
||||
</span>
|
||||
</td>
|
||||
</template>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<p v-for="(iken, index) in item.reviewScore" style="line-height: 24px" :key="index">
|
||||
{{ iken.realname }} : <b style="color: #db890e; font-size: 18px">{{ iken.rated }}</b>
|
||||
<span style="display: inline-block; margin-left: 10px">
|
||||
<font
|
||||
v-if="iken.state == 0"
|
||||
style="width: 12px; height: 12px; display: block; border-radius: 10px; background-color: #ccc"
|
||||
>
|
||||
</font>
|
||||
<font
|
||||
v-if="iken.state == 1 || iken.state == 3"
|
||||
style="
|
||||
width: 12px;
|
||||
height: 12px;
|
||||
display: block;
|
||||
border-radius: 10px;
|
||||
background-color: #67c23a;
|
||||
"
|
||||
>
|
||||
</font>
|
||||
<font
|
||||
v-if="iken.state == 2"
|
||||
style="
|
||||
width: 12px;
|
||||
height: 12px;
|
||||
display: block;
|
||||
border-radius: 10px;
|
||||
background-color: #f56c6c;
|
||||
"
|
||||
>
|
||||
</font>
|
||||
</span>
|
||||
<el-button
|
||||
style="margin-left: 10px"
|
||||
type="text"
|
||||
icon="el-icon-tickets"
|
||||
@click="showdetail(iken, 'reviewer')"
|
||||
>Detail</el-button
|
||||
>
|
||||
</p>
|
||||
<!-- <p v-if="item.reviewScore.length > 0" style="font-size: 15px; margin: 0 0 5px 0">
|
||||
Average score: <b style="font-size: 18px; color: #db890e">{{ avegeCount(item.reviewScore) }}</b>
|
||||
</p> -->
|
||||
<!-- <div
|
||||
v-for="(iken, index) in item.reviewScore"
|
||||
style="line-height: 24px; text-align: left; display: flex; align-items: center; margin-bottom: 20px"
|
||||
:key="index"
|
||||
>
|
||||
Reviewer{{ index + 1 }} :
|
||||
<div>
|
||||
<b style="color: #db890e; font-size: 18px">{{ iken.rated }}</b>
|
||||
<span style="display: inline-block; margin-left: 4px; margin-right: 4px">
|
||||
<font
|
||||
v-if="iken.state == 0"
|
||||
style="
|
||||
width: 12px;
|
||||
height: 12px;
|
||||
display: block;
|
||||
border-radius: 10px;
|
||||
background-color: #ccc;
|
||||
"
|
||||
>
|
||||
</font>
|
||||
<font
|
||||
v-if="iken.state == 1 || iken.state == 3"
|
||||
style="
|
||||
width: 12px;
|
||||
height: 12px;
|
||||
display: block;
|
||||
border-radius: 10px;
|
||||
background-color: #67c23a;
|
||||
"
|
||||
>
|
||||
</font>
|
||||
<font
|
||||
v-if="iken.state == 2"
|
||||
style="
|
||||
width: 12px;
|
||||
height: 12px;
|
||||
display: block;
|
||||
border-radius: 10px;
|
||||
background-color: #f56c6c;
|
||||
"
|
||||
>
|
||||
</font>
|
||||
</span>
|
||||
<span>{{ mystate(iken.state) }}</span>
|
||||
</div>
|
||||
|
||||
<span v-if="iken.repeat.length > 0" style="margin-left: 4px; margin-right: 4px"> -> </span>
|
||||
|
||||
<div v-if="iken.repeat.length > 0">
|
||||
<span v-for="(iken1, index1) in iken.repeat" style="margin-right: 4px; display: block">
|
||||
Second review {{ index1 + 1 }} :
|
||||
<span style="display: inline-block; margin-left: 4px; margin-right: 4px">
|
||||
<font
|
||||
v-if="iken1.recommend == 1"
|
||||
style="
|
||||
width: 12px;
|
||||
height: 12px;
|
||||
display: block;
|
||||
border-radius: 10px;
|
||||
background-color: #67c23a;
|
||||
"
|
||||
>
|
||||
</font>
|
||||
<font
|
||||
v-if="iken1.recommend == 2"
|
||||
style="
|
||||
width: 12px;
|
||||
height: 12px;
|
||||
display: block;
|
||||
border-radius: 10px;
|
||||
background-color: #f56c6c;
|
||||
"
|
||||
>
|
||||
</font>
|
||||
<font
|
||||
v-if="iken1.recommend == 3"
|
||||
style="
|
||||
width: 12px;
|
||||
height: 12px;
|
||||
display: block;
|
||||
border-radius: 10px;
|
||||
background-color: #006699;
|
||||
"
|
||||
>
|
||||
</font>
|
||||
</span>
|
||||
<span v-if="iken1.recommend == 1">Accept</span>
|
||||
<span v-else-if="iken1.recommend == 2">Reject</span>
|
||||
<span v-else-if="iken1.recommend == 3">Revison</span>
|
||||
<span v-else>No reply </span>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
|
||||
</div> -->
|
||||
|
||||
<p style="margin-top: 10px">
|
||||
<b @click="articleReviewer(item)" class="btnCliArt">
|
||||
<i :class="item.state == 8 ? 'el-icon-view' : 'el-icon-edit'"></i> Inviting Reviewer
|
||||
</b>
|
||||
|
||||
<!-- <el-button size="mini" type="primary" icon="el-icon-user" @click="articleReviewer(item)">
|
||||
Inviting Reviewer</el-button> -->
|
||||
|
||||
</p>
|
||||
<!-- <p style="height: 20px"></p> -->
|
||||
<!-- <p
|
||||
style="
|
||||
position: absolute;
|
||||
bottom: 10px;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
width: calc(100% - 20px);
|
||||
"
|
||||
>
|
||||
<b @click="articleReviewer(item)" class="btnCliArt">
|
||||
<i :class="item.state == 8 ? 'el-icon-view' : 'el-icon-edit'"></i> Inviting Reviewer
|
||||
</b>
|
||||
</p> -->
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<template v-if="query.state == 8">
|
||||
<div class="fixCard" style="width: calc((100% - 320px - 280px - 18px)); flex-shrink: 0; position: relative">
|
||||
<div class="fixCard" style="width: calc((100% - 320px - 18px) / 2); flex-shrink: 0; position: relative">
|
||||
<b style="font-size: 16px; letter-spacing: -0.5px">Editorial Board Decision</b>
|
||||
<p style="height: 20px"></p>
|
||||
<p v-for="(iken, index) in item.final" style="line-height: 24px" :key="index" v-if="iken.state != 4">
|
||||
@@ -718,7 +873,6 @@
|
||||
</div> -->
|
||||
|
||||
<div class="fixCard" style="width: 320px; flex-shrink: 0" v-if="query.state == 8">
|
||||
|
||||
<b style="font-size: 16px; letter-spacing: -0.5px">Corresponding Author</b>
|
||||
<p style="height: 10px"></p>
|
||||
<div style="text-align: left">
|
||||
@@ -728,23 +882,27 @@
|
||||
<span v-if="item.H.phone != ''" style="margin-left: 5px; color: #666">({{ item.H.phone }})</span>
|
||||
</p>
|
||||
<p v-if="item.H.email != ''" style="margin: 8px 0 5px 0; line-height: 22px">
|
||||
<b @click="linkEmail({...item, ...item.H})" class="btnCliArt" style="">
|
||||
<b @click="linkEmail({ ...item, ...item.H })" class="btnCliArt" style="">
|
||||
<font style="color: #999">Email :</font>
|
||||
{{ item.H.email }}
|
||||
</b>
|
||||
<b @click="linkEmailist({...item, ...item.H})" v-if="item.H.emailh == 1" class="btnCliArt" style="margin-left: 15px">
|
||||
<b
|
||||
@click="linkEmailist({ ...item, ...item.H })"
|
||||
v-if="item.H.emailh == 1"
|
||||
class="btnCliArt"
|
||||
style="margin-left: 15px"
|
||||
>
|
||||
<i class="el-icon-refresh-left"></i> History
|
||||
</b>
|
||||
</p>
|
||||
</div>
|
||||
<p style="margin-top: 20px">
|
||||
<b @click="articleCommun({...item, ...item.H})" class="btnCliArt">
|
||||
<b @click="articleCommun({ ...item, ...item.H })" class="btnCliArt">
|
||||
<i class="el-icon-chat-line-square"></i> Communication
|
||||
</b>
|
||||
</p>
|
||||
</div>
|
||||
<div class="fixCard" style="width: 320px; flex-shrink: 0" v-else>
|
||||
|
||||
<b style="font-size: 16px; letter-spacing: -0.5px">Corresponding Author</b>
|
||||
<p style="height: 10px"></p>
|
||||
<div style="text-align: left">
|
||||
@@ -1102,7 +1260,7 @@
|
||||
<el-option :key="2" label="Under review" :value="2"></el-option>
|
||||
<el-option :key="3" label="Reject" :value="3"></el-option>
|
||||
<el-option :key="4" label="Revision" :value="4"></el-option>
|
||||
<el-option :key="8" label="Final Review" :value="8"></el-option>
|
||||
<el-option :key="8" label="Final Decision" :value="8"></el-option>
|
||||
<el-option :key="6" label="Pre-accept" :value="6"></el-option>
|
||||
<el-option :key="5" label="Accept" :value="5" :disabled="curState == 6 ? false : true"></el-option>
|
||||
</el-select>
|
||||
@@ -1677,9 +1835,8 @@
|
||||
<el-button @click="dialogVisible = false">Cancel</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
|
||||
<articleEditorDetail :dateId="FinalDetailBaseInfo.id" ref="commonFinalDetail"></articleEditorDetail>
|
||||
|
||||
|
||||
<articleEditorDetail :dateId="FinalDetailBaseInfo.id" ref="commonFinalDetail"></articleEditorDetail>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -2017,6 +2174,43 @@ export default {
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
maxRepeatReviewCount(item) {
|
||||
if (!item || !Array.isArray(item.reviewScore)) return null; // 边界处理:无数据返回null
|
||||
|
||||
// 遍历所有评审者,找到repeat数组长度最大的那条数据
|
||||
const maxItem = item.reviewScore.reduce((maxItem, currentItem) => {
|
||||
// 计算当前项的repeat长度,非数组则视为0
|
||||
const currentLen = Array.isArray(currentItem.repeat) ? currentItem.repeat.length : 0;
|
||||
// 计算当前最大项的repeat长度,非数组则视为0
|
||||
const maxLen = Array.isArray(maxItem.repeat) ? maxItem.repeat.length : 0;
|
||||
|
||||
// 如果当前项长度更大,则更新最大项
|
||||
return currentLen > maxLen ? currentItem : maxItem;
|
||||
}, {}); // 初始值设为一个空对象
|
||||
console.log('maxItem at line 2142:', maxItem.repeat.length)
|
||||
return maxItem.repeat.length;
|
||||
|
||||
|
||||
},
|
||||
mystate(mystate) {
|
||||
let str = '';
|
||||
switch (mystate) {
|
||||
case 0:
|
||||
str = 'With reviewer';
|
||||
break;
|
||||
case 1:
|
||||
str = 'Major';
|
||||
break;
|
||||
case 2:
|
||||
str = 'Reject';
|
||||
break;
|
||||
case 3:
|
||||
// str = 'Accept';
|
||||
str = 'Minor';
|
||||
break;
|
||||
}
|
||||
return str;
|
||||
},
|
||||
showdetail(row, type) {
|
||||
console.log('row at line 1964:', row);
|
||||
if (type == 'reviewer') {
|
||||
@@ -2032,7 +2226,7 @@ export default {
|
||||
}
|
||||
} else {
|
||||
this.FinalDetailBaseInfo = { ...row };
|
||||
|
||||
|
||||
this.$nextTick(() => {
|
||||
this.$refs.commonFinalDetail.init();
|
||||
});
|
||||
@@ -3849,4 +4043,38 @@ background-color: #f5f5f5b3;
|
||||
.articleBaseInfo7 .manuscript_files{
|
||||
background-color: #f5f5f5b3;
|
||||
} */
|
||||
|
||||
.review_table {
|
||||
width: 100%;
|
||||
margin-top: 10px;
|
||||
border-collapse: collapse; /* 合并表格边框 */
|
||||
}
|
||||
|
||||
.review_table th,
|
||||
td {
|
||||
padding: 6px;
|
||||
min-width: 70px;
|
||||
border: 1px solid #ddd;
|
||||
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.review_table th {
|
||||
font-size: 12px;
|
||||
background-color: #f0f0f0;
|
||||
}
|
||||
.review_table td {
|
||||
font-size: 12px;
|
||||
/* background-color: #f0f0f0; */
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
.review_table tr:hover {
|
||||
/* background-color: #fff; */
|
||||
}
|
||||
.overflow-x-auto{
|
||||
overflow-x: auto;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -381,7 +381,7 @@ export default {
|
||||
str = 'Proof';
|
||||
break;
|
||||
case 8:
|
||||
str = 'Final Review';
|
||||
str = 'Final Decision';
|
||||
|
||||
break;
|
||||
default:
|
||||
|
||||
@@ -100,14 +100,14 @@
|
||||
</div>
|
||||
<div class="art_author_">
|
||||
<h2>
|
||||
Comments from Final reviewers
|
||||
Comments from Final Decision
|
||||
</h2>
|
||||
<el-collapse v-model="activeFinalComment" v-if="comentFinal!=''">
|
||||
<el-collapse-item v-for="(item,index) in comentFinal" :name="index" :key="index"
|
||||
class="art_author_list">
|
||||
<template slot="title">
|
||||
<b class="com_shu">{{index+1}}</b>
|
||||
Final Reviewer Comment
|
||||
Final Decision Comment
|
||||
<font style="margin: 0 0 0 50px;color: #888;">
|
||||
<i class="el-icon-time" style="margin:0 2px 0 0;"></i>
|
||||
{{item.review_time?item.review_time.split(' ')[0]:''}}
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
</div>
|
||||
</el-form-item>
|
||||
</template>
|
||||
<el-form-item label="Confidential Comments to the Editor" prop="suggest_for_editor">
|
||||
<el-form-item label="Comment for Editor" prop="suggest_for_editor">
|
||||
<el-input v-if="isEdit"
|
||||
|
||||
type="textarea"
|
||||
@@ -45,9 +45,9 @@
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<!-- <el-form-item label="Please choose disclose your name or remain anonymous" v-if="isEdit">
|
||||
<el-form-item label="Please choose disclose your name or remain anonymous" v-if="isEdit">
|
||||
<el-radio-group v-model="questionform.is_anonymous" style="line-height: 30px">
|
||||
<el-radio :label="0" :disabled="!isEdit && questionform.is_anonymous != 0">Disclose name</el-radio>
|
||||
<el-radio :label="2" :disabled="!isEdit && questionform.is_anonymous != 2">Disclose name</el-radio>
|
||||
<br />
|
||||
<el-radio :label="1" :disabled="!isEdit && questionform.is_anonymous != 1">Remain anonymous</el-radio>
|
||||
</el-radio-group>
|
||||
@@ -57,14 +57,14 @@
|
||||
<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 label="Please choose disclose your name or remain anonymous" v-if="!isEdit && pagetype == 'Editor'">
|
||||
</el-form-item>
|
||||
<el-form-item label="Please choose disclose your name or remain anonymous" v-if="!isEdit && pagetype == 'Editor'">
|
||||
<el-radio-group v-model="questionform.is_anonymous" style="line-height: 30px">
|
||||
<el-radio :label="0" :disabled="!isEdit && questionform.is_anonymous != 0">Disclose name</el-radio>
|
||||
<el-radio :label="2" :disabled="!isEdit && questionform.is_anonymous != 2">Disclose name</el-radio>
|
||||
<br />
|
||||
<el-radio :label="1" :disabled="!isEdit && questionform.is_anonymous != 1">Remain anonymous</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item> -->
|
||||
</el-form-item>
|
||||
<!-- 暂时注销 -->
|
||||
<!-- -->
|
||||
<el-form-item>
|
||||
@@ -155,7 +155,11 @@ export default {
|
||||
},
|
||||
|
||||
methods: {
|
||||
getData() {
|
||||
getData() { this.rules = {
|
||||
state: [{ required: true, message: 'Please select the manuscript processing status', trigger: 'blur' }],
|
||||
suggest_for_editor: [{ required: true, message: 'please Input Comments for the Editor', trigger: 'blur' }],
|
||||
suggest_for_author: [{ required: true, message: 'please Input Comments for the Authors', trigger: 'blur' }]
|
||||
};
|
||||
// Fetch article data
|
||||
this.questionform = {
|
||||
reviewer_id: this.baseQuestionform.reviewer_id,
|
||||
@@ -165,14 +169,16 @@ export default {
|
||||
suggest_for_editor: this.baseQuestionform.suggest_for_editor,
|
||||
suggest_for_author: this.baseQuestionform.suggest_for_author
|
||||
};
|
||||
|
||||
this.rules = {
|
||||
state: [{ required: true, message: 'Please select the manuscript processing status', trigger: 'blur' }],
|
||||
suggest_for_editor: [{ required: true, message: 'please Input Comments for the Editor', trigger: 'blur' }],
|
||||
suggest_for_author: [{ required: true, message: 'please Input Comments for the Authors', trigger: 'blur' }]
|
||||
};
|
||||
this.$refs.question.clearValidate();
|
||||
|
||||
|
||||
},
|
||||
questionSubmit() {
|
||||
if (this.questionform.is_anonymous == '' && this.questionform.is_anonymous != '2') {
|
||||
this.$message.error('Please choose disclose your name or remain anonymous.');
|
||||
|
||||
return false;
|
||||
}
|
||||
if (this.questionform.state == 0) {
|
||||
this.$message.error('Please select the manuscript processing status.');
|
||||
return false;
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<div class="crumbs">
|
||||
<el-breadcrumb separator="/">
|
||||
<el-breadcrumb-item>
|
||||
<i class="el-icon-collection"></i> <span class="top_dao"> Final Review</span>
|
||||
<i class="el-icon-collection"></i> <span class="top_dao"> Final Decision</span>
|
||||
</el-breadcrumb-item>
|
||||
</el-breadcrumb>
|
||||
</div>
|
||||
@@ -16,7 +16,7 @@
|
||||
<div class="ma_title" style="height: 100%;">
|
||||
<h2>
|
||||
<!-- <img src="../../assets/img/icon_5.png" alt="" class="icon_img"> -->
|
||||
Under review
|
||||
Final Decision
|
||||
</h2>
|
||||
In this column, the manuscripts that currently need your comments are displayed. You can click
|
||||
detail to review
|
||||
@@ -29,7 +29,7 @@
|
||||
<h3><span
|
||||
style="margin-right: 6px;color: #006699;">{{index+1}}.</span>{{item.title }}
|
||||
</h3>
|
||||
<el-button type="primary" plain style="float: right;">Final Review</el-button>
|
||||
<el-button type="primary" plain style="float: right;">Final Decision</el-button>
|
||||
</router-link>
|
||||
<h4>
|
||||
<span>
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<div class="crumbs">
|
||||
<el-breadcrumb separator="/">
|
||||
<el-breadcrumb-item>
|
||||
<i class="el-icon-collection"></i> <span class="top_dao"> Final Review History</span>
|
||||
<i class="el-icon-collection"></i> <span class="top_dao"> Final Decision History</span>
|
||||
</el-breadcrumb-item>
|
||||
</el-breadcrumb>
|
||||
</div>
|
||||
@@ -44,7 +44,7 @@
|
||||
<b v-if="scope.row.article_state == 3">Reject</b>
|
||||
<b v-if="scope.row.article_state == 4">Revision</b>
|
||||
<b v-if="scope.row.article_state == 5">Accept</b>
|
||||
<b v-if="scope.row.article_state == 8">Final Review</b>
|
||||
<b v-if="scope.row.article_state == 8">Final Decision</b>
|
||||
|
||||
<b v-if="scope.row.astate == 6">Pre-accept</b>
|
||||
</template>
|
||||
@@ -70,7 +70,7 @@
|
||||
size="mini"
|
||||
@click="saveNow(scope.$index, scope.row)"
|
||||
v-if="scope.row.state == 5"
|
||||
>Final Review Now
|
||||
>Final Decision Now
|
||||
</el-button>
|
||||
<el-button
|
||||
type="danger"
|
||||
@@ -109,7 +109,7 @@
|
||||
</el-row>
|
||||
</div>
|
||||
|
||||
<el-dialog destroy-on-close title="Final Reviewe Detail" :visible.sync="editVisible1" width="1200px">
|
||||
<el-dialog destroy-on-close title="Detailed Comment for Final decision" :visible.sync="editVisible1" width="1200px">
|
||||
|
||||
<common-editor-article
|
||||
type="questionform"
|
||||
|
||||
@@ -5,9 +5,9 @@
|
||||
<el-breadcrumb-item>
|
||||
<i class="el-icon-collection"></i>
|
||||
<router-link :to="{ path: '/editPeerewer' }">
|
||||
<span class="top_dao"> Final Review Article</span>
|
||||
<span class="top_dao"> Final Decision Article</span>
|
||||
</router-link>
|
||||
>> Final Review Article Detail
|
||||
>> Final Decision Article Detail
|
||||
</el-breadcrumb-item>
|
||||
</el-breadcrumb>
|
||||
</div>
|
||||
@@ -83,7 +83,8 @@ If you're still having trouble with Chrome, you could use other browsers to comp
|
||||
|
||||
</p>
|
||||
</div>
|
||||
<el-collapse v-model="activeNames" accordion v-if="conmentList.length > 0" style="margin-top: 10px;">
|
||||
<el-collapse v-model="activeNames" v-if="conmentList.length > 0||article_response.length > 0" style="margin-top: 10px;">
|
||||
|
||||
|
||||
<el-collapse-item name="1">
|
||||
<template slot="title">
|
||||
@@ -100,39 +101,69 @@ If you're still having trouble with Chrome, you could use other browsers to comp
|
||||
|
||||
|
||||
</p>
|
||||
<p><span class="comment_item_recommend_title">Reviewer : </span>
|
||||
<p ><span class="comment_item_recommend_title">Reviewer : </span>
|
||||
|
||||
<b v-if="item.reviewer_id == User_Id">{{ item.realname }}</b>
|
||||
<b v-if="item.reviewer_id != User_Id">XXXXXXXXXX</b>
|
||||
<el-button type="primary" plain v-if="item.question&&item.question.art_rev_id" size="mini" @click="ques_visible(item.question)"
|
||||
|
||||
style="padding: 4px 10px;margin-left: 20px;">Referee's Assessment</el-button>
|
||||
|
||||
|
||||
</p>
|
||||
<p>
|
||||
<p style="margin-top: 10px;">
|
||||
|
||||
<span class="comment_item_recommend_title"
|
||||
>Recommendation : </span>
|
||||
|
||||
<span class="comment_item_recommend"><b v-if="item.question.recommend == 1">Minor revision</b>
|
||||
<b v-if="item.question.recommend == 2">Major revision</b>
|
||||
<b v-if="item.question.recommend == 3">Reject in current form, but may be resubmitted</b>
|
||||
<b v-if="item.question.recommend == 4">Reject</b></span>
|
||||
|
||||
|
||||
|
||||
<el-timeline style="margin-left: 160px;" >
|
||||
<el-timeline-item
|
||||
v-for="(activity, index) in extractRecommendAndCtime(item)"
|
||||
|
||||
:key="index"
|
||||
:timestamp="activity.ctimeFormatted">
|
||||
<b style="margin-right: 20px;display: inline-block;width: 100px;color:#006699">{{ activity.title }}</b>
|
||||
<span class="comment_item_recommend" v-if="activity.source=='question'"><b v-if="activity.recommend == 1">Minor revision</b>
|
||||
|
||||
<b v-if="activity.recommend == 2">Major revision</b>
|
||||
<b v-if="activity.recommend == 3">Reject in current form, but may be resubmitted</b>
|
||||
<b v-if="activity.recommend == 4">Reject</b></span>
|
||||
<span class="comment_item_recommend" v-if="activity.source=='repeat'">
|
||||
|
||||
|
||||
<b v-if="activity.recommend == 1">Accept</b>
|
||||
|
||||
<b v-else-if="activity.recommend == 2">Reject</b>
|
||||
<b v-else-if="activity.recommend == 3">Revision</b>
|
||||
<span v-else>No reply</span>
|
||||
</span>
|
||||
|
||||
</el-timeline-item>
|
||||
</el-timeline>
|
||||
|
||||
</p>
|
||||
<p>
|
||||
<p>
|
||||
|
||||
|
||||
|
||||
</p>
|
||||
<!-- <p>
|
||||
|
||||
<span class="comment_item_recommend_title"
|
||||
>Score : </span>
|
||||
|
||||
<span>{{item.question.score}}</span>
|
||||
</p>
|
||||
</p> -->
|
||||
|
||||
<p>
|
||||
<!-- <p>
|
||||
<span class="comment_item_recommend_title">Reviewed Time : </span>
|
||||
<span class="">{{ item.ctime?item.ctime.split(' ')[0]:'' }}</span>
|
||||
|
||||
<el-button type="primary" v-if="item.question&&item.question.art_rev_id" size="mini" @click="ques_visible(item.question)"
|
||||
|
||||
style="padding: 4px 10px;margin-left: 20px;">Referee's Assessment</el-button>
|
||||
</p>
|
||||
|
||||
</p> -->
|
||||
|
||||
|
||||
|
||||
@@ -143,6 +174,31 @@ If you're still having trouble with Chrome, you could use other browsers to comp
|
||||
</div>
|
||||
|
||||
|
||||
</el-collapse-item>
|
||||
<el-collapse-item name="2">
|
||||
<template slot="title">
|
||||
<div class="review_title">
|
||||
|
||||
<b>Author's reply</b>
|
||||
|
||||
</div>
|
||||
|
||||
</template>
|
||||
<div style="overflow: hidden">
|
||||
<div class="file_sty" v-for="(item,i) in article_response" style="margin-top: 15px;width: 50%;float: left">
|
||||
<img src="../../assets/img/icon_0.png" alt="" class="icon_img" />
|
||||
<a :href="mediaUrl + item.file_url" target="_blank" class="txt_pdf"
|
||||
>Manuscirpt
|
||||
<span style="margin-left: 10px; color: #888; font-size: 13px">{{ item.artr_ctime }}</span>
|
||||
<i class="el-icon-download" style="margin-left: 20px; color: #66b1ff; font-weight: bold"></i>
|
||||
|
||||
</a
|
||||
><br />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</el-collapse-item>
|
||||
|
||||
</el-collapse>
|
||||
@@ -198,7 +254,8 @@ import pdf from 'vue-pdf';
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
activeNames:['1'],
|
||||
activeNames:['1','2'],
|
||||
|
||||
questionVisible: false,
|
||||
User_Id: localStorage.getItem('U_id'),
|
||||
|
||||
@@ -210,6 +267,7 @@ export default {
|
||||
txt_mess: {},
|
||||
fileList: [],
|
||||
conmentList: [],
|
||||
article_response: [],
|
||||
picList: [],
|
||||
SMList: [], //补充材料
|
||||
mediaUrl: this.Common.mediaUrl,
|
||||
@@ -306,6 +364,72 @@ export default {
|
||||
this.questionform1.type = e.type;
|
||||
this.questionform1.score = e.score;
|
||||
},
|
||||
formatTimeToDash(time) {
|
||||
let date;
|
||||
// 1. 处理时间戳(秒级,需转毫秒级)
|
||||
if (typeof time === 'number') {
|
||||
date = new Date(time * 1000);
|
||||
}
|
||||
// 2. 处理字符串时间(如 "2025/06/25" 或 "2025.06.25")
|
||||
else if (typeof time === 'string') {
|
||||
// 先把 "/" 或 "." 替换为 "-",避免 Date 解析失败
|
||||
const standardTime = time.replace(/[\/.]/g, '-');
|
||||
date = new Date(standardTime);
|
||||
}
|
||||
// 3. 非法格式直接返回原始值(避免报错)
|
||||
else {
|
||||
return time;
|
||||
}
|
||||
|
||||
// 手动拼接格式(避免浏览器 toLocaleString() 差异,确保分隔符为 "-")
|
||||
const year = date.getFullYear();
|
||||
const month = String(date.getMonth() + 1).padStart(2, '0'); // 月份 0-11,补 0 为两位数
|
||||
const day = String(date.getDate()).padStart(2, '0');
|
||||
const hours = String(date.getHours()).padStart(2, '0');
|
||||
const minutes = String(date.getMinutes()).padStart(2, '0');
|
||||
const seconds = String(date.getSeconds()).padStart(2, '0');
|
||||
|
||||
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
|
||||
}
|
||||
,
|
||||
extractRecommendAndCtime(data) {
|
||||
const result = [];
|
||||
|
||||
// 提取question中的recommend和ctime
|
||||
if (data.question && data.question.recommend !== undefined && data.question.ctime !== undefined) {
|
||||
result.push({
|
||||
source: 'question',
|
||||
title:'First round of review',
|
||||
|
||||
recommend: data.question.recommend,
|
||||
ctime: data.question.ctime,
|
||||
// 转换时间戳为可读格式(如果是时间戳)
|
||||
ctimeFormatted: typeof data.question.ctime === 'number'
|
||||
?this.formatTimeToDash(data.question.ctime)
|
||||
: data.question.ctime
|
||||
});
|
||||
}
|
||||
|
||||
// 提取repeat数组中的recommend和ctime
|
||||
if (Array.isArray(data.repeat)) {
|
||||
data.repeat.forEach((item, index) => {
|
||||
if (item.recommend !== undefined && item.ctime !== undefined) {
|
||||
result.push({
|
||||
source: `repeat`,
|
||||
title:'Second round of review',
|
||||
recommend: item.recommend,
|
||||
ctime: item.ctime,
|
||||
ctimeFormatted: item.ctime
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 提取reviewsList数组中的recommend和ctime
|
||||
|
||||
|
||||
return result;
|
||||
},
|
||||
getData() {
|
||||
// 获取文章信息
|
||||
this.$api
|
||||
@@ -325,7 +449,10 @@ export default {
|
||||
|
||||
this.txt_mess = res.data.article;
|
||||
this.journal_id = res.journal_id;
|
||||
this.conmentList = res.data.article_review;
|
||||
|
||||
this.conmentList = res.data.article_review
|
||||
this.article_response = res.data.article_response
|
||||
|
||||
|
||||
// console.log('journal_id', this.journal_id);
|
||||
|
||||
@@ -345,7 +472,8 @@ export default {
|
||||
record_id: this.Art_id
|
||||
})
|
||||
.then((res) => {
|
||||
for (var i = 0; i < res.data.length; i++) {
|
||||
if(res.status==1){
|
||||
for (var i = 0; i < res.data.length; i++) {
|
||||
let date = new Date(parseInt(res.data[i].ctime) * 1000);
|
||||
let Y = date.getFullYear() + '-';
|
||||
let M = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) + '-' : date.getMonth() + 1 + '-';
|
||||
@@ -368,6 +496,11 @@ export default {
|
||||
} else {
|
||||
this.pdfUrl = 'https://submission.tmrjournals.com/public/' + pdfOut+`&ui=en-US`;
|
||||
}
|
||||
}else{
|
||||
this.$message.error(res.msg);
|
||||
|
||||
}
|
||||
|
||||
})
|
||||
.catch((err) => {
|
||||
this.$message.error(err);
|
||||
@@ -547,7 +680,7 @@ border-bottom: none !important;
|
||||
}
|
||||
.comment_item_recommend_title{
|
||||
color: #888;
|
||||
margin: 0 5px 0 0;
|
||||
margin: 4px 5px 0 0;
|
||||
font-weight: 600;
|
||||
|
||||
|
||||
|
||||
@@ -5,9 +5,9 @@
|
||||
<el-breadcrumb-item>
|
||||
<i class="el-icon-collection"></i>
|
||||
<router-link :to="{ path: '/peerewer' }">
|
||||
<span class="top_dao"> Final Review Article</span>
|
||||
<span class="top_dao"> Final Decision Article</span>
|
||||
</router-link>
|
||||
>> Final Review Completed
|
||||
>> Final Decision Completed
|
||||
</el-breadcrumb-item>
|
||||
</el-breadcrumb>
|
||||
</div>
|
||||
@@ -45,7 +45,7 @@
|
||||
p-id="29681"
|
||||
></path>
|
||||
</svg>
|
||||
<p>Final Review completed !</p>
|
||||
<p>Final Decision completed !</p>
|
||||
<br clear="both" />
|
||||
</div>
|
||||
<!-- 暂时去掉 -->
|
||||
@@ -53,10 +53,10 @@
|
||||
Dear {{ getUserName() }}, We have received all of your review comments.<br />
|
||||
|
||||
The editorial team would like to express our sincere respect and gratitude to you for your meticulous review and
|
||||
guidance as the final reviewer of this journal.
|
||||
guidance as the final decision of this journal.
|
||||
</div>
|
||||
<div class="suss_page_3">
|
||||
<a href="/editPeerewer">Return to Final Review page</a>
|
||||
<a href="/editPeerewer">Return to Final Decision page</a>
|
||||
</div>
|
||||
</el-card>
|
||||
</div>
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
<b v-if="scope.row.astate == 3">Reject</b>
|
||||
<b v-if="scope.row.astate == 4">Revision</b>
|
||||
<b v-if="scope.row.astate == 5">Accept</b>
|
||||
<b v-if="scope.row.astate == 8">Final Review</b>
|
||||
<b v-if="scope.row.astate == 8">Final Decision</b>
|
||||
<b v-if="scope.row.astate == 6">Pre-accept</b>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
@@ -672,13 +672,13 @@ export default new Router({
|
||||
path: '/editPeerewer', //审稿人进行中列表
|
||||
component: () => import('../components/page/edit_per_ewer'),
|
||||
meta: {
|
||||
title: 'Final Review'
|
||||
title: 'Final Decision'
|
||||
}
|
||||
}, {
|
||||
path: '/editPerhistory', //审稿人历史列表
|
||||
component: () => import('../components/page/edit_per_history'),
|
||||
meta: {
|
||||
title: 'Final Review History',
|
||||
title: 'Final Decision History',
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
Reference in New Issue
Block a user