This commit is contained in:
2025-08-26 18:01:49 +08:00
parent f535f54673
commit daba55e418
17 changed files with 3727 additions and 44 deletions

View File

@@ -19,8 +19,8 @@ const service = axios.create({
// baseURL: 'https://submission.tmrjournals.com/', //正式 记得切换
// baseURL: 'http://www.tougao.com/', //测试本地 记得切换
// baseURL: 'http://192.168.110.110/tougao/public/index.php/',
// baseURL: '/api', //本地
baseURL: '/', //正式
baseURL: '/api', //本地
// baseURL: '/', //正式
});

View File

@@ -35,6 +35,8 @@
// vTags
},
created() {
// bus.$on('collapse-content', msg => {
// this.collapse = msg;
// });

View File

@@ -7,7 +7,10 @@
<v-sidebar></v-sidebar>
<div class="content-box" :class="{ 'content-collapse': collapse }">
<v-tags></v-tags>
<div class="content">
<div class="content" :class="{'content_main':$route.path=='/edit_per_text'}">
<transition name="move" mode="out-in">
<keep-alive :include="tagsList">
<router-view></router-view>
@@ -64,6 +67,7 @@ export default {
vTags
},
created() {
console.log('route at line 38:', this.$route)
bus.$on('collapse-content', (msg) => {
this.collapse = msg;
localStorage.setItem('collapse', this.collapse);
@@ -80,3 +84,11 @@ export default {
}
};
</script>
<style scoped>
.content_main{
/* padding-right: 0 !important;
overflow-y: auto; */
}
</style>

View File

@@ -85,6 +85,12 @@
<el-menu-item index="manarticle">
{{ $t('sidebar.man_ing2') }}
</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-menu-item index="documentView">
<i class="el-icon-document-copy"></i>

View File

@@ -230,6 +230,8 @@ const en = {
edit_oria: 'Editorial board member',
edit_oria1: 'Final decision',
edit_oria2: 'Accepted manuscript',
edit_ewer: 'Reviewer',
edit_ewer1: 'Peer Review',
you_thed: 'Young scholar',
you_thed1: 'Pending review',
guest: 'Guest editor',
@@ -273,7 +275,7 @@ const en = {
state4: 'Revision',
state5: 'Accept',
state6: 'Pre-accept',
// state7: 'Final Decision',
state7: 'Final Decision',
act1: 'Dealing',
act2: 'Finished'
},

View File

@@ -222,6 +222,8 @@ const zh = {
edit_oria: '编委',
edit_oria1: '稿件',
edit_oria2: '历史稿件',
edit_ewer1: '审稿',
edit_ewer2: '审稿记录',
you_thed: '青年编委',
you_thed1: '待审核',
guest: '客座编辑',
@@ -265,8 +267,9 @@ const zh = {
state3: '拒稿',
state4: '退修',
state5: '接收',
state6: '终审',
// state7: '终审',
state6: '预接收',
state7: '终审',
act1: '审查中',
act2: '已完结'
},

View File

@@ -0,0 +1,883 @@
<template>
<div>
<div class="crumbs">
<el-breadcrumb separator="/">
<el-breadcrumb-item> <i class="el-icon-lx-calendar"></i> Manuscript reviewer list </el-breadcrumb-item>
<el-breadcrumb-item>
<div>
<span>ID:{{ articleBaseInfo.accept_sn }} </span>
</div>
</el-breadcrumb-item>
</el-breadcrumb>
</div>
<div class="container">
<div class="handle-box">
<div>
<el-button type="primary" icon="el-icon-plus" @click="openSuggRev">Editorial Board Bank</el-button>
</div>
<!-- <el-button type="primary" icon="el-icon-circle-plus-outline" @click="editVisible1 = true">Supplement</el-button> -->
</div>
<el-table
:data="tableData"
stripe
size="mini"
class="table"
ref="multipleTable"
header-cell-class-name="table-header"
empty-text="New messages (0)"
>
<el-table-column type="index" label="No." align="center" width="50"></el-table-column>
<el-table-column label="Base Information" width="280px">
<template slot-scope="scope">
<p class="tab_tie_col">
<span>Name: </span>
<el-badge is-dot :hidden="scope.row.reviewer_act == 1 ? false : true" class="item">
<b style="font-size: 15px; letter-spacing: -0.5px">{{ scope.row.reviewer }}</b>
</el-badge>
</p>
<p class="tab_tie_col">
<span>Realname: </span>
{{ scope.row.realname }}
</p>
<p class="tab_tie_col"><span>Country: </span>{{ scope.row.country }}</p>
<p class="tab_tie_col"><span>Email: </span>{{ scope.row.email }}</p>
</template>
</el-table-column>
<el-table-column label="Other Information">
<template slot-scope="scope">
<p class="tab_tie_col">
<span>Field: </span>
{{ scope.row.field }}
</p>
<p class="tab_tie_col" v-if="scope.row.company">
<span>Company: </span>
{{ scope.row.company }}
</p>
</template>
</el-table-column>
<!-- <el-table-column prop="art_rev_id" label="ID" align="center" width="60"></el-table-column> -->
<!-- <el-table-column label="Reviewer" align="center" width="130">
<template slot-scope="scope">
<el-badge is-dot :hidden="scope.row.reviewer_act == 1 ? false : true" class="item">
{{ scope.row.reviewer }}
</el-badge>
</template>
</el-table-column> -->
<!-- <el-table-column prop="country" label="Country" align="center" width="100"></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="major_str" label="Major"></el-table-column> -->
<el-table-column label="Research areas" width="260">
<template slot-scope="scope">
<commonMajorTableList
:user_id="scope.row.reviewer_id"
:baseInfo="scope.row"
:key="scope.row.reviewer_id"
:disabled="true"
></commonMajorTableList>
</template>
</el-table-column>
<!-- <el-table-column prop="field" label="Field"></el-table-column> -->
<el-table-column label="State" align="center" width="130">
<template slot-scope="scope">
<span style="font-size: 16px" v-html="revstate(scope.row)"></span>
<font style="color: #aaa; display: block; line-height: 18px; font-size: 13px" v-html="formatDate(scope.row.ctime)">
</font>
</template>
</el-table-column>
<el-table-column label="" width="100" align="center">
<template slot-scope="scope">
<el-button
v-show="scope.row.state != 4"
ize="mini"
type="primary"
plain
icon="el-icon-tickets"
@click="showdetail(scope.row)"
>Detail</el-button
>
</template>
</el-table-column>
</el-table>
<div class="pagination">
<el-pagination
background
layout="total, prev, pager, next"
:current-page="query.page"
:page-size="query.size"
:total="Total"
@current-change="handlePageChange"
></el-pagination>
</div>
</div>
<el-dialog title="Add Editorial Board Members" :visible.sync="AddSuggest" width="1200px" custom-class="editorialBoardDialog">
<!-- <el-select v-model="editorialBoardForm.type" placeholder="" @change="selectEditorialBoardType" style="margin-bottom: 20px">
<el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"> </el-option>
</el-select> -->
<el-table
:data="tableSuggest"
stripe
class="table"
ref="multipleTable"
header-cell-class-name="table-header"
empty-text="New messages (0)"
>
<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;">Deputy Editor-in-Chief</span>
<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">
<template slot-scope="scope">
<el-button size="mini" type="primary" plain icon="el-icon-check" @click="selSuggest(scope.row)"> Select</el-button>
</template>
</el-table-column>
</el-table>
<div class="pagination">
<el-pagination
background
layout="total, prev, pager, next"
:current-page="editorialBoardForm.page"
:page-size="editorialBoardForm.size"
:total="editorialBoardTotal"
@current-change="handleEditorialBoardPageChange"
></el-pagination>
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="AddSuggest = false">Cancel</el-button>
</span>
</el-dialog>
<el-dialog
title="add reviewer"
:closeOnClickModal="false"
:visible.sync="editVisible"
width="80%"
v-loading="loading"
element-loading-text="Loading..."
element-loading-spinner="el-icon-loading"
element-loading-background="rgba(0, 0, 0, 0.8)"
>
<el-form ref="editform" :model="editform" label-width="100px">
<el-form-item label="state">
<el-select v-model="editform.uid" filterable @change="changereviewer()" placeholder="Please select">
<el-option :key="0" label="please select" :value="0"></el-option>
<el-option v-for="item in reviewerList" :key="item.user_id" :label="item.account" :value="item.user_id"></el-option>
</el-select>
</el-form-item>
<el-form-item label="Country" v-if="editform.uid != 0">
<span>{{ reviewer_data.country }}</span>
</el-form-item>
<el-form-item label="Company" v-if="editform.uid != 0">
<span>{{ reviewer_data.company }}</span>
</el-form-item>
<el-form-item label="Major" v-if="editform.uid != 0">
<span>{{ reviewer_data.major_title }}</span>
</el-form-item>
<el-form-item label="Field" v-if="editform.uid != 0">
<span>{{ reviewer_data.field }}</span>
</el-form-item>
<el-form-item label="Introduction" v-if="editform.uid != 0">
<span>{{ reviewer_data.introduction }}</span>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button type="primary" @click="editVisible = false">canel</el-button>
<el-button type="primary" @click="saveEdit">save</el-button>
</span>
</el-dialog>
<el-dialog
title="Supplement"
:visible.sync="editVisible1"
width="40%"
v-loading="loading"
element-loading-text="Loading..."
element-loading-spinner="el-icon-loading"
element-loading-background="rgba(0, 0, 0, 0.8)"
>
<el-form :model="questionform" ref="question" label-width="300px" label-position="top">
<el-divider content-position="center">REFEREE'S ASSESSMENT</el-divider>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item label="1.Originality of the topic">
<el-radio-group v-model="questionform.qu1">
<el-radio :label="1">Excellent</el-radio>
<el-radio :label="2">Good</el-radio>
<el-radio :label="3">Fair</el-radio>
<el-radio :label="4">Poor</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="2.Importance in its Field">
<el-radio-group v-model="questionform.qu3">
<el-radio :label="1">Excellent</el-radio>
<el-radio :label="2">Good</el-radio>
<el-radio :label="3">Fair</el-radio>
<el-radio :label="4">Poor</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="3.Does the manuscript fall within the aim and scope of the journal?">
<el-radio-group v-model="questionform.qu6">
<el-radio :label="1">Excellent</el-radio>
<el-radio :label="2">Good</el-radio>
<el-radio :label="3">Fair</el-radio>
<el-radio :label="4">Poor</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="4.English language">
<el-radio-group v-model="questionform.qu8">
<el-radio :label="1">Excellent</el-radio>
<el-radio :label="2">Good</el-radio>
<el-radio :label="3">Fair</el-radio>
<el-radio :label="4">Poor</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="5.Readily Understandable">
<el-radio-group v-model="questionform.qu5">
<el-radio :label="1">Excellent</el-radio>
<el-radio :label="2">Good</el-radio>
<el-radio :label="3">Fair</el-radio>
<el-radio :label="4">Poor</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12">
<el-collapse>
<el-form-item label="6.Does the title represent manuscript's contents?">
<el-col :span="8">
<el-radio-group v-model="questionform.qu9">
<el-radio :label="true">Yes</el-radio>
<el-radio :label="false">No</el-radio>
</el-radio-group>
</el-col>
<el-col :span="12">
<el-collapse-item name="1" style="margin-top: -10px">
<template slot="title"> <i class="el-icon-edit"></i>Comments/ Suggestions </template>
<el-input
type="textarea"
placeholder="please input content"
v-model="questionform.qu9contents"
:rows="4"
></el-input>
</el-collapse-item>
</el-col>
</el-form-item>
</el-collapse>
</el-col>
</el-row>
<el-collapse>
<el-form-item label="7.Is the Abstract accurate and concise?">
<el-col :span="4">
<el-radio-group v-model="questionform.qu10">
<el-radio :label="true">Yes</el-radio>
<el-radio :label="false">No</el-radio>
</el-radio-group>
</el-col>
<el-col :span="20">
<el-collapse-item name="2" style="margin-top: -10px">
<template slot="title"> <i class="el-icon-edit"></i>Comments/ Suggestions </template>
<el-input
type="textarea"
placeholder="please input content"
v-model="questionform.qu10contents"
:rows="4"
></el-input>
</el-collapse-item>
</el-col>
</el-form-item>
<el-form-item label="8.Are the approach/ methods properly described?">
<el-col :span="4">
<el-radio-group v-model="questionform.qu11">
<el-radio :label="true">Yes</el-radio>
<el-radio :label="false">No</el-radio>
</el-radio-group>
</el-col>
<el-col :span="20">
<el-collapse-item name="3" style="margin-top: -10px">
<template slot="title"> <i class="el-icon-edit"></i>Comments/ Suggestions </template>
<el-input
type="textarea"
placeholder="please input content"
v-model="questionform.qu11contents"
:rows="4"
></el-input>
</el-collapse-item>
</el-col>
</el-form-item>
<el-form-item label="9.Are the conclusions and interpretations sound?">
<el-col :span="4">
<el-radio-group v-model="questionform.qu12">
<el-radio :label="true">Yes</el-radio>
<el-radio :label="false">No</el-radio>
</el-radio-group>
</el-col>
<el-col :span="20">
<el-collapse-item name="4" style="margin-top: -10px">
<template slot="title"> <i class="el-icon-edit"></i>Comments/ Suggestions </template>
<el-input
type="textarea"
placeholder="please input content"
v-model="questionform.qu12contents"
:rows="4"
></el-input>
</el-collapse-item>
</el-col>
</el-form-item>
<el-form-item label="10.Are the references properly cited?">
<el-col :span="4">
<el-radio-group v-model="questionform.qu13">
<el-radio :label="true">Yes</el-radio>
<el-radio :label="false">No</el-radio>
</el-radio-group>
</el-col>
<el-col :span="20">
<el-collapse-item name="5" style="margin-top: -10px">
<template slot="title"> <i class="el-icon-edit"></i>Comments/ Suggestions </template>
<el-input
type="textarea"
placeholder="please input content"
v-model="questionform.qu13contents"
:rows="4"
></el-input>
</el-collapse-item>
</el-col>
</el-form-item>
<el-divider content-position="center">REFEREE'S RECOMMENDATIONS</el-divider>
<el-form-item label="Overall the Paper is Rated">
(Poor------------------------Excellent)
<br />
<el-radio-group v-model="questionform.rated" size="small">
<el-radio-button label="1"></el-radio-button>
<el-radio-button label="2"></el-radio-button>
<el-radio-button label="3"></el-radio-button>
<el-radio-button label="4"></el-radio-button>
<el-radio-button label="5"></el-radio-button>
<el-radio-button label="6"></el-radio-button>
<el-radio-button label="7"></el-radio-button>
<el-radio-button label="8"></el-radio-button>
<el-radio-button label="9"></el-radio-button>
<el-radio-button label="10"></el-radio-button>
</el-radio-group>
<span style="margin-left: 20px">>Your score:{{ questionform.rated }}</span>
</el-form-item>
<el-form-item label="REFEREE'S RECOMMENDATIONS" prop="recommend">
<el-radio-group v-model="questionform.recommend" style="line-height: 30px">
<el-radio :label="1">Accept with minor revision</el-radio>
<br />
<el-radio :label="2">Accept with major revision</el-radio>
<br />
<el-radio :label="3">Reject in current form, but may be resubmitted</el-radio>
<br />
<el-radio :label="4">Reject, with no resubmission</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="OTHER SPECIFIC CRITICISMS">
<el-radio-group v-model="questionform.other" style="line-height: 30px">
<el-radio :label="1">Imperfect style</el-radio>
<br />
<el-radio :label="2">Too long</el-radio>
<br />
<el-radio :label="3">References incorrectly presented</el-radio>
<br />
<el-radio :label="4">Typographical and Grammatical errors</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="Comments for the Authors">
<el-input type="textarea" placeholder="please input content" v-model="questionform.comment" :rows="8"></el-input>
</el-form-item>
<el-form-item label="Confidential Comments to the Editor">
<el-input type="textarea" placeholder="please input content" v-model="questionform.confident" :rows="8"></el-input>
</el-form-item>
<el-form-item label="Please choose disclose your name or remain anonymous.">
<el-radio-group v-model="questionform.is_anonymous" style="line-height: 30px">
<el-radio :label="0">Disclose name</el-radio>
<br />
<el-radio :label="1">Remain anonymous</el-radio>
</el-radio-group>
<p style="line-height: 20px; color: #aaa; font-size: 13px; margin: 12px 0 0 0">
If you agree to disclose your name, we will acknowledge you by name in the published PDF. However, if you prefer
to remain anonymous, we will still express our gratitude by thanking you as an anonymous reviewer.
<br />For example, {{ txt_mess.title }} would like to thank AAAAAAAA, BBBBBBBB, and other anonymous reviewers
for their invaluable contributions to the peer review process of this paper.
</p>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="addArtRev">submit</el-button>
</el-form-item>
</el-collapse>
</el-form>
</el-dialog>
</div>
</template>
<script>
import commonMajorTableList from '../page/components/major/tableList.vue';
export default {
components: {
commonMajorTableList
},
data() {
return {
options: [
{
value: 0,
label: 'Editor-in-Chief'
},
{
value: 1,
label: 'Deputy Editor-in-Chief'
},
{
value: 2,
label: 'Member of the Editorial Board'
},
],
editorialBoardForm: {
page: 1,
size:10,
type:0
},
majorData: [],
baseUrl: this.Common.baseUrl,
articleBaseInfo: {},
questionform: {
uid: 0,
articleId: this.$route.query.id,
qu1: '',
qu2: '',
qu3: '',
qu4: '',
qu5: '',
qu6: '',
qu7: '',
qu8: '',
qu9: '',
qu9contents: '',
qu10: '',
qu10contents: '',
qu11: '',
qu11contents: '',
qu12: '',
qu12contents: '',
qu13: '',
qu13contents: '',
qu14: '',
qu14contents: '',
qu15: '',
qu15contents: '',
rated: '',
recommend: '',
other: '',
confident: '',
comment: ''
},
txt_mess: {},
query: {
articleId: this.$route.query.id,
article_id: this.$route.query.id,
// page: 1,
// size: 10
},
editform: {
uid: 0,
articleId: this.$route.query.id
},
reviewer_data: {
introduction: '',
country: '',
company: '',
major_title: '',
field: ''
},
reviewer_data1: {
introduction: '',
country: '',
company: '',
major_title: '',
field: ''
},
editVisible: false,
editVisible1: false,
AddSuggest: false,
tableData: [],
reviewerList: [],
tableSuggest: [],
loading: false,
Total: 0,
editorialBoardTotal: 0,
};
},
created() {
this.initArticle();
this.getdate();
this.initreviewerList();
},
computed: {
upload_url: function () {
return this.baseUrl + 'api/Reviewer/up_file';
}
},
methods: {
selectEditorialBoardType(type) {
console.log('type at line 525:', type)
this.editorialBoardForm.page = 1;
this.$forceUpdate();
this.getEditorialBoardType();
},
initArticle() {
this.$api
.post('api/Article/getArticleDetail', {
articleId: this.query.article_id,
human: 'editor'
})
.then((res) => {
this.articleBaseInfo = res.article;
});
},
// 获取编辑列表数据
getdate() {
this.$api
.post('api/Finalreview/getReviewRecord', {
article_id:this.$route.query.id
})
.then((res) => {
console.log('res at line 562:', res)
// this.Total = res.totle;
this.tableData = res.data.article_final;
})
.catch((err) => {
console.log(err);
});
},
// 分页导航
handlePageChange(val) {
this.$set(this.query, 'page', val);
this.getdate();
},
handleEditorialBoardPageChange(val) {
this.$set(this.editorialBoardForm, 'page', val);
this.getEditorialBoardType();
},
addReviewer() {
alert('sssss');
},
// 添加跳页面
openAddRev() {
// this.$router.push({
// path: 'articleReviewerAdd',
// query: {
// id: this.$route.query.id
// }
// });
},
//初始化审查员列表
initreviewerList() {
this.$api
.post('api/Article/getArticleReviewerList', {
articleId: this.query.articleId
})
.then((res) => {
this.reviewerList = res.data;
})
.catch((err) => {
console.log(err);
});
},
//保存添加操作
saveEdit() {
if (this.editform.uid == 0) {
this.$message.error('please select a reviewer');
} else {
this.loading = true;
this.$api
.post('api/Article/addArticleReviewer', this.editform)
.then((res) => {
this.loading = false;
if (res.code == 0) {
this.$message.success('add success');
this.$router.go(0);
} else {
this.$message.error('add error');
}
})
.catch((err) => {
console.log(err);
});
}
},
addArtRev() {
if (this.questionform.uid == 0) {
this.$message.error('Please select a reviewer');
} else if (this.questionform.is_anonymous == '' && this.questionform.is_anonymous != '0') {
this.$message.error('Please choose disclose your name or remain anonymous.');
} else {
this.loading = true;
this.$api
.post('api/Article/addArtRev', this.questionform)
.then((res) => {
this.loading = false;
if (res.code == 0) {
this.$message.success('add success');
this.$router.go(0);
} else {
this.$message.error('add error');
}
})
.catch((err) => {
console.log(err);
});
}
},
getEditorialBoardType() {
this.$api
.post('api/Finalreview/boardLists', {
...this.editorialBoardForm,
article_id: this.query.article_id
})
.then((res) => {
this.tableSuggest = res.data.lists;
this.editorialBoardTotal = res.data.total;
})
.catch((err) => {
console.log(err);
});
},
// 添加推荐审稿人
async openSuggRev() {
await this.getEditorialBoardType();
this.AddSuggest = true;
},
selSuggest(e) {
this.loading = true;
this.$api
.post('api/Finalreview/invite', {
reviewer_id: e.user_id,
article_id: this.$route.query.id
})
.then((res) => {
this.loading = false;
if (res.status == 0) {
this.$message.success('Add Success');
this.AddSuggest = false;
this.getdate();
} else {
this.$message.error('Add Error');
}
})
.catch((err) => {
this.loading = false;
console.log(err);
});
},
showdetail(row) {
if (row.state == 4) {
this.$message.error('Review expired!');
} else {
this.$router.push({
path: 'articleReviewerDetail',
query: {
id: row.art_rev_id
}
});
}
},
changereviewer() {
if (this.editform.uid !== 0) {
this.$api
.post('api/Article/getReviewerdetail', {
uid: this.editform.uid
})
.then((res) => {
this.reviewer_data.introduction = res.data.introduction;
this.reviewer_data.country = res.data.country;
this.reviewer_data.company = res.data.company;
this.reviewer_data.major_title = res.data.major_title;
this.reviewer_data.field = res.data.field;
})
.catch((err) => {
console.log(err);
});
}
},
changereviewer1() {
if (this.questionform.uid !== 0) {
this.$api
.post('api/Article/getReviewerdetail', {
uid: this.questionform.uid
})
.then((res) => {
this.reviewer_data1.introduction = res.data.introduction;
this.reviewer_data1.country = res.data.country;
this.reviewer_data1.company = res.data.company;
this.reviewer_data1.major_title = res.data.major_title;
this.reviewer_data1.field = res.data.field;
})
.catch((err) => {
console.log(err);
});
}
},
revstate(row, column, cellValue, index) {
let frag = '';
if (row.state == 0) {
frag = 'With reviewer';
} else if (row.state == 1) {
// 大修
frag = 'Major revision';
// frag = 'Revision';
} else if (row.state == 2) {
frag = 'Reject';
} else if (row.state == 3) {
//小修
// frag = 'Accept';
frag = 'Minor revision';
} else if (row.state == 4) {
frag = '<text style="color:#aaa">invalid</text>';
} else if (row.state == 5) {
frag = 'invitation';
}
return frag;
},
// 时间
formatDate(timestamp) {
var date = new Date(timestamp * 1000); //时间戳为10位需*1000时间戳为13位的话不需乘1000
var Y = date.getFullYear() + '-';
var M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';
var D = date.getDate() < 10 ? '0' + date.getDate() : date.getDate();
var h = date.getHours() < 10 ? '0' + date.getHours() : date.getHours();
var m = date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes();
var s = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds();
return Y + M + D + '<br/>' + h + ':' + m + ':' + s;
}
}
};
</script>
<style scoped>
.container {
padding: 10px;
}
.reviewerListBox {
color: rgba(0, 119, 184, 1);
font-size: 14px;
font-weight: bold;
cursor: pointer;
}
.reviewerListBox .labelTitle {
color: rgba(0, 119, 184, 1);
}
.handle-box {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 20px;
}
.handle-select {
width: 120px;
}
.handle-input {
width: 300px;
display: inline-block;
}
.table {
width: 100%;
font-size: 14px;
}
.red {
color: #ff0000;
}
.mr10 {
margin-right: 10px;
}
.table-td-thumb {
display: block;
margin: auto;
width: 40px;
height: 40px;
}
.el-table .warning-row {
background: #f3ca7f;
}
.el-table .success-row {
background: #bcfc9a;
}
.el-table .normol-row {
background: #d8f1c7;
}
.el-table .red-row {
background: #f05555;
}
.tab_tie_col {
/* margin-bottom: 5px; */
color: #333;
word-wrap: break-word;
word-break: normal;
}
.tab_tie_col > span {
color: #888;
margin: 0 5px 0 0;
font-size: 13px;
}
::v-deep .editorialBoardDialog .el-dialog__body{
padding-top: 10px !important;
padding-bottom: 0px !important;
}
::v-deep .editorialBoardDialog .el-dialog__body .el-table--mini .el-table__cell{
padding: 0px !important
}
</style>

View File

@@ -16,7 +16,7 @@
"
:type="query.state == item.state ? 'primary' : ''"
>
{{ item.isNew ? $t('artstate.state7') : $t('artstate.state' + item.state) }}
{{ $t('artstate.state' + item.state) }}
</el-button>
</el-badge>
<!-- <el-select v-model="query.state" @change="getdate" placeholder="Please select status" style="width: 180px;">
@@ -54,7 +54,13 @@
</div>
<div v-if="!PreAcpVisible">
<div v-for="(item, ikgn) in tableData">
<div v-for="(item, ikgn) in tableData"
:class="{
'articleBaseInfo7': item.state==7,
}"
>
<p
style="background-color: #0077b8e6; border-top-left-radius: 8px; border-top-right-radius: 8px"
class="articleBaseInfo articleTopBaseInfo"
@@ -222,7 +228,8 @@
</div> -->
<div style="display: flex; margin-left: auto; flex-wrap: nowrap">
<div
class="fixCard"
v-if="item.state != 7"
class="fixCard manuscript_files"
:style="`width:${item.state == 0 ? '350px !important;flex-shrink: 0' : '320px !important;flex-shrink: 0'}`"
>
<b style="font-size: 16px; letter-spacing: -0.5px">Manuscript Files</b>
@@ -383,6 +390,7 @@
</div>
<div
v-if="item.state != 7"
class="fixCard"
:style="`width: ${
item.state == 0 ? 'calc(100% - 350px - 230px - 18px)' : 'calc(100% - 350px - 230px - 18px)'
@@ -486,8 +494,10 @@
<span v-if="finalCount(item) > 0 && finalCount(item) != 'NaN'">{{ finalCount(item) }}</span>
</p>
</div>
<template v-if="query.state != 0">
<div class="fixCard" style="width: 230px; flex-shrink: 0">
<template v-if="query.state != 0&&item.state != 7">
<div class="fixCard reviewer_decision" style="width: 230px; flex-shrink: 0" >
<b style="font-size: 16px; letter-spacing: -0.5px">Reviewer Decision</b>
<p style="height: 5px"></p>
<p v-for="(iken, index) in item.reviewScore" style="line-height: 24px" :key="index">
@@ -535,26 +545,36 @@
</span>
</p>
<p style="margin-top: 10px">
<b @click="articleReviewer(item)" class="btnCliArt"> <i class="el-icon-edit"></i> Inviting Reviewer </b>
<b @click="articleReviewer(item)" class="btnCliArt">
<i :class="item.state == 7 ? '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>
</div>
</template>
<!-- <template v-if="query.state ==4">
<div class="fixCard" style="width: 230px; flex-shrink: 0">
<b style="font-size: 16px; letter-spacing: -0.5px;color:rgba(0, 119, 184)">Editorial Board Decision</b>
<p style="height: 20px"></p>
<p v-for="(iken, index) in item.reviewScore" style="line-height: 24px" :key="index">
Editorial Board{{ index + 1 }} : <b style="color: #db890e; font-size: 18px">
<template v-if="query.state == 7">
<div class="fixCard" style="width: 100%;margin-top:10px; flex-shrink: 0">
<b style="font-size: 16px; letter-spacing: -0.5px; color: rgba(0, 119, 184)">Editorial Board Decision</b>
<p style="height: 20px"></p>
<p v-for="(iken, index) in item.final" style="line-height: 24px" :key="index">
Editorial Board {{ index + 1 }} : <b>{{ iken.realname }}</b>
<b style="color: #db890e; font-size: 18px;margin-left: 10px;" >
<font
v-if="index == 0"
style="width: 12px; height: 12px; display: inline-block; border-radius: 10px; background-color: #ccc"
style="
width: 12px;
height: 12px;
display: inline-block;
border-radius: 10px;
background-color: #ccc;
"
>
</font>
<font
v-if="index== 1"
v-if="index == 1"
style="
width: 12px;
height: 12px;
@@ -565,7 +585,7 @@
>
</font>
<font
v-if="index== 2"
v-if="index == 2"
style="
width: 12px;
height: 12px;
@@ -575,26 +595,17 @@
"
>
</font>
</b
>
<el-button
style="margin-left: 10px"
type="text"
icon="el-icon-tickets"
v-if="iken.can_repeat == 1"
</b>
<el-button style="margin-left: 10px" type="text" icon="el-icon-tickets"
>Detail</el-button
>
</p>
<p style="margin-top: 20px">
<b @click="articleReviewer(item)" class="btnCliArt"> <i class="el-icon-edit"></i> Editorial Board </b>
<b @click="articleEditorialBoard(item)" class="btnCliArt"> <i class="el-icon-edit"></i> Editorial Board </b>
</p>
</div>
</template> -->
</template>
<!-- <div class="fixCard" style="width: 320px; flex-shrink: 0" v-if="query.state == 0">
<b style="font-size: 16px; letter-spacing: -0.5px">Research areas</b>
@@ -627,7 +638,7 @@
</div>
</div> -->
<div class="fixCard" style="width: 320px; flex-shrink: 0">
<div class="fixCard" style="width: 320px; flex-shrink: 0" v-if="item.state != 7">
<b style="font-size: 16px; letter-spacing: -0.5px">Corresponding Author</b>
<p style="height: 10px"></p>
<div style="text-align: left">
@@ -985,6 +996,7 @@
<el-option :key="2" label="Under review" :value="2"></el-option>
<el-option :key="3" label="Reject" :value="3"></el-option>
<el-option :key="4" label="Revision" :value="4"></el-option>
<el-option :key="7" label="Final Decision" :value="7"></el-option>
<el-option :key="6" label="Pre-accept" :value="6"></el-option>
<el-option :key="5" label="Accept" :value="5" :disabled="curState == 6 ? false : true"></el-option>
</el-select>
@@ -1622,10 +1634,10 @@ export default {
{
state: 4
},
// {
// state: 4,
// isNew: true
// },
//终审
{
state: 7
},
{
state: 6
@@ -2203,6 +2215,79 @@ export default {
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
});
if(this.query.state==7){
this.$api
.post('api/Finalreview/articleLists', this.query)
.then((res) => {
console.log('res at line 2219:', res)
this.Total = res.data.total;
this.tableData = res.data.lists;
for (let i = 0; i < this.tableData.length; i++) {
this.tableData[i].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.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].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);
}
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) => {
@@ -2299,6 +2384,8 @@ export default {
console.log(err);
loading.close();
});
}
},
// 触发搜索按钮
handleSearch() {
@@ -2319,6 +2406,14 @@ export default {
}
});
},
articleEditorialBoard(row) {
this.$router.push({
path: 'articleEditorialBoard',
query: {
id: row.article_id
}
});
},
// 修改文章状态弹出框
testvis(e) {
// console.log(e,'e')
@@ -2944,6 +3039,9 @@ export default {
case 6:
str = this.$t('artstate.state6');
break;
case 7:
str = this.$t('artstate.state7');
break;
default:
str = 'error!!';
}
@@ -3563,4 +3661,10 @@ export default {
.openAIContentBox {
width: 80vw;
}
/* .articleBaseInfo7 .reviewer_decision{
background-color: #f5f5f5b3;
}
.articleBaseInfo7 .manuscript_files{
background-color: #f5f5f5b3;
} */
</style>

View File

@@ -11,7 +11,8 @@
</el-breadcrumb>
</div>
<div class="container">
<div class="handle-box">
<div class="handle-box" v-if="articleBaseInfo.state != 7">
<div>
<el-button type="primary" icon="el-icon-plus" @click="openAddRev">Reviewer Bank</el-button>
@@ -91,7 +92,7 @@
</template>
</el-table-column>
<!-- <el-table-column prop="field" label="Field"></el-table-column> -->
<el-table-column label="State" align="center" width="120">
<el-table-column label="State" align="center" width="130">
<template slot-scope="scope">
<span style="font-size: 16px;"v-html="revstate(scope.row)"></span>

View File

@@ -0,0 +1,452 @@
<template>
<div>
<el-form :model="questionform" :rules="isEdit ? rules : {}" ref="question" label-width="300px" label-position="top">
<el-divider content-position="center">REFEREE'S ASSESSMENT</el-divider>
<p
v-if="questionform.score && Number(questionform.score) > 0 && pagetype == 'Editor'"
style="margin: 30px 0; font-size: 20px; padding-left: 0px; box-sizing: border-box"
>
<span
style="
border: 1px solid #409eff85;
border-radius: 4px;
background-color: #fff;
padding: 8px 30px 8px 10px;
border-radius: 12px;
box-shadow: 0 4px 10px rgba(0, 0, 0, 0.1);
display: flex;
align-items: center;
justify-content: center;
font-weight: bold;
font-size: 18px;
color: #333;
"
>
Automated Scoring for Reviewer's Opinions :
<span style="font-weight: bold; font-weight: bold; font-size: 26px; color: #2c3e50; margin-left: 10px">{{
Number(questionform.score)
}}</span>
</span>
</p>
<el-form-item label="" prop="recommend">
<!-- Accept(录用)Revision(退修)Reject(退稿) -->
<!-- 1接收2拒绝3退修4拒绝邀请 -->
<!--
<div class="btn btn-accept ">Accept</div>
<div class="btn btn-revision ">Revision</div>
<div class="btn btn-reject">Reject</div> -->
<!--
<div class="btn btn1">Accept</div>
<div class="btn btn2">Revision</div>
<div class="btn btn3">Reject</div> -->
<el-radio-group v-model="questionform.recommend" style="line-height: 30px">
<el-radio :label="2" :disabled="!isEdit && questionform.recommend != 2">Accept</el-radio>
<br />
<el-radio :label="3" :disabled="!isEdit && questionform.recommend != 3">Revision</el-radio>
<br />
<el-radio :label="4" :disabled="!isEdit && questionform.recommend != 4">Reject</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="Confidential Comments to the Editor" >
<el-input
:readonly="!isEdit"
type="textarea"
placeholder="please input content"
v-model="questionform.suggest_for_editor"
:autosize="{ minRows: 2, maxRows: 10 }"
></el-input>
</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-radio-group v-model="questionform.is_anonymous" style="line-height: 30px">
<el-radio :label="0" :disabled="!isEdit && questionform.is_anonymous != 0">Disclose name</el-radio>
<br />
<el-radio :label="1" :disabled="!isEdit && questionform.is_anonymous != 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 label="Please choose disclose your name or remain anonymous" v-if="!isEdit && pagetype == 'Editor'">
<el-radio-group v-model="questionform.is_anonymous" style="line-height: 30px">
<el-radio :label="0" :disabled="!isEdit && questionform.is_anonymous != 0">Disclose name</el-radio>
<br />
<el-radio :label="1" :disabled="!isEdit && questionform.is_anonymous != 1">Remain anonymous</el-radio>
</el-radio-group>
</el-form-item> -->
<!-- 暂时注销 -->
<!-- v-if="this.btn_submit == 0" -->
<el-form-item >
<el-button type="primary" @click="questionSubmit" style="float: right;">submit</el-button>
</el-form-item>
</el-form>
</div>
</template>
<script>
import newForm from './new.vue';
export default {
components: {
newForm
},
props: {
// isEdit: {
// type: Boolean,
// default: true
// },
// isNewForm: {
// type: Boolean,
// default: false
// },
type: {
type: String,
default: 'questionform'
},
pagetype: {
type: String,
default: ''
},
confident: {
type: Boolean,
default: true
},
articleId: {
type: Number,
default: 0
},
journal_id: {
type: Number,
default: 0
},
txt_mess: {
type: Object,
default: {}
},
form: {
type: Object,
default: {}
},
btn_submit: {
type: Number,
default: 0
}
},
watch: {
form: {
handler(e) {
this.baseQuestionform = JSON.parse(JSON.stringify(e)); // 深拷贝,防止直接改 props
},
immediate: true,
deep: true
},
btn_submit: {
handler(e) {
this.isEdit = e == 0 ? true : false; // 深拷贝,防止直接改 props
},
immediate: true,
deep: true
}
},
data() {
return {
isNewForm: false,
loading: false,
isEdit: true,
baseQuestionform: {},
questionform: {},
rules: {}
};
},
created() {
this.getData();
},
methods: {
getData() {
// Fetch article data
this.questionform = { ...this.baseQuestionform };
if (this.baseQuestionform.type != 1) {
this.isNewForm = true;
this.rules = {
rated: [{ required: true, message: 'please select', trigger: 'blur' }],
comment: [{ required: true, message: 'please input content', trigger: 'blur' }],
other: [{ required: true, message: 'please input content', trigger: 'blur' }],
recommend: [{ required: true, message: 'please select', trigger: 'blur' }]
};
if (this.txt_mess.atype == 'REVIEW' || this.txt_mess.atype == 'MINI REVIEW') {
for (let i = 1; i <= 12; i++) {
this.rules[`qu${i}`] = [{ required: true, message: 'please select', trigger: 'blur' }];
}
} else {
for (let i = 1; i <= 14; i++) {
this.rules[`qu${i}`] = [{ required: true, message: 'please select', trigger: 'blur' }];
}
}
} else {
this.isNewForm = false;
this.rules = {
qu6: [{ required: true, message: 'please select', trigger: 'blur' }],
rated: [{ required: true, message: 'please select', trigger: 'blur' }],
comment: [{ required: true, message: 'please input content', trigger: 'blur' }],
recommend: [{ required: true, message: 'please select', trigger: 'blur' }]
};
}
},
questionSubmit() {
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 = null;
// // 验证相加的字数
// if (this.isNewForm) {
// Char_Cter = [
// this.questionform.qu5contents,
// this.questionform.qu6contents,
// this.questionform.qu7contents,
// this.questionform.qu8contents,
// this.questionform.qu9contents,
// this.questionform.qu10contents,
// this.questionform.qu11contents,
// this.questionform.qu12contents,
// this.questionform.qu13contents,
// this.questionform.qu14contents,
// this.questionform.comment
// ].join(' ');
// } else {
// Char_Cter = [
// this.questionform.qu9contents,
// this.questionform.qu10contents,
// this.questionform.qu11contents,
// this.questionform.qu12contents,
// this.questionform.qu13contents,
// this.questionform.comment
// ].join(' ');
// }
if (new RegExp('[\\u4E00-\\u9FFF]+', 'g').test(Char_Cter)) {
//中文
let blankCount = 0;
for (let i in Char_Cter.match(/ /g)) {
blankCount++;
}
let wenziCount = 0;
for (let j = 0; j < Char_Cter.length; j++) {
if (Char_Cter.charCodeAt(j) < 0 || Char_Cter.charCodeAt(j) > 255) {
wenziCount++;
}
}
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) {
const loading = this.$loading({
lock: true,
text: 'Loading...',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
});
this.$api
.post('api/Finalreview/review', {
...this.questionform,
})
.then((res) => {
if (res.code == 0) {
loading.close();
this.$message.success('Success!!');
this.$emit('refresh');
this.$router.push('/edit_per_text_success');
} else {
loading.close();
// this.$message.error('Question submit error!');
this.$message.error(res.msg);
}
})
.catch((err) => {
loading.close();
});
} else {
}
});
}
}
};
</script>
<style scoped>
.jouLink {
color: #006699;
font-weight: bold;
}
::v-deep .el-collapse {
border-top: 0;
border-bottom: 0;
}
::v-deep .el-divider {
background-color: #006699;
}
::v-deep .el-form-item--mini.el-form-item,
.el-form-item--small.el-form-item {
margin-bottom: 10px;
}
/* 按钮基础样式 */
.btn {
display: inline-block;
padding: 0px 20px;
box-sizing: border-box;
margin: 0 8px;
font-size: 14px;
font-weight: 600;
text-align: center;
text-decoration: none;
border: none;
border-radius: 6px;
cursor: pointer;
transition: all 0.3s ease;
width: 110px;
height: 32px;
line-height: 32px;
border:1px solid #888;
color: #888;
}
/* 接受按钮 - 绿色系 */
.btn-accept {
background-color: #28a745;
color: #ffffff;
box-shadow: 0 4px 6px rgba(40, 167, 69, 0.2);
}
.btn1{
color: #28a745;
}
.btn2{
color: #ffc107;
}
.btn3{
color: #dc3545;
}
.btn-accept:hover {
background-color: #218838;
box-shadow: 0 6px 8px rgba(40, 167, 69, 0.3);
transform: translateY(-2px);
}
.btn-accept:active {
background-color: #1e7e34;
box-shadow: 0 2px 4px rgba(40, 167, 69, 0.2);
transform: translateY(0);
}
/* 修改按钮 - 黄色系 */
.btn-revision {
background-color: #ffc107;
color: #212529;
box-shadow: 0 4px 6px rgba(255, 193, 7, 0.2);
}
.btn-revision:hover {
background-color: #e0a800;
box-shadow: 0 6px 8px rgba(255, 193, 7, 0.3);
transform: translateY(-2px);
}
.btn-revision:active {
background-color: #d39e00;
box-shadow: 0 2px 4px rgba(255, 193, 7, 0.2);
transform: translateY(0);
}
/* 驳回按钮 - 红色系 */
.btn-reject {
background-color: #dc3545;
color: #ffffff;
box-shadow: 0 4px 6px rgba(220, 53, 69, 0.2);
}
.btn-reject:hover {
background-color: #c82333;
box-shadow: 0 6px 8px rgba(220, 53, 69, 0.3);
transform: translateY(-2px);
}
.btn-reject:active {
background-color: #bd2130;
box-shadow: 0 2px 4px rgba(220, 53, 69, 0.2);
transform: translateY(0);
}
/* 按钮禁用状态 */
.btn:disabled {
opacity: 0.7;
cursor: not-allowed;
transform: none;
box-shadow: none;
}
</style>

View File

@@ -0,0 +1,316 @@
<template>
<div>
<el-row :gutter="24">
<template v-for="(v, i) in selectDataList">
<el-col :span="v.spanValue">
<el-form-item :prop="v.value">
<span slot="label">
{{ v.title }}
</span>
<el-radio-group v-model="questionform[v.value]">
<el-radio :label="1" :disabled="!isEdit && questionform[v.value] != 1">Excellent</el-radio>
<el-radio :label="2" :disabled="!isEdit && questionform[v.value] != 2">Good</el-radio>
<el-radio :label="3" :disabled="!isEdit && questionform[v.value] != 3">Fair</el-radio>
<el-radio :label="4" :disabled="!isEdit && questionform[v.value] != 4">Poor</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</template>
</el-row>
<el-collapse v-if="judgeDataList.length > 0" v-model="activeNames">
<el-form-item :label="v.title" v-for="(v, i) in judgeDataList" :prop="v.value">
<el-col :span="6">
<el-radio-group v-model="questionform[v.value]">
<el-radio :label="true" :disabled="!isEdit && questionform[v.value] != true">Yes</el-radio>
<el-radio :label="false" :disabled="!isEdit && questionform[v.value] != false">No</el-radio>
</el-radio-group>
</el-col>
<el-col :span="18" v-if="isEdit">
<el-collapse-item :name="i + 1" class="comments-section">
<template slot="title"> <i class="el-icon-edit" style="margin-right: 10px;"></i>Comments/ Suggestions </template>
<el-input style="margin-bottom: 10px;"
type="textarea"
placeholder="please input content"
v-model="questionform[v.valueContents]"
:autosize="{ minRows: 2, maxRows: 5 }"
></el-input>
</el-collapse-item>
</el-col>
<el-col :span="18" v-else>
<el-collapse-item class="comments-section"
:name="i + 1"
v-if="questionform[v.valueContents] && questionform[v.valueContents] != ''"
>
<template slot="title">Comments/ Suggestions </template>
<el-input style="margin-bottom: 10px;"
readonly
type="textarea"
placeholder="please input content"
v-model="questionform[v.valueContents]"
:autosize="{ minRows: 2, maxRows: 5 }"
></el-input>
</el-collapse-item>
</el-col>
</el-form-item>
</el-collapse>
</div>
</template>
<script>
export default {
props: {
isEdit: {
type: Boolean,
default: true
},
txt_mess: {
type: Object,
default: {}
},
form: {
type: Object,
default: {}
}
},
watch: {
isEdit(e) {
this.updateJudgeDataList();
},
txt_mess: {
handler() {
this.updateJudgeDataList();
},
immediate: true, // 初始加载时触发
deep: true
},
form: {
handler(e) {
this.$nextTick(() => {
this.questionform = JSON.parse(JSON.stringify(e)); // 深拷贝,防止直接改 props
if (this.questionform.qu5 !== '') {
console.log('this.questionform.qu5 at line 114:', this.questionform.qu5);
if (this.questionform.qu5 == 0) {
this.questionform.qu5 = false;
} else {
this.questionform.qu5 = true;
}
}
if (this.questionform.qu6 !== '') {
if (this.questionform.qu6 == 0) {
this.questionform.qu6 = false;
} else {
this.questionform.qu6 = true;
}
}
if (this.questionform.qu7 !== '') {
if (this.questionform.qu7 == 0) {
this.questionform.qu7 = false;
} else {
this.questionform.qu7 = true;
}
}
if (this.questionform.qu8 !== '') {
if (this.questionform.qu8 == 0) {
this.questionform.qu8 = false;
} else {
this.questionform.qu8 = true;
}
}
this.questionform.qu5contents = this.questionform.qu5_contents;
this.questionform.qu6contents = this.questionform.qu6_contents;
this.questionform.qu7contents = this.questionform.qu7_contents;
this.questionform.qu8contents = this.questionform.qu8_contents;
console.log('this.questionform at line 112:', this.questionform);
});
},
immediate: true,
deep: true
},
questionform: {
handler(newVal) {
console.log('newVal at line 93:', newVal);
// 变化时通知父组件
this.$emit('update', newVal); // 或自定义事件this.$emit('formChanged', newVal)
},
deep: true // 深度监听对象内部字段变化
}
},
data() {
return {
activeNames: [],
questionform: {},
selectDataList: [
{
title: '1. Originality of the topic',
value: 'qu1',
spanValue: 24
},
{
title: '2. Importance in its field',
value: 'qu2',
spanValue: 24
},
{
title: '3. Does the manuscript fall within the aim and scope of the journal?',
value: 'qu3',
spanValue: 24
},
{
title: '4. English language',
value: 'qu4',
spanValue: 24
}
],
judgeDataList: [],
judgeDataList1: [
{ title: "5. Does the title represent manuscript's contents?", value: 'qu5', valueContents: 'qu5contents' },
{ title: '6. Is the Abstract accurate and concise?', value: 'qu6', valueContents: 'qu6contents' },
{
title: '7. Does it highlight the latest advancements and address existing challenges in the current research?',
value: 'qu7',
valueContents: 'qu7contents'
},
{
title: '8. Does it cite the most recent and pertinent reference directly related to the research?',
value: 'qu8',
valueContents: 'qu8contents'
},
{
title: '9. Does the experimental design provide sufficient scientific support for the article?',
value: 'qu9',
valueContents: 'qu9contents'
},
{
title: '10. Does the experimental design adopt the latest cutting-edge research methods and technologies?',
value: 'qu10',
valueContents: 'qu10contents'
},
{ title: '11. Is the appropriate statistical analysis used?', value: 'qu11', valueContents: 'qu11contents' },
{
title: '12. Are the Figures or Tables clear, visually appealing, and easy to understand?',
value: 'qu12',
valueContents: 'qu12contents'
},
{
title: '13. Is the interpretation reliable (can the results adequately support the conclusions, are the conclusions overstated, and is there any selective reporting of results that could mislead readers)?',
value: 'qu13',
valueContents: 'qu13contents'
},
{
title: '14. If there are notable limitations or imperfections in the research, does the author explicitly acknowledge these shortcomings?',
value: 'qu14',
valueContents: 'qu14contents'
}
],
judgeDataList2: [
{ title: "5. Does the title represent manuscript's contents?", value: 'qu5', valueContents: 'qu5contents' },
{ title: '6. Is the Abstract accurate and concise?', value: 'qu6', valueContents: 'qu6contents' },
{
title: '7. Does it highlight the latest advancements and address existing challenges in the current research?',
value: 'qu7',
valueContents: 'qu7contents'
},
{
title: '8. Does it cite the most recent and pertinent reference directly related to the research?',
value: 'qu8',
valueContents: 'qu8contents'
},
{
title: '9. Is the content well-organized and comprehensive, covering all key aspects of the topic?',
value: 'qu9',
valueContents: 'qu9contents'
},
{
title: '10. Are the figures and tables clear, relevant, and well-presented?',
value: 'qu10',
valueContents: 'qu10contents'
},
{
title: '11. Does the review provide a balanced and critical discussion of the research? Does it highlight gaps in the field and suggest future research directions?',
value: 'qu11',
valueContents: 'qu11contents'
},
{
title: '12. Does the review provide valuable insights and a meaningful contribution to the field?',
value: 'qu12',
valueContents: 'qu12contents'
}
]
};
},
mounted() {
// this.$nextTick(() => { console.log('this.txt_mess.atype at line 257:', this.txt_mess.atype)
// if (this.txt_mess.atype === 'REVIEW' || this.txt_mess.atype === 'MINI REVIEW') {
// this.judgeDataList = [...this.judgeDataList2];
// } else {
// this.judgeDataList = [...this.judgeDataList1];
// }
// if (this.isEdit == false) {
// this.activeNames = this.judgeDataList.map((e, i) => i + 1); // 深拷贝,防止直接改 props
// } else {
// this.activeNames = [];
// }
// });
},
methods: {
updateJudgeDataList() {
if (this.txt_mess.atype === 'REVIEW' || this.txt_mess.atype === 'MINI REVIEW') {
this.judgeDataList = [...this.judgeDataList2];
} else {
this.judgeDataList = [...this.judgeDataList1];
}
// 判断 isEdit 和 txt_mess 中的 atype
if (this.isEdit === false) {
this.activeNames = this.judgeDataList.map((e, i) => i + 1); // 深拷贝,防止直接改 props
} else {
this.activeNames = [];
}
// this.isEdit=true
}
}
};
</script>
<style scoped>
.jouLink {
color: #006699;
font-weight: bold;
}
.titleInfo {
color: #aaa;
line-height: 18px;
margin-top: -16px;
margin-bottom: 12px;
}
::v-deep .comments-section {
background: #fafafad3 !important; /* 淡蓝色背景 */
border: 1px solid #f0f0f0;
padding: 0px 10px 0;
box-sizing: border-box;
border-radius: 5px;
}
::v-deep .comments-section .el-collapse-item__content{
padding-bottom: 0 !important;
background: #fafafad3 !important; /* 淡蓝色背景 */
}
::v-deep .comments-section .el-collapse-item__header{
background: #fafafad3 !important; /* 淡蓝色背景 */
height: 30px !important;
border-bottom: 0px !important;
/* border: 2px solid #007bff; */
color: #444444ed !important;
font-weight: bold;
}
</style>

View File

@@ -0,0 +1,622 @@
<template>
<div>
<div class="crumbs">
<el-breadcrumb separator="/">
<el-breadcrumb-item>
<i class="el-icon-collection"></i> <span class="top_dao"> Peer Review</span>
</el-breadcrumb-item>
</el-breadcrumb>
</div>
<el-alert class="mes_alert" style="margin: 20px 0 10px 0;" :title="'Dear '+ user_name"
description="Welcome to our submission system. To facilitate your review of articles, we have developed a new testing product. If you have any suggestions regarding this, please feel free to contact us at tmr@tmrjournals.com">
</el-alert>
<div class="container_l">
<el-row :gutter="20">
<el-col :span="24">
<div class="ma_title" style="height: 100%;">
<h2>
<!-- <img src="../../assets/img/icon_5.png" alt="" class="icon_img"> -->
Under review
</h2>
In this column, the manuscripts that currently need your comments are displayed. You can click
detail to review
or change your comments.
</div>
<ul class="ta1_uli ta1_ulicad">
<li v-for="(item,index) in tableData1">
<!-- <h5>{{item.type}}</h5> -->
<router-link :to="{path:'/per_text',query:{Art_id:item.art_rev_id}}">
<h3><span
style="margin-right: 6px;color: #006699;">{{index+1}}.</span>{{item.article_title}}
</h3>
<el-button type="primary" plain style="float: right;">Review</el-button>
</router-link>
<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: #888;">Abstrart : </font>{{item.abstrart | ellipsis}}
</span> -->
</h4>
</li>
<p v-if="tableData1==''" style="color:#6f6f6f;font-size: 14px;margin: 20px 0 0 30px;">No article
</p>
</ul>
</el-col>
<!-- 复审 -->
<el-col :span="24" v-if="tableData2!=''">
<div style="background-color: #ccc;height: 2px;width: 100%;margin:20px 0 35px 0;"></div>
<!-- <el-card class="box-card"> -->
<div class="ma_title" style="margin-bottom: 5px;">
<h2>
<!-- <img src="../../assets/img/icon_1.png" alt="" class="icon_img"> -->
Invitation for review
</h2>
This list will show you the manuscript that the editor invited you to review. You can click on
the details to
check the content and then decide whether to review the manuscript. In addtion, you can also
refuse to review
the manuscript.
</div>
<ul class="ta1_uli ta1_ulicad">
<li v-for="(item,index) in tableData2">
<div>
<router-link :to="{path:'/per_text_yq',query:{Art_id:item.art_rev_id}}">
<h3><span
style="margin-right: 6px;color: #006699;">{{index+1}}.</span>{{item.title}}
</h3>
<el-button type="primary" plain style="float: right;">Detail</el-button>
</router-link>
</div>
<h4>
<span>
<font style="color: #006699;">Journal : </font>{{item.journal_title}}.
</span>
<span>
<font style="color: #006699;">Type : </font>{{item.type}}
</span>
<span style="color: #888;margin-left: 20px;color: #006699;">
{{item.ctime}}
</span><br>
<span v-if="item.abstrart!=''" style="max-width: 1000px;">
<font style="color: #006699;">Abstract : </font>{{item.abstrart | ellipsis}}
</span>
</h4>
<div style="margin-top: 10px;">
<el-button type="success" plain @click="wen_nowrw(item.art_rev_id)">Review</el-button>
<!-- <el-button type="success" plain @click="wen_agree(item.art_rev_id)" style="margin: 0 10px 0 20px;">Review
later</el-button> -->
<el-button type="danger" plain @click="wen_refuse(item.art_rev_id)">Reject to review
</el-button>
</div>
</li>
</ul>
<!-- </el-card> -->
</el-col>
<!-- <el-col :span="24">
<div style="background-color: #ccc;height: 2px;width: 100%;margin: 30px 0 5px 0;"></div>
</el-col>
<el-col :span="24" style="margin-top: 20px;">
<div class="ma_title">
<h2>
Awaitingreviewerassignment
</h2>
In this column, all the manuscripts of the TMR Publishing Group that need to be reviewed are displayed. You can
click detail to view the content of the manuscript . If you have comments on the manuscript, you can apply for
review. Sincerely look forward to your comments.
</div>
<ul class="ta1_uli ta1_ulicad">
<li v-for="(item,index) in tableData3">
<h3><span style="margin-right: 6px;">{{index+1+(TaBle3.pageIndex-1)*TaBle3.pageSize}}.</span>{{item.title}}</h3>
<el-button type="primary" plain style="float: right;" @click="svAccept(item.article_id)">Agree review</el-button>
<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;margin-bottom: 10px;color: #006699;">
{{item.ctime}}
</span><br>
<span v-if="item.abstrart!=''" style="max-width: 1000px;">
<font style="color: #006699;">Abstract : </font>
<font style="font-size: 12px;" :class="{active: item.isShowMore}">{{item.abstrart}}</font>
<font style="font-size: 12px;" :class="{active: !item.isShowMore}" v-if="item.isDescStatus">{{item.abstrart_}}</font>
<span class="isShow" v-if="item.isDescStatus" @click="item.isShowMore = !item.isShowMore">
{{item.isShowMore ? '... Open ' : 'Recover '}}
</span>
</span>
</h4>
</li>
<p v-if="tableData3==''" style="color:#6f6f6f;font-size: 14px;margin: 20px 0 0 30px;">No articles</p>
</ul>
<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-col> -->
</el-row>
</div>
</div>
</template>
<script>
export default {
data() {
return {
user_name: localStorage.getItem('U_relname'),
query: {
user_id: localStorage.getItem('U_id')
},
Art_id: this.$route.query.Art_id,
tableData1: [],
tableData2: [],
tableData3: [],
revisionList:[], // 复审列表
TaBle2: {
user_id: localStorage.getItem('U_id'),
},
TaBle3: {
user_id: localStorage.getItem('U_id'),
journal_id: 0,
pageIndex: 1,
pageSize: 5
},
link_Tota3: 0,
};
},
mounted() {
},
created() {
this.getData();
},
methods: {
// 获取数据
getData() {
this.$api
.post('api/Reviewer/getReviewerListPending', this.query)
.then(res => {
if (res.code == 0) {
for (let i = 0; i < res.data.lists.length; i++) {
let date = new Date(parseInt(res.data.lists[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.lists[i].ctime = Y + M + D;
}
this.tableData1 = res.data.lists;
this.revisionList = res.data.repeats
} else {
this.$message.error(res.msg);
}
})
.catch(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) {
this.$set(this.TaBle3, 'pageIndex', val);
this.getData();
},
// 马上同意
wen_nowrw(index) {
// 二次确认
this.$confirm('Are you sure you want to review now', 'Tips', {
type: 'warning'
})
.then(() => {
this.$api
.post('api/Reviewer/agreeReviewerArticle', {
art_rev_id: index
})
.then(res => {
if (res.code == 0) {
this.$router.push('/per_text?Art_id=' + index);
} else {
this.$message.error(res.msg);
}
})
.catch(err => {
this.$message.error(err);
});
})
.catch(() => {});
},
// 同意
wen_agree(index) {
// 二次确认
this.$confirm(
'Are you sure you want to agreeYou can click on the details to check the content and then decide whether to review the manuscript',
'Tips', {
type: 'warning'
})
.then(() => {
this.$api
.post('api/Reviewer/agreeReviewerArticle', {
art_rev_id: index
})
.then(res => {
if (res.code == 0) {
this.$message.success('Agree successful!');
this.getData();
} else {
this.$message.error(res.msg);
}
})
.catch(err => {
this.$message.error(err);
});
})
.catch(() => {});
},
// 拒绝
wen_refuse(index) {
// 二次确认
this.$confirm('Are you sure you want to refuse', 'Tips', {
type: 'warning'
})
.then(() => {
this.$api
.post('api/Reviewer/refuseReviewerArticle', {
art_rev_id: index
})
.then(res => {
if (res.code == 0) {
this.$message.success('Reject successful!');
this.getData();
} else {
this.$message.error(res.msg);
}
})
.catch(err => {
this.$message.error(err);
});
})
.catch(() => {});
},
// 申请
svAccept(parem) {
// 二次确认
this.$confirm('I am willing to review this manuscript.', ' ', {
type: 'warning',
confirmButtonText: 'Yes'
})
.then(() => {
this.$api
.post('api/Reviewer/launchReviewer', {
article_id: parem,
user_id: localStorage.getItem('U_id')
})
.then(res => {
if (res.code == 0) {
this.$message.success('Successful application!');
this.$router.push('/per_text?Art_id=' + res.data.art_rev_id);
} else {
this.$message.error(res.msg);
}
})
.catch(err => {
this.$message.error(err);
});
})
.catch(() => {});
},
},
filters: {
ellipsis(value) {
if (!value) return "";
if (value.length > 380) {
value = value.slice(0, 380);
return value.slice(0, value.lastIndexOf(" ")) + "...";
}
return value;
},
// 文章类型
Actype(value) {
let frag = '';
switch (value) {
case "A":
frag = 'Article';
break;
case 'B':
frag = 'Review';
break;
case 'C':
frag = 'Case report';
break;
case 'P':
frag = 'Research proposal';
break;
case 'N':
frag = 'News';
break;
case 'T':
frag = 'Comment';
break;
case 'CT':
frag = 'Correction';
break;
case 'HT':
frag = 'Hypothesis';
break;
case 'PF':
frag = 'Preface';
break;
case 'ET':
frag = 'Editorial';
break;
case 'RP':
frag = 'Report';
break;
case 'LR':
frag = 'Letter';
break;
case 'EF':
frag = 'Empirical formula';
break;
case 'EM':
frag = 'Evidence-based medicine';
break;
case 'EC':
frag = 'Expert consensus';
break;
case 'LTE':
frag = 'Letter to editor';
break;
case 'QI':
frag = 'Questionnaire investigation';
break;
case 'PT':
frag = 'Protocol';
break;
case 'CS':
frag = 'Case Series';
break;
case 'RT':
frag = 'Retraction';
break;
case 'MR':
frag = 'Mini Review';
break;
default:
frag = 'Others';
}
return frag;
},
},
watch: {
}
};
</script>
<style scoped>
.ma_title {
margin-bottom: 20px;
font-size: 14px;
/* border-right: 1px solid #e1e1e1; */
padding: 0 20px;
line-height: 20px;
}
.ma_title h2 {
font-size: 16px;
margin: 10px 0;
/* white-space: nowrap; */
}
.ma_title .icon_img {
width: 20px;
height: 20px;
margin-right: 10px;
vertical-align: middle;
}
/* .top_card_b::-webkit-scrollbar {
width: 5px;
height: 10px;
}
.top_card_b::-webkit-scrollbar-thumb {
background-color: #c9c9cc;
border-radius: 3px;
} */
.ta1_uli {}
.ta1_uli li {
list-style: none;
/* border-bottom: 1px dashed #e0e0e0; */
/* box-shadow: 0 0 10px #e1e1e1; */
/* padding: 10px 20px 20px 20px; */
padding-bottom: 8px;
background-color: #fff;
margin-top: 10px;
}
.ta1_ulicad li {
margin-top: 0;
padding: 20px;
}
.ta1_ulicad li:nth-child(2n+1) {
background-color: #f8fbff;
box-shadow: 2px 30px 15px -20px #ebf5ff inset;
}
.ta1_ulicad li:nth-child(2n) {
background-color: #fff;
}
.ta1_uli li:hover {
/* background: #fafafa; */
}
.ta1_uli li h3 {
color: #006699;
margin-top: 8px;
margin-right: 150px;
font-family: "Helvetica Neue", Helvetica, Georgia, sans-serif;
font-size: 16px;
word-wrap: break-word;
line-height: 22px;
}
.ta1_uli li h3:hover {
/* text-decoration: underline; */
cursor: pointer;
}
.ta1_uli li h4 {
/* color: #6f6f6f; */
margin-top: 8px;
margin-right: 150px;
font-weight: normal;
font-size: 14px;
line-height: 22px;
}
.ta1_uli li h4 span {
margin-right: 20px;
display: inline-block;
margin-bottom: 2px;
}
.ta1_uli li h4 span>font {
font-size: 13px;
}
.ta1_uli li h5 {
color: #006699;
margin-top: 5px;
padding-bottom: 10px;
font-weight: normal;
border-bottom: 1px solid #f1f1f1;
}
.ta1_uli li h6 {
font-weight: normal;
font-family: Calibri;
font-size: 16px;
margin-top: 10px;
}
.mes_alert .el-alert__content {
margin-bottom: 10px;
}
.btns{float: right;}
.mes_alert .el-alert__content .el-alert__title {
font-size: 18px !important;
margin: 10px 0 !important;
display: block;
}
.mes_alert .el-alert__description {
font-size: 16px !important;
}
.ta1_uli li .active {
display: none;
}
.ta1_uli li .isShow {
color: #006699;
cursor: pointer;
font-size: 12px;
font-weight: bold;
margin-left: 5px;
}
</style>

View File

@@ -0,0 +1,253 @@
<template>
<div>
<div class="crumbs">
<el-breadcrumb separator="/">
<el-breadcrumb-item>
<i class="el-icon-collection"></i> <span class="top_dao"> Review History</span>
</el-breadcrumb-item>
</el-breadcrumb>
</div>
<div class="container_l">
<!-- <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;">
<el-button type="success" icon="el-icon-close" circle @click='handleClose'
style="float: right;margin: 17px 5px 0 0;"></el-button>
<p><b>{{item.label}}</b></p>
<p style="margin: 5px 0;">{{item.title}}</p>
<p>{{item.content}}</p>
</div> -->
<el-row :gutter="20">
<el-col :span="24">
<el-card class="box-card" v-loading="loading" element-loading-text="Loading..."
element-loading-spinner="el-icon-loading" element-loading-background="rgba(0, 0, 0, 0.8)">
<el-table :data="tableData3" border class="table" ref="multipleTable"
header-cell-class-name="table-header" empty-text="New messages (0)">
<el-table-column prop="article_title" label="Article Title"></el-table-column>
<el-table-column prop="journal_title" label="Journal"></el-table-column>
<el-table-column prop="ctime" label="Reviewed time" width="140"></el-table-column>
<el-table-column label="Article Status" width="130" align="center">
<template slot-scope="scope">
<b v-if="scope.row.astate == 0">Received</b>
<b v-if="scope.row.astate == 1">With editor</b>
<b v-if="scope.row.astate == 2">Under review</b>
<b v-if="scope.row.astate == 3">Reject</b>
<b v-if="scope.row.astate == 4">Revision</b>
<b v-if="scope.row.astate == 5">Accept</b>
<b v-if="scope.row.astate == 6">Pre-accept</b>
</template>
</el-table-column>
<el-table-column label="State" align="center" width="120">
<template slot-scope="scope">
<span style="font-size: 16px;"v-html="revstate(scope.row)"></span>
</template>
</el-table-column>
<el-table-column label="Recommendation" width="160" align="center">
<template slot-scope="scope">
<b v-if="scope.row.recommend == 1||scope.row.recommend == 2">Accept</b>
<b v-if="scope.row.recommend == 3||scope.row.recommend == 4">Reject</b>
</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>
<!-- 证书弹出框 -->
<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>
</div>
</template>
<script>
export default {
data() {
return {
loading: false,
query: {
user_id: localStorage.getItem('U_id')
},
tableData3: [],
TaBle3: {
user_id: localStorage.getItem('U_id'),
pageIndex: 1,
pageSize: 10
},
link_Tota3: 0,
IMG_Url: '',
cerVisible: false,
feilVisible: false,
dynamicTags: [{
label: 'Submission System 2.0',
title: 'Update Notifications',
content: "The reviewers can check all reviewers ' comments when the manuscripts get final decision."
}],
};
},
mounted() {
},
created() {
this.loading = true;
this.getTable();
},
methods: {
revstate(row, column, cellValue, index) {
let frag = '';
if (row.state == 0) {
frag = 'With reviewer';
} else if (row.state == 1) {
// 大修
frag = 'Major revision';
// frag = 'Revision';
} else if (row.state == 2) {
frag = 'Reject';
} else if (row.state == 3) {
//小修
// frag = 'Accept';
frag = 'Minor revision';
} else if (row.state == 4) {
frag = '<text style="color:#aaa">invalid</text>';
} else if (row.state == 5) {
frag = 'invitation';
}
return frag;
},
// 获取数据
getTable() {
this.$api
.post('api/Reviewer/getReviewerDetail1', this.query)
.then(res => {
if (res.code == 0) {
this.getData();
} else {
this.$message.error(res.msg);
}
})
.catch(err => {
this.$message.error(err);
});
},
getData() {
this.$api
.post('api/Reviewer/getReviewerListHistory', this.TaBle3)
.then(res => {
this.loading = false
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);
});
},
// 分页导航
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>
<style>
.table {
width: 100%;
font-size: 14px;
}
.rev_digol .el-image__placeholder {
background-image: url(../../assets/img/loading.gif);
background-repeat: no-repeat;
background-position: center center;
background-size: 440px 300px;
width: 560px;
height: 400px;
background-color: #fff;
}
</style>

View File

@@ -0,0 +1,869 @@
<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"> Final Decision Article</span>
</router-link>
>> Final Decision Article Detail
</el-breadcrumb-item>
</el-breadcrumb>
</div>
<div
class="container_l" style="padding-top: 5px;"
v-loading="loading"
element-loading-text="Loading..."
element-loading-spinner="el-icon-loading"
element-loading-background="rgba(0, 0, 0, 0.8)"
>
<el-row :gutter="20">
<el-col :span="10">
<iframe ref="mainiframe" :src="pdfUrl" class="lookpdf" frameborder="0"></iframe>
</el-col>
<el-col :span="14" style="height: 760px; overflow-y: scroll">
<!-- <el-col :span="24"> -->
<el-card class="box-card">
<div class="tet_list" :model="txt_mess">
<h4>{{ txt_mess.article_title }}</h4>
<h5>
<a :href="txt_mess.website" target="_blank" class="titlink">{{ txt_mess.title }}</a>
<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>
<div>
<p><b>Abstract :</b> <br />{{ txt_mess.abstrart }}</p>
<div class="file_sty" v-for="item in fileList" style="margin-top: 15px">
<img src="../../assets/img/icon_0.png" alt="" class="icon_img" />
<a :href="mediaUrl + item.file_url" target="_blank" class="txt_pdf"
>Manuscirpt
<span style="margin-left: 50px; color: #888; font-size: 13px">{{ item.ctime }}</span>
<i class="el-icon-download" style="margin-left: 20px; color: #66b1ff; font-weight: bold"></i> </a
><br />
</div>
<div class="file_sty" v-for="item in picList">
<img src="../../assets/img/icon_0.png" alt="" class="icon_img" />
<a :href="mediaUrl + item.file_url" target="_blank" class="txt_pdf"
>Figures and Tables
<span style="margin-left: 50px; color: #888; font-size: 13px">{{ item.ctime }}</span>
<i class="el-icon-download" style="margin-left: 20px; color: #66b1ff; font-weight: bold"></i> </a
><br />
</div>
<div class="file_sty" v-for="item in SMList">
<img src="../../assets/img/icon_0.png" alt="" class="icon_img" />
<a :href="mediaUrl + item.file_url" target="_blank" class="txt_pdf"
>Supplementary Material
<span style="margin-left: 50px; color: #888; font-size: 13px">{{ item.ctime }}</span>
<i class="el-icon-download" style="margin-left: 20px; color: #66b1ff; font-weight: bold"></i> </a
><br />
</div>
<p style="margin-top: 5px; color: #999; font-size: 14px;">
<b style="color: #e41411">Download failed?</b>
<p style="line-height: 18px;color: #999; font-size: 14px;margin-top: 4px;">
<!-- If you have upgraded the Google Chrome browser to version 86, released on October 6, 2020, you may
have noticed that some file downloads don't work anymore in the browser. You click on the download link
and nothing happens. <br />1. Right now, the easiest option available is to
<b style="color: #e41411">right-click on the download link and select "save link as".</b>
The download is executed when you do that.
<br />2. Please try to use a different browser for downloads. For now, a browser like Firefox, Internet
Explorer, Brave, Vivaldi, the new Edge, or Opera all allow the download. -->
It seems like you're encountering a download issue with Google Chrome version 86. Here are the steps you can follow to resolve or bypass the issue:
<br />1. Right-click on the download link: Instead of clicking the link normally, right-click on it and select <b style="color: #e41411">"save link as".</b> This should allow the download to start.
<br />2. Try a different browser:
If you're still having trouble with Chrome, you could use other browsers to complete your downloads. Browsers like Firefox, Internet Explorer, Brave, Vivaldi, the new Edge, or Opera are known to work well for downloads without this issue.
</p>
</p>
</div>
<!-- <p class="morSou" v-if="!morShow" @click="morShow=true">
<i class="el-icon-bottom"></i>
More article information
</p>
<p class="morSou" v-if="morShow" @click="morShow=false">
<i class="el-icon-top"></i>
More article information
</p> -->
</div>
</el-card>
<el-card class="box-card" v-if="this.add_apply == 1">
Thank you for your time and consideration on the manuscript. We are sorry that this manuscript has went through peer
review and the final decision has been obtained according to the timetable. Accordingly, your review process has
been discontinued. Your comments do not need to be submitted now. We would like to express our sincere gratitude for
your contributions as well.
</el-card>
<el-card class="box-card" v-if="this.add_apply == 0">
<!-- 审稿人表单修改 -->
<!-- Accept(录用)、Revision(退修)、Reject(退稿) -->
<common-editor-article @refresh="getData" type="questionform" :form="questionform" :txt_mess="txt_mess" :btn_submit="btn_submit" :articleId="articleId" :journal_id="journal_id"></common-editor-article>
<!-- <el-form :model="questionform" :rules="rules" ref="question" label-width="300px" label-position="top">
<el-divider content-position="center">REFEREE'S ASSESSMENT</el-divider>
<el-row :gutter="24">
<el-col :span="24">
<el-form-item prop="qu6">
<span slot="label">
1.Does the manuscript fall within the aim and scope of the journal?
<a :href="txt_mess.aim_web" target="_blank" class="jouLink">( Aims & Scope ) </a>
</span>
<el-radio-group v-model="questionform.qu6">
<el-radio :label="1">Excellent</el-radio>
<el-radio :label="2">Good</el-radio>
<el-radio :label="3">Fair</el-radio>
<el-radio :label="4">Poor</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="2.Originality of the topic">
<el-radio-group v-model="questionform.qu1">
<el-radio :label="1">Excellent</el-radio>
<el-radio :label="2">Good</el-radio>
<el-radio :label="3">Fair</el-radio>
<el-radio :label="4">Poor</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="3.Importance in its Field">
<el-radio-group v-model="questionform.qu3">
<el-radio :label="1">Excellent</el-radio>
<el-radio :label="2">Good</el-radio>
<el-radio :label="3">Fair</el-radio>
<el-radio :label="4">Poor</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="4.English language">
<el-radio-group v-model="questionform.qu8">
<el-radio :label="1">Excellent</el-radio>
<el-radio :label="2">Good</el-radio>
<el-radio :label="3">Fair</el-radio>
<el-radio :label="4">Poor</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="5.Readily Understandable">
<el-radio-group v-model="questionform.qu5">
<el-radio :label="1">Excellent</el-radio>
<el-radio :label="2">Good</el-radio>
<el-radio :label="3">Fair</el-radio>
<el-radio :label="4">Poor</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
<el-collapse>
<el-form-item label="6.Does the title represent manuscript's contents?">
<el-col :span="4">
<el-radio-group v-model="questionform.qu9">
<el-radio :label="true">Yes</el-radio>
<el-radio :label="false">No</el-radio>
</el-radio-group>
</el-col>
<el-col :span="20">
<el-collapse-item name="1" style="margin-top: -10px">
<template slot="title"> <i class="el-icon-edit"></i>Comments/ Suggestions </template>
<el-input
type="textarea"
placeholder="please input content"
v-model="questionform.qu9contents"
:rows="4"
></el-input>
</el-collapse-item>
</el-col>
</el-form-item>
</el-collapse>
<el-collapse>
<el-form-item label="7.Is the Abstract accurate and concise?">
<el-col :span="4">
<el-radio-group v-model="questionform.qu10">
<el-radio :label="true">Yes</el-radio>
<el-radio :label="false">No</el-radio>
</el-radio-group>
</el-col>
<el-col :span="20">
<el-collapse-item name="2" style="margin-top: -10px">
<template slot="title"> <i class="el-icon-edit"></i>Comments/ Suggestions </template>
<el-input
type="textarea"
placeholder="please input content"
v-model="questionform.qu10contents"
:rows="4"
></el-input>
</el-collapse-item>
</el-col>
</el-form-item>
<el-form-item label="8.Are the approach/ methods properly described?">
<el-col :span="4">
<el-radio-group v-model="questionform.qu11">
<el-radio :label="true">Yes</el-radio>
<el-radio :label="false">No</el-radio>
</el-radio-group>
</el-col>
<el-col :span="20">
<el-collapse-item name="3" style="margin-top: -10px">
<template slot="title"> <i class="el-icon-edit"></i>Comments/ Suggestions </template>
<el-input
type="textarea"
placeholder="please input content"
v-model="questionform.qu11contents"
:rows="4"
></el-input>
</el-collapse-item>
</el-col>
</el-form-item>
<el-form-item label="9.Are the conclusions and interpretations sound?">
<el-col :span="4">
<el-radio-group v-model="questionform.qu12">
<el-radio :label="true">Yes</el-radio>
<el-radio :label="false">No</el-radio>
</el-radio-group>
</el-col>
<el-col :span="20">
<el-collapse-item name="4" style="margin-top: -10px">
<template slot="title"> <i class="el-icon-edit"></i>Comments/ Suggestions </template>
<el-input
type="textarea"
placeholder="please input content"
v-model="questionform.qu12contents"
:rows="4"
></el-input>
</el-collapse-item>
</el-col>
</el-form-item>
<el-form-item label="10.Are the references properly cited?">
<el-col :span="4">
<el-radio-group v-model="questionform.qu13">
<el-radio :label="true">Yes</el-radio>
<el-radio :label="false">No</el-radio>
</el-radio-group>
</el-col>
<el-col :span="20">
<el-collapse-item name="5" style="margin-top: -10px">
<template slot="title"> <i class="el-icon-edit"></i>Comments/ Suggestions </template>
<el-input
type="textarea"
placeholder="please input content"
v-model="questionform.qu13contents"
:rows="4"
></el-input>
</el-collapse-item>
</el-col>
</el-form-item>
<el-divider content-position="center">REFEREE'S RECOMMENDATIONS</el-divider>
<el-form-item label="Overall the Paper is Rated" prop="rated">
( <span style="color: #e41411">←←←←← Bad ←←← Poor</span>
<span style="width: 10px; display: inline-block"></span>
<span style="color: #369916">Accept → Superior → Excellent</span>)
<br />
<el-radio-group v-model="questionform.rated" size="small">
<el-radio-button label="1"></el-radio-button>
<el-radio-button label="2"></el-radio-button>
<el-radio-button label="3"></el-radio-button>
<el-radio-button label="4"></el-radio-button>
<el-radio-button label="5"></el-radio-button>
<el-radio-button label="6"></el-radio-button>
<el-radio-button label="7"></el-radio-button>
<el-radio-button label="8"></el-radio-button>
<el-radio-button label="9"></el-radio-button>
<el-radio-button label="10"></el-radio-button>
</el-radio-group>
<span style="margin-left: 20px">Your score : {{ questionform.rated }}</span>
</el-form-item>
<el-form-item label="REFEREE'S RECOMMENDATIONS" prop="recommend">
<el-radio-group v-model="questionform.recommend" style="line-height: 30px">
<el-radio :label="1">Minor revision</el-radio>
<br />
<el-radio :label="2">Major revision</el-radio>
<br />
<div v-if="journal_id == 1 || journal_id == 23 || journal_id == 10">
<el-radio :label="3">Reject in current form, but may be resubmitted</el-radio>
<br />
<el-radio :label="4">Reject</el-radio>
</div>
<div v-else>
<el-radio :label="4">Reject</el-radio>
</div>
</el-radio-group>
</el-form-item>
<el-form-item
label="Comments for the Authors"
v-if="this.txt_mess.atype == 'Comment' || this.txt_mess.atype == 'News'"
>
<el-input
type="textarea"
placeholder="please input content"
v-model="questionform.comment"
:rows="8"
></el-input>
</el-form-item> <el-form-item label="" v-if="articleId">
<common-word-html :articleId="articleId" style="box-sizing: border-box"
></common-word-html>
</el-form-item>
<el-form-item
label="Comments for the Authors"
prop="comment"
v-if="this.txt_mess.atype != 'Comment' && this.txt_mess.atype != 'News'"
>
<el-input
type="textarea"
placeholder="please input content"
v-model="questionform.comment"
:rows="8"
></el-input>
</el-form-item>
<el-form-item label="Confidential Comments to the Editor">
<el-input
type="textarea"
placeholder="please input content"
v-model="questionform.confident"
:rows="8"
></el-input>
</el-form-item>
<el-form-item label="Please choose disclose your name or remain anonymous">
<el-radio-group v-model="questionform.is_anonymous" style="line-height: 30px">
<el-radio :label="0">Disclose name</el-radio>
<br />
<el-radio :label="1">Remain anonymous</el-radio>
</el-radio-group>
<p style="line-height: 20px; color: #aaa; font-size: 13px; margin: 12px 0 0 0">
If you agree to disclose your name, we will acknowledge you by name in the published PDF. However,
if you prefer to remain anonymous, we will still express our gratitude by thanking you as an
anonymous reviewer.
<br />For example, {{ txt_mess.title }} would like to thank AAAAAAAA, BBBBBBBB, and other anonymous
reviewers for their invaluable contributions to the peer review process of this paper.
</p>
</el-form-item>
<el-form-item v-if="this.btn_submit == 0">
<el-button type="primary" @click="questionSubmit">submit</el-button>
</el-form-item>
</el-collapse>
</el-form> -->
</el-card>
</el-col>
</el-row>
</div>
</div>
</template>
<script>
import pdf from 'vue-pdf';
export default {
data() {
return {
loading: false,
articleId: null,
Direct_log: this.$route.query.act,
Art_id: this.$route.query.Art_id,
// morShow: false,
txt_mess: {},
fileList: [],
picList: [],
SMList: [], //补充材料
mediaUrl: this.Common.mediaUrl,
add_edit: {
article_id: this.$route.query.Art_id,
user_id: localStorage.getItem('U_id'),
content: ''
},
head_line: '',
questionform: {
rev_qu_id: '',
art_rev_id: this.$route.query.Art_id,
qu1: '',
qu2: '',
qu3: '',
qu4: '',
qu5: '',
qu5contents: '',
qu6: '',
qu6contents: '',
qu7: '',
qu7contents: '',
qu8: '',
qu8contents: '',
qu9: '',
qu9contents: '',
qu10: '',
qu10contents: '',
qu11: '',
qu11contents: '',
qu12: '',
qu12contents: '',
qu13: '',
qu13contents: '',
qu14: '',
qu14contents: '',
qu15: '',
qu15contents: '',
rated: '',
recommend: '',
other: '',
confident: '',
comment: '',
is_anonymous: '',
type: '',
},
add_apply: 0,
btn_submit: 0,
pdfUrl: '',
journal_id: null,
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'
}
]
}
};
},
created() {
if (this.Direct_log == null) {
this.getData();
} else {
this.$api
.post('api/Chief/autoLoginForChief', {
code: this.Direct_log
})
.then((res) => {
if (res.code == 0) {
localStorage.setItem('U_role', res.data.roles);
localStorage.setItem('U_name', res.data.user.account);
localStorage.setItem('U_id', res.data.user.user_id);
localStorage.setItem('U_relname', res.data.user.realname);
this.$api
.post('api/Reviewer/agreeReviewerArticle', {
art_rev_id: this.Art_id
})
.then((res) => {
this.getData();
})
.catch((err) => {
this.$message.error(err);
});
} else {
this.$message.error(res.msg);
}
})
.catch((err) => {
this.$message.error(err);
});
}
},
methods: {
getData() {
// 获取文章信息
this.$api
.post('api/Reviewer/getartrevdate', {
revid: this.Art_id,
human: 'reviewer'
})
.then((res) => {
this.articleId=res.article_id
if (res.state != 0) {
this.btn_submit = 1;
}
let date = new Date(parseInt(res.ctime) * 1000);
let Y = date.getFullYear() + '-';
let M = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) + '-' : date.getMonth() + 1 + '-';
let D = date.getDate() < 10 ? '0' + date.getDate() : date.getDate();
res.ctime = Y + M + D;
this.txt_mess = res;
this.journal_id = res.journal_id;
console.log('journal_id', this.journal_id);
// 文章状态
if (res.astate == 2) {
this.add_apply = 0;
} else {
this.add_apply = 1;
}
})
.catch((err) => {
this.$message.error(err);
});
this.$api
.post('api/Reviewer/getAFilelistByID ', {
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.fileList = res.data;
// 获取格式
let pdfOut = this.fileList[this.fileList.length - 1].file_url;
if (pdfOut.substring(pdfOut.lastIndexOf('.') + 1) == 'docx') {
this.pdfUrl =
'https://view.officeapps.live.com/op/view.aspx?src=https://submission.tmrjournals.com/public/' + pdfOut+`&ui=en-US`;
// this.pdfUrl =
// 'https://view.xdocin.com/view?src=https://submission.tmrjournals.com/public/' +
// pdfOut
} else {
this.pdfUrl = 'https://submission.tmrjournals.com/public/' + pdfOut+`&ui=en-US`;
}
})
.catch((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() {}
};
</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;
}
.file_sty a {
color: #606266;
font-size: 14px;
}
.file_sty a:hover {
text-decoration: underline;
}
.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;
}
.container_l {
box-sizing: border-box;
min-width: 1000px;
}
.container_l .box-card {
height: auto;
}
.lookpdf {
height: 760px;
width: 100%;
}
.titlink {
color: #006699;
text-decoration: underline;
cursor: pointer;
}
.morSou {
color: #006699;
text-align: right;
font-weight: bold;
margin: 5px 0 -10px 0;
}
.morSou i {
margin-right: 3px;
font-weight: bold;
}
.morSou:hover {
text-decoration: underline;
cursor: pointer;
}
.jouLink {
color: #006699;
font-weight: bold;
margin: 0 0 0 5px;
}
.jouLink:hover {
text-decoration: underline;
cursor: pointer;
}
/*
#WACRibbonPanel {
display: none;
}
.css-124 {
display: none;
}
.css-138 {
display: none;
} */
</style>

View File

@@ -0,0 +1,118 @@
<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"> Final Decision Article</span>
</router-link>
>> Final Decision completed
</el-breadcrumb-item>
</el-breadcrumb>
</div>
<div class="container_l">
<el-card class="box-card suss_page">
<div class="suss_page_1">
<svg
t="1646625129770"
class="icon"
viewBox="0 0 1477 1024"
version="1.1"
xmlns="http://www.w3.org/2000/svg"
p-id="29677"
width="32"
height="32"
>
<path
d="M1394.036364 459.636364a41.890909 41.890909 0 1 0 83.781818 0 41.890909 41.890909 0 1 0-83.781818 0Z"
fill="#3DBD7D"
p-id="29678"
></path>
<path
d="M1079.854545 793.6a20.945455 20.945455 0 1 0 41.89091 0 20.945455 20.945455 0 1 0-41.89091 0Z"
fill="#3DBD7D"
p-id="29679"
></path>
<path
d="M1027.490909 793.6zM1257.890909 417.745455H904.145455c-19.781818 0-36.072727-16.290909-36.072728-36.072728s16.290909-36.072727 36.072728-36.072727h190.836363c19.781818 0 36.072727-16.290909 36.072727-36.072727 0-19.781818-16.290909-36.072727-36.072727-36.072728H964.654545C878.545455 110.545455 707.490909 0 512 0 229.236364 0 0 229.236364 0 512s229.236364 512 512 512c168.727273 0 318.836364-82.618182 411.927273-209.454545h81.454545c11.636364 0 20.945455-9.309091 20.945455-20.945455s-9.309091-20.945455-20.945455-20.945455h-102.4c-19.781818 0-36.072727-16.290909-36.072727-36.072727 0-19.781818 16.290909-36.072727 36.072727-36.072727h222.254546c19.781818 0 36.072727-16.290909 36.072727-36.072727 0-19.781818-16.290909-36.072727-36.072727-36.072728h-116.363637c8.145455-37.236364 12.8-75.636364 12.8-115.2v-10.472727h233.890909c23.272727 0 41.890909-18.618182 41.890909-41.890909s-16.290909-43.054545-39.563636-43.054545z"
fill="#3DBD7D"
p-id="29680"
></path>
<path
d="M820.363636 293.236364c-18.618182-18.618182-47.709091-18.618182-66.327272 0L402.618182 644.654545 267.636364 488.727273c-16.290909-19.781818-46.545455-20.945455-65.163637-4.654546-19.781818 16.290909-20.945455 46.545455-4.654545 65.163637l167.563636 193.163636 1.163637 1.163636s0 1.163636 1.163636 1.163637c1.163636 1.163636 1.163636 1.163636 2.327273 1.163636 1.163636 1.163636 2.327273 2.327273 4.654545 3.490909 1.163636 0 1.163636 1.163636 2.327273 1.163637 2.327273 1.163636 3.490909 2.327273 5.818182 3.490909 1.163636 0 1.163636 0 2.327272 1.163636 2.327273 1.163636 4.654545 1.163636 6.981819 2.327273h1.163636c2.327273 0 4.654545 1.163636 8.145454 1.163636h1.163637c2.327273 0 5.818182 0 8.145454-1.163636 2.327273 0 5.818182-1.163636 8.145455-2.327273 2.327273-1.163636 5.818182-2.327273 8.145454-4.654545 1.163636-1.163636 3.490909-2.327273 4.654546-3.49091l2.327273-2.327272 386.327272-386.327273c18.618182-17.454545 18.618182-47.709091 0-65.163636z"
fill="#FFFFFF"
p-id="29681"
></path>
</svg>
<p>Final Decision completed !</p>
<br clear="both" />
</div>
<!-- 暂时去掉 -->
<div class="suss_page_2">
Dear Editor-in-Chief, We have received all of your review comments.<br />
The editorial team would like to express our sincere respect and gratitude to you for your meticulous review and
guidance as the final reviewer of this journal.
</div>
<div class="suss_page_3">
<a href="/editpeerewer">Return to Peer Review page</a>
</div>
</el-card>
</div>
</div>
</template>
<script>
export default {
data() {
return {};
},
created() {},
methods: {}
};
</script>
<style scoped>
.suss_page {
padding: 25px 0;
text-align: center;
}
.suss_page .suss_page_1 {
display: inline-block;
font-size: 26px;
margin: 0 0 50px 0;
}
.suss_page .suss_page_1 svg {
float: left;
width: 50px;
height: 50px;
}
.suss_page .suss_page_1 p {
float: left;
margin: 5px 0 0 10px;
}
.suss_page .suss_page_2 {
margin: 0 0 60px 0;
text-align: center;
line-height: 30px;
}
.suss_page .suss_page_3 {
margin: 0 0 20px 0;
}
.suss_page .suss_page_3 a {
color: #fff;
background-color: #006699;
border-radius: 5px;
padding: 10px 20px;
}
.suss_page .suss_page_3 a:hover {
text-decoration: underline;
}
</style>

View File

@@ -140,6 +140,8 @@ import commonTable from '@/components/page/components/table/table.vue'
Vue.component('common-table', commonTable);
import commonReviewArticle from '@/components/page/components/reviewArticle/index.vue'
Vue.component('common-review-article', commonReviewArticle);
import commonEditorArticle from '@/components/page/components/EditorArticle/index.vue'
Vue.component('common-editor-article', commonEditorArticle);
import commonLateX from '@/components/page/components/table/LateX.vue'
Vue.component('common-late-x', commonLateX);
import commonMajor from '@/components/page/components/major/index.vue'

View File

@@ -362,6 +362,14 @@ export default new Router({
},
hidden: true
},
{
path: '/articleEditorialBoard',
component: () => import('../components/page/articleEditorialBoard.vue'),
meta: {
title: 'Article Editorial Board'
},
hidden: true
},
{
path: '/articleReviewerDetail',
component: () => import('../components/page/articleReviewerDetail'),
@@ -651,7 +659,23 @@ export default new Router({
meta: {
title: 'Review History',
}
},
{
path: '/editPeerewer', //审稿人进行中列表
component: () => import('../components/page/edit_per_ewer'),
meta: {
title: 'Peer Review'
}
}, {
path: '/editPerhistory', //审稿人历史列表
component: () => import('../components/page/edit_per_history'),
meta: {
title: 'Review History',
}
},
{
path: '/perhistory_commen', //审稿人历史列表
component: () => import('../components/page/per_history_commen'),
meta: {
@@ -665,6 +689,13 @@ export default new Router({
title: 'Reviewer article details'
}
},
{
path: '/edit_per_text', //审稿人文章详情
component: () => import('../components/page/edit_per_text'),
meta: {
title: 'Final decision article details'
}
},
{
path: '/per_text_yq', //审稿人文章详情-邀请
component: () => import('../components/page/per_text_yq'),
@@ -679,6 +710,13 @@ export default new Router({
title: 'Review completed'
}
},
{
path: '/edit_per_text_success', //审稿人文章-审稿成功页
component: () => import('../components/page/edit_per_text_success'),
meta: {
title: 'Review completed'
}
},
{
path: '/per_text_repeat', //审稿人文章-重复审稿提示
component: () => import('../components/page/per_text_repeat'),