Files
tougao_web/src/components/page/articleReviewerDetail.vue
2025-11-17 17:00:14 +08:00

1402 lines
68 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<template>
<div>
<div class="crumbs">
<el-breadcrumb separator="/">
<el-breadcrumb-item> <i class="el-icon-lx-calendar"></i> Manuscript reviewer list </el-breadcrumb-item>
<el-breadcrumb-item>Manuscript reviewer detail</el-breadcrumb-item>
</el-breadcrumb>
</div>
<div class="container">
<el-row :gutter="10">
<el-col :span="20">
<div class="form-box" style="width: 100%;">
<el-form ref="articleform" :model="detailDate" label-width="130px">
<el-form-item label="Article">
<span>{{ detailDate.article }}</span>
</el-form-item>
<el-form-item label="Reviewer">
<span>{{ detailDate.reviewer }}</span>
</el-form-item>
<el-form-item label="Reviewer email">
<span>{{ detailDate.reviewer_email }}</span>
</el-form-item>
<el-form-item label="CreateTime">
<span>{{ formatDate(detailDate.ctime) }}</span>
</el-form-item>
<el-form-item label="Disclose name or anonymous" label-width="200px">
<span v-if="reviewList.length > 0&&reviewList[0].is_anonymous == 0">Disclose name</span>
<span v-if="reviewList.length > 0&&reviewList[0].is_anonymous == 1">Remain anonymous</span>
</el-form-item>
<!-- <el-form-item label="Status">
<span>{{ mystate(detailDate.state) }}</span>
<el-button style="margin-left: 10px" type="text" @click="dialogFormVisible = true" icon="el-icon-view"
>See Feedback</el-button
>
</el-form-item> -->
<el-form-item v-if="canRepeat == 1">
<el-button type="primary" @click="createRevision">Re-review</el-button>
</el-form-item>
<div v-if="reviewList.length > 0" style="margin-top: 40px;">
<div class="clearfix fsheader">
<h4>Peer-review Archive</h4>
</div>
<!-- 初审 -->
<div class="art_author_">
<div class="fixCard reviewer_decision" style="position: relative">
<div class="overflow-x-auto">
<table class="review_table">
<thead>
<tr>
<th></th>
<!-- 表头遍历评审者 -->
<template v-for="(iken, reviewerIndex) in reviewList">
<th>Status
</th>
<th>Time
</th>
<th>Response time
</th>
<th>Comments
</th>
</template>
</tr>
</thead>
<tbody>
<!-- 遍历评审轮次1st + 重复轮次 -->
<tr >
<td>1<sup>st</sup> review</td>
<!-- 遍历每个评审者的1st评审结果 -->
<template v-for="(iken, reviewerIndex) in reviewList">
<td style="cursor: pointer;">
<span style="display: inline-block; margin-left: 4px; margin-right: 8px">
<font
v-if="iken.recommend == 1 || iken.recommend == 2"
style="
width: 12px;
height: 12px;
display: block;
border-radius: 10px;
background-color: #67c23a;
"
>
</font>
<font
v-if="iken.recommend == 3|| iken.recommend == 4"
style="
width: 12px;
height: 12px;
display: block;
border-radius: 10px;
background-color: #f56c6c;
"
>
</font>
</span>
<span v-if="iken.recommend == 1">Minor</span>
<span v-else-if="iken.recommend == 2">Major</span>
<span v-else-if="iken.recommend == 3">reject and resubmission</span>
<span v-else-if="iken.recommend == 4">Reject</span>
</td>
<td>
<p style="line-height: 30px;" v-if="iken.ctime > 0">{{ iken.ctime | formatDatehms }}</p>
<p v-else style="" class="stime">Response time: Re-reviewing...</p>
</td> <td></td>
<td style="">
<el-button
style="margin-left: 10px"
type="text"
@click="showUnderReview(iken.question)"
icon="el-icon-view"
>Details</el-button
>
</td>
</template>
</tr>
<!-- 遍历重复评审轮次2nd3rd... -->
<template v-for="(round, index1) in maxRepeatReviewCount()">
<tr>
<td>{{ index1 + 2 }}<sup>nd</sup> review</td>
<!-- 遍历每个评审者在该轮次的结果 -->
<template v-for="(iken, reviewerIndex) in reviewList">
<td style="">
<span style="cursor: pointer"
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>
<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>
<td>
<p style="line-height: 30px;" v-if="iken.repeat[index1].ctime > 0">{{ iken.repeat[index1].ctime | formatDatehms }}</p>
</td>
<td><p style="line-height: 30px;" v-if="iken.repeat[index1].stime > 0">{{ iken.repeat[index1].stime | formatDatehms }}</p>
<p v-else style="" class="stime">Re-reviewing...</p></td>
<td>
<el-button v-if="[1,2,3].includes(iken.repeat[index1].recommend)"
style="margin-left: 10px"
type="text"
@click="showSecondReview(iken.repeat[index1].question)"
icon="el-icon-view"
>Details</el-button
>
</td>
</template>
</tr>
</template>
</tbody>
</table>
</div>
</div>
</div>
</div>
<!-- <el-form-item label="Article file">
<el-popover placement="right" width="350" trigger="click">
<el-table :data="articlefileList">
<el-table-column
width="150"
:formatter="filedateformate"
property="ctime"
align="center"
label="Date"
></el-table-column>
<el-table-column
width="100"
property="up_username"
align="center"
label="Uploader"
></el-table-column>
<el-table-column
width="100"
label="download"
align="center"
>
<template slot-scope="scope">
<el-link
type="primary"
icon="el-icon-download"
:href="getlinkurl(scope.row)"
></el-link>
</template>
</el-table-column>
</el-table>
<el-button
class="more_btn"
icon="el-icon-download"
type="text"
slot="reference"
>Download</el-button>
</el-popover>
<el-upload
class="upload-demo"
drag
:action="upload_file('articlefile')"
accept=".doc, .docx"
name="articlefile"
:before-upload="beforeupload_file"
:on-error="uperr_file"
:on-success="upSuccess_file"
:limit="1"
:on-exceed="alertlimit"
:on-remove="removefilearticlefile"
>
<i class="el-icon-upload"></i>
<div class="el-upload__text">
<em>Upload</em>
</div>
<div
class="el-upload__tip"
slot="tip"
>Only word files can be uploaded(.doc,.docx)</div>
</el-upload>
</el-form-item> -->
<!-- <el-form-item label="Others">
<el-popover placement="right" width="350" trigger="click">
<el-table :data="articlezipList">
<el-table-column
width="150"
:formatter="filedateformate"
property="ctime"
align="center"
label="Date"
></el-table-column>
<el-table-column
width="100"
property="up_username"
align="center"
label="Uploader"
></el-table-column>
<el-table-column
width="100"
label="Download"
align="center"
>
<template slot-scope="scope">
<el-link
type="primary"
icon="el-icon-download"
:href="getlinkurl(scope.row)"
></el-link>
</template>
</el-table-column>
</el-table>
<el-button
class="more_btn"
icon="el-icon-download"
type="text"
slot="reference"
>Download</el-button>
</el-popover>
<el-upload
class="upload-demo"
drag
:action="upload_file('articlezip')"
accept=".rar, .zip"
name="articlezip"
:before-upload="beforeupload_articlezip"
:on-error="uperr_file"
:on-success="upSuccess_articlezip"
:limit="1"
:on-exceed="alertlimit"
:on-remove="removefilearticlezip"
>
<i class="el-icon-upload"></i>
<div class="el-upload__text">
<em>Upload</em>
</div>
<div
class="el-upload__tip"
slot="tip"
>Only compressed files can be uploaded(.rar,.zip)</div>
</el-upload>
</el-form-item> -->
<!-- <el-form-item>
<el-button type="primary" @click="onSubmit">submit</el-button>
</el-form-item> -->
</el-form>
</div>
</el-col>
<el-col :span="8" v-if="recordList && recordList.length > 0">
<div class="clearfix fsheader">
<h4>Peer-review Archive</h4>
</div>
<div class="time">
<el-timeline>
<el-timeline-item
reverse="true"
:timestamp="item.ctime | formatDatehms"
placement="top"
v-for="(item, index) in recordList"
:key="index"
>
<el-card>
<h4></h4>
<div>
<div v-if="index == recordList.length - 1">
<!-- 初审 -->
<el-tag>Under review</el-tag>
<p style="margin-top: 10px">
Comments:
<el-button
style="margin-left: 10px"
type="text"
@click="showUnderReview(item)"
icon="el-icon-view"
>Details</el-button
>
</p>
</div>
<div v-else>
<!-- 复审 -->
<el-tag type="success">Second review</el-tag>
<p style="margin-top: 10px">
Comments:
<el-button
style="margin-left: 10px"
type="text"
@click="showSecondReview(item)"
icon="el-icon-view"
>Details</el-button
>
</p>
<p v-if="item.stime > 0" style="" class="stime">
Response time: {{ item.stime | formatDatehms }}
</p>
<p v-else style="" class="stime">Response time: Re-reviewing...</p>
</div>
</div>
</el-card>
</el-timeline-item>
</el-timeline>
</div>
<!-- <div class="tree_box">
<h2>State tracking</h2>
<div class="block">
<el-timeline>
<el-timeline-item
:timestamp="formatDate(form.ctime)"
placement="top"
>
<el-card>
<h4>Article submission</h4>
<p>{{form.username}} Submit articles</p>
</el-card>
</el-timeline-item>
<el-timeline-item
v-for="(activity, index) in msgs"
:key="index"
:timestamp="formatDate(activity.ctime)"
placement="top"
>
<el-card>
<p>state change :{{statetostr(activity.state_from)}} to {{statetostr(activity.state_to)}}</p>
<p>{{activity.content}}</p>
</el-card>
</el-timeline-item>
</el-timeline>
</div>
</div>-->
</el-col>
</el-row>
</div>
<el-dialog title="Feedback questionnaire" :visible.sync="dialogFormVisible" width="900px" :close-on-click-modal="false">
<!-- 审稿人表单修改 -->
<common-review-article
type="questionform"
pagetype="Editor"
:form="questionform"
:txt_mess="txt_mess"
:btn_submit="1"
:articleId="articleId"
:journal_id="journal_id"
></common-review-article>
<!-- <el-form :model="questionform" 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="12">
<el-form-item label="1.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="2.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="3.Does the manuscript fall within the aim and scope of the journal?">
<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="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-col :span="12">
<el-collapse>
<el-form-item label="6.Does the title represent manuscript's contents?">
<el-col :span="8">
<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="12">
<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-col>
</el-row>
<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">
(Poor------------------------Excellent)
<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="OTHER SPECIFIC CRITICISMS">
<el-radio-group v-model="questionform.other" style="line-height: 30px">
<el-radio :label="1">Imperfect style</el-radio>
<br />
<el-radio :label="2">Too long</el-radio>
<br />
<el-radio :label="3">References incorrectly presented</el-radio>
<br />
<el-radio :label="4">Typographical and Grammatical errors</el-radio>
</el-radio-group>
</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">
<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-collapse>
</el-form> -->
</el-dialog>
<!-- 初审问卷 -->
<el-dialog title="Feedback questionnaire" :visible.sync="dialogFormVisible1" width="900px" @close="closeUnderDia" :close-on-click-modal="false">
<!-- 审稿人表单修改 -->
<common-review-article
type="undeQuestion"
pagetype="Editor"
:form="undeQuestion"
:txt_mess="txt_mess"
:btn_submit="1"
:articleId="articleId"
:journal_id="journal_id"
></common-review-article>
<!-- <el-form :model="undeQuestion" 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="12">
<el-form-item label="1.Originality of the topic">
<el-radio-group v-model="undeQuestion.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="2.Importance in its Field">
<el-radio-group v-model="undeQuestion.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="3.Does the manuscript fall within the aim and scope of the journal?">
<el-radio-group v-model="undeQuestion.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="4.English language">
<el-radio-group v-model="undeQuestion.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="undeQuestion.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-col :span="12">
<el-collapse>
<el-form-item label="6.Does the title represent manuscript's contents?">
<el-col :span="8">
<el-radio-group v-model="undeQuestion.qu9">
<el-radio :label="true">Yes</el-radio>
<el-radio :label="false">No</el-radio>
</el-radio-group>
</el-col>
<el-col :span="12">
<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="undeQuestion.qu9contents"
:rows="4"
></el-input>
</el-collapse-item>
</el-col>
</el-form-item>
</el-collapse>
</el-col>
</el-row>
<el-collapse>
<el-form-item label="7.Is the Abstract accurate and concise?">
<el-col :span="4">
<el-radio-group v-model="undeQuestion.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="undeQuestion.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="undeQuestion.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="undeQuestion.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="undeQuestion.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="undeQuestion.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="undeQuestion.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="undeQuestion.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">
(Poor------------------------Excellent)
<br />
<el-radio-group v-model="undeQuestion.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:{{ undeQuestion.rated }}</span>
</el-form-item>
<el-form-item label="REFEREE'S RECOMMENDATIONS" prop="recommend">
<el-radio-group v-model="undeQuestion.recommend" style="line-height: 30px">
<el-radio :label="1">Accept with minor revision</el-radio>
<br />
<el-radio :label="2">Accept with major revision</el-radio>
<br />
<el-radio :label="3">Reject in current form, but may be resubmitted</el-radio>
<br />
<el-radio :label="4">Reject, with no resubmission</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="OTHER SPECIFIC CRITICISMS">
<el-radio-group v-model="undeQuestion.other" style="line-height: 30px">
<el-radio :label="1">Imperfect style</el-radio>
<br />
<el-radio :label="2">Too long</el-radio>
<br />
<el-radio :label="3">References incorrectly presented</el-radio>
<br />
<el-radio :label="4">Typographical and Grammatical errors</el-radio>
</el-radio-group>
</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">
<el-input type="textarea" placeholder="please input content" v-model="undeQuestion.comments" :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="undeQuestion.confidential"
:rows="8"
></el-input>
</el-form-item>
<el-form-item label="Please choose disclose your name or remain anonymous.">
<el-radio-group v-model="undeQuestion.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-collapse>
</el-form> -->
</el-dialog>
<!-- 复审问卷 -->
<el-dialog title="Second review questionnaire" :visible.sync="FdialogFormVisible" width="900px" @close="closeSecDia" :close-on-click-modal="false">
<el-form :model="ReReviewQuestion" ref="question" label-width="300px" label-position="top">
<el-divider content-position="center">REFEREE'S RECOMMENDATIONS</el-divider>
<el-form-item label="REFEREE'S RECOMMENDATIONS" prop="recommend">
<el-radio-group v-model="ReReviewQuestion.recommend" style="line-height: 30px">
<el-radio :label="1" :disabled="ReReviewQuestion.recommend!=1">Accept</el-radio>
<el-radio :label="2" :disabled="ReReviewQuestion.recommend!=2">Reject</el-radio>
<!-- 退修改 -->
<el-radio :label="3" :disabled="ReReviewQuestion.recommend!=3">Revison</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="Confidential Comments to the Editor" v-if="ReReviewQuestion.recommend == 3">
<el-input readonly type="textarea" placeholder="please input content" v-model="ReReviewQuestion.content" :rows="8"></el-input>
</el-form-item>
</el-form>
</el-dialog>
</div>
</template>
<script>
export default {
data() {
return {
FdialogFormVisible: false,
dialogFormVisible1: false,
recordList: [],
reviewList: [],
journal_id: null,
baseUrl: this.Common.baseUrl,
mediaUrl: this.Common.mediaUrl,
articleId: null,
dateId: this.$route.query.id,
username: localStorage.getItem('U_name'),
articlefileList: [],
articlezipList: [],
dialogFormVisible: false,
activeNames: ['1', '2', '3', '4', '5', '6', '7'],
detailDate: {
editor: localStorage.getItem('U_name'),
artrevid: '',
article: '',
reviewer: '',
reviewer_email: '',
articlefile: '',
articlezip: '',
ctime: '',
state: ''
},
txt_mess: {},
questionform: {
rev_qu_id: '',
art_rev_id: this.$route.query.id,
qu1: '',
qu2: '',
qu3: '',
qu4: '',
qu5: '',
qu6: '',
qu7: '',
qu8: '',
qu9: '',
qu9contents: '',
qu10: '',
qu10contents: '',
qu11: '',
qu11contents: '',
qu12: '',
qu12contents: '',
qu13: '',
qu13contents: '',
qu14: '',
qu14contents: '',
qu15: '',
qu15contents: '',
rated: '',
recommend: '',
other: '',
confident: '',
comment: ''
},
canRepeat: null,
undeQuestion: {},
ReReviewQuestion: {}
};
},
created: function () {
this.getDate();
this.initFileList();
this.initquesion();
this.getHistoryList();
},
computed: {},
methods: {
maxRepeatReviewCount() {
if (!this.reviewList || !Array.isArray(this.reviewList)) return null; // 边界处理无数据返回null
// 遍历所有评审者找到repeat数组长度最大的那条数据
const maxItem = this.reviewList.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 && maxItem.repeat ? maxItem.repeat.length : 0;
},
getReviewList() {
this.$api
.post('api/Finalreview/getArticleFinalReview', {
article_id: this.articleId
})
.then(async (res) => {
if (res.status == 1) {
if (res.status == 1) {
// this.reviewList = res.data.review.filter(e=>e.art_rev_id==this.questionform.art_rev_id);
}
}
})
.catch((err) => {});
},
// 显示复审对话框
showSecondReview(item) {
this.FdialogFormVisible = true;
this.ReReviewQuestion = item;
},
// 显示初审对话框
showUnderReview(item) {
this.dialogFormVisible1 = true;
this.undeQuestion = { ...item };
this.undeQuestion.qu9 = item.qu9 == 0 ? false : true;
this.undeQuestion.qu9contents = item.qu9_contents;
this.undeQuestion.qu10 = item.qu10 == 0 ? false : true;
this.undeQuestion.qu10contents = item.qu10_contents;
this.undeQuestion.qu11 = item.qu11 == 0 ? false : true;
this.undeQuestion.qu11contents = item.qu11_contents;
this.undeQuestion.qu12 = item.qu12 == 0 ? false : true;
this.undeQuestion.qu12contents = item.qu12_contents;
this.undeQuestion.qu13 = item.qu13 == 0 ? false : true;
this.undeQuestion.qu13contents = item.qu13_contents;
this.undeQuestion.qu14 = item.qu14 == 0 ? false : true;
this.undeQuestion.qu14contents = item.qu14_contents;
this.undeQuestion.qu15 = item.qu15 == 0 ? false : true;
this.undeQuestion.qu15contents = item.qu15_contents;
this.undeQuestion.confident = item.confidential;
this.undeQuestion.comment = item.comments;
},
// 关闭初审对话框
closeUnderDia() {
this.dialogFormVisible1 = false;
this.undeQuestion = {};
},
closeSecDia() {
this.FdialogFormVisible = false;
this.ReReviewQuestion = {};
},
// 2. 定义所有必需字段(确保所有数据结构统一)
// 3. 核心函数:提取第一个元素,剩余放入 repeat
splitQuestion(questionArr = []) {
const requiredFields = [
'rev_qu_id', 'art_rev_id', 'type',
'art_rev_rep_id', 'recommend', 'score', 'state',
'reviewer_id', 'realname', 'ctime', 'stime','is_anonymous'
];
// 解构数组firstItem 取第一个元素restItems 取剩余所有元素
const [firstItem = {}, ...restItems] = questionArr;
// 工具函数:补全单个对象的必需字段(空值用 null 填充)
const completeFields = (item) => {
console.log('item at line 1056:', item)
const result = {question:item};
requiredFields.forEach(field => {
result[field] = item[field] ? item[field]: '';
});
return result;
};
// 补全第一个元素的字段
const firstCompleted = completeFields(firstItem);
// 补全剩余元素的字段,存入 repeat 数组
const repeat = restItems.map(item => completeFields(item));
// 返回结果:按需选择格式(二选一)
return {...firstCompleted, repeat: repeat}
},
// 获取历史审稿列表
async getHistoryList() {
this.loading = true;
this.$api
.post('api/Reviewer/getReviewerRepeatDetail', {
art_rev_id: this.$route.query.id
})
.then(async(res) => {
this.loading = false;
if (res.code == 0) {
// this.reviewList=[{...res.data.art_rev_info}]
if (res.data.art_rev_info.question && res.data.art_rev_info.question[0] != null) {
// 4. 调用函数得到结果
this.reviewList = [await this.splitQuestion(res.data.art_rev_info.question)];
if(this.reviewList.length>0){
this.$api
.post('api/Workbench/updateArticleState', {
article_id: res.data.article_info.article_id,
act_p_id: this.$route.query.id,
type: '1,2',
account: localStorage.getItem('U_name')
})
}
console.log('at line 1094:', this.reviewList)
// this.recordList = res.data.art_rev_info.question.reverse();
}
} else {
this.$message.error(res.msg);
}
})
.catch((err) => {
this.loading = false;
console.log(err);
});
},
// 创建复审实例
createRevision() {
this.$api
.post('api/Reviewer/startRepeatReviewer', {
art_rev_id: this.detailDate.artrevid
})
.then((res) => {
//console.log(res)
if (res.code == 0) {
this.$message.success('A review invitation was successfully sent!');
this.getdate();
} else {
this.$message.error(res.msg);
}
})
.catch((err) => {
console.log(err);
});
},
upload_file(type) {
return this.baseUrl + 'api/reviewer/up_file/type/' + type;
},
onSubmit() {
if (this.detailDate.articlefile == '') {
this.$message.error('you must upload article file');
console.log('file up error');
return false;
}
this.$api
.post('api/Reviewer/articleReviewerUpSubmit/type/editor', this.detailDate)
.then((res) => {
if (res.code == 0) {
this.$message.success('success');
this.$router.go(0);
} else {
this.$message.error('Failed to submit, please contact administrator!');
console.log(res.msg);
}
})
.catch((err) => {
console.log(err);
});
},
//初始化详情信息
getDate() {
this.$api
.post('api/Reviewer/getartrevdate', {
revid: this.dateId,
human: 'editor'
})
.then((res) => {
this.detailDate.artrevid = res.art_rev_id;
this.detailDate.article = res.article_title;
this.detailDate.reviewer = res.account;
this.detailDate.reviewer_email = res.user_email;
this.detailDate.ctime = res.ctime;
this.detailDate.state = res.state;
this.txt_mess = res;
this.canRepeat = res.can_repeat;
this.journal_id = res.journal_id;
this.articleId = res.article_id;
this.getReviewList()
})
.catch((err) => {
console.log(err);
});
},
//初始化filelist
initFileList() {
this.$api
.post('api/Reviewer/getFilelistByID', {
revid: this.dateId
})
.then((res) => {
this.articlefileList = res.hasOwnProperty('articlefile') ? res.articlefile : [];
this.articlezipList = res.hasOwnProperty('articlezip') ? res.articlezip : [];
})
.catch((err) => {
console.log(err);
});
},
//初始化问卷
initquesion() {
this.$api
.post('api/Reviewer/getQuestion', {
artrevid: this.dateId
})
.then((res) => {
if (res.code == 0) {
this.questionform = res.data;
this.questionform.rev_qu_id = res.data.rev_qu_id;
this.questionform.qu1 = res.data.qu1;
this.questionform.qu2 = res.data.qu2;
this.questionform.qu3 = res.data.qu3;
this.questionform.qu4 = res.data.qu4;
this.questionform.qu5 = res.data.qu5;
this.questionform.qu6 = res.data.qu6;
this.questionform.qu7 = res.data.qu7;
this.questionform.qu8 = res.data.qu8;
this.questionform.qu9 = res.data.qu9 == 0 ? false : true;
this.questionform.qu9contents = res.data.qu9_contents;
this.questionform.qu10 = res.data.qu10 == 0 ? false : true;
this.questionform.qu10contents = res.data.qu10_contents;
this.questionform.qu11 = res.data.qu11 == 0 ? false : true;
this.questionform.qu11contents = res.data.qu11_contents;
this.questionform.qu12 = res.data.qu12 == 0 ? false : true;
this.questionform.qu12contents = res.data.qu12_contents;
this.questionform.qu13 = res.data.qu13 == 0 ? false : true;
this.questionform.qu13contents = res.data.qu13_contents;
this.questionform.qu14 = res.data.qu14 == 0 ? false : true;
this.questionform.qu14contents = res.data.qu14_contents;
this.questionform.qu15 = res.data.qu15 == 0 ? false : true;
this.questionform.qu15contents = res.data.qu15_contents;
this.questionform.rated = res.data.rated;
this.questionform.recommend = res.data.recommend;
this.questionform.other = res.data.other;
this.questionform.confident = res.data.confidential;
this.questionform.comment = res.data.comments;
this.questionform.is_anonymous = res.data.is_anonymous;
this.questionform.type= res.data.type;this.questionform.score = res.data.score;
}
});
},
//检验上传文件的格式
beforeupload_file(file) {
// const isWORd =
// file.type === 'application/msword' ||
// file.type === 'application/vnd.openxmlformats-officedocument.wordprocessingml.document';
// if (!isWORd) {
// this.$message.error('Only word files can be uploaded(.doc,.docx)');
// }
// return isWORd;
},
beforeupload_articlezip(file) {
// const iszip = file.type === 'application/x-zip-compressed' || file.name.split('.')[1] === 'rar';
// if (!iszip) {
// this.$message.error('Only compressed files can be uploaded(.rar,.zip)');
// }
// return iszip;
},
getlinkurl(row) {
return this.mediaUrl + row.file_url;
},
filedateformate(row, column, cellValue, index) {
return this.formatDate(cellValue);
},
uperr_file(err) {
this.$message.error('上传失败');
},
beforeupload() {},
upSuccess_file(res, file) {
if (res.code == 0) {
this.detailDate.articlefile = 'articlefile/' + res.upurl;
} else {
this.$message.error('服务器上传错误' + res.msg);
}
},
upSuccess_articlezip(res, file) {
if (res.code == 0) {
this.detailDate.articlezip = 'articlezip/' + res.upurl;
} else {
this.$message.error('服务器上传错误' + res.msg);
}
},
handleClick(item) {
console.log('item at line 1228:', item);
this.$router.push({
path: 'articleReviewerDetail',
query: {
id: item.art_rev_id
}
});
},
formatDate(timestamp) {
var date = new Date(timestamp * 1000); //时间戳为10位需*1000时间戳为13位的话不需乘1000
var Y = date.getFullYear() + '-';
var M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';
var D = date.getDate() < 10 ? '0' + date.getDate() : date.getDate();
var h = date.getHours() < 10 ? '0' + date.getHours() : date.getHours();
var m = date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes();
var s = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds();
return Y + M + D + ' ' + h + ':' + m + ':' + s;
},
//超出传送文件个数限制
alertlimit() {
this.$message.error('超过最大上传文件个数');
},
//清除文件时的事件
removefilearticlefile(file, fileList) {
this.detailDate.articlefile = '';
},
removefilearticlezip(file, fileList) {
this.detailDate.articlezip = '';
},
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;
}
}
};
</script>
<style scoped>
.fsheader {
margin-bottom: 15px;
}
.dwnbtn {
margin-bottom: 5px;
}
.container {
min-width: 1000px;
}
.tree_box {
padding: 15px 10px;
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
}
::v-deep .el-dialog__body{
padding: 10px 20px 20px !important;
}.review_table {
width: 100%;
background-color: #fff;
/* 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: 14px;
background-color: #f0f0f0;
}
.review_table td {
font-size: 14px;
/* background-color: #f0f0f0; */
}
.review_table th:first-child, .review_table td:first-child {
width: 100px;
/* 内容过长时自动换行 */
word-wrap: break-word;
/* 强制在单词内换行(针对长单词) */
word-break: break-all;
}
.review_table tr:hover {
/* background-color: #fff; */
}
.overflow-x-auto {
overflow-x: auto;
}
</style>