This commit is contained in:
2025-09-01 13:05:33 +08:00
parent d71f54f1f7
commit 4c30099d77
14 changed files with 510 additions and 136 deletions

View File

@@ -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;