This commit is contained in:
2025-08-29 15:05:26 +08:00
parent daba55e418
commit d71f54f1f7
24 changed files with 2939 additions and 1581 deletions

View File

@@ -7,10 +7,18 @@
<router-view v-if="!$route.meta.keepAlive"></router-view> -->
</div>
</template>
<script>
export default {
created() {
}
};
</script>
<style>
@import "./assets/css/main.css";
@import "./assets/css/color-dark.css";
/*深色主题*/
/*@import "./assets/css/theme-green/color-green.css"; 浅绿色主题*/
@import './assets/css/main.css';
@import './assets/css/color-dark.css';
/*深色主题*/
/*@import "./assets/css/theme-green/color-green.css"; 浅绿色主题*/
</style>

View File

@@ -64,7 +64,8 @@
</el-submenu>
</template>
<!-- 编委 -->
<template v-if="this.user_cap.includes(',board')">
<template v-if="this.user_cap.includes(',board')||this.user_cap.includes('board_editor')">
<el-submenu index="7">
<template slot="title"> <i class="el-icon-notebook-1"></i> {{ $t('sidebar.edit_oria') }} </template>
<!-- <el-menu-item index="editorial">
@@ -73,10 +74,18 @@
<el-menu-item index="edithistory">
{{ $t('sidebar.edit_oria2') }}
</el-menu-item>
<el-menu-item index="editPeerewer">
{{ $t('sidebar.edit_ewer1') }}
</el-menu-item>
<el-menu-item index="editPerhistory">
{{ $t('sidebar.edit_ewer2') }}
</el-menu-item>
</el-submenu>
</template>
<!-- 主编 -->
<template v-if="this.user_cap.includes('chief')">
<template v-if="this.user_cap.includes('chief')||this.user_cap.includes('chief_editor')||this.user_cap.includes('deputy_editor')">
<el-submenu index="6">
<template slot="title"> <i class="el-icon-document-copy"></i> {{ $t('sidebar.man_ing') }} </template>
<el-menu-item index="managing">
@@ -641,6 +650,73 @@ export default {
return this.$route.path.replace('/', '');
}
},
mounted() {
// if(this.user_cap.includes(',board')||this.user_cap.includes('board_editor')||this.user_cap.includes('chief')||this.user_cap.includes('chief_editor')||this.user_cap.includes('deputy_editor')){
// Promise.all([
// this.$api
// .post('api/Finalreview/lists', {
// 'reviewer_id': localStorage.getItem('U_id'),state:5,
// 'page': 1,
// 'size': 999999,
// })
// ]).then(([res1]) => {
// console.log('res1 at line 770:', res1)
// const totalCheck = res1.data.total || 0; // 待审核
// if (totalCheck > 0 ) {
// const h = this.$createElement;
// const messageNodes = [];
// if (totalCheck > 0) {
// messageNodes.push(
// h(
// 'p',
// {
// style: {
// color: '#006699',
// marginTop: '10px',
// marginBottom: '4px',
// display: 'block', width: '280px' // 设置宽度
// }
// },
// `You have received 【${totalCheck}】 invitations .`
// )
// );
// // 第二行
// messageNodes.push(
// h(
// 'p',
// {
// style: {
// color: '#888',
// display: 'block', width: '280px' // 设置宽度
// }
// },
// 'Please process them promptly in the final review history.'
// )
// );
// }
// this.$notify({
// title: 'Final Review',
// message: h('div', {
// style: 'width: 200px;'
// }, messageNodes)
// });
// }
// });
// }
},
created() {
localStorage.setItem('collapse', this.collapse);

View File

@@ -224,14 +224,16 @@ const en = {
rev_ewer: 'Reviewer',
rev_ewer1: 'Peer Review',
rev_ewer2: 'Review History',
man_ing: 'Editor-in-Chief',
man_ing1: 'Journal information',
man_ing2: 'Article List',
edit_oria: 'Editorial board member',
edit_oria1: 'Final decision',
edit_oria1: 'Final Review',
edit_oria2: 'Accepted manuscript',
edit_ewer: 'Reviewer',
edit_ewer1: 'Peer Review',
edit_ewer1: 'Final Review',
edit_ewer2: 'Final Review History',
you_thed: 'Young scholar',
you_thed1: 'Pending review',
guest: 'Guest editor',
@@ -275,7 +277,7 @@ const en = {
state4: 'Revision',
state5: 'Accept',
state6: 'Pre-accept',
state7: 'Final Decision',
state8: 'Final Review',
act1: 'Dealing',
act2: 'Finished'
},

View File

@@ -222,8 +222,8 @@ const zh = {
edit_oria: '编委',
edit_oria1: '稿件',
edit_oria2: '历史稿件',
edit_ewer1: '审稿',
edit_ewer2: '审稿记录',
edit_ewer1: '审',
edit_ewer2: '审记录',
you_thed: '青年编委',
you_thed1: '待审核',
guest: '客座编辑',
@@ -269,7 +269,7 @@ const zh = {
state5: '接收',
state6: '预接收',
state7: '终审',
state8: '终审',
act1: '审查中',
act2: '已完结'
},

View File

@@ -1889,7 +1889,7 @@ export default {
input.select(); // 选择实例内容
document.execCommand('Copy'); // 执行复制
document.body.removeChild(input); // 删除临时实例
this.$message.success('Invitation code copied successfully!');
this.$message.success('invitation code copied successfully!');
},
// 个人信息弹出框

View File

@@ -640,7 +640,7 @@
</p>
<p style="margin: 5px 10px 0 55px; font-size: 14px; line-height: 22px">
(Non-essential)
<br />While authors are welcome to suggest potential reviewers, the final decision on the selection of
<br />While authors are welcome to suggest potential reviewers, the final review on the selection of
reviewers is at the discretion of the editorial board. The following criteria are generally considered
when selecting reviewers: <br />1. The reviewer should hold a Ph.D. degree (or equivalent) in a relevant
field. <br />2. The reviewer should have published at least three articles on the subject matter of the

View File

@@ -766,6 +766,10 @@ export default {
state: 4,
title: this.$t('artstate.state4')
},
{
state: 8,
title: this.$t('artstate.state8')
},
{
state: 6,
title: this.$t('artstate.state6')
@@ -1004,6 +1008,9 @@ export default {
case 5:
str = this.$t('artstate.state5');
break;
case 8:
str = this.$t('artstate.state8');
break;
case 6:
str = this.$t('artstate.state6');
break;

View File

@@ -632,6 +632,9 @@
case 6:
str = this.$t('artstate.state6');
break;
case 6:
str = this.$t('artstate.state6');
break;
}
return str;
}

File diff suppressed because it is too large Load Diff

View File

@@ -2,7 +2,7 @@
<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> <i class="el-icon-lx-calendar"></i> Manuscript final reviewer list </el-breadcrumb-item>
<el-breadcrumb-item>
<div>
<span>ID:{{ articleBaseInfo.accept_sn }} </span>
@@ -28,24 +28,29 @@
empty-text="New messages (0)"
>
<el-table-column type="index" label="No." align="center" width="50"></el-table-column>
<el-table-column label="Base Information" width="280px">
<el-table-column label="Base Information" width="320px">
<template slot-scope="scope">
<p class="tab_tie_col">
<span>Name: </span>
<el-badge is-dot :hidden="scope.row.reviewer_act == 1 ? false : true" class="item">
<b style="font-size: 15px; letter-spacing: -0.5px">{{ scope.row.reviewer }}</b>
</el-badge>
<b style="font-size: 15px; letter-spacing: -0.5px">{{ scope.row.account }}</b>
</p>
<p class="tab_tie_col">
<span>Realname: </span>
{{ scope.row.realname }}
</p>
<p class="tab_tie_col"><span>Country: </span>{{ scope.row.country }}</p>
<p class="tab_tie_col"><span>Email: </span>{{ scope.row.email }}</p>
<p class="tab_tie_col">
<span>Identity: </span>
<span v-if="scope.row.reviewer_type == 0" style="color: #409eff">Editor-in-Chief</span>
<span v-if="scope.row.reviewer_type == 1" style="color: #409eff">Vice Editor-in-Chief</span>
<span v-if="scope.row.reviewer_type == 2" style="color: #409eff">Editorial Board Member</span>
</p>
</template>
</el-table-column>
<el-table-column label="Other Information">
<!-- <el-table-column label="Other Information">
<template slot-scope="scope">
<p class="tab_tie_col">
<span>Field: </span>
@@ -57,7 +62,7 @@
{{ scope.row.company }}
</p>
</template>
</el-table-column>
</el-table-column> -->
<!-- <el-table-column prop="art_rev_id" label="ID" align="center" width="60"></el-table-column> -->
<!-- <el-table-column label="Reviewer" align="center" width="130">
<template slot-scope="scope">
@@ -70,7 +75,7 @@
<!-- <el-table-column prop="email" label="Email" align="center"></el-table-column> -->
<!-- <el-table-column prop="company" label="Company" align="center"></el-table-column> -->
<!-- <el-table-column prop="major_str" label="Major"></el-table-column> -->
<el-table-column label="Research areas" width="260">
<el-table-column label="Research areas">
<template slot-scope="scope">
<commonMajorTableList
:user_id="scope.row.reviewer_id"
@@ -81,18 +86,22 @@
</template>
</el-table-column>
<!-- <el-table-column prop="field" label="Field"></el-table-column> -->
<el-table-column label="State" align="center" width="130">
<el-table-column label="State" align="center" width="180">
<template slot-scope="scope">
<span style="font-size: 16px" v-html="revstate(scope.row)"></span>
<font style="color: #aaa; display: block; line-height: 18px; font-size: 13px" v-html="formatDate(scope.row.ctime)">
<font
v-if="scope.row.update_time"
style="color: #aaa; display: block; line-height: 18px; font-size: 13px"
v-html="formatDate(scope.row.update_time)"
>
</font>
</template>
</el-table-column>
<el-table-column label="" width="100" align="center">
<template slot-scope="scope">
<el-button
v-show="scope.row.state != 4"
v-show="scope.row.state == 1 || scope.row.state == 2 || scope.row.state == 3"
ize="mini"
type="primary"
plain
@@ -114,40 +123,63 @@
></el-pagination>
</div>
</div>
<el-dialog title="Add Editorial Board Members" :visible.sync="AddSuggest" width="1200px" custom-class="editorialBoardDialog">
<!-- <el-select v-model="editorialBoardForm.type" placeholder="" @change="selectEditorialBoardType" style="margin-bottom: 20px">
<el-dialog
:close-on-click-modal="false"
title="Add Editorial Board Members"
:visible.sync="AddSuggest"
width="1200px"
custom-class="editorialBoardDialog"
>
<el-select
v-model="editorialBoardForm.type"
placeholder=""
@change="selectEditorialBoardType"
style="margin-bottom: 20px; width: 200px"
>
<el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"> </el-option>
</el-select> -->
</el-select>
<el-input clearable v-model="editorialBoardForm.email" style="width: 300px; margin-left: 20px" placeholder="Email "></el-input>
<el-button type="primary" style="margin-left: 40px" size="mini" @click="search">Search</el-button>
<el-button type="primary" plain style="margin-left: 10px" size="mini" @click="reset">Reset</el-button>
<el-table
:data="tableSuggest"
stripe
class="table"
ref="multipleTable"
header-cell-class-name="table-header"
empty-text="New messages (0)"
>
<el-table-column type="index" label="No." align="center" width="50"></el-table-column>
<el-table-column prop="User Message" label="Realname" width="340">
<template slot-scope="scope">
<p style="font-size: 14px;font-weight: bold;margin-top: 2px;">{{scope.row.realname}}</p>
<p style="margin: 2px 0 0px 0;">
<span style="color: #999;">Email :</span>
{{scope.row.email}}
<p style="font-size: 14px; font-weight: bold; margin-top: 2px">{{ scope.row.realname }}</p>
<p style="margin: 2px 0 0px 0">
<span style="color: #999">Email :</span>
{{ scope.row.email }}
</p>
<p style="margin: 0 0 5px 0;" v-if="scope.row.title!=''">
<span style="color: #999;">Identity : </span>
<span v-if="scope.row.type == 0" style="color: #409EFF ;">Editor-in-Chief</span>
<span v-if="scope.row.type == 1" style="color: #409EFF;">Deputy Editor-in-Chief</span>
<span v-if="scope.row.type == 2" style="color: #409EFF ;">Member of the Editorial Board</span>
<p style="margin: 0 0 5px 0" v-if="scope.row.title != ''">
<span style="color: #999">Identity : </span>
<span v-if="scope.row.type == 0" style="color: #409eff">Editor-in-Chief</span>
<span v-if="scope.row.type == 1" style="color: #409eff">Vice Editor-in-Chief</span>
<span v-if="scope.row.type == 2" style="color: #409eff">Editorial Board Members</span>
</p>
</template>
</el-table-column>
<el-table-column prop="research_areas" label="Research Areas"></el-table-column>
<el-table-column prop="research_areas" label="Research Areas">
<template slot-scope="scope">
<commonMajorTableList
:user_id="scope.row.user_id"
:baseInfo="scope.row"
:key="scope.row.user_id"
:disabled="true"
></commonMajorTableList>
</template>
</el-table-column>
<el-table-column label="" width="120" align="center">
<template slot-scope="scope">
@@ -207,247 +239,26 @@
<el-button type="primary" @click="saveEdit">save</el-button>
</span>
</el-dialog>
<el-dialog
title="Supplement"
:visible.sync="editVisible1"
width="40%"
v-loading="loading"
element-loading-text="Loading..."
element-loading-spinner="el-icon-loading"
element-loading-background="rgba(0, 0, 0, 0.8)"
>
<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>
<articleEditorDetail :dateId="FinalDetailBaseInfo.id" ref="commonFinalDetail"></articleEditorDetail>
<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">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="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="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-form-item>
<el-button type="primary" @click="addArtRev">submit</el-button>
</el-form-item>
</el-collapse>
</el-form>
</el-dialog>
</div>
</template>
<script>
import { Loading } from 'element-ui';
import articleEditorDetail from './articleEditorDetail.vue';
import commonMajorTableList from '../page/components/major/tableList.vue';
export default {
components: {
commonMajorTableList
commonMajorTableList,
articleEditorDetail
},
data() {
return {
FinalDetailBaseInfo: {},
options: [
{
value: 0,
@@ -455,20 +266,17 @@ export default {
},
{
value: 1,
label: 'Deputy Editor-in-Chief'
label: 'Vice Editor-in-Chief'
},
{
value: 2,
label: 'Member of the Editorial Board'
},
label: 'Editorial Board Members'
}
],
editorialBoardForm: {
page: 1,
size:10,
type:0
size: 10,
type: 0
},
majorData: [],
baseUrl: this.Common.baseUrl,
@@ -507,10 +315,12 @@ export default {
txt_mess: {},
query: {
articleId: this.$route.query.id,
article_id: this.$route.query.id,
article_id: this.$route.query.id
// page: 1,
// size: 10
},
page: 1,
size: 10,
editform: {
uid: 0,
articleId: this.$route.query.id
@@ -537,7 +347,7 @@ export default {
tableSuggest: [],
loading: false,
Total: 0,
editorialBoardTotal: 0,
editorialBoardTotal: 0
};
},
created() {
@@ -552,12 +362,22 @@ export default {
},
methods: {
selectEditorialBoardType(type) {
console.log('type at line 525:', type)
console.log('type at line 525:', type);
this.editorialBoardForm.page = 1;
this.$forceUpdate();
this.getEditorialBoardType();
},
search() {
this.editorialBoardForm.page = 1;
this.getEditorialBoardType();
},
reset() {
this.editorialBoardForm.page = 1;
this.editorialBoardForm.email = '';
this.getEditorialBoardType();
},
initArticle() {
this.$api
.post('api/Article/getArticleDetail', {
@@ -571,17 +391,29 @@ export default {
// 获取编辑列表数据
getdate() {
const loading = this.$loading({
lock: true,
text: 'Loading',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)',
zIndex: 9999 // 设置一个足够高的层级
});
this.$api
.post('api/Finalreview/getReviewRecord', {
article_id:this.$route.query.id
.post('api/Finalreview/inviteBoardLists', {
article_id: this.$route.query.id,
page: this.page,
size: this.size
})
.then((res) => {
console.log('res at line 562:', res)
// this.Total = res.totle;
this.tableData = res.data.article_final;
loading.close();
console.log('res at line 562:', res);
this.Total = res.data.total;
this.tableData = res.data.lists;
})
.catch((err) => {
loading.close();
console.log(err);
});
},
@@ -626,11 +458,17 @@ export default {
if (this.editform.uid == 0) {
this.$message.error('please select a reviewer');
} else {
this.loading = true;
const loading = this.$loading({
lock: true,
text: 'Loading',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)',
zIndex: 9999 // 设置一个足够高的层级
});
this.$api
.post('api/Article/addArticleReviewer', this.editform)
.then((res) => {
this.loading = false;
loading.close();
if (res.code == 0) {
this.$message.success('add success');
this.$router.go(0);
@@ -639,6 +477,7 @@ export default {
}
})
.catch((err) => {
loading.close();
console.log(err);
});
}
@@ -668,59 +507,119 @@ export default {
},
getEditorialBoardType() {
const loading = this.$loading({
lock: true,
text: 'Loading',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)',
zIndex: 9999 // 设置一个足够高的层级
});
this.$api
.post('api/Finalreview/boardLists', {
...this.editorialBoardForm,
article_id: this.query.article_id
})
.then((res) => {
loading.close();
this.tableSuggest = res.data.lists;
this.editorialBoardTotal = res.data.total;
this.AddSuggest = true;
})
.catch((err) => {
loading.close();
console.log(err);
});
},
// 添加推荐审稿人
async openSuggRev() {
await this.getEditorialBoardType();
this.AddSuggest = true;
},
selSuggest(e) {
this.loading = true;
const loading = this.$loading({
lock: true,
text: 'Loading',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)',
zIndex: 9999 // 设置一个足够高的层级
});
this.$api
.post('api/Finalreview/invite', {
reviewer_id: e.user_id,
article_id: this.$route.query.id
})
.then((res) => {
this.loading = false;
if (res.status == 0) {
loading.close();
if (res.status == 1) {
this.$message.success('Add Success');
this.AddSuggest = false;
this.getdate();
} else {
this.$message.error('Add Error');
this.$message.error('Add Error:' + res.msg);
}
})
.catch((err) => {
this.loading = false;
loading.close();
console.log(err);
});
},
showdetail(row) {
if (row.state == 4) {
this.$message.error('Review expired!');
} else {
this.$router.push({
path: 'articleReviewerDetail',
query: {
id: row.art_rev_id
}
this.FinalDetailBaseInfo={...row}
// const loading = this.$loading({
// lock: true,
// text: 'Loading',
// spinner: 'el-icon-loading',
// background: 'rgba(0, 0, 0, 0.7)',
// zIndex: 9999 // 设置一个足够高的层级
// });
// this.$api
// .post('api/Finalreview/view', {
// record_id: row.id
// // reviewer_id: this.$route.query.reviewer_id
// })
// .then((res) => {
// this.detailDate.artrevid = res.art_rev_id;
// this.detailDate.article = res.data.article.title;
// this.detailDate.reviewer = res.data.article_final.realname;
// this.detailDate.ctime = res.data.article_final.update_time;
// this.detailDate.article_final = res.data.article_final;
// this.detailDate.state = res.state;
// this.txt_mess = res;
// this.journal_id = res.journal_id;
// this.articleId = res.data.article.article_id;
// this.$nextTick(() => {
// this.$refs.commonEditor.getData();
// loading.close();
// });
// this.$forceUpdate();
// })
// .catch((err) => {
// loading.close();
// console.log(err);
// });
this.$nextTick(() => {
this.$refs.commonFinalDetail.init();
});
}
// this.$router.push({
// path: 'articleEditorDetail',
// query: {
// id: row.id
// }
// });
},
changereviewer() {
if (this.editform.uid !== 0) {
@@ -760,21 +659,22 @@ export default {
},
revstate(row, column, cellValue, index) {
let frag = '';
if (row.state == 0) {
frag = 'With reviewer';
frag = '<text style="color:#67c23a">Agree to review</text>';
} else if (row.state == 1) {
// 大修
frag = 'Major revision';
frag = '<text style="color:#67c23a">Accept</text>';
// frag = 'Revision';
} else if (row.state == 2) {
frag = 'Reject';
} else if (row.state == 3) {
frag = '<text style="color:#0077b8">Revision</text>';
} else if (row.state == 2) {
//小修
// frag = 'Accept';
frag = 'Minor revision';
frag = '<text style="color:#f56c6c">Reject</text>';
} else if (row.state == 4) {
frag = '<text style="color:#aaa">invalid</text>';
frag = '<text style="color:#888">invalid</text>';
} else if (row.state == 5) {
frag = 'invitation';
}
@@ -873,11 +773,11 @@ export default {
margin: 0 5px 0 0;
font-size: 13px;
}
::v-deep .editorialBoardDialog .el-dialog__body{
padding-top: 10px !important;
padding-bottom: 0px !important;
::v-deep .editorialBoardDialog .el-dialog__body {
padding-top: 10px !important;
padding-bottom: 0px !important;
}
::v-deep .editorialBoardDialog .el-dialog__body .el-table--mini .el-table__cell{
padding: 0px !important
::v-deep .editorialBoardDialog .el-dialog__body .el-table--mini .el-table__cell {
padding: 0px !important;
}
</style>

View File

@@ -16,12 +16,13 @@
:value="item.journal_id"></el-option>
</el-select>
<el-select v-model="query.state" @change="getdate" placeholder="Please select status"
style="margin-left:10px;width: 110px;">
style="margin-left:10px;width: 160px;">
<el-option :key="0" label="All status" :value="0"></el-option>
<el-option :key="1" :label="$t('artstate.state1')" :value="1"></el-option>
<el-option :key="2" :label="$t('artstate.state2')" :value="2"></el-option>
<el-option :key="3" :label="$t('artstate.state3')" :value="3"></el-option>
<el-option :key="4" :label="$t('artstate.state4')" :value="4"></el-option>
<el-option :key="4" :label="$t('artstate.state8')" :value="8"></el-option>
<el-option :key="5" :label="$t('artstate.state5')" :value="5"></el-option>
</el-select>
<el-input v-model="query.name" placeholder="Title" style="margin:0 10px;width: 190px;"></el-input>
@@ -438,7 +439,42 @@
<!-- end -->
</el-collapse-item>
</el-collapse>
<p v-if="comentDeploy==''" style="color: #888888;margin: 0 0 0 10px;">No Comment</p>
<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
<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]:''}}
</font>
</template>
<!-- 时间轴 -->
<el-timeline >
<el-card>
<!-- 内容 -->
<div class="art_author_coment" style="margin-top: 0px;">
<p v-if="item.suggest_for_author!=''" style="margin-left: 0;">
<font style="margin-top: 0px;">Comments for the Authors</font>
<pre style="text-align: justify;">{{item.suggest_for_author}}</pre>
</p>
</div>
</el-card>
</el-timeline>
<!-- end -->
</el-collapse-item>
</el-collapse>
<p v-if="comentDeploy==''||comentFinal==''" style="color: #888888;margin: 0 0 0 10px;">No Comment</p>
</el-dialog>
</div>
@@ -466,6 +502,7 @@
},
tableData: [],
multipleSelection: [],
activeFinalComment: [],
delList: [],
activeNames: [],
artextForm: {},
@@ -475,6 +512,7 @@
manuscirptFileList: [],
supplementaryFileList: [],
comentDeploy: [],
comentFinal: [],
activeComment: [],
authorList_name: '',
editVisible: false,
@@ -581,6 +619,7 @@
if (item.question && item.question.length > 0)
item.question = item.question.reverse()
})
this.comentFinal = res.suggest_final
// this.activeComment = []
// for (var i = 0; i < res.suggest.length; i++) {
// this.activeComment.push(i)
@@ -850,6 +889,13 @@ this.$router.push({
skr = '#5fab3b;';
slr = 'Proof';
break;
case 8:
str = '#5a90e11F;';
sfr = '#5a90e105;';
sgr = '#5a90e14D;';
skr = '#5a90e1;';
slr = 'Final Review';
break;
default:
str = '#8888881F;';
sfr = '#88888805;';

View File

@@ -54,11 +54,10 @@
</div>
<div v-if="!PreAcpVisible">
<div v-for="(item, ikgn) in tableData"
<div
v-for="(item, ikgn) in tableData"
:class="{
'articleBaseInfo7': item.state==7,
articleBaseInfo7: item.state == 8
}"
>
<p
@@ -228,7 +227,7 @@
</div> -->
<div style="display: flex; margin-left: auto; flex-wrap: nowrap">
<div
v-if="item.state != 7"
v-if="item.state != 8"
class="fixCard manuscript_files"
:style="`width:${item.state == 0 ? '350px !important;flex-shrink: 0' : '320px !important;flex-shrink: 0'}`"
>
@@ -259,7 +258,7 @@
<i>
<!-- <i class="el-icon-time"></i> -->
{{ formatDate(ikrm.ctime) }}</i
{{ formatDate(ikrm.ctime, item) }}</i
>
</span>
<a :href="mediaUrl + ikrm.file_url">
@@ -290,7 +289,7 @@
<span @click="openFile(mediaUrl + ikrm.file_url)" class="openFile">
<!-- <font>Uploader {{ ikrmIndex+1 }} </font> -->
<!-- {{ ikrm.username }} -->
<i> <!-- <i class="el-icon-time"></i> -->{{ formatDate(ikrm.ctime) }}</i>
<i> <!-- <i class="el-icon-time"></i> -->{{ formatDate(ikrm.ctime, item) }}</i>
</span>
<a :href="mediaUrl + ikrm.file_url">
<i class="el-icon-download download"></i>
@@ -320,7 +319,7 @@
<span @click="openFile(mediaUrl + ikrm.file_url)" class="openFile">
<!-- <font>Uploader {{ikrmIndex}} </font> -->
<!-- {{ ikrm.username }} -->
<i> <!-- <i class="el-icon-time"></i> -->{{ formatDate(ikrm.ctime) }}</i>
<i> <!-- <i class="el-icon-time"></i> -->{{ formatDate(ikrm.ctime, item) }}</i>
</span>
<a :href="mediaUrl + ikrm.file_url">
<i class="el-icon-download download"></i>
@@ -350,7 +349,7 @@
<!-- <font>Uploader {{ ikrmIndex+1 }} </font> -->
<!-- {{ ikrm.username }} -->
<i> <!-- <i class="el-icon-time"></i> -->{{ formatDate(ikrm.ctime) }}</i>
<i> <!-- <i class="el-icon-time"></i> -->{{ formatDate(ikrm.ctime, item) }}</i>
</span>
<a :href="mediaUrl + ikrm.file_url">
<i class="el-icon-download download"></i>
@@ -379,7 +378,7 @@
<span @click="openFile(mediaUrl + ikrm.file_url)" class="openFile">
<!-- <font>Uploader {{ ikrmIndex+1 }} </font> -->
<!-- { ikrm.username }} -->
<i> <!-- <i class="el-icon-time"></i> -->{{ formatDate(ikrm.ctime) }}</i>
<i> <!-- <i class="el-icon-time"></i> -->{{ formatDate(ikrm.ctime, item) }}</i>
</span>
<a :href="mediaUrl + ikrm.file_url">
<i class="el-icon-download download"></i>
@@ -390,7 +389,7 @@
</div>
<div
v-if="item.state != 7"
v-if="item.state != 8"
class="fixCard"
:style="`width: ${
item.state == 0 ? 'calc(100% - 350px - 230px - 18px)' : 'calc(100% - 350px - 230px - 18px)'
@@ -494,10 +493,8 @@
<span v-if="finalCount(item) > 0 && finalCount(item) != 'NaN'">{{ finalCount(item) }}</span>
</p>
</div>
<template v-if="query.state != 0&&item.state != 7">
<div class="fixCard reviewer_decision" style="width: 230px; flex-shrink: 0" >
<template v-if="query.state != 0 && query.state != 8">
<div class="fixCard reviewer_decision" style="width: 230px; flex-shrink: 0">
<b style="font-size: 16px; letter-spacing: -0.5px">Reviewer Decision</b>
<p style="height: 5px"></p>
<p v-for="(iken, index) in item.reviewScore" style="line-height: 24px" :key="index">
@@ -546,7 +543,7 @@
</p>
<p style="margin-top: 10px">
<b @click="articleReviewer(item)" class="btnCliArt">
<i :class="item.state == 7 ? 'el-icon-view' : 'el-icon-edit'"></i> Inviting Reviewer
<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)">
@@ -554,55 +551,137 @@
</p>
</div>
</template>
<template v-if="query.state == 7">
<div class="fixCard" style="width: 100%;margin-top:10px; flex-shrink: 0">
<template v-if="query.state == 8">
<div class="fixCard reviewer_decision" style="width: 280px; flex-shrink: 0; position: relative">
<b style="font-size: 16px; letter-spacing: -0.5px">Reviewer Decision</b>
<p style="height: 5px"></p>
<b style="font-size: 16px; letter-spacing: -0.5px; color: rgba(0, 119, 184)">Editorial Board Decision</b>
<p style="height: 20px"></p>
<p v-for="(iken, index) in item.final" style="line-height: 24px" :key="index">
Editorial Board {{ index + 1 }} : <b>{{ iken.realname }}</b>
<b style="color: #db890e; font-size: 18px;margin-left: 10px;" >
<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="index == 0"
style="
width: 12px;
height: 12px;
display: inline-block;
border-radius: 10px;
background-color: #ccc;
"
v-if="iken.state == 0"
style="width: 12px; height: 12px; display: block; border-radius: 10px; background-color: #ccc"
>
</font>
<font
v-if="index == 1"
v-if="iken.state == 1 || iken.state == 3"
style="
width: 12px;
height: 12px;
display: inline-block;
display: block;
border-radius: 10px;
background-color: #67c23a;
"
>
</font>
<font
v-if="index == 2"
v-if="iken.state == 2"
style="
width: 12px;
height: 12px;
display: inline-block;
display: block;
border-radius: 10px;
background-color: #f56c6c;
"
>
</font>
</b>
<el-button style="margin-left: 10px" type="text" icon="el-icon-tickets"
</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> -->
<p style="margin-top: 20px">
<b @click="articleEditorialBoard(item)" class="btnCliArt"> <i class="el-icon-edit"></i> Editorial Board </b>
<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>
</template>
<template v-if="query.state == 8">
<div class="fixCard" style="width: calc((100% - 320px - 280px - 18px)); 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">
<span v-if="iken.reviewer_type == 0"> Editor-in-Chief </span>
<span v-if="iken.reviewer_type == 1"> Vice Editor-in-Chief </span>
<span v-if="iken.reviewer_type == 2"> Editorial Board Members </span>
: <b>{{ iken.realname }}</b>
<span style="color: #db890e; font-size: 14px; margin-left: 10px">
<!-- :0同意邀请1接收2拒绝3退修4拒绝邀请5邀请 -->
<font v-if="iken.state == 5" style="color: #ccc; display: inline-block"> invitation </font>
<font v-if="iken.state == 0" style="color: #67c23a; display: inline-block"> Agree to review </font>
<font v-if="iken.state == 1" style="color: #67c23a; display: inline-block">Accept </font>
<font
v-if="iken.state == 3"
style="
display: inline-block;
color: #0077b8;
"
>
Revision
</font>
<font
v-if="iken.state == 2"
style="
display: inline-block;
color: #f56c6c;
"
>
Reject
</font>
<font v-if="iken.state == 4" style="color: #ccc; display: inline-block"> invalid </font>
</span>
<el-button
v-if="iken.state == 1 || iken.state == 2 || iken.state == 3"
style="margin-left: 10px"
type="text"
icon="el-icon-tickets"
@click="showdetail(iken, 'Editor')"
>Detail</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="articleEditorialBoard(item)" class="btnCliArt">
<i class="el-icon-edit"></i> Editorial Board
</b>
</p>
</div>
</template>
@@ -638,7 +717,34 @@
</div>
</div> -->
<div class="fixCard" style="width: 320px; flex-shrink: 0" v-if="item.state != 7">
<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">
<p v-if="item.realname != ''">
<font style="color: #999">Name :</font>
{{ item.H.realname }}
<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="">
<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">
<i class="el-icon-refresh-left"></i> History
</b>
</p>
</div>
<p style="margin-top: 20px">
<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">
@@ -996,7 +1102,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="7" label="Final Decision" :value="7"></el-option>
<el-option :key="8" label="Final Review" :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>
@@ -1571,6 +1677,9 @@
<el-button @click="dialogVisible = false">Cancel</el-button>
</span>
</el-dialog>
<articleEditorDetail :dateId="FinalDetailBaseInfo.id" ref="commonFinalDetail"></articleEditorDetail>
</div>
</template>
@@ -1578,14 +1687,17 @@
import { Loading } from 'element-ui';
import timetalk from './time_talk';
import commonRemarkList from './articleListEditor_A_list.vue';
import articleEditorDetail from './articleEditorDetail.vue';
export default {
components: {
timetalk,
commonRemarkList
commonRemarkList,
articleEditorDetail
},
props: ['journals'],
data() {
return {
FinalDetailBaseInfo: {},
dialogVisible: false,
showFullContent: false,
majorValueList: [],
@@ -1636,7 +1748,7 @@ export default {
},
//终审
{
state: 7
state: 8
},
{
@@ -1890,6 +2002,7 @@ export default {
// }
],
editVisible1: false,
bankVisible: false,
majorData: {},
googleSearchInfo: ''
@@ -1904,6 +2017,47 @@ export default {
}
},
methods: {
showdetail(row, type) {
console.log('row at line 1964:', row);
if (type == 'reviewer') {
if (row.state == 4) {
this.$message.error('Review expired!');
} else {
this.$router.push({
path: 'articleReviewerDetail',
query: {
id: row.art_rev_id
}
});
}
} else {
this.FinalDetailBaseInfo = { ...row };
this.$nextTick(() => {
this.$refs.commonFinalDetail.init();
});
// this.$router.push({
// path: 'articleEditorDetail',
// query: {
// id: row.id
// }
// });
}
},
handleClose() {},
async getReviewerData(articleId) {
try {
const res = await this.$api.post('api/Finalreview/getReviewRecord', { article_id: articleId });
if (res.status === 1) {
return res.data.article_review; // 返回数据
} else {
return []; // 如果没有数据,返回空数组
}
} catch (error) {
console.error('Error fetching data:', error);
return []; // 如果发生错误,返回空数组
}
},
openAIContent() {
this.dialogVisible = true;
},
@@ -2207,7 +2361,7 @@ export default {
this.getdate();
},
// 获取数据
getdate() {
async getdate() {
this.query.state == 6 ? (this.PreAcpVisible = true) : (this.PreAcpVisible = false);
const loading = this.$loading({
lock: true,
@@ -2215,15 +2369,33 @@ export default {
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
});
if(this.query.state==7){
if (this.query.state == 8) {
this.$api
.post('api/Finalreview/articleLists', this.query)
.then((res) => {
console.log('res at line 2219:', res)
.post('api/Finalreview/articleLists', {
...this.query,
title: this.query.name,
accept_sn: this.query.sn,
journal_id: this.query.journal
})
.then(async (res) => {
console.log('res at line 2219:', res);
this.Total = res.data.total;
this.tableData = res.data.lists;
for (let i = 0; i < this.tableData.length; i++) {
this.tableData[i].reviewScore = [];
await this.$api
.post('api/Finalreview/getReviewRecord', { article_id: this.tableData[i].article_id })
.then((res) => {
console.log('res at line 2356:', res);
if (res.status == 1) {
this.$set(this.tableData[i], 'reviewScore', res.data.article_review);
console.log('.reviewScore at line 2358:', this.tableData[i].reviewScore);
}
})
.catch((error) => {
console.error('API call failed:', error);
});
this.tableData[i].file_cover = 1;
this.tableData[i].file_figer = 1;
@@ -2245,17 +2417,24 @@ if(this.query.state==7){
this.tableData[i].file_total = 0;
}
}
if (this.tableData[i].file.manuscirpt) {
if (
this.tableData[i].file.coverLetter ||
this.tableData[i].file.picturesAndTables ||
this.tableData[i].file.totalpage ||
this.tableData[i].file.supplementary
) {
// if (
// this.tableData[i].file.coverLetter ||
// this.tableData[i].file.picturesAndTables ||
// this.tableData[i].file.totalpage ||
// this.tableData[i].file.supplementary
// ) {
if (this.tableData[i].file.manuscirpt.length > 1) {
this.tableData[i].file_maun = 0;
}
console.log('this.tableData at line 2343:', this.tableData[i].file);
this.$set(this.tableData[i], 'file_maun', 0);
console.log('this.tableData at line 23431:', this.tableData[i]);
// this.tableData[i].file_maun = 0;
this.$forceUpdate();
}
// }
}
if (this.tableData[i].file.supplementary) {
if (this.tableData[i].file.supplementary.length > 1) {
@@ -2263,31 +2442,31 @@ if(this.query.state==7){
}
}
this.tableData[i].reviewScore = [];
for (let j = 0; j < this.tableData[i].review.length; j++) {
if (this.tableData[i].review[j].rated != null) {
this.tableData[i].reviewScore.push(this.tableData[i].review[j]);
}
}
// for (let j = 0; j < this.tableData[i].length; j++) {
// if (this.tableData[i].review[j].rated != null) {
// this.tableData[i].reviewScore.push(this.tableData[i].review[j]);
// }
// }
this.tableData[i].reportList = [...this.tableData[i].reports];
console.log('.reportList at line 1265:', this.tableData[i].reportList);
}
for (let i = 0; i < res.state_num.length; i++) {
for (let i = 0; i < res.data.count_num.length; i++) {
for (let j = 0; j < this.statList.length; j++) {
if (i == this.statList[j].state) {
this.statList[j].num = res.state_num[i];
this.statList[j].num = res.data.count_num[i];
}
}
}
this.$forceUpdate();
loading.close();
})
.catch((err) => {
console.log(err);
loading.close();
});
}else{
} else {
this.$api
.post('api/Article/getArticleForEditor', this.query)
.then((res) => {
@@ -2384,8 +2563,7 @@ if(this.query.state==7){
console.log(err);
loading.close();
});
}
}
},
// 触发搜索按钮
handleSearch() {
@@ -3039,8 +3217,8 @@ if(this.query.state==7){
case 6:
str = this.$t('artstate.state6');
break;
case 7:
str = this.$t('artstate.state7');
case 8:
str = this.$t('artstate.state8');
break;
default:
str = 'error!!';
@@ -3081,12 +3259,16 @@ if(this.query.state==7){
},
// 时间
formatDate(timestamp) {
formatDate(timestamp, data) {
if (data.state == 8) {
return timestamp;
} else {
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();
return Y + M + D;
}
},
colorIndex2(time) {
if (time != 0) {

View File

@@ -283,6 +283,10 @@ export default {
res.msg[i].color = '#27727B';
res.msg[i].icon = 'el-icon-star-off';
}
if (res.msg[i].state_to == 8) {
res.msg[i].color = '#0ebee1';
res.msg[i].icon = 'el-icon-document';
}
}
this.artMes = res.article;
this.artMes.laststate = res.msg[res.msg.length - 1].state_to;
@@ -372,6 +376,13 @@ export default {
break;
case 6:
str = 'Pre-accept';
break;
case 7:
str = 'Proof';
break;
case 8:
str = 'Final Review';
break;
default:
str = 'error!!';

View File

@@ -98,6 +98,45 @@
</el-collapse>
<p v-if="comentDeploy==''" style="color: #888888;margin: 0 0 0 10px;">No Comment</p>
</div>
<div class="art_author_">
<h2>
Comments from Final reviewers
</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
<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]:''}}
</font>
</template>
<!-- 时间轴 -->
<el-timeline >
<el-card>
<!-- 内容 -->
<div class="art_author_coment" style="margin-top: 0px;">
<p v-if="item.suggest_for_author!=''">
<font style="margin-top: 0px;">Comments for the Authors</font>
<pre style="text-align: justify;">{{item.suggest_for_author}}</pre>
</p>
</div>
</el-card>
</el-timeline>
<!-- end -->
</el-collapse-item>
</el-collapse>
<p v-if="comentFinal==''" style="color: #888888;margin: 0 0 0 10px;">No Comment</p>
</div>
<div class="art_author_">
<h2 :style="{'margin-bottom':(ComEditor==''?'0':'20px')}">
@@ -444,6 +483,7 @@
loading: false,
Detailvisible: false,
activeComment: [],
activeFinalComment: [],
activeNames: ['2'],
authorList_name: '',
artMes: {
@@ -463,6 +503,7 @@
ad_content: ''
},
comentDeploy: [],
comentFinal: [],
talkMsgs: [],
ComEditor: [],
ComRespe: [],
@@ -545,6 +586,10 @@
if(item.question && item.question.length > 0)
item.question = item.question.reverse()
})
// 审稿人意见
this.comentFinal = res.suggest_final
// console.log(this.comentDeploy,'this.comentDeploy')
})
.catch((err) => {

View File

@@ -3,76 +3,46 @@
<el-form :model="questionform" :rules="isEdit ? rules : {}" ref="question" label-width="300px" label-position="top">
<el-divider content-position="center">REFEREE'S ASSESSMENT</el-divider>
<p
v-if="questionform.score && Number(questionform.score) > 0 && pagetype == 'Editor'"
style="margin: 30px 0; font-size: 20px; padding-left: 0px; box-sizing: border-box"
>
<span
style="
border: 1px solid #409eff85;
border-radius: 4px;
background-color: #fff;
padding: 8px 30px 8px 10px;
border-radius: 12px;
box-shadow: 0 4px 10px rgba(0, 0, 0, 0.1);
display: flex;
align-items: center;
justify-content: center;
font-weight: bold;
font-size: 18px;
color: #333;
"
>
Automated Scoring for Reviewer's Opinions :
<span style="font-weight: bold; font-weight: bold; font-size: 26px; color: #2c3e50; margin-left: 10px">{{
Number(questionform.score)
}}</span>
</span>
</p>
<el-form-item label="" prop="recommend">
<el-form-item label="Processing Status" prop="state">
<!-- Accept(录用)、Revision(退修)、Reject(退稿) -->
<!-- 1接收2拒绝3退修4拒绝邀请 -->
<!--
<div class="btn btn-accept ">Accept</div>
<div class="btn btn-revision ">Revision</div>
<div class="btn btn-reject">Reject</div> -->
<!--
<div class="btn btn1">Accept</div>
<div class="btn btn2">Revision</div>
<div class="btn btn3">Reject</div> -->
<el-radio-group v-model="questionform.recommend" style="line-height: 30px">
<el-radio :label="2" :disabled="!isEdit && questionform.recommend != 2">Accept</el-radio>
<br />
<el-radio :label="3" :disabled="!isEdit && questionform.recommend != 3">Revision</el-radio>
<br />
<el-radio :label="4" :disabled="!isEdit && questionform.recommend != 4">Reject</el-radio>
<el-radio-group v-model="questionform.state" style="line-height: 30px">
<el-radio :label="1" :disabled="!isEdit && questionform.state != 1 && questionform.state != 0">Accept</el-radio>
<br />
<el-radio :label="3" :disabled="!isEdit && questionform.state != 3 && questionform.state != 0">Revision</el-radio>
<br />
<el-radio :label="2" :disabled="!isEdit && questionform.state != 2 && questionform.state != 0">Reject</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="Confidential Comments to the Editor" >
<el-input
:readonly="!isEdit"
<template>
<el-form-item label="Comments for the Authors" prop="suggest_for_author">
<el-input v-if="isEdit"
:autosize="{ minRows: 2, maxRows: 8 }"
type="textarea"
placeholder="please input content"
v-model="questionform.suggest_for_author"
></el-input>
<div v-else style="color: #888;">
{{ questionform.suggest_for_editor }}
</div>
</el-form-item>
</template>
<el-form-item label="Confidential Comments to the Editor" prop="suggest_for_editor">
<el-input v-if="isEdit"
type="textarea"
placeholder="please input content"
v-model="questionform.suggest_for_editor"
:autosize="{ minRows: 2, maxRows: 10 }"
></el-input>
<div v-else style="color: #888;">
{{ questionform.suggest_for_editor }}
</div>
</el-form-item>
<template >
<el-form-item label="Comments for the Authors">
<el-input
:autosize="{ minRows: 2, maxRows: 8 }"
:readonly="!isEdit"
type="textarea"
placeholder="please input content"
v-model="questionform.suggest_for_author"
></el-input>
</el-form-item>
</template>
<!-- <el-form-item label="Please choose disclose your name or remain anonymous" v-if="isEdit">
@@ -96,9 +66,9 @@
</el-radio-group>
</el-form-item> -->
<!-- 暂时注销 -->
<!-- v-if="this.btn_submit == 0" -->
<el-form-item >
<el-button type="primary" @click="questionSubmit" style="float: right;">submit</el-button>
<!-- -->
<el-form-item>
<el-button type="primary" @click="questionSubmit" style="float: right" v-if="this.btn_submit == 0">submit</el-button>
</el-form-item>
</el-form>
</div>
@@ -157,6 +127,7 @@ export default {
form: {
handler(e) {
this.baseQuestionform = JSON.parse(JSON.stringify(e)); // 深拷贝,防止直接改 props
console.log('this.baseQuestionform at line 134:', this.baseQuestionform);
},
immediate: true,
deep: true
@@ -179,124 +150,60 @@ export default {
rules: {}
};
},
created() {
mounted() {
this.getData();
},
methods: {
getData() {
// Fetch article data
this.questionform = { ...this.baseQuestionform };
if (this.baseQuestionform.type != 1) {
this.isNewForm = true;
this.rules = {
rated: [{ required: true, message: 'please select', trigger: 'blur' }],
comment: [{ required: true, message: 'please input content', trigger: 'blur' }],
other: [{ required: true, message: 'please input content', trigger: 'blur' }],
recommend: [{ required: true, message: 'please select', trigger: 'blur' }]
this.questionform = {
reviewer_id: this.baseQuestionform.reviewer_id,
article_id: this.baseQuestionform.article_id,
record_id: this.baseQuestionform.record_id,
state: this.baseQuestionform.state,
suggest_for_editor: this.baseQuestionform.suggest_for_editor,
suggest_for_author: this.baseQuestionform.suggest_for_author
};
if (this.txt_mess.atype == 'REVIEW' || this.txt_mess.atype == 'MINI REVIEW') {
for (let i = 1; i <= 12; i++) {
this.rules[`qu${i}`] = [{ required: true, message: 'please select', trigger: 'blur' }];
}
} else {
for (let i = 1; i <= 14; i++) {
this.rules[`qu${i}`] = [{ required: true, message: 'please select', trigger: 'blur' }];
}
}
} else {
this.isNewForm = false;
this.rules = {
qu6: [{ required: true, message: 'please select', trigger: 'blur' }],
rated: [{ required: true, message: 'please select', trigger: 'blur' }],
comment: [{ required: true, message: 'please input content', trigger: 'blur' }],
recommend: [{ required: true, message: 'please select', trigger: 'blur' }]
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' }]
};
}
},
questionSubmit() {
if (this.questionform.state == 0) {
this.$message.error('Please select the manuscript processing status.');
return false;
}
const regex = /[\u4E00-\u9FA5\uF900-\uFA2D]{1,}/;
if (this.questionform.comment && this.questionform.comment != '') {
if (regex.test(this.questionform.comment)) {
if (this.questionform.suggest_for_author && this.questionform.suggest_for_author != '') {
if (regex.test(this.questionform.suggest_for_author)) {
// 如果输入的是中文,则清空输入框
this.$message.error('Comments for the Authors cannot use Chinese.');
return false;
}
}
if (this.questionform.confident && this.questionform.confident != '') {
if (regex.test(this.questionform.confident)) {
if (this.questionform.suggest_for_editor && this.questionform.suggest_for_editor != '') {
if (regex.test(this.questionform.suggest_for_editor)) {
// 如果输入的是中文,则清空输入框
this.$message.error('Confidential Comments to the Editor cannot be in Chinese.');
this.$message.error('Comments for the Editor cannot use Chinese.');
return false;
}
}
// let Char_Cter = null;
// // 验证相加的字数
// if (this.isNewForm) {
// Char_Cter = [
// this.questionform.qu5contents,
// this.questionform.qu6contents,
// this.questionform.qu7contents,
// this.questionform.qu8contents,
// this.questionform.qu9contents,
// this.questionform.qu10contents,
// this.questionform.qu11contents,
// this.questionform.qu12contents,
// this.questionform.qu13contents,
// this.questionform.qu14contents,
// this.questionform.comment
// ].join(' ');
// } else {
// Char_Cter = [
// this.questionform.qu9contents,
// this.questionform.qu10contents,
// this.questionform.qu11contents,
// this.questionform.qu12contents,
// this.questionform.qu13contents,
// this.questionform.comment
// ].join(' ');
// }
if (new RegExp('[\\u4E00-\\u9FFF]+', 'g').test(Char_Cter)) {
//中文
let blankCount = 0;
for (let i in Char_Cter.match(/ /g)) {
blankCount++;
}
let wenziCount = 0;
for (let j = 0; j < Char_Cter.length; j++) {
if (Char_Cter.charCodeAt(j) < 0 || Char_Cter.charCodeAt(j) > 255) {
wenziCount++;
}
}
// Char_Cter = [
// this.questionform.suggest_for_editor,
// this.questionform.suggest_for_author,
// ].join(' ');
if (blankCount + wenziCount <= 60) {
this.$message.error('We encourage you to enrich your comment further to help improve the peer paper.');
this.$message({
offset: '380',
type: 'error',
message: 'We encourage you to enrich your comment further to help improve the peer paper.'
});
return false;
}
} else {
//英文
let blankCount = 0;
for (let i in Char_Cter.match(/ /g)) {
blankCount++;
}
if (blankCount <= 50) {
this.$message.error('We encourage you to enrich your comment further to help improve the peer paper.');
this.$message({
offset: '380',
type: 'error',
message: 'We encourage you to enrich your comment further to help improve the peer paper.'
});
return false;
}
}
// 提交接口
// this.loading = true;
@@ -310,11 +217,10 @@ export default {
});
this.$api
.post('api/Finalreview/review', {
...this.questionform,
...this.questionform
})
.then((res) => {
if (res.code == 0) {
if (res.status == 1) {
loading.close();
this.$message.success('Success!!');
this.$emit('refresh');
@@ -370,7 +276,7 @@ export default {
width: 110px;
height: 32px;
line-height: 32px;
border:1px solid #888;
border: 1px solid #888;
color: #888;
}
@@ -380,13 +286,13 @@ export default {
color: #ffffff;
box-shadow: 0 4px 6px rgba(40, 167, 69, 0.2);
}
.btn1{
.btn1 {
color: #28a745;
}
.btn2{
.btn2 {
color: #ffc107;
}
.btn3{
.btn3 {
color: #dc3545;
}
@@ -409,7 +315,6 @@ export default {
box-shadow: 0 4px 6px rgba(255, 193, 7, 0.2);
}
.btn-revision:hover {
background-color: #e0a800;
box-shadow: 0 6px 8px rgba(255, 193, 7, 0.3);
@@ -429,7 +334,6 @@ export default {
box-shadow: 0 4px 6px rgba(220, 53, 69, 0.2);
}
.btn-reject:hover {
background-color: #c82333;
box-shadow: 0 6px 8px rgba(220, 53, 69, 0.3);
@@ -449,4 +353,8 @@ export default {
transform: none;
box-shadow: none;
}
::v-deep .el-form-item__label{
font-weight: bold !important;
}
</style>

View File

@@ -3,7 +3,7 @@
<div class="crumbs">
<el-breadcrumb separator="/">
<el-breadcrumb-item>
<i class="el-icon-collection"></i> <span class="top_dao"> Peer Review</span>
<i class="el-icon-collection"></i> <span class="top_dao"> Final Review</span>
</el-breadcrumb-item>
</el-breadcrumb>
</div>
@@ -25,21 +25,21 @@
<ul class="ta1_uli ta1_ulicad">
<li v-for="(item,index) in tableData1">
<!-- <h5>{{item.type}}</h5> -->
<router-link :to="{path:'/per_text',query:{Art_id:item.art_rev_id}}">
<router-link :to="{path:'/edit_per_text',query:{Art_id:item.id}}">
<h3><span
style="margin-right: 6px;color: #006699;">{{index+1}}.</span>{{item.article_title}}
style="margin-right: 6px;color: #006699;">{{index+1}}.</span>{{item.title }}
</h3>
<el-button type="primary" plain style="float: right;">Review</el-button>
<el-button type="primary" plain style="float: right;">Final Review</el-button>
</router-link>
<h4>
<span>
<font style="color: #006699;">Journal : </font>{{item.journal_title}}.
<font style="color: #006699;">Journal : </font>{{item.journal_name}}
</span>
<span>
<font style="color: #006699;">Type : </font>{{item.type}}
<font style="color: #006699;">Type : </font>{{item.article_type_name}}
</span>
<span style="color: #888;margin-left: 20px;color: #006699;">
{{item.ctime}}
{{item.agree_review_time}}
</span><br>
<!-- <span v-if="item.abstrart!=''" style="max-width: 1000px;">
<font style="color: #888;">Abstrart : </font>{{item.abstrart | ellipsis}}
@@ -51,60 +51,8 @@
</ul>
</el-col>
<!-- 复审 -->
<el-col :span="24" v-if="tableData2!=''">
<div style="background-color: #ccc;height: 2px;width: 100%;margin:20px 0 35px 0;"></div>
<!-- <el-card class="box-card"> -->
<div class="ma_title" style="margin-bottom: 5px;">
<h2>
<!-- <img src="../../assets/img/icon_1.png" alt="" class="icon_img"> -->
Invitation for review
</h2>
This list will show you the manuscript that the editor invited you to review. You can click on
the details to
check the content and then decide whether to review the manuscript. In addtion, you can also
refuse to review
the manuscript.
</div>
<ul class="ta1_uli ta1_ulicad">
<li v-for="(item,index) in tableData2">
<div>
<router-link :to="{path:'/per_text_yq',query:{Art_id:item.art_rev_id}}">
<h3><span
style="margin-right: 6px;color: #006699;">{{index+1}}.</span>{{item.title}}
</h3>
<el-button type="primary" plain style="float: right;">Detail</el-button>
</router-link>
</div>
<h4>
<span>
<font style="color: #006699;">Journal : </font>{{item.journal_title}}.
</span>
<span>
<font style="color: #006699;">Type : </font>{{item.type}}
</span>
<span style="color: #888;margin-left: 20px;color: #006699;">
{{item.ctime}}
</span><br>
<span v-if="item.abstrart!=''" style="max-width: 1000px;">
<font style="color: #006699;">Abstract : </font>{{item.abstrart | ellipsis}}
</span>
</h4>
<div style="margin-top: 10px;">
<el-button type="success" plain @click="wen_nowrw(item.art_rev_id)">Review</el-button>
<!-- <el-button type="success" plain @click="wen_agree(item.art_rev_id)" style="margin: 0 10px 0 20px;">Review
later</el-button> -->
<el-button type="danger" plain @click="wen_refuse(item.art_rev_id)">Reject to review
</el-button>
</div>
</li>
</ul>
<!-- </el-card> -->
</el-col>
<!-- <el-col :span="24">
<div style="background-color: #ccc;height: 2px;width: 100%;margin: 30px 0 5px 0;"></div>
</el-col>
@@ -164,7 +112,9 @@
return {
user_name: localStorage.getItem('U_relname'),
query: {
user_id: localStorage.getItem('U_id')
reviewer_id: localStorage.getItem('U_id'),
pageIndex: 1,
pageSize: 9999,
},
Art_id: this.$route.query.Art_id,
tableData1: [],
@@ -177,7 +127,7 @@
},
TaBle3: {
user_id: localStorage.getItem('U_id'),
reviewer_id: localStorage.getItem('U_id'),
journal_id: 0,
pageIndex: 1,
pageSize: 5
@@ -195,16 +145,16 @@
// 获取数据
getData() {
this.$api
.post('api/Reviewer/getReviewerListPending', this.query)
.post('api/Finalreview/lists', {...this.query,state:0})
.then(res => {
if (res.code == 0) {
if (res.status == 1) {
for (let i = 0; i < res.data.lists.length; i++) {
let date = new Date(parseInt(res.data.lists[i].ctime) * 1000);
let date = new Date(parseInt(res.data.lists[i].agree_review_time) * 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.data.lists[i].ctime = Y + M + D;
res.data.lists[i].agree_review_time = Y + M + D;
}
this.tableData1 = res.data.lists;
this.revisionList = res.data.repeats
@@ -216,66 +166,9 @@
this.$message.error(err);
});
this.$api
.post('api/Reviewer/getInvitatReviewList', this.TaBle2)
.then(res => {
if (res.code == 0) {
if (res.data.articles != '') {
for (let i = 0; i < res.data.articles.length; i++) {
let date = new Date(parseInt(res.data.articles[i].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.data.articles[i].ctime = Y + M + D;
}
}
this.tableData2 = res.data.articles;
} else {
this.$message.error(res.msg);
}
})
.catch(err => {
this.$message.error(err);
});
this.$api
.post('api/Reviewer/getAllReviewerList', this.TaBle3)
.then(res => {
if (res.code == 0) {
if (res.data.articles != '') {
for (let i = 0; i < res.data.articles.length; i++) {
let date = new Date(parseInt(res.data.articles[i].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.data.articles[i].ctime = Y + M + D;
if (res.data.articles[i].abstrart.length > 380) {
res.data.articles[i].isShowMore = true;
res.data.articles[i].isDescStatus = true;
res.data.articles[i].abstrart_ = JSON.parse(JSON.stringify(res.data.articles[i]
.abstrart)).slice(0, 380);
res.data.articles[i].abstrart_ = res.data.articles[i].abstrart_.slice(0, res
.data.articles[i].abstrart_.lastIndexOf(
" "));
} else {
res.data.articles[i].isShowMore = false;
res.data.articles[i].isDescStatus = false;
}
}
}
this.tableData3 = res.data.articles;
this.link_Tota3 = res.data.count || 0;
} else {
this.$message.error(res.msg);
}
})
.catch(err => {
this.$message.error(err);
});
},
// 分页导航
handlePageChange3(val) {

View File

@@ -3,7 +3,7 @@
<div class="crumbs">
<el-breadcrumb separator="/">
<el-breadcrumb-item>
<i class="el-icon-collection"></i> <span class="top_dao"> Review History</span>
<i class="el-icon-collection"></i> <span class="top_dao"> Final Review History</span>
</el-breadcrumb-item>
</el-breadcrumb>
</div>
@@ -18,54 +18,78 @@
</div> -->
<el-row :gutter="20">
<el-col :span="24">
<el-card class="box-card" v-loading="loading" element-loading-text="Loading..."
element-loading-spinner="el-icon-loading" element-loading-background="rgba(0, 0, 0, 0.8)">
<el-table :data="tableData3" border class="table" ref="multipleTable"
header-cell-class-name="table-header" empty-text="New messages (0)">
<el-table-column prop="article_title" label="Article Title"></el-table-column>
<el-table-column prop="journal_title" label="Journal"></el-table-column>
<el-table-column prop="ctime" label="Reviewed time" width="140"></el-table-column>
<el-table-column label="Article Status" width="130" align="center">
<el-card
class="box-card"
v-loading="loading"
element-loading-text="Loading..."
element-loading-spinner="el-icon-loading"
element-loading-background="rgba(0, 0, 0, 0.8)"
>
<el-table
:data="tableData3"
border
class="table"
ref="multipleTable"
header-cell-class-name="table-header"
empty-text="New messages (0)"
>
<el-table-column prop="title" label="Article Title"></el-table-column>
<el-table-column prop="journal_name" label="Journal"></el-table-column>
<el-table-column prop="ctime" label="Final Reviewed Time" width="180"></el-table-column>
<el-table-column label="Article Status" width="160" align="center">
<template slot-scope="scope">
<b v-if="scope.row.astate == 0">Received</b>
<b v-if="scope.row.astate == 1">With editor</b>
<b v-if="scope.row.astate == 2">Under review</b>
<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.article_state == 0">Received</b>
<b v-if="scope.row.article_state == 1">With editor</b>
<b v-if="scope.row.article_state == 2">Under review</b>
<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.astate == 6">Pre-accept</b>
</template>
</el-table-column>
<el-table-column label="State" align="center" width="120">
<el-table-column label="State" align="center" width="210">
<template slot-scope="scope">
<span style="font-size: 16px;"v-html="revstate(scope.row)"></span>
</template>
</el-table-column>
<el-table-column label="Recommendation" width="160" align="center">
<template slot-scope="scope">
<b v-if="scope.row.recommend == 1||scope.row.recommend == 2">Accept</b>
<b v-if="scope.row.recommend == 3||scope.row.recommend == 4">Reject</b>
<span style="font-size: 16px" v-html="revstate(scope.row)"></span>
</template>
</el-table-column>
<el-table-column label=" " width="230">
<template slot-scope="scope">
<router-link
:to="{path:'/perhistory_commen',query:{Art_id:scope.row.article_id,Rev_id:scope.row.art_rev_id}}"
v-if="(scope.row.astate==3||scope.row.astate==5)&&(scope.row.journal_id==1||scope.row.journal_id==9||scope.row.article_id>1598)">
<el-button type="primary" plain style="margin-right: 10px;">All Comments
<el-button @click="showDetail(scope.$index, scope.row)"
v-if="scope.row.state == 1 || scope.row.state == 3 || scope.row.state == 2"
type="primary"
plain
style="margin-right: 10px"
><i class="el-icon-tickets"></i> Detail
</el-button>
</router-link>
<el-button type="warning" plain @click="cerFicte(scope.$index, scope.row)"
v-if="scope.row.state==1||scope.row.state==2||scope.row.state==3">Certificate
<el-button
type="success"
size="mini"
@click="saveNow(scope.$index, scope.row)"
v-if="scope.row.state == 5"
>Final Review Now
</el-button>
<el-button
type="danger"
size="mini"
@click="saveRef(scope.$index, scope.row)"
v-if="scope.row.state == 5"
>Reject
</el-button>
</template>
</el-table-column>
</el-table>
<div class="pagination">
<el-pagination layout="total, prev, pager, next" :current-page="TaBle3.pageIndex"
:page-size="TaBle3.pageSize" :total="link_Tota3" @current-change="handlePageChange3">
<el-pagination
layout="total, prev, pager, next"
:current-page="TaBle3.pageIndex"
:page-size="TaBle3.pageSize"
:total="link_Tota3"
@current-change="handlePageChange3"
>
</el-pagination>
</div>
</el-card>
@@ -76,25 +100,45 @@
</el-dialog>
<el-dialog :visible.sync="feilVisible" width="600px">
<h2 style="text-align: center;">No certificate</h2>
<h2 style="text-align: center">No certificate</h2>
<span slot="footer" class="dialog-footer">
<el-button type="primary" @click="feilVisible=false">OK</el-button>
<el-button type="primary" @click="feilVisible = false">OK</el-button>
</span>
</el-dialog>
</el-col>
</el-row>
</div>
<el-dialog destroy-on-close title="Final Reviewe Detail" :visible.sync="editVisible1" width="1200px">
<common-editor-article
type="questionform"
ref="commonEditor"
pagetype="Editor"
:form="detailDate.article_final"
:txt_mess="{}"
:btn_submit="1"
:articleId="articleId"
:journal_id="journal_id"
></common-editor-article>
<span slot="footer" class="dialog-footer">
<el-button @click="editVisible1 = false">Cancel</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
export default {
export default {
data() {
return {
detailDate: {},
editVisible1: false,
loading: false,
query: {
user_id: localStorage.getItem('U_id')
reviewer_id: localStorage.getItem('U_id'),
page: 1,
size: 10
},
tableData3: [],
TaBle3: {
@@ -106,88 +150,174 @@
IMG_Url: '',
cerVisible: false,
feilVisible: false,
dynamicTags: [{
dynamicTags: [
{
label: 'Submission System 2.0',
title: 'Update Notifications',
content: "The reviewers can check all reviewers ' comments when the manuscripts get final decision."
}],
content: "The reviewers can check all reviewers ' comments when the manuscripts get final review."
}
]
};
},
mounted() {
},
mounted() {},
created() {
this.loading = true;
this.getTable();
},
methods: {
revstate(row, column, cellValue, index) {
let frag = '';
if (row.state == 0) {
frag = 'With reviewer';
} else if (row.state == 1) {
// 大修
frag = 'Major revision';
// frag = 'Revision';
} else if (row.state == 2) {
frag = 'Reject';
} else if (row.state == 3) {
//小修
// frag = 'Accept';
frag = 'Minor revision';
} else if (row.state == 4) {
frag = '<text style="color:#aaa">invalid</text>';
} else if (row.state == 5) {
frag = 'invitation';
}
return frag;
showDetail(i,data){
this.getDate(data.id)
},
// 获取数据
getTable() {
// 同意
saveNow(i, data) {
// 二次确认
this.$confirm('Are you sure you want to agree?', 'Tips', {
type: 'warning'
})
.then(() => {
this.$api
.post('api/Reviewer/getReviewerDetail1', this.query)
.then(res => {
if (res.code == 0) {
this.getData();
.post('api/Finalreview/review', {
article_id: data.article_id,
record_id: data.id,
reviewer_id: localStorage.getItem('U_id'),
state: 0
})
.then((res) => {
if (res.status == 1) {
this.$message.success('Review now successfully!');
this.$router.push('/edit_per_text?Art_id=' + data.id);
} else {
this.$message.error(res.msg);
}
})
.catch(err => {
.catch((err) => {
this.$message.error(err);
});
})
.catch(() => {});
},
getData() {
// 拒绝
saveRef(i, data) {
// 二次确认
this.$confirm('Are you sure you want to refuse?', 'Tips', {
type: 'warning'
})
.then(() => {
this.$api
.post('api/Reviewer/getReviewerListHistory', this.TaBle3)
.then(res => {
this.loading = false
if (res.code == 0) {
.post('api/Finalreview/review', {
article_id: data.article_id,
record_id: data.id,
reviewer_id: localStorage.getItem('U_id'),
state: 4
})
.then((res) => {
if (res.status == 1) {
this.loading = true;
this.getTable();
// this.$router.push('/edit_per_text?Art_id=' + this.record_id);
} else {
this.$message.error(res.msg);
}
})
.catch((err) => {
this.$message.error(err);
});
})
.catch(() => {});
},
revstate(row, column, cellValue, index) {
let frag = '';
if (row.state == 0) {
frag = 'Agree to review';
} else if (row.state == 1) {
// 大修
frag = 'Accept';
// frag = 'Revision';
} else if (row.state == 3) {
frag = 'Revision';
} else if (row.state == 2) {
//小修
// frag = 'Accept';
frag = 'Reject';
} else if (row.state == 4) {
frag = '<text style="color:#888">invalid</text>';
} else if (row.state == 5) {
frag = 'invitation';
}
return frag;
},
getDate(record_id) {
const loading = this.$loading({
lock: true,
text: 'Loading',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)',
zIndex: 9999 // 设置一个足够高的层级
});
this.$api
.post('api/Finalreview/view', {
record_id: record_id
})
.then((res) => {
loading.close();
this.detailDate.artrevid = res.art_rev_id;
this.detailDate.article = res.data.article.title;
this.detailDate.reviewer = res.data.article_final.realname;
this.detailDate.ctime = res.data.article_final.update_time;
this.detailDate.article_final = res.data.article_final;
this.detailDate.state = res.state;
this.txt_mess = res;
this.canRepeat = res.can_repeat;
this.journal_id = res.journal_id;
this.articleId = res.data.article.article_id;
this.editVisible1 = true;
this.$nextTick(() => {
this.$refs.commonEditor.getData();
});
this.$forceUpdate();
})
.catch((err) => {
console.log(err);
});
},
// 获取数据
getTable() {
this.$api
.post('api/Finalreview/lists', this.query)
.then((res) => {
if (res.status == 1) {
this.loading = false;
if (res.data.lists != '') {
for (let i = 0; i < res.data.lists.length; i++) {
if (res.data.lists[i].recommenttime == null) {
res.data.lists[i].ctime = ''
if (res.data.lists[i].update_time == null) {
res.data.lists[i].ctime = '';
} else {
let date = new Date(parseInt(res.data.lists[i].recommenttime) * 1000);
let date = new Date(parseInt(res.data.lists[i].update_time) * 1000);
let Y = date.getFullYear() + '-';
let M = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) + '-' : date
.getMonth() + 1 + '-';
let M = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) + '-' : date.getMonth() + 1 + '-';
let D = date.getDate() < 10 ? '0' + date.getDate() : date.getDate();
res.data.lists[i].ctime = Y + M + D;
}
}
}
this.tableData3 = res.data.lists;
this.link_Tota3 = res.data.count || 0;
this.link_Tota3 = res.data.total || 0;
} else {
this.loading = false;
this.$message.error(res.msg);
}
})
.catch(err => {
this.loading = false
.catch((err) => {
this.loading = false;
this.$message.error(err);
});
},
@@ -203,45 +333,40 @@
cerFicte(index, row) {
this.$api
.post('api/Reviewer/getZSimg', {
'art_rev_id': row.art_rev_id
art_rev_id: row.art_rev_id
})
.then(res => {
.then((res) => {
if (res.code == 0) {
this.IMG_Url = this.Common.mediaUrl + res.data.icon
this.IMG_Url = this.Common.mediaUrl + res.data.icon;
this.cerVisible = true;
} else {
this.$message.error(res.msg);
this.feilVisible = true;
}
})
.catch(err => {
.catch((err) => {
this.$message.error(err);
});
},
// 关闭标签
handleClose(tag) {
// this.dynamicTags.splice(this.dynamicTags.indexOf(tag), 1);
this.dynamicTags = []
},
},
filters: {
},
watch: {
this.dynamicTags = [];
}
};
},
filters: {},
watch: {}
};
</script>
<style>
.table {
.table {
width: 100%;
font-size: 14px;
}
}
.rev_digol .el-image__placeholder {
.rev_digol .el-image__placeholder {
background-image: url(../../assets/img/loading.gif);
background-repeat: no-repeat;
background-position: center center;
@@ -249,5 +374,5 @@
width: 560px;
height: 400px;
background-color: #fff;
}
}
</style>

View File

@@ -4,10 +4,10 @@
<el-breadcrumb separator="/">
<el-breadcrumb-item>
<i class="el-icon-collection"></i>
<router-link :to="{ path: '/peerewer' }">
<span class="top_dao"> Final Decision Article</span>
<router-link :to="{ path: '/editPeerewer' }">
<span class="top_dao"> Final Review Article</span>
</router-link>
>> Final Decision Article Detail
>> Final Review Article Detail
</el-breadcrumb-item>
</el-breadcrumb>
</div>
@@ -33,7 +33,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>
<p style="display: inline-block"><b>Submitted time :</b> {{ txt_mess.ctime?txt_mess.ctime.split(' ')[0]:'' }}</p>
<div>
<p><b>Abstract :</b> <br />{{ txt_mess.abstrart }}</p>
<div class="file_sty" v-for="item in fileList" style="margin-top: 15px">
@@ -82,6 +83,69 @@ 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-item name="1">
<template slot="title">
<div class="review_title">
<b>Peer-review Archive</b>
</div>
</template>
<div v-for="(item, index) in conmentList" class="comment_item">
<p style="margin-top: 4px;margin-bottom: 4px;font-weight: bold;"><span style="color:#006699;font-size: 16px !important;">Comment {{ index+1 }}</span>
</p>
<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>
</p>
<p>
<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>
</p>
<p>
<span class="comment_item_recommend_title"
>Score : </span>
<span>{{item.question.score}}</span>
</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>
</div>
</el-collapse-item>
</el-collapse>
<!-- <p class="morSou" v-if="!morShow" @click="morShow=true">
<i class="el-icon-bottom"></i>
More article information
@@ -95,272 +159,37 @@ If you're still having trouble with Chrome, you could use other browsers to comp
<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 decision has been obtained according to the timetable. Accordingly, your review process has
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 == 0">
<el-card class="box-card" v-if="this.add_apply == 0&&questionform.article_id">
<!-- 审稿人表单修改 -->
<!-- Accept(录用)Revision(退修)Reject(退稿) -->
<common-editor-article @refresh="getData" type="questionform" :form="questionform" :txt_mess="txt_mess" :btn_submit="btn_submit" :articleId="articleId" :journal_id="journal_id"></common-editor-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>
<!-- 证书弹出框 -->
<el-dialog :visible.sync="questionVisible" width="1000px">
<!-- 审稿人表单修改 -->
<!-- 不显示给编辑的话 -->
<common-review-article
:form="questionform1"
type="questionform"
:txt_mess="txt_mess"
:confident="false"
:btn_submit="1"
:articleId="articleId"
:journal_id="journal_id"
></common-review-article>
</el-dialog>
</div>
</template>
@@ -369,6 +198,10 @@ import pdf from 'vue-pdf';
export default {
data() {
return {
activeNames:['1'],
questionVisible: false,
User_Id: localStorage.getItem('U_id'),
loading: false,
articleId: null,
Direct_log: this.$route.query.act,
@@ -376,6 +209,7 @@ export default {
// morShow: false,
txt_mess: {},
fileList: [],
conmentList: [],
picList: [],
SMList: [], //补充材料
mediaUrl: this.Common.mediaUrl,
@@ -385,42 +219,14 @@ export default {
content: ''
},
head_line: '',
questionform1:{},
questionform: {
rev_qu_id: '',
article_id: '',
reviewer_id: '',
art_rev_id: this.$route.query.Art_id,
qu1: '',
qu2: '',
qu3: '',
qu4: '',
qu5: '',
qu5contents: '',
qu6: '',
qu6contents: '',
qu7: '',
qu7contents: '',
qu8: '',
qu8contents: '',
qu9: '',
qu9contents: '',
qu10: '',
qu10contents: '',
qu11: '',
qu11contents: '',
qu12: '',
qu12contents: '',
qu13: '',
qu13contents: '',
qu14: '',
qu14contents: '',
qu15: '',
qu15contents: '',
rated: '',
recommend: '',
other: '',
confident: '',
comment: '',
is_anonymous: '',
type: '',
record_id: this.$route.query.Art_id,
},
add_apply: 0,
btn_submit: 0,
@@ -459,65 +265,72 @@ export default {
};
},
created() {
if (this.Direct_log == null) {
this.getData();
} else {
this.$api
.post('api/Chief/autoLoginForChief', {
code: this.Direct_log
})
.then((res) => {
if (res.code == 0) {
localStorage.setItem('U_role', res.data.roles);
localStorage.setItem('U_name', res.data.user.account);
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);
});
} else {
this.$message.error(res.msg);
}
})
.catch((err) => {
this.$message.error(err);
});
}
},
methods: {
//初始化问卷
ques_visible(e) {
this.questionVisible = true;
this.questionform1.rev_qu_id = e.rev_qu_id;
this.questionform1.art_rev_id = e.art_rev_id;
this.questionform1.qu1 = e.qu1;
this.questionform1.qu2 = e.qu2;
this.questionform1.qu3 = e.qu3;
this.questionform1.qu4 = e.qu4;
this.questionform1.qu5 = e.qu5;
this.questionform1.qu6 = e.qu6;
this.questionform1.qu7 = e.qu7;
this.questionform1.qu8 = e.qu8;
this.questionform1.qu9 = e.qu9 == 0 ? false : true;
this.questionform1.qu9contents = e.qu9_contents;
this.questionform1.qu10 = e.qu10 == 0 ? false : true;
this.questionform1.qu10contents = e.qu10_contents;
this.questionform1.qu11 = e.qu11 == 0 ? false : true;
this.questionform1.qu11contents = e.qu11_contents;
this.questionform1.qu12 = e.qu12 == 0 ? false : true;
this.questionform1.qu12contents = e.qu12_contents;
this.questionform1.qu13 = e.qu13 == 0 ? false : true;
this.questionform1.qu13contents = e.qu13_contents;
this.questionform1.qu14 = e.qu14 == 0 ? false : true;
this.questionform1.qu14contents = e.qu14_contents;
this.questionform1.qu15 = e.qu15 == 0 ? false : true;
this.questionform1.qu15contents = e.qu15_contents;
this.questionform1.rated = e.rated;
this.questionform1.recommend = e.recommend;
this.questionform1.other = e.other;
this.questionform1.confident = e.confidential;
this.questionform1.comment = e.comments;
this.questionform1.is_anonymous = e.is_anonymous;
this.questionform1.type = e.type;
this.questionform1.score = e.score;
},
getData() {
// 获取文章信息
this.$api
.post('api/Reviewer/getartrevdate', {
revid: this.Art_id,
human: 'reviewer'
.post('api/Finalreview/view', {
record_id: this.Art_id,
'reviewer_id': localStorage.getItem('U_id'),
})
.then((res) => {
this.articleId=res.article_id
if (res.state != 0) {
this.articleId=res.data.article.article_id
this.questionform ={...this.questionform,...res.data.article_final}
console.log('this.questionform at line 224:', this.questionform)
if (res.data.article_final.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.txt_mess = res.data.article;
this.journal_id = res.journal_id;
console.log('journal_id', this.journal_id);
this.conmentList = res.data.article_review;
// console.log('journal_id', this.journal_id);
// 文章状态
if (res.astate == 2) {
if (res.data.article_final.state == 0) {
this.add_apply = 0;
} else {
this.add_apply = 1;
@@ -528,8 +341,8 @@ export default {
});
this.$api
.post('api/Reviewer/getAFilelistByID ', {
revid: this.Art_id
.post('api/Finalreview/getArticleFile ', {
record_id: this.Art_id
})
.then((res) => {
for (var i = 0; i < res.data.length; i++) {
@@ -539,7 +352,9 @@ export default {
let D = date.getDate() < 10 ? '0' + date.getDate() : date.getDate();
res.data[i].ctime = Y + M + D;
}
this.fileList = res.data;
this.fileList = [res.data.manuscirpt];
this.picList = res.data.picturesAndTables;
this.SMList = res.data.supplementary;
// 获取格式
let pdfOut = this.fileList[this.fileList.length - 1].file_url;
@@ -558,179 +373,13 @@ export default {
this.$message.error(err);
});
this.$api
.post('api/Reviewer/getBFilelistByID', {
revid: this.Art_id
})
.then((res) => {
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 + '-';
let D = date.getDate() < 10 ? '0' + date.getDate() : date.getDate();
res.data[i].ctime = Y + M + D;
}
this.picList = res.data;
})
.catch((err) => {
this.$message.error(err);
});
this.$api
.post('api/Reviewer/getCFilelistByID', {
revid: this.Art_id
})
.then((res) => {
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 + '-';
let D = date.getDate() < 10 ? '0' + date.getDate() : date.getDate();
res.data[i].ctime = Y + M + D;
}
this.SMList = res.data;
})
.catch((err) => {
this.$message.error(err);
});
//初始化问卷
this.$api
.post('api/Reviewer/getQuestion', {
artrevid: this.Art_id
})
.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;
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;
}
});
},
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,}/;
if (this.questionform.comment && this.questionform.comment != '') {
if (regex.test(this.questionform.comment)) {
// 如果输入的是中文,则清空输入框
this.$message.error('Comments for the Authors cannot use Chinese.');
return false;
}
}
if (this.questionform.confident && this.questionform.confident != '') {
if (regex.test(this.questionform.confident)) {
// 如果输入的是中文,则清空输入框
this.$message.error('Confidential Comments to the Editor cannot be in Chinese.');
return false;
}
}
// 验证相加的字数
let Char_Cter =
this.questionform.qu9contents +
' ' +
this.questionform.qu10contents +
' ' +
this.questionform.qu11contents +
' ' +
this.questionform.qu12contents +
' ' +
this.questionform.qu13contents +
' ' +
this.questionform.comment;
if (new RegExp('[\\u4E00-\\u9FFF]+', 'g').test(Char_Cter)) {
//中文
let blankCount = 0;
for (let i in Char_Cter.match(/ /g)) {
blankCount++;
}
let wenziCount = 0;
for (let j = 0; j < Char_Cter.length; j++) {
if (Char_Cter.charCodeAt(j) < 0 || Char_Cter.charCodeAt(j) > 255) {
wenziCount++;
}
}
if (blankCount + wenziCount <= 60) {
this.$message.error('We encourage you to enrich your comment further to help improve the peer paper.');
this.$message({
offset: '380',
type: 'error',
message: 'We encourage you to enrich your comment further to help improve the peer paper.'
});
return false;
}
} else {
//英文
let blankCount = 0;
for (let i in Char_Cter.match(/ /g)) {
blankCount++;
}
if (blankCount <= 50) {
this.$message.error('We encourage you to enrich your comment further to help improve the peer paper.');
this.$message({
offset: '380',
type: 'error',
message: 'We encourage you to enrich your comment further to help improve the peer paper.'
});
return false;
}
}
// 提交接口
this.loading = true;
this.$refs.question.validate((valid) => {
if (valid) {
this.$api.post('api/Reviewer/questionSubmit', this.questionform).then((res) => {
if (res.code == 0) {
this.loading = false;
this.$message.success('Success!!');
this.getData();
this.$router.push('/per_text_success');
} else {
this.loading = false;
// this.$message.error('Question submit error!');
this.$message.error(res.msg);
}
});
} else {
this.loading = false;
}
});
}
},
mounted() {}
};
@@ -866,4 +515,45 @@ export default {
.css-138 {
display: none;
} */
::v-deep .el-descriptions__title{
font-size: 12px !important;
color: #606266 !important;
}
::v-deep .el-descriptions__header{
margin-bottom: 4px !important;
}
::v-deep .el-collapse-item__wrap{
border-bottom: none !important;
}
::v-deep .el-collapse-item__header{
border-bottom: none !important;
/* */
}
.comment_item{
border-top: 1px solid #EBEEF5;
padding-top: 8px;
padding-bottom: 8px;
}
.review_title{
}
.comment_item_recommend_title{
color: #888;
margin: 0 5px 0 0;
font-weight: 600;
}
.comment_item_recommend b{
font-weight: 600 !important;
}
</style>

View File

@@ -5,9 +5,9 @@
<el-breadcrumb-item>
<i class="el-icon-collection"></i>
<router-link :to="{ path: '/peerewer' }">
<span class="top_dao"> Final Decision Article</span>
<span class="top_dao"> Final Review Article</span>
</router-link>
>> Final Decision completed
>> Final Review Completed
</el-breadcrumb-item>
</el-breadcrumb>
</div>
@@ -45,17 +45,18 @@
p-id="29681"
></path>
</svg>
<p>Final Decision completed !</p>
<p>Final Review completed !</p>
<br clear="both" />
</div>
<!-- 暂时去掉 -->
<div class="suss_page_2">
Dear Editor-in-Chief, We have received all of your review comments.<br />
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.
</div>
<div class="suss_page_3">
<a href="/editpeerewer">Return to Peer Review page</a>
<a href="/editPeerewer">Return to Final Review page</a>
</div>
</el-card>
</div>
@@ -65,10 +66,27 @@
<script>
export default {
data() {
return {};
return {
user_cap: localStorage.getItem('U_role')
};
},
created() {},
methods: {}
methods: {
getUserName() {
// <span v-if="scope.row.reviewer_type == 0" style="color: #409eff">Editor-in-Chief</span>
// <span v-if="scope.row.reviewer_type == 1" style="color: #409eff">Vice Editor-in-Chief</span>
// if (this.user_cap.includes(',board') || this.user_cap.includes('board_editor')) {
// return 'Editorial Board Member';
// } else if (this.user_cap.includes('chief') || this.user_cap.includes('chief_editor')) {
// return 'Editor-in-Chief';
// } else if (this.user_cap.includes('deputy_editor')) {
// return 'Vice Editor-in-Chief';
// }
return localStorage.getItem('U_relname');
}
}
};
</script>

View File

@@ -0,0 +1,299 @@
<template>
<div>
<div class="crumbs">
<!-- <el-breadcrumb separator="/">
<el-breadcrumb-item>
<i class="el-icon-collection"></i>
<router-link :to="{path:'/peerewer'}">
<span class="top_dao"> Reviewer Article</span>
</router-link>
>> Reviewer Article Detail
</el-breadcrumb-item>
</el-breadcrumb> -->
</div>
<div class="container_l" v-loading="loading" element-loading-text="Loading..."
element-loading-spinner="el-icon-loading" element-loading-background="rgba(0, 0, 0, 0.8)">
<el-card class="box-card">
<div class="tet_list" :model="txt_mess">
<h4>{{txt_mess.article_title}}</h4>
<h5>{{txt_mess.title}}<span style="margin: 0 10px;"> >> </span> 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>
<p v-if="txt_mess.major!=undefined"><b>Major : </b>{{txt_mess.majorList}}</p>
<p><b>Abstract :</b> <br>{{txt_mess.abstrart}}</p>
</div>
</el-card>
<el-card class="box-card" style="font-size: 15px;line-height: 24px;">
<el-row :gutter="20" class="trah_c">
<el-col :span="1"><img src="../../assets/img/icon_8.png" alt="" class="icon_img"></el-col>
<el-col :span="22" >
<p style="padding-left: 10px;">
You can decide to review or reject it.
</p>
</el-col>
</el-row>
<div style="text-align: center;margin-top: 12px;">
<el-button type="success" @click="saveNow()" style="margin-right: 20px;width: 250px;">Review Now
</el-button>
<el-button type="danger" @click="saveRef()" style="width: 250px;">Reject to review</el-button>
</div>
</el-card>
</div>
</div>
</template>
<script>
export default {
data() {
return {
loading: false,
Direct_log: this.$route.query.act,
record_id: this.$route.query.r_id,
a_id: this.$route.query.a_id,
txt_mess: {},
fileList: [],
picList: [],
mediaUrl: this.Common.mediaUrl
}
},
created() {
if (this.Direct_log == null) {
this.getData();
} else {
this.$api
.post('api/Chief/autoLoginForChief', {
'code': this.Direct_log
})
.then(res => {
if (res.code == 0) {
localStorage.setItem('U_role', res.data.roles);
localStorage.setItem('U_name', res.data.user.account);
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.record_id
})
.then(res => {
if (res.code == 0) {
this.$message.success('Review now successfully!');
this.getData();
} else {
this.$message.error(res.msg);
}
})
.catch(err => {
this.$message.error(err);
this.loading = false;
});
} else {
this.$message.error(res.msg);
}
})
.catch(err => {
this.$message.error(err);
});
}
},
methods: {
getData() {
// 获取文章信息
this.$api
.post('api/Finalreview/view', {
'record_id': this.record_id,
'reviewer_id': localStorage.getItem('U_id'),
})
.then(res => {
this.txt_mess = {...res.data.article,majorList:res.data.article.major?res.data.article.major.join(','):[]}
})
.catch(err => {
this.$message.error(err);
});
this.$api
.post('api/Reviewer/getAFilelistByID ', {
'revid': this.record_id
})
.then(res => {
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 + '-';
let D = date.getDate() < 10 ? '0' + date.getDate() : date.getDate();
res.data[i].ctime = Y + M + D;
}
this.fileList = res.data
})
.catch(err => {
this.$message.error(err);
});
this.$api
.post('api/Reviewer/getBFilelistByID', {
'revid': this.record_id
})
.then(res => {
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 + '-';
let D = date.getDate() < 10 ? '0' + date.getDate() : date.getDate();
res.data[i].ctime = Y + M + D;
}
this.picList = res.data
})
.catch(err => {
this.$message.error(err);
});
},
// 同意
saveNow() {
// 二次确认
this.$confirm('Are you sure you want to agree?', 'Tips', {
type: 'warning'
})
.then(() => {
this.$api
.post('api/Finalreview/review', {
article_id: this.a_id,
record_id: this.record_id,
reviewer_id: localStorage.getItem('U_id'),
state: 0,
})
.then(res => {
if (res.status == 1) {
this.$message.success('Review now successfully!');
this.$router.push('/edit_per_text?Art_id=' + this.record_id);
} else {
this.$message.error(res.msg);
}
})
.catch(err => {
this.$message.error(err);
});
})
.catch(() => {});
},
// 拒绝
saveRef() {
// 二次确认
this.$confirm('Are you sure you want to refuse?', 'Tips', {
type: 'warning'
})
.then(() => {
this.$api
.post('api/Finalreview/review', {
article_id: this.a_id,
record_id: this.record_id,
reviewer_id: localStorage.getItem('U_id'),
state: 4,
})
.then(res => {
if (res.status == 1) {
this.$router.go(-1)
} else {
this.$message.error(res.msg);
}
})
.catch(err => {
this.$message.error(err);
});
})
.catch(() => {});
},
},
mounted() {
},
}
</script>
<style scoped>
.tet_list {
font-size: 20px;
}
.box-card {
margin-bottom: 20px;
line-height: 24px;
}
.upload-txtc .el-upload-list__item .el-icon-upload-success {
display: none !important;
}
.tet_list h5 {
font-size: 15px;
margin: 20px 0 5px 0;
font-weight: normal;
display: inline-block;
}
.tet_list p {
font-family: Calibri;
line-height: 22px;
font-size: 16px;
}
.file_sty {
margin-bottom: 6px;
font-size: 14px;
}
.red {
color: #ff0000;
}
.el-collapse {
border-top: 0;
border-bottom: 0;
}
.top_dao:hover {
text-decoration: underline;
cursor: pointer;
}
.icon_img {
width: 15px;
height: 15px;
margin-right: 10px;
vertical-align: middle;
}
.trah_c .icon_img {
width: 24px;
height: 24px;
margin: 0 20px;
}
.el-divider {
background-color: #006699;
}
</style>

View File

@@ -138,7 +138,7 @@
<el-button type="success" plain @click="wen_nowrw(item.art_rev_id)">Review</el-button>
<!-- <el-button type="success" plain @click="wen_agree(item.art_rev_id)" style="margin: 0 10px 0 20px;">Review
later</el-button> -->
<el-button type="danger" plain @click="wen_refuse(item.art_rev_id)">Reject to review
<el-button type="danger" plain @click="wen_refuse(item.art_rev_id)">Reject
</el-button>
</div>
</li>

View File

@@ -33,6 +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 == 6">Pre-accept</b>
</template>
</el-table-column>
@@ -109,7 +110,7 @@
dynamicTags: [{
label: 'Submission System 2.0',
title: 'Update Notifications',
content: "The reviewers can check all reviewers ' comments when the manuscripts get final decision."
content: "The reviewers can check all reviewers ' comments when the manuscripts get final review."
}],
};
},

View File

@@ -95,7 +95,7 @@ If you're still having trouble with Chrome, you could use other browsers to comp
<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 decision has been obtained according to the timetable. Accordingly, your review process has
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>

View File

@@ -378,6 +378,14 @@ export default new Router({
},
hidden: true
},
{
path: '/articleEditorDetail',
component: () => import('../components/page/articleEditorDetail'),
meta: {
title: 'Article detail'
},
hidden: true
},
{
path: '/articleReviewerAdd',
component: () => import('../components/page/articleReviewerAdd.vue'),
@@ -664,13 +672,13 @@ export default new Router({
path: '/editPeerewer', //审稿人进行中列表
component: () => import('../components/page/edit_per_ewer'),
meta: {
title: 'Peer Review'
title: 'Final Review'
}
}, {
path: '/editPerhistory', //审稿人历史列表
component: () => import('../components/page/edit_per_history'),
meta: {
title: 'Review History',
title: 'Final Review History',
}
},
@@ -693,7 +701,8 @@ export default new Router({
path: '/edit_per_text', //审稿人文章详情
component: () => import('../components/page/edit_per_text'),
meta: {
title: 'Final decision article details'
title: 'Final review article details'
}
},
{
@@ -703,6 +712,13 @@ export default new Router({
title: 'Reviewer article details'
}
},
{
path: '/edit_per_text_yq', //审稿人文章详情-邀请
component: () => import('../components/page/edit_per_text_yq'),
meta: {
title: 'Final review article details'
}
},
{
path: '/per_text_success', //审稿人文章-审稿成功页
component: () => import('../components/page/per_text_success'),