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

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

View File

@@ -64,7 +64,8 @@
</el-submenu> </el-submenu>
</template> </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"> <el-submenu index="7">
<template slot="title"> <i class="el-icon-notebook-1"></i> {{ $t('sidebar.edit_oria') }} </template> <template slot="title"> <i class="el-icon-notebook-1"></i> {{ $t('sidebar.edit_oria') }} </template>
<!-- <el-menu-item index="editorial"> <!-- <el-menu-item index="editorial">
@@ -73,10 +74,18 @@
<el-menu-item index="edithistory"> <el-menu-item index="edithistory">
{{ $t('sidebar.edit_oria2') }} {{ $t('sidebar.edit_oria2') }}
</el-menu-item> </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> </el-submenu>
</template> </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"> <el-submenu index="6">
<template slot="title"> <i class="el-icon-document-copy"></i> {{ $t('sidebar.man_ing') }} </template> <template slot="title"> <i class="el-icon-document-copy"></i> {{ $t('sidebar.man_ing') }} </template>
<el-menu-item index="managing"> <el-menu-item index="managing">
@@ -641,6 +650,73 @@ export default {
return this.$route.path.replace('/', ''); 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() { created() {
localStorage.setItem('collapse', this.collapse); localStorage.setItem('collapse', this.collapse);

View File

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

View File

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

View File

@@ -1889,7 +1889,7 @@ export default {
input.select(); // 选择实例内容 input.select(); // 选择实例内容
document.execCommand('Copy'); // 执行复制 document.execCommand('Copy'); // 执行复制
document.body.removeChild(input); // 删除临时实例 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>
<p style="margin: 5px 10px 0 55px; font-size: 14px; line-height: 22px"> <p style="margin: 5px 10px 0 55px; font-size: 14px; line-height: 22px">
(Non-essential) (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 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 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 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, state: 4,
title: this.$t('artstate.state4') title: this.$t('artstate.state4')
}, },
{
state: 8,
title: this.$t('artstate.state8')
},
{ {
state: 6, state: 6,
title: this.$t('artstate.state6') title: this.$t('artstate.state6')
@@ -1004,6 +1008,9 @@ export default {
case 5: case 5:
str = this.$t('artstate.state5'); str = this.$t('artstate.state5');
break; break;
case 8:
str = this.$t('artstate.state8');
break;
case 6: case 6:
str = this.$t('artstate.state6'); str = this.$t('artstate.state6');
break; break;

View File

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

File diff suppressed because it is too large Load Diff

View File

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

View File

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

View File

@@ -54,12 +54,11 @@
</div> </div>
<div v-if="!PreAcpVisible"> <div v-if="!PreAcpVisible">
<div v-for="(item, ikgn) in tableData" <div
v-for="(item, ikgn) in tableData"
:class="{ :class="{
'articleBaseInfo7': item.state==7, articleBaseInfo7: item.state == 8
}"
}"
> >
<p <p
style="background-color: #0077b8e6; border-top-left-radius: 8px; border-top-right-radius: 8px" style="background-color: #0077b8e6; border-top-left-radius: 8px; border-top-right-radius: 8px"
@@ -228,7 +227,7 @@
</div> --> </div> -->
<div style="display: flex; margin-left: auto; flex-wrap: nowrap"> <div style="display: flex; margin-left: auto; flex-wrap: nowrap">
<div <div
v-if="item.state != 7" v-if="item.state != 8"
class="fixCard manuscript_files" class="fixCard manuscript_files"
:style="`width:${item.state == 0 ? '350px !important;flex-shrink: 0' : '320px !important;flex-shrink: 0'}`" :style="`width:${item.state == 0 ? '350px !important;flex-shrink: 0' : '320px !important;flex-shrink: 0'}`"
> >
@@ -259,7 +258,7 @@
<i> <i>
<!-- <i class="el-icon-time"></i> --> <!-- <i class="el-icon-time"></i> -->
{{ formatDate(ikrm.ctime) }}</i {{ formatDate(ikrm.ctime, item) }}</i
> >
</span> </span>
<a :href="mediaUrl + ikrm.file_url"> <a :href="mediaUrl + ikrm.file_url">
@@ -290,7 +289,7 @@
<span @click="openFile(mediaUrl + ikrm.file_url)" class="openFile"> <span @click="openFile(mediaUrl + ikrm.file_url)" class="openFile">
<!-- <font>Uploader {{ ikrmIndex+1 }} </font> --> <!-- <font>Uploader {{ ikrmIndex+1 }} </font> -->
<!-- {{ ikrm.username }} --> <!-- {{ 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> </span>
<a :href="mediaUrl + ikrm.file_url"> <a :href="mediaUrl + ikrm.file_url">
<i class="el-icon-download download"></i> <i class="el-icon-download download"></i>
@@ -320,7 +319,7 @@
<span @click="openFile(mediaUrl + ikrm.file_url)" class="openFile"> <span @click="openFile(mediaUrl + ikrm.file_url)" class="openFile">
<!-- <font>Uploader {{ikrmIndex}} </font> --> <!-- <font>Uploader {{ikrmIndex}} </font> -->
<!-- {{ ikrm.username }} --> <!-- {{ 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> </span>
<a :href="mediaUrl + ikrm.file_url"> <a :href="mediaUrl + ikrm.file_url">
<i class="el-icon-download download"></i> <i class="el-icon-download download"></i>
@@ -350,7 +349,7 @@
<!-- <font>Uploader {{ ikrmIndex+1 }} </font> --> <!-- <font>Uploader {{ ikrmIndex+1 }} </font> -->
<!-- {{ ikrm.username }} --> <!-- {{ 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> </span>
<a :href="mediaUrl + ikrm.file_url"> <a :href="mediaUrl + ikrm.file_url">
<i class="el-icon-download download"></i> <i class="el-icon-download download"></i>
@@ -379,7 +378,7 @@
<span @click="openFile(mediaUrl + ikrm.file_url)" class="openFile"> <span @click="openFile(mediaUrl + ikrm.file_url)" class="openFile">
<!-- <font>Uploader {{ ikrmIndex+1 }} </font> --> <!-- <font>Uploader {{ ikrmIndex+1 }} </font> -->
<!-- { ikrm.username }} --> <!-- { 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> </span>
<a :href="mediaUrl + ikrm.file_url"> <a :href="mediaUrl + ikrm.file_url">
<i class="el-icon-download download"></i> <i class="el-icon-download download"></i>
@@ -390,7 +389,7 @@
</div> </div>
<div <div
v-if="item.state != 7" v-if="item.state != 8"
class="fixCard" class="fixCard"
:style="`width: ${ :style="`width: ${
item.state == 0 ? 'calc(100% - 350px - 230px - 18px)' : 'calc(100% - 350px - 230px - 18px)' 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> <span v-if="finalCount(item) > 0 && finalCount(item) != 'NaN'">{{ finalCount(item) }}</span>
</p> </p>
</div> </div>
<template v-if="query.state != 0&&item.state != 7"> <template v-if="query.state != 0 && query.state != 8">
<div class="fixCard reviewer_decision" style="width: 230px; flex-shrink: 0">
<div class="fixCard reviewer_decision" style="width: 230px; flex-shrink: 0" >
<b style="font-size: 16px; letter-spacing: -0.5px">Reviewer Decision</b> <b style="font-size: 16px; letter-spacing: -0.5px">Reviewer Decision</b>
<p style="height: 5px"></p> <p style="height: 5px"></p>
<p v-for="(iken, index) in item.reviewScore" style="line-height: 24px" :key="index"> <p v-for="(iken, index) in item.reviewScore" style="line-height: 24px" :key="index">
@@ -546,7 +543,7 @@
</p> </p>
<p style="margin-top: 10px"> <p style="margin-top: 10px">
<b @click="articleReviewer(item)" class="btnCliArt"> <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> </b>
<!-- <el-button size="mini" type="primary" icon="el-icon-user" @click="articleReviewer(item)"> <!-- <el-button size="mini" type="primary" icon="el-icon-user" @click="articleReviewer(item)">
@@ -554,55 +551,137 @@
</p> </p>
</div> </div>
</template> </template>
<template v-if="query.state == 7"> <template v-if="query.state == 8">
<div class="fixCard" style="width: 100%;margin-top:10px; flex-shrink: 0"> <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 v-for="(iken, index) in item.reviewScore" style="line-height: 24px" :key="index">
<p style="height: 20px"></p> {{ iken.realname }} : <b style="color: #db890e; font-size: 18px">{{ iken.rated }}</b>
<p v-for="(iken, index) in item.final" style="line-height: 24px" :key="index"> <span style="display: inline-block; margin-left: 10px">
Editorial Board {{ index + 1 }} : <b>{{ iken.realname }}</b>
<b style="color: #db890e; font-size: 18px;margin-left: 10px;" >
<font <font
v-if="index == 0" v-if="iken.state == 0"
style=" style="width: 12px; height: 12px; display: block; border-radius: 10px; background-color: #ccc"
width: 12px;
height: 12px;
display: inline-block;
border-radius: 10px;
background-color: #ccc;
"
> >
</font> </font>
<font <font
v-if="index == 1" v-if="iken.state == 1 || iken.state == 3"
style=" style="
width: 12px; width: 12px;
height: 12px; height: 12px;
display: inline-block; display: block;
border-radius: 10px; border-radius: 10px;
background-color: #67c23a; background-color: #67c23a;
" "
> >
</font> </font>
<font <font
v-if="index == 2" v-if="iken.state == 2"
style=" style="
width: 12px; width: 12px;
height: 12px; height: 12px;
display: inline-block; display: block;
border-radius: 10px; border-radius: 10px;
background-color: #f56c6c; background-color: #f56c6c;
" "
> >
</font> </font>
</b> </span>
<el-button style="margin-left: 10px" type="text" icon="el-icon-tickets" <el-button
style="margin-left: 10px"
type="text"
icon="el-icon-tickets"
@click="showdetail(iken, 'reviewer')"
>Detail</el-button >Detail</el-button
> >
</p> </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"> <p style="margin-top: 10px">
<b @click="articleEditorialBoard(item)" class="btnCliArt"> <i class="el-icon-edit"></i> Editorial Board </b> <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> </p>
</div> </div>
</template> </template>
@@ -638,7 +717,34 @@
</div> </div>
</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> <b style="font-size: 16px; letter-spacing: -0.5px">Corresponding Author</b>
<p style="height: 10px"></p> <p style="height: 10px"></p>
<div style="text-align: left"> <div style="text-align: left">
@@ -996,7 +1102,7 @@
<el-option :key="2" label="Under review" :value="2"></el-option> <el-option :key="2" label="Under review" :value="2"></el-option>
<el-option :key="3" label="Reject" :value="3"></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="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="6" label="Pre-accept" :value="6"></el-option>
<el-option :key="5" label="Accept" :value="5" :disabled="curState == 6 ? false : true"></el-option> <el-option :key="5" label="Accept" :value="5" :disabled="curState == 6 ? false : true"></el-option>
</el-select> </el-select>
@@ -1571,6 +1677,9 @@
<el-button @click="dialogVisible = false">Cancel</el-button> <el-button @click="dialogVisible = false">Cancel</el-button>
</span> </span>
</el-dialog> </el-dialog>
<articleEditorDetail :dateId="FinalDetailBaseInfo.id" ref="commonFinalDetail"></articleEditorDetail>
</div> </div>
</template> </template>
@@ -1578,14 +1687,17 @@
import { Loading } from 'element-ui'; import { Loading } from 'element-ui';
import timetalk from './time_talk'; import timetalk from './time_talk';
import commonRemarkList from './articleListEditor_A_list.vue'; import commonRemarkList from './articleListEditor_A_list.vue';
import articleEditorDetail from './articleEditorDetail.vue';
export default { export default {
components: { components: {
timetalk, timetalk,
commonRemarkList commonRemarkList,
articleEditorDetail
}, },
props: ['journals'], props: ['journals'],
data() { data() {
return { return {
FinalDetailBaseInfo: {},
dialogVisible: false, dialogVisible: false,
showFullContent: false, showFullContent: false,
majorValueList: [], majorValueList: [],
@@ -1636,7 +1748,7 @@ export default {
}, },
//终审 //终审
{ {
state: 7 state: 8
}, },
{ {
@@ -1890,6 +2002,7 @@ export default {
// } // }
], ],
editVisible1: false,
bankVisible: false, bankVisible: false,
majorData: {}, majorData: {},
googleSearchInfo: '' googleSearchInfo: ''
@@ -1904,6 +2017,47 @@ export default {
} }
}, },
methods: { 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() { openAIContent() {
this.dialogVisible = true; this.dialogVisible = true;
}, },
@@ -2207,7 +2361,7 @@ export default {
this.getdate(); this.getdate();
}, },
// 获取数据 // 获取数据
getdate() { async getdate() {
this.query.state == 6 ? (this.PreAcpVisible = true) : (this.PreAcpVisible = false); this.query.state == 6 ? (this.PreAcpVisible = true) : (this.PreAcpVisible = false);
const loading = this.$loading({ const loading = this.$loading({
lock: true, lock: true,
@@ -2215,177 +2369,201 @@ export default {
spinner: 'el-icon-loading', spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)' background: 'rgba(0, 0, 0, 0.7)'
}); });
if(this.query.state==7){ if (this.query.state == 8) {
this.$api this.$api
.post('api/Finalreview/articleLists', this.query) .post('api/Finalreview/articleLists', {
.then((res) => { ...this.query,
console.log('res at line 2219:', res) title: this.query.name,
this.Total = res.data.total; accept_sn: this.query.sn,
this.tableData = res.data.lists; journal_id: this.query.journal
for (let i = 0; i < this.tableData.length; i++) { })
this.tableData[i].file_cover = 1; .then(async (res) => {
this.tableData[i].file_figer = 1; console.log('res at line 2219:', res);
this.tableData[i].file_total = 1; this.Total = res.data.total;
this.tableData[i].file_maun = 1; this.tableData = res.data.lists;
this.tableData[i].file_supper = 1; for (let i = 0; i < this.tableData.length; i++) {
if (this.tableData[i].file.coverLetter) { this.tableData[i].reviewScore = [];
if (this.tableData[i].file.coverLetter.length > 1) { await this.$api
this.tableData[i].file_cover = 0; .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;
this.tableData[i].file_total = 1;
this.tableData[i].file_maun = 1;
this.tableData[i].file_supper = 1;
if (this.tableData[i].file.coverLetter) {
if (this.tableData[i].file.coverLetter.length > 1) {
this.tableData[i].file_cover = 0;
}
} }
} if (this.tableData[i].file.picturesAndTables) {
if (this.tableData[i].file.picturesAndTables) { if (this.tableData[i].file.picturesAndTables.length > 1) {
if (this.tableData[i].file.picturesAndTables.length > 1) { this.tableData[i].file_figer = 0;
this.tableData[i].file_figer = 0; }
} }
} if (this.tableData[i].file.totalpage) {
if (this.tableData[i].file.totalpage) { if (this.tableData[i].file.totalpage.length > 1) {
if (this.tableData[i].file.totalpage.length > 1) { this.tableData[i].file_total = 0;
this.tableData[i].file_total = 0; }
} }
}
if (this.tableData[i].file.manuscirpt) { if (this.tableData[i].file.manuscirpt) {
if ( // if (
this.tableData[i].file.coverLetter || // this.tableData[i].file.coverLetter ||
this.tableData[i].file.picturesAndTables || // this.tableData[i].file.picturesAndTables ||
this.tableData[i].file.totalpage || // this.tableData[i].file.totalpage ||
this.tableData[i].file.supplementary // this.tableData[i].file.supplementary
) { // ) {
if (this.tableData[i].file.manuscirpt.length > 1) { 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) {
this.tableData[i].file_supper = 0;
}
}
// 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.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.data.count_num[i];
} }
} }
} }
if (this.tableData[i].file.supplementary) { this.$forceUpdate();
if (this.tableData[i].file.supplementary.length > 1) { loading.close();
this.tableData[i].file_supper = 0; })
} .catch((err) => {
} console.log(err);
loading.close();
});
} else {
this.$api
.post('api/Article/getArticleForEditor', this.query)
.then((res) => {
this.Total = res.total;
this.tableData = res.data;
for (let i = 0; i < this.tableData.length; i++) {
// if (this.query.state == 0) {
// this.fetchMajorData(this.tableData[i].article_id); // 加载第一个用户的数据
// }
this.tableData[i].reviewScore = []; this.tableData[i].file_cover = 1;
for (let j = 0; j < this.tableData[i].review.length; j++) { this.tableData[i].file_figer = 1;
if (this.tableData[i].review[j].rated != null) { this.tableData[i].file_total = 1;
this.tableData[i].reviewScore.push(this.tableData[i].review[j]); this.tableData[i].file_maun = 1;
this.tableData[i].file_supper = 1;
if (this.tableData[i].file.coverLetter) {
if (this.tableData[i].file.coverLetter.length > 1) {
this.tableData[i].file_cover = 0;
}
}
if (this.tableData[i].file.picturesAndTables) {
if (this.tableData[i].file.picturesAndTables.length > 1) {
this.tableData[i].file_figer = 0;
}
}
if (this.tableData[i].file.totalpage) {
if (this.tableData[i].file.totalpage.length > 1) {
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.manuscirpt.length > 1) {
this.tableData[i].file_maun = 0;
}
}
}
if (this.tableData[i].file.supplementary) {
if (this.tableData[i].file.supplementary.length > 1) {
this.tableData[i].file_supper = 0;
}
} }
}
this.tableData[i].reportList = [...this.tableData[i].reports]; this.tableData[i].reviewScore = [];
console.log('.reportList at line 1265:', this.tableData[i].reportList); 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 i = 0; i < res.state_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];
} }
}
}
loading.close();
})
.catch((err) => {
console.log(err);
loading.close();
});
}else{
this.$api
.post('api/Article/getArticleForEditor', this.query)
.then((res) => {
this.Total = res.total;
this.tableData = res.data;
for (let i = 0; i < this.tableData.length; i++) {
// if (this.query.state == 0) {
// this.fetchMajorData(this.tableData[i].article_id); // 加载第一个用户的数据
// }
this.tableData[i].file_cover = 1; this.tableData[i].reportList = [...this.tableData[i].reports];
this.tableData[i].file_figer = 1; console.log('.reportList at line 1265:', this.tableData[i].reportList);
this.tableData[i].file_total = 1; // if (this.tableData[i].reports.length == 1) {
this.tableData[i].file_maun = 1; // for (let j = 0; j < this.tableData[i].reports.length; j++) {
this.tableData[i].file_supper = 1; // if (
if (this.tableData[i].file.coverLetter) { // this.tableData[i].reports[j].author_account != '' &&
if (this.tableData[i].file.coverLetter.length > 1) { // this.tableData[i].reports[j].author_account != null
this.tableData[i].file_cover = 0; // ) {
} // if (this.tableData[i].reports[j].author_account.google_time == 0) {
// this.tableData[i].reports[j].Hindex = 0;
// this.tableData[i].reportList.push(this.tableData[i].reports[j]);
// }
// }
// }
// } else if (this.tableData[i].reports.length > 1) {
// for (let j = 0; j < this.tableData[i].reports.length; j++) {
// if (
// this.tableData[i].reports[j].author_account != '' &&
// this.tableData[i].reports[j].author_account != null
// ) {
// this.tableData[i].reports[j].Hindex = this.tableData[i].reports[j].author_account.google_index;
// if (this.tableData[i].reports[j].author_account.google_time == 0) {
// this.tableData[i].reportList = this.tableData[i].reports;
// }
// }
// }
// }
} }
if (this.tableData[i].file.picturesAndTables) { for (let i = 0; i < res.state_num.length; i++) {
if (this.tableData[i].file.picturesAndTables.length > 1) { for (let j = 0; j < this.statList.length; j++) {
this.tableData[i].file_figer = 0; if (i == this.statList[j].state) {
} this.statList[j].num = res.state_num[i];
}
if (this.tableData[i].file.totalpage) {
if (this.tableData[i].file.totalpage.length > 1) {
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.manuscirpt.length > 1) {
this.tableData[i].file_maun = 0;
} }
} }
} }
if (this.tableData[i].file.supplementary) { loading.close();
if (this.tableData[i].file.supplementary.length > 1) { })
this.tableData[i].file_supper = 0; .catch((err) => {
} console.log(err);
} loading.close();
});
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]);
}
}
this.tableData[i].reportList = [...this.tableData[i].reports];
console.log('.reportList at line 1265:', this.tableData[i].reportList);
// if (this.tableData[i].reports.length == 1) {
// for (let j = 0; j < this.tableData[i].reports.length; j++) {
// if (
// this.tableData[i].reports[j].author_account != '' &&
// this.tableData[i].reports[j].author_account != null
// ) {
// if (this.tableData[i].reports[j].author_account.google_time == 0) {
// this.tableData[i].reports[j].Hindex = 0;
// this.tableData[i].reportList.push(this.tableData[i].reports[j]);
// }
// }
// }
// } else if (this.tableData[i].reports.length > 1) {
// for (let j = 0; j < this.tableData[i].reports.length; j++) {
// if (
// this.tableData[i].reports[j].author_account != '' &&
// this.tableData[i].reports[j].author_account != null
// ) {
// this.tableData[i].reports[j].Hindex = this.tableData[i].reports[j].author_account.google_index;
// if (this.tableData[i].reports[j].author_account.google_time == 0) {
// this.tableData[i].reportList = this.tableData[i].reports;
// }
// }
// }
// }
}
for (let i = 0; i < res.state_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];
}
}
}
loading.close();
})
.catch((err) => {
console.log(err);
loading.close();
});
}
}, },
// 触发搜索按钮 // 触发搜索按钮
handleSearch() { handleSearch() {
@@ -3039,8 +3217,8 @@ if(this.query.state==7){
case 6: case 6:
str = this.$t('artstate.state6'); str = this.$t('artstate.state6');
break; break;
case 7: case 8:
str = this.$t('artstate.state7'); str = this.$t('artstate.state8');
break; break;
default: default:
str = 'error!!'; str = 'error!!';
@@ -3081,12 +3259,16 @@ if(this.query.state==7){
}, },
// 时间 // 时间
formatDate(timestamp) { formatDate(timestamp, data) {
var date = new Date(timestamp * 1000); //时间戳为10位需*1000时间戳为13位的话不需乘1000 if (data.state == 8) {
var Y = date.getFullYear() + '-'; return timestamp;
var M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-'; } else {
var D = date.getDate() < 10 ? '0' + date.getDate() : date.getDate(); var date = new Date(timestamp * 1000); //时间戳为10位需*1000时间戳为13位的话不需乘1000
return Y + M + D; 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) { colorIndex2(time) {
if (time != 0) { if (time != 0) {

View File

@@ -283,6 +283,10 @@ export default {
res.msg[i].color = '#27727B'; res.msg[i].color = '#27727B';
res.msg[i].icon = 'el-icon-star-off'; 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 = res.article;
this.artMes.laststate = res.msg[res.msg.length - 1].state_to; this.artMes.laststate = res.msg[res.msg.length - 1].state_to;
@@ -372,6 +376,13 @@ export default {
break; break;
case 6: case 6:
str = 'Pre-accept'; str = 'Pre-accept';
break;
case 7:
str = 'Proof';
break;
case 8:
str = 'Final Review';
break; break;
default: default:
str = 'error!!'; str = 'error!!';

View File

@@ -98,6 +98,45 @@
</el-collapse> </el-collapse>
<p v-if="comentDeploy==''" style="color: #888888;margin: 0 0 0 10px;">No Comment</p> <p v-if="comentDeploy==''" style="color: #888888;margin: 0 0 0 10px;">No Comment</p>
</div> </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_"> <div class="art_author_">
<h2 :style="{'margin-bottom':(ComEditor==''?'0':'20px')}"> <h2 :style="{'margin-bottom':(ComEditor==''?'0':'20px')}">
@@ -444,6 +483,7 @@
loading: false, loading: false,
Detailvisible: false, Detailvisible: false,
activeComment: [], activeComment: [],
activeFinalComment: [],
activeNames: ['2'], activeNames: ['2'],
authorList_name: '', authorList_name: '',
artMes: { artMes: {
@@ -463,6 +503,7 @@
ad_content: '' ad_content: ''
}, },
comentDeploy: [], comentDeploy: [],
comentFinal: [],
talkMsgs: [], talkMsgs: [],
ComEditor: [], ComEditor: [],
ComRespe: [], ComRespe: [],
@@ -545,6 +586,10 @@
if(item.question && item.question.length > 0) if(item.question && item.question.length > 0)
item.question = item.question.reverse() item.question = item.question.reverse()
}) })
// 审稿人意见
this.comentFinal = res.suggest_final
// console.log(this.comentDeploy,'this.comentDeploy') // console.log(this.comentDeploy,'this.comentDeploy')
}) })
.catch((err) => { .catch((err) => {

View File

@@ -3,77 +3,47 @@
<el-form :model="questionform" :rules="isEdit ? rules : {}" ref="question" label-width="300px" label-position="top"> <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> <el-divider content-position="center">REFEREE'S ASSESSMENT</el-divider>
<p <el-form-item label="Processing Status" prop="state">
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">
<!-- Accept(录用)、Revision(退修)、Reject(退稿) --> <!-- Accept(录用)、Revision(退修)、Reject(退稿) -->
<!-- 1接收2拒绝3退修4拒绝邀请 --> <!-- 1接收2拒绝3退修4拒绝邀请 -->
<!--
<div class="btn btn-accept ">Accept</div>
<div class="btn btn-revision ">Revision</div> <el-radio-group v-model="questionform.state" style="line-height: 30px">
<div class="btn btn-reject">Reject</div> --> <el-radio :label="1" :disabled="!isEdit && questionform.state != 1 && questionform.state != 0">Accept</el-radio>
<!--
<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 /> <br />
<el-radio :label="3" :disabled="!isEdit && questionform.recommend != 3">Revision</el-radio> <el-radio :label="3" :disabled="!isEdit && questionform.state != 3 && questionform.state != 0">Revision</el-radio>
<br /> <br />
<el-radio :label="4" :disabled="!isEdit && questionform.recommend != 4">Reject</el-radio> <el-radio :label="2" :disabled="!isEdit && questionform.state != 2 && questionform.state != 0">Reject</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item label="Confidential Comments to the Editor" > <template>
<el-input <el-form-item label="Comments for the Authors" prop="suggest_for_author">
:readonly="!isEdit" <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" type="textarea"
placeholder="please input content" placeholder="please input content"
v-model="questionform.suggest_for_editor" v-model="questionform.suggest_for_editor"
:autosize="{ minRows: 2, maxRows: 10 }" :autosize="{ minRows: 2, maxRows: 10 }"
></el-input> ></el-input>
<div v-else style="color: #888;">
{{ questionform.suggest_for_editor }}
</div>
</el-form-item> </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"> <!-- <el-form-item label="Please choose disclose your name or remain anonymous" v-if="isEdit">
<el-radio-group v-model="questionform.is_anonymous" style="line-height: 30px"> <el-radio-group v-model="questionform.is_anonymous" style="line-height: 30px">
@@ -96,9 +66,9 @@
</el-radio-group> </el-radio-group>
</el-form-item> --> </el-form-item> -->
<!-- 暂时注销 --> <!-- 暂时注销 -->
<!-- v-if="this.btn_submit == 0" --> <!-- -->
<el-form-item > <el-form-item>
<el-button type="primary" @click="questionSubmit" style="float: right;">submit</el-button> <el-button type="primary" @click="questionSubmit" style="float: right" v-if="this.btn_submit == 0">submit</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</div> </div>
@@ -157,6 +127,7 @@ export default {
form: { form: {
handler(e) { handler(e) {
this.baseQuestionform = JSON.parse(JSON.stringify(e)); // 深拷贝,防止直接改 props this.baseQuestionform = JSON.parse(JSON.stringify(e)); // 深拷贝,防止直接改 props
console.log('this.baseQuestionform at line 134:', this.baseQuestionform);
}, },
immediate: true, immediate: true,
deep: true deep: true
@@ -179,124 +150,60 @@ export default {
rules: {} rules: {}
}; };
}, },
created() { mounted() {
this.getData(); this.getData();
}, },
methods: { methods: {
getData() { getData() {
// Fetch article data // Fetch article data
this.questionform = { ...this.baseQuestionform }; this.questionform = {
if (this.baseQuestionform.type != 1) { reviewer_id: this.baseQuestionform.reviewer_id,
this.isNewForm = true; article_id: this.baseQuestionform.article_id,
this.rules = { record_id: this.baseQuestionform.record_id,
rated: [{ required: true, message: 'please select', trigger: 'blur' }], state: this.baseQuestionform.state,
comment: [{ required: true, message: 'please input content', trigger: 'blur' }], suggest_for_editor: this.baseQuestionform.suggest_for_editor,
other: [{ required: true, message: 'please input content', trigger: 'blur' }], suggest_for_author: this.baseQuestionform.suggest_for_author
recommend: [{ required: true, message: 'please select', trigger: 'blur' }] };
};
if (this.txt_mess.atype == 'REVIEW' || this.txt_mess.atype == 'MINI REVIEW') { this.rules = {
for (let i = 1; i <= 12; i++) { state: [{ required: true, message: 'Please select the manuscript processing status', trigger: 'blur' }],
this.rules[`qu${i}`] = [{ required: true, message: 'please select', 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' }]
} 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' }]
};
}
}, },
questionSubmit() { questionSubmit() {
if (this.questionform.state == 0) {
this.$message.error('Please select the manuscript processing status.');
return false;
}
const regex = /[\u4E00-\u9FA5\uF900-\uFA2D]{1,}/; const regex = /[\u4E00-\u9FA5\uF900-\uFA2D]{1,}/;
if (this.questionform.comment && this.questionform.comment != '') { if (this.questionform.suggest_for_author && this.questionform.suggest_for_author != '') {
if (regex.test(this.questionform.comment)) { if (regex.test(this.questionform.suggest_for_author)) {
// 如果输入的是中文,则清空输入框 // 如果输入的是中文,则清空输入框
this.$message.error('Comments for the Authors cannot use Chinese.'); this.$message.error('Comments for the Authors cannot use Chinese.');
return false; return false;
} }
} }
if (this.questionform.confident && this.questionform.confident != '') { if (this.questionform.suggest_for_editor && this.questionform.suggest_for_editor != '') {
if (regex.test(this.questionform.confident)) { 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; return false;
} }
} }
// let Char_Cter = null; // 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)) { // Char_Cter = [
//中文
let blankCount = 0; // this.questionform.suggest_for_editor,
for (let i in Char_Cter.match(/ /g)) { // this.questionform.suggest_for_author,
blankCount++; // ].join(' ');
}
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.loading = true;
@@ -310,11 +217,10 @@ export default {
}); });
this.$api this.$api
.post('api/Finalreview/review', { .post('api/Finalreview/review', {
...this.questionform, ...this.questionform
}) })
.then((res) => { .then((res) => {
if (res.code == 0) { if (res.status == 1) {
loading.close(); loading.close();
this.$message.success('Success!!'); this.$message.success('Success!!');
this.$emit('refresh'); this.$emit('refresh');
@@ -370,7 +276,7 @@ export default {
width: 110px; width: 110px;
height: 32px; height: 32px;
line-height: 32px; line-height: 32px;
border:1px solid #888; border: 1px solid #888;
color: #888; color: #888;
} }
@@ -380,13 +286,13 @@ export default {
color: #ffffff; color: #ffffff;
box-shadow: 0 4px 6px rgba(40, 167, 69, 0.2); box-shadow: 0 4px 6px rgba(40, 167, 69, 0.2);
} }
.btn1{ .btn1 {
color: #28a745; color: #28a745;
} }
.btn2{ .btn2 {
color: #ffc107; color: #ffc107;
} }
.btn3{ .btn3 {
color: #dc3545; color: #dc3545;
} }
@@ -409,7 +315,6 @@ export default {
box-shadow: 0 4px 6px rgba(255, 193, 7, 0.2); box-shadow: 0 4px 6px rgba(255, 193, 7, 0.2);
} }
.btn-revision:hover { .btn-revision:hover {
background-color: #e0a800; background-color: #e0a800;
box-shadow: 0 6px 8px rgba(255, 193, 7, 0.3); 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); box-shadow: 0 4px 6px rgba(220, 53, 69, 0.2);
} }
.btn-reject:hover { .btn-reject:hover {
background-color: #c82333; background-color: #c82333;
box-shadow: 0 6px 8px rgba(220, 53, 69, 0.3); box-shadow: 0 6px 8px rgba(220, 53, 69, 0.3);
@@ -449,4 +353,8 @@ export default {
transform: none; transform: none;
box-shadow: none; box-shadow: none;
} }
::v-deep .el-form-item__label{
font-weight: bold !important;
}
</style> </style>

View File

@@ -3,7 +3,7 @@
<div class="crumbs"> <div class="crumbs">
<el-breadcrumb separator="/"> <el-breadcrumb separator="/">
<el-breadcrumb-item> <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-item>
</el-breadcrumb> </el-breadcrumb>
</div> </div>
@@ -25,21 +25,21 @@
<ul class="ta1_uli ta1_ulicad"> <ul class="ta1_uli ta1_ulicad">
<li v-for="(item,index) in tableData1"> <li v-for="(item,index) in tableData1">
<!-- <h5>{{item.type}}</h5> --> <!-- <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 <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> </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> </router-link>
<h4> <h4>
<span> <span>
<font style="color: #006699;">Journal : </font>{{item.journal_title}}. <font style="color: #006699;">Journal : </font>{{item.journal_name}}
</span> </span>
<span> <span>
<font style="color: #006699;">Type : </font>{{item.type}} <font style="color: #006699;">Type : </font>{{item.article_type_name}}
</span> </span>
<span style="color: #888;margin-left: 20px;color: #006699;"> <span style="color: #888;margin-left: 20px;color: #006699;">
{{item.ctime}} {{item.agree_review_time}}
</span><br> </span><br>
<!-- <span v-if="item.abstrart!=''" style="max-width: 1000px;"> <!-- <span v-if="item.abstrart!=''" style="max-width: 1000px;">
<font style="color: #888;">Abstrart : </font>{{item.abstrart | ellipsis}} <font style="color: #888;">Abstrart : </font>{{item.abstrart | ellipsis}}
@@ -51,59 +51,7 @@
</ul> </ul>
</el-col> </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"> <!-- <el-col :span="24">
<div style="background-color: #ccc;height: 2px;width: 100%;margin: 30px 0 5px 0;"></div> <div style="background-color: #ccc;height: 2px;width: 100%;margin: 30px 0 5px 0;"></div>
@@ -164,7 +112,9 @@
return { return {
user_name: localStorage.getItem('U_relname'), user_name: localStorage.getItem('U_relname'),
query: { query: {
user_id: localStorage.getItem('U_id') reviewer_id: localStorage.getItem('U_id'),
pageIndex: 1,
pageSize: 9999,
}, },
Art_id: this.$route.query.Art_id, Art_id: this.$route.query.Art_id,
tableData1: [], tableData1: [],
@@ -177,7 +127,7 @@
}, },
TaBle3: { TaBle3: {
user_id: localStorage.getItem('U_id'), reviewer_id: localStorage.getItem('U_id'),
journal_id: 0, journal_id: 0,
pageIndex: 1, pageIndex: 1,
pageSize: 5 pageSize: 5
@@ -195,16 +145,16 @@
// 获取数据 // 获取数据
getData() { getData() {
this.$api this.$api
.post('api/Reviewer/getReviewerListPending', this.query) .post('api/Finalreview/lists', {...this.query,state:0})
.then(res => { .then(res => {
if (res.code == 0) { if (res.status == 1) {
for (let i = 0; i < res.data.lists.length; i++) { 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 Y = date.getFullYear() + '-';
let M = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) + '-' : date let M = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) + '-' : date
.getMonth() + 1 + '-'; .getMonth() + 1 + '-';
let D = date.getDate() < 10 ? '0' + date.getDate() : date.getDate(); 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.tableData1 = res.data.lists;
this.revisionList = res.data.repeats this.revisionList = res.data.repeats
@@ -216,66 +166,9 @@
this.$message.error(err); 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) { handlePageChange3(val) {

View File

@@ -1,14 +1,14 @@
<template> <template>
<div> <div>
<div class="crumbs"> <div class="crumbs">
<el-breadcrumb separator="/"> <el-breadcrumb separator="/">
<el-breadcrumb-item> <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-item>
</el-breadcrumb> </el-breadcrumb>
</div> </div>
<div class="container_l"> <div class="container_l">
<!-- <div v-for="item in dynamicTags" <!-- <div v-for="item in dynamicTags"
style="background-color: #f0f9eb;border-radius: 5px;border:1px solid #e1f3d8;color: #67c23a;font-size: 14px;padding: 8px 15px;margin: 0 0 20px 0;"> style="background-color: #f0f9eb;border-radius: 5px;border:1px solid #e1f3d8;color: #67c23a;font-size: 14px;padding: 8px 15px;margin: 0 0 20px 0;">
<el-button type="success" icon="el-icon-close" circle @click='handleClose' <el-button type="success" icon="el-icon-close" circle @click='handleClose'
style="float: right;margin: 17px 5px 0 0;"></el-button> style="float: right;margin: 17px 5px 0 0;"></el-button>
@@ -16,238 +16,363 @@
<p style="margin: 5px 0;">{{item.title}}</p> <p style="margin: 5px 0;">{{item.title}}</p>
<p>{{item.content}}</p> <p>{{item.content}}</p>
</div> --> </div> -->
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="24"> <el-col :span="24">
<el-card class="box-card" v-loading="loading" element-loading-text="Loading..." <el-card
element-loading-spinner="el-icon-loading" element-loading-background="rgba(0, 0, 0, 0.8)"> class="box-card"
<el-table :data="tableData3" border class="table" ref="multipleTable" v-loading="loading"
header-cell-class-name="table-header" empty-text="New messages (0)"> element-loading-text="Loading..."
<el-table-column prop="article_title" label="Article Title"></el-table-column> element-loading-spinner="el-icon-loading"
<el-table-column prop="journal_title" label="Journal"></el-table-column> element-loading-background="rgba(0, 0, 0, 0.8)"
<el-table-column prop="ctime" label="Reviewed time" width="140"></el-table-column> >
<el-table-column label="Article Status" width="130" align="center"> <el-table
<template slot-scope="scope"> :data="tableData3"
<b v-if="scope.row.astate == 0">Received</b> border
<b v-if="scope.row.astate == 1">With editor</b> class="table"
<b v-if="scope.row.astate == 2">Under review</b> ref="multipleTable"
<b v-if="scope.row.astate == 3">Reject</b> header-cell-class-name="table-header"
<b v-if="scope.row.astate == 4">Revision</b> empty-text="New messages (0)"
<b v-if="scope.row.astate == 5">Accept</b> >
<b v-if="scope.row.astate == 6">Pre-accept</b> <el-table-column prop="title" label="Article Title"></el-table-column>
</template> <el-table-column prop="journal_name" label="Journal"></el-table-column>
</el-table-column> <el-table-column prop="ctime" label="Final Reviewed Time" width="180"></el-table-column>
<el-table-column label="State" align="center" width="120"> <el-table-column label="Article Status" width="160" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<span style="font-size: 16px;"v-html="revstate(scope.row)"></span> <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>
</template> <b v-if="scope.row.article_state == 3">Reject</b>
</el-table-column> <b v-if="scope.row.article_state == 4">Revision</b>
<el-table-column label="Recommendation" width="160" align="center"> <b v-if="scope.row.article_state == 5">Accept</b>
<template slot-scope="scope"> <b v-if="scope.row.article_state == 8">Final Review</b>
<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>
</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>
</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>
</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>
</div>
</el-card>
<!-- 证书弹出框 --> <b v-if="scope.row.astate == 6">Pre-accept</b>
<el-dialog :visible.sync="cerVisible" width="600px"> </template>
<el-image class="table-td-thumb rev_digol" :src="this.IMG_Url"></el-image> </el-table-column>
</el-dialog> <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-dialog :visible.sync="feilVisible" width="600px"> <el-table-column label=" " width="230">
<h2 style="text-align: center;">No certificate</h2> <template slot-scope="scope">
<span slot="footer" class="dialog-footer"> <el-button @click="showDetail(scope.$index, scope.row)"
<el-button type="primary" @click="feilVisible=false">OK</el-button> v-if="scope.row.state == 1 || scope.row.state == 3 || scope.row.state == 2"
</span> type="primary"
</el-dialog> plain
style="margin-right: 10px"
><i class="el-icon-tickets"></i> Detail
</el-button>
</el-col> <el-button
</el-row> type="success"
</div> size="mini"
</div> @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>
</div>
</el-card>
<!-- 证书弹出框 -->
<el-dialog :visible.sync="cerVisible" width="600px">
<el-image class="table-td-thumb rev_digol" :src="this.IMG_Url"></el-image>
</el-dialog>
<el-dialog :visible.sync="feilVisible" width="600px">
<h2 style="text-align: center">No certificate</h2>
<span slot="footer" class="dialog-footer">
<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> </template>
<script> <script>
export default { export default {
data() { data() {
return { return {
loading: false, detailDate: {},
query: { editVisible1: false,
user_id: localStorage.getItem('U_id') loading: false,
}, query: {
tableData3: [], reviewer_id: localStorage.getItem('U_id'),
TaBle3: { page: 1,
user_id: localStorage.getItem('U_id'), size: 10
pageIndex: 1, },
pageSize: 10 tableData3: [],
}, TaBle3: {
link_Tota3: 0, user_id: localStorage.getItem('U_id'),
IMG_Url: '', pageIndex: 1,
cerVisible: false, pageSize: 10
feilVisible: false, },
dynamicTags: [{ link_Tota3: 0,
label: 'Submission System 2.0', IMG_Url: '',
title: 'Update Notifications', cerVisible: false,
content: "The reviewers can check all reviewers ' comments when the manuscripts get final decision." feilVisible: false,
}], dynamicTags: [
}; {
}, label: 'Submission System 2.0',
mounted() { title: 'Update Notifications',
content: "The reviewers can check all reviewers ' comments when the manuscripts get final review."
}
]
};
},
mounted() {},
created() {
this.loading = true;
this.getTable();
},
methods: {
showDetail(i,data){
this.getDate(data.id)
},
// 同意
saveNow(i, data) {
// 二次确认
this.$confirm('Are you sure you want to agree?', 'Tips', {
type: 'warning'
})
.then(() => {
this.$api
.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) => {
this.$message.error(err);
});
})
.catch(() => {});
},
}, // 拒绝
created() { saveRef(i, data) {
this.loading = true; // 二次确认
this.getTable(); this.$confirm('Are you sure you want to refuse?', 'Tips', {
}, type: 'warning'
methods: { })
revstate(row, column, cellValue, index) { .then(() => {
this.$api
.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 = ''; let frag = '';
if (row.state == 0) { if (row.state == 0) {
frag = 'With reviewer'; frag = 'Agree to review';
} else if (row.state == 1) { } else if (row.state == 1) {
// 大修 // 大修
frag = 'Major revision'; frag = 'Accept';
// frag = 'Revision'; // frag = 'Revision';
} else if (row.state == 2) {
frag = 'Reject';
} else if (row.state == 3) { } else if (row.state == 3) {
frag = 'Revision';
} else if (row.state == 2) {
//小修 //小修
// frag = 'Accept'; // frag = 'Accept';
frag = 'Minor revision'; frag = 'Reject';
} else if (row.state == 4) { } else if (row.state == 4) {
frag = '<text style="color:#aaa">invalid</text>'; frag = '<text style="color:#888">invalid</text>';
} else if (row.state == 5) { } else if (row.state == 5) {
frag = 'invitation'; frag = 'invitation';
} }
return frag; return frag;
}, },
// 获取数据 getDate(record_id) {
getTable() { const loading = this.$loading({
this.$api lock: true,
.post('api/Reviewer/getReviewerDetail1', this.query) text: 'Loading',
.then(res => { spinner: 'el-icon-loading',
if (res.code == 0) { background: 'rgba(0, 0, 0, 0.7)',
this.getData(); zIndex: 9999 // 设置一个足够高的层级
} else { });
this.$message.error(res.msg); this.$api
} .post('api/Finalreview/view', {
}) record_id: record_id
.catch(err => {
this.$message.error(err); })
}); .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;
getData() { this.txt_mess = res;
this.$api this.canRepeat = res.can_repeat;
.post('api/Reviewer/getReviewerListHistory', this.TaBle3) this.journal_id = res.journal_id;
.then(res => { this.articleId = res.data.article.article_id;
this.loading = false this.editVisible1 = true;
if (res.code == 0) {
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 = ''
} else {
let date = new Date(parseInt(res.data.lists[i].recommenttime) * 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;
}
}
}
this.tableData3 = res.data.lists;
this.link_Tota3 = res.data.count || 0;
} else {
this.$message.error(res.msg);
}
})
.catch(err => {
this.loading = false
this.$message.error(err);
});
},
// 分页导航 this.$nextTick(() => {
handlePageChange3(val) { this.$refs.commonEditor.getData();
this.loading = true;
this.$set(this.TaBle3, 'pageIndex', val);
this.getData();
},
// 证书弹出层
cerFicte(index, row) { });
this.$api
.post('api/Reviewer/getZSimg', {
'art_rev_id': row.art_rev_id
})
.then(res => {
if (res.code == 0) {
this.IMG_Url = this.Common.mediaUrl + res.data.icon
this.cerVisible = true;
} else {
this.$message.error(res.msg);
this.feilVisible = true;
}
})
.catch(err => {
this.$message.error(err);
});
}, 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 != '') {
handleClose(tag) { for (let i = 0; i < res.data.lists.length; i++) {
// this.dynamicTags.splice(this.dynamicTags.indexOf(tag), 1); if (res.data.lists[i].update_time == null) {
this.dynamicTags = [] res.data.lists[i].ctime = '';
}, } else {
}, let date = new Date(parseInt(res.data.lists[i].update_time) * 1000);
filters: { 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;
}
}
}
this.tableData3 = res.data.lists;
this.link_Tota3 = res.data.total || 0;
} else {
this.loading = false;
this.$message.error(res.msg);
}
})
.catch((err) => {
this.loading = false;
this.$message.error(err);
});
},
}, // 分页导航
watch: { handlePageChange3(val) {
this.loading = true;
this.$set(this.TaBle3, 'pageIndex', val);
this.getData();
},
} // 证书弹出层
}; cerFicte(index, row) {
this.$api
.post('api/Reviewer/getZSimg', {
art_rev_id: row.art_rev_id
})
.then((res) => {
if (res.code == 0) {
this.IMG_Url = this.Common.mediaUrl + res.data.icon;
this.cerVisible = true;
} else {
this.$message.error(res.msg);
this.feilVisible = true;
}
})
.catch((err) => {
this.$message.error(err);
});
},
// 关闭标签
handleClose(tag) {
// this.dynamicTags.splice(this.dynamicTags.indexOf(tag), 1);
this.dynamicTags = [];
}
},
filters: {},
watch: {}
};
</script> </script>
<style> <style>
.table { .table {
width: 100%; width: 100%;
font-size: 14px; font-size: 14px;
} }
.rev_digol .el-image__placeholder { .rev_digol .el-image__placeholder {
background-image: url(../../assets/img/loading.gif); background-image: url(../../assets/img/loading.gif);
background-repeat: no-repeat; background-repeat: no-repeat;
background-position: center center; background-position: center center;
background-size: 440px 300px; background-size: 440px 300px;
width: 560px; width: 560px;
height: 400px; height: 400px;
background-color: #fff; background-color: #fff;
} }
</style> </style>

View File

@@ -4,10 +4,10 @@
<el-breadcrumb separator="/"> <el-breadcrumb separator="/">
<el-breadcrumb-item> <el-breadcrumb-item>
<i class="el-icon-collection"></i> <i class="el-icon-collection"></i>
<router-link :to="{ path: '/peerewer' }"> <router-link :to="{ path: '/editPeerewer' }">
<span class="top_dao"> Final Decision Article</span> <span class="top_dao"> Final Review Article</span>
</router-link> </router-link>
>> Final Decision Article Detail >> Final Review Article Detail
</el-breadcrumb-item> </el-breadcrumb-item>
</el-breadcrumb> </el-breadcrumb>
</div> </div>
@@ -33,7 +33,8 @@
Manuscript ID: {{ txt_mess.accept_sn }} Manuscript ID: {{ txt_mess.accept_sn }}
</h5> </h5>
<p style="display: inline-block; margin: 0 35px"><b>Type :</b> {{ txt_mess.atype }}</p> <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> <div>
<p><b>Abstract :</b> <br />{{ txt_mess.abstrart }}</p> <p><b>Abstract :</b> <br />{{ txt_mess.abstrart }}</p>
<div class="file_sty" v-for="item in fileList" style="margin-top: 15px"> <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> </p>
</div> </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"> <!-- <p class="morSou" v-if="!morShow" @click="morShow=true">
<i class="el-icon-bottom"></i> <i class="el-icon-bottom"></i>
More article information 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"> <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 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 been discontinued. Your comments do not need to be submitted now. We would like to express our sincere gratitude for
your contributions as well. your contributions as well.
</el-card> </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(退稿) --> <!-- 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> <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-card>
<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-col>
</el-row> </el-row>
</div> </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> </div>
</template> </template>
@@ -369,6 +198,10 @@ import pdf from 'vue-pdf';
export default { export default {
data() { data() {
return { return {
activeNames:['1'],
questionVisible: false,
User_Id: localStorage.getItem('U_id'),
loading: false, loading: false,
articleId: null, articleId: null,
Direct_log: this.$route.query.act, Direct_log: this.$route.query.act,
@@ -376,6 +209,7 @@ export default {
// morShow: false, // morShow: false,
txt_mess: {}, txt_mess: {},
fileList: [], fileList: [],
conmentList: [],
picList: [], picList: [],
SMList: [], //补充材料 SMList: [], //补充材料
mediaUrl: this.Common.mediaUrl, mediaUrl: this.Common.mediaUrl,
@@ -385,42 +219,14 @@ export default {
content: '' content: ''
}, },
head_line: '', head_line: '',
questionform1:{},
questionform: { questionform: {
rev_qu_id: '', article_id: '',
reviewer_id: '',
art_rev_id: this.$route.query.Art_id, art_rev_id: this.$route.query.Art_id,
qu1: '', record_id: this.$route.query.Art_id,
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: '',
}, },
add_apply: 0, add_apply: 0,
btn_submit: 0, btn_submit: 0,
@@ -459,65 +265,72 @@ export default {
}; };
}, },
created() { created() {
if (this.Direct_log == null) {
this.getData(); 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: { 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() { getData() {
// 获取文章信息 // 获取文章信息
this.$api this.$api
.post('api/Reviewer/getartrevdate', { .post('api/Finalreview/view', {
revid: this.Art_id, record_id: this.Art_id,
human: 'reviewer'
'reviewer_id': localStorage.getItem('U_id'),
}) })
.then((res) => { .then((res) => {
this.articleId=res.article_id this.articleId=res.data.article.article_id
if (res.state != 0) {
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; this.btn_submit = 1;
} }
let date = new Date(parseInt(res.ctime) * 1000); this.txt_mess = res.data.article;
let Y = date.getFullYear() + '-';
let M = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) + '-' : date.getMonth() + 1 + '-';
let D = date.getDate() < 10 ? '0' + date.getDate() : date.getDate();
res.ctime = Y + M + D;
this.txt_mess = res;
this.journal_id = res.journal_id; 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; this.add_apply = 0;
} else { } else {
this.add_apply = 1; this.add_apply = 1;
@@ -528,8 +341,8 @@ export default {
}); });
this.$api this.$api
.post('api/Reviewer/getAFilelistByID ', { .post('api/Finalreview/getArticleFile ', {
revid: this.Art_id record_id: this.Art_id
}) })
.then((res) => { .then((res) => {
for (var i = 0; i < res.data.length; i++) { 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(); let D = date.getDate() < 10 ? '0' + date.getDate() : date.getDate();
res.data[i].ctime = Y + M + D; 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; let pdfOut = this.fileList[this.fileList.length - 1].file_url;
@@ -558,179 +373,13 @@ export default {
this.$message.error(err); 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() {} mounted() {}
}; };
@@ -866,4 +515,45 @@ export default {
.css-138 { .css-138 {
display: none; 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> </style>

View File

@@ -5,9 +5,9 @@
<el-breadcrumb-item> <el-breadcrumb-item>
<i class="el-icon-collection"></i> <i class="el-icon-collection"></i>
<router-link :to="{ path: '/peerewer' }"> <router-link :to="{ path: '/peerewer' }">
<span class="top_dao"> Final Decision Article</span> <span class="top_dao"> Final Review Article</span>
</router-link> </router-link>
>> Final Decision completed >> Final Review Completed
</el-breadcrumb-item> </el-breadcrumb-item>
</el-breadcrumb> </el-breadcrumb>
</div> </div>
@@ -45,17 +45,18 @@
p-id="29681" p-id="29681"
></path> ></path>
</svg> </svg>
<p>Final Decision completed !</p> <p>Final Review completed !</p>
<br clear="both" /> <br clear="both" />
</div> </div>
<!-- 暂时去掉 --> <!-- 暂时去掉 -->
<div class="suss_page_2"> <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 The editorial team would like to express our sincere respect and gratitude to you for your meticulous review and
guidance as the final reviewer of this journal. guidance as the final reviewer of this journal.
</div> </div>
<div class="suss_page_3"> <div class="suss_page_3">
<a href="/editpeerewer">Return to Peer Review page</a> <a href="/editPeerewer">Return to Final Review page</a>
</div> </div>
</el-card> </el-card>
</div> </div>
@@ -65,10 +66,27 @@
<script> <script>
export default { export default {
data() { data() {
return {}; return {
user_cap: localStorage.getItem('U_role')
};
}, },
created() {}, 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> </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_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 <!-- <el-button type="success" plain @click="wen_agree(item.art_rev_id)" style="margin: 0 10px 0 20px;">Review
later</el-button> --> 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> </el-button>
</div> </div>
</li> </li>

View File

@@ -33,6 +33,7 @@
<b v-if="scope.row.astate == 3">Reject</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 == 4">Revision</b>
<b v-if="scope.row.astate == 5">Accept</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> <b v-if="scope.row.astate == 6">Pre-accept</b>
</template> </template>
</el-table-column> </el-table-column>
@@ -109,7 +110,7 @@
dynamicTags: [{ dynamicTags: [{
label: 'Submission System 2.0', label: 'Submission System 2.0',
title: 'Update Notifications', 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"> <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 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 been discontinued. Your comments do not need to be submitted now. We would like to express our sincere gratitude for
your contributions as well. your contributions as well.
</el-card> </el-card>

View File

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