终审提交

This commit is contained in:
2025-09-01 14:22:16 +08:00
parent 4c30099d77
commit abb4b10b6b
9 changed files with 215 additions and 163 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

@@ -1097,7 +1097,7 @@ export default {
break;
case 3:
// str = 'Accept';
str = 'Minor';
str = 'Revision';
break;
}
return str;

View File

@@ -166,7 +166,7 @@
<div style="margin: 10px 0 0px 10px;line-height: 24px;">
<a v-if="ComRespe!=''" v-for="(item,index) in ComRespe" :href="mediaUrl + item.file_url"
style="color: #333;display: block;margin-bottom: 10px;">
<span>{{index+1}}. Response Content</span>
<span>{{index+1}}. </span>
<img src="../../assets/img/icon_0.png"
style="width: 15px;vertical-align: text-bottom;margin: 0 0 0 20px;">
@@ -211,7 +211,7 @@
</el-upload>
</p>
<br clear="both">
<h4>Supplementary Material :</h4>
<h4>Supplementary material :</h4>
<p>
<el-upload class="upload-demo up_newstyle" :action="upload_supplementary" accept=".zip"
name="supplementary" :before-upload="beforeupload_supplementary"
@@ -767,7 +767,7 @@
//验证文件
if (this.fileMesForm.manuscirpt == undefined || this.fileMesForm.manuscirpt == '') {
this.$message.error(
'Failed to submit. Please upload manuscirpt,ensure the integrity of the information');
'Submission failed. Please upload the manuscript and ensure all required information is complete.');
return false;
}
if (this.fileMesForm.responseFile == undefined || this.fileMesForm.responseFile == '') {

View File

@@ -3,7 +3,7 @@
<el-form :model="questionform" :rules="isEdit ? rules : {}" ref="question" label-width="300px" label-position="top">
<el-divider content-position="center">REFEREE'S ASSESSMENT</el-divider>
<el-form-item label="Processing Status" prop="state">
<el-form-item label="Final Decision" prop="state">
<!-- Accept(录用)、Revision(退修)、Reject(退稿) -->
<!-- 1接收2拒绝3退修4拒绝邀请 -->
@@ -18,6 +18,7 @@
</el-radio-group>
</el-form-item>
<template>
<el-form-item label="Comments for the Authors" prop="suggest_for_author">
<el-input v-if="isEdit"
:autosize="{ minRows: 2, maxRows: 8 }"
@@ -27,7 +28,7 @@
v-model="questionform.suggest_for_author"
></el-input>
<div v-else style="color: #888;">
{{ questionform.suggest_for_editor }}
{{ questionform.suggest_for_author }}
</div>
</el-form-item>
</template>
@@ -40,7 +41,8 @@
:autosize="{ minRows: 2, maxRows: 10 }"
></el-input>
<div v-else style="color: #888;">
{{ questionform.suggest_for_editor }}
{{ questionform.suggest_for_editor?questionform.suggest_for_editor:'No comment' }}
</div>
</el-form-item>
@@ -51,15 +53,10 @@
<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-group v-model="questionform.is_anonymous" style="line-height: 30px">
<el-radio :label="2" :disabled="!isEdit && questionform.is_anonymous != 2">Disclose name</el-radio>
<br />
<el-radio :label="1" :disabled="!isEdit && questionform.is_anonymous != 1">Remain anonymous</el-radio>
@@ -156,8 +153,8 @@ export default {
methods: {
getData() { this.rules = {
state: [{ required: true, message: 'Please select the manuscript processing status', trigger: 'blur' }],
suggest_for_editor: [{ required: true, message: 'please Input Comments for the Editor', trigger: 'blur' }],
state: [{ required: true, message: 'Please select the manuscript Final Decision', trigger: 'blur' }],
// suggest_for_editor: [{ required: true, message: 'please Input Comments for the Editor', trigger: 'blur' }],
suggest_for_author: [{ required: true, message: 'please Input Comments for the Authors', trigger: 'blur' }]
};
// Fetch article data
@@ -167,7 +164,9 @@ export default {
record_id: this.baseQuestionform.record_id,
state: this.baseQuestionform.state,
suggest_for_editor: this.baseQuestionform.suggest_for_editor,
suggest_for_author: this.baseQuestionform.suggest_for_author
suggest_for_author: this.baseQuestionform.suggest_for_author,
is_anonymous: this.baseQuestionform.is_anonymous,
};
this.$refs.question.clearValidate();
@@ -180,7 +179,7 @@ export default {
return false;
}
if (this.questionform.state == 0) {
this.$message.error('Please select the manuscript processing status.');
this.$message.error('Please select the manuscript Final Decision.');
return false;
}
const regex = /[\u4E00-\u9FA5\uF900-\uFA2D]{1,}/;

View File

@@ -1,147 +1,193 @@
<template>
<div>
<!-- 期刊下拉菜单 -->
<div class="crumbs">
<el-breadcrumb separator="/">
<el-breadcrumb-item>
<i class="el-icon-notebook-1"></i> <span class="top_dao"> Accepted manuscript</span>
</el-breadcrumb-item>
</el-breadcrumb>
</div>
<div class="container_l">
<!-- 期刊下拉菜单 -->
<el-select v-model="query.journal_id" filterable placeholder="Please select a journal" @change="handlejournal" style="width: 350px;">
<el-option v-for="item in cate_jour" :key="item.journal_id" :label="item.title" :value="item.journal_id"></el-option>
</el-select><br><br>
<el-row :gutter="20">
<el-col :span="24">
<el-card class="box-card">
<el-table :data="tableData2" border class="table" ref="multipleTable" header-cell-class-name="table-header" empty-text="New messages (0)">
<el-table-column prop="state" label="Status" width="130" align="center">
<template slot-scope="scope">
<el-tag type="info" v-if="scope.row.state == 0">Received</el-tag>
<el-tag type="info" v-if="scope.row.state == 1">With editor</el-tag>
<el-tag type="info" v-if="scope.row.state == 2">Under review</el-tag>
<el-tag type="info" v-if="scope.row.state == 3">Reject</el-tag>
<el-tag type="info" v-if="scope.row.state == 4">Revision</el-tag>
<el-tag type="info" v-if="scope.row.state == 5">Accept</el-tag>
<el-tag type="info" v-if="scope.row.state == 6">Pre-accept</el-tag>
</template>
</el-table-column>
<el-table-column prop="title" label="Title"></el-table-column>
<!-- <el-table-column prop="journal_title" label="Journal name"></el-table-column> -->
<!-- <el-table-column label=" " width="100" align="center">
<div>
<!-- 期刊下拉菜单 -->
<div class="crumbs">
<el-breadcrumb separator="/">
<el-breadcrumb-item>
<i class="el-icon-notebook-1"></i> <span class="top_dao"> Accepted manuscript</span>
</el-breadcrumb-item>
</el-breadcrumb>
</div>
<div class="container_l">
<!-- 期刊下拉菜单 -->
<el-select
v-model="query.journal_id"
filterable
placeholder="Please select a journal"
@change="handlejournal"
style="width: 350px"
>
<el-option
v-for="item in cate_jour"
:key="item.journal_id"
:label="item.title"
:value="item.journal_id"
></el-option> </el-select
><br /><br />
<el-row :gutter="20">
<el-col :span="24">
<el-card class="box-card">
<el-table
:data="tableData2"
border
class="table"
ref="multipleTable"
header-cell-class-name="table-header"
empty-text="New messages (0)"
>
<el-table-column prop="state" label="Status" width="130" align="center">
<template slot-scope="scope">
<el-tag type="info" v-if="scope.row.state == 0">Received</el-tag>
<el-tag type="info" v-if="scope.row.state == 1">With editor</el-tag>
<el-tag type="info" v-if="scope.row.state == 2">Under review</el-tag>
<el-tag type="info" v-if="scope.row.state == 3">Reject</el-tag>
<el-tag type="info" v-if="scope.row.state == 4">Revision</el-tag>
<el-tag type="info" v-if="scope.row.state == 5">Accept</el-tag>
<el-tag type="info" v-if="scope.row.state == 6">Pre-accept</el-tag>
</template>
</el-table-column>
<el-table-column prop="title" label="Title"></el-table-column>
<!-- <el-table-column prop="journal_title" label="Journal name"></el-table-column> -->
<!-- <el-table-column label=" " width="100" align="center">
<template slot-scope="scope">
<router-link :to="{path:'/edit_text_ls',query:{Art_id:scope.row.article_id}}">
<el-button type="primary" plain>Detail</el-button>
</router-link>
</template>
</el-table-column> -->
</el-table>
</el-card>
</el-col>
</el-row>
</div>
</div>
</el-table>
<div class="pagination">
<el-pagination
background
layout="total, prev, pager, next"
:current-page="page.pageIndex"
:page-size="page.pageSize"
:total="Total"
@current-change="handlePageChange"
class="revi_pag_sty"
>
</el-pagination>
</div>
</el-card>
</el-col>
</el-row>
</div>
</div>
</template>
<script>
export default {
data() {
return {
Direct_log: this.$route.query.act,
query: {
user_id: localStorage.getItem('U_id')
},
tableData2: [],
link_Tota2: 0,
cate_jour: []
};
},
mounted() {
export default {
data() {
return {
Total: 0,
Direct_log: this.$route.query.act,
query: {
user_id: localStorage.getItem('U_id')
},
tableData2: [],
link_Tota2: 0,
cate_jour: [],
page: {
pageIndex: 1,
pageSize: 10
}
};
},
mounted() {},
created() {
if (this.Direct_log == null) {
this.getTable();
} 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.userinfo.realname);
this.getTable();
} else {
this.$message.error(res.msg);
}
})
.catch((err) => {
this.$message.error(err);
});
}
},
methods: {
handlePageChange(val) {
this.$set(this.page, 'pageIndex', val);
this.getData();
},
},
created() {
if (this.Direct_log == null) {
this.getTable();
} 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.userinfo.realname);
this.getTable();
} else {
this.$message.error(res.msg);
}
})
.catch(err => {
this.$message.error(err);
});
}
},
methods: {
// 获取数据
getTable() {
this.$api
.post('api/Board/getBoardJournals', this.query)
.then(res => {
if (res.code == 0) {
this.cate_jour = res.data.journals
this.query.journal_id = this.cate_jour[0].journal_id;
// 获取数据
getTable() {
this.$api
.post('api/Board/getBoardJournals', this.query)
.then((res) => {
if (res.code == 0) {
this.cate_jour = res.data.journals;
this.query.journal_id = this.cate_jour[0].journal_id;
this.getData();
this.getData();
} else {
this.$message.error(res.msg);
}
})
.catch((err) => {
this.$message.error(err);
});
},
getData() {
const loading = this.$loading({
lock: true,
text: 'Loading...',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
});
this.$api
.post('api/Board/getBoardHistArticles', { ...this.query, ...this.page })
.then((res) => {
loading.close()
if (res.code == 0) {
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;
this.Total = res.data.count;
} else {
this.$message.error(res.msg);
}
} else {
this.$message.error(res.msg);
}
})
.catch(err => {
this.$message.error(err);
});
},
getData() {
this.$api
.post('api/Board/getBoardHistArticles', this.query)
.then(res => {
if (res.code == 0) {
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);
});
},
})
.catch((err) => {
loading.close()
this.$message.error(err);
});
},
// 期刊下拉菜单点击
handlejournal() {
this.page.pageIndex = 1;
// 期刊下拉菜单点击
handlejournal() {
this.getData();
}
},
watch: {
}
};
this.getData();
}
},
watch: {}
};
</script>
<style scoped>
.table {
width: 100%;
font-size: 14px;
}
.table {
width: 100%;
font-size: 14px;
}
</style>

View File

@@ -70,14 +70,14 @@
size="mini"
@click="saveNow(scope.$index, scope.row)"
v-if="scope.row.state == 5"
>Final Decision Now
>Accept for final decision
</el-button>
<el-button
type="danger"
size="mini"
@click="saveRef(scope.$index, scope.row)"
v-if="scope.row.state == 5"
>Reject
>Decline final review
</el-button>
</template>
</el-table-column>
@@ -263,6 +263,9 @@ this.getDate(data.id)
})
.then((res) => {
loading.close();
if(res.status==1){
this.detailDate.artrevid = res.art_rev_id;
this.detailDate.article = res.data.article.title;
this.detailDate.reviewer = res.data.article_final.realname;
@@ -283,8 +286,12 @@ this.getDate(data.id)
});
this.$forceUpdate();
}else{
this.$message.error(res.msg);
}
})
.catch((err) => {
this.$message.error(err);
console.log(err);
});
},

View File

@@ -5,9 +5,9 @@
<el-breadcrumb-item>
<i class="el-icon-collection"></i>
<router-link :to="{ path: '/editPeerewer' }">
<span class="top_dao"> Final Decision Article</span>
<span class="top_dao"> Final Decision</span>
</router-link>
>> Final Decision Article Detail
>> Final Decision Detail
</el-breadcrumb-item>
</el-breadcrumb>
</div>
@@ -105,9 +105,7 @@ If you're still having trouble with Chrome, you could use other browsers to comp
<b v-if="item.reviewer_id == User_Id">{{ item.realname }}</b>
<b v-if="item.reviewer_id != User_Id">XXXXXXXXXX</b>
<el-button type="primary" plain v-if="item.question&&item.question.art_rev_id" size="mini" @click="ques_visible(item.question)"
style="padding: 4px 10px;margin-left: 20px;">Referee's Assessment</el-button>
</p>
@@ -125,12 +123,14 @@ If you're still having trouble with Chrome, you could use other browsers to comp
:key="index"
:timestamp="activity.ctimeFormatted">
<b style="margin-right: 20px;display: inline-block;width: 100px;color:#006699">{{ activity.title }}</b>
<b style="margin-right: 20px;display: inline-block;width: 140px;color:#006699">{{ activity.title }}</b>
<span class="comment_item_recommend" v-if="activity.source=='question'"><b v-if="activity.recommend == 1">Minor revision</b>
<b v-if="activity.recommend == 2">Major revision</b>
<b v-if="activity.recommend == 3">Reject in current form, but may be resubmitted</b>
<b v-if="activity.recommend == 4">Reject</b></span>
<b v-if="activity.recommend == 4">Reject</b><el-button type="primary" plain v-if="item.question&&item.question.art_rev_id" size="mini" @click="ques_visible(item.question)"
style="padding: 4px 10px;margin-left: 20px;">Detail</el-button> </span>
<span class="comment_item_recommend" v-if="activity.source=='repeat'">
@@ -179,7 +179,7 @@ If you're still having trouble with Chrome, you could use other browsers to comp
<template slot="title">
<div class="review_title">
<b>Author's reply</b>
<b>Response to reviewers</b>
</div>
@@ -227,7 +227,7 @@ If you're still having trouble with Chrome, you could use other browsers to comp
<!-- 审稿人表单修改 -->
<!-- Accept(录用)、Revision(退修)、Reject(退稿) -->
<common-editor-article @refresh="getData" type="questionform" :form="questionform" :txt_mess="txt_mess" :btn_submit="btn_submit" :articleId="articleId" :journal_id="journal_id"></common-editor-article>
<common-editor-article type="questionform" :form="questionform" :txt_mess="txt_mess" :btn_submit="btn_submit" :articleId="articleId" :journal_id="journal_id"></common-editor-article>
</el-card>
</el-col>
</el-row>
@@ -416,7 +416,7 @@ export default {
if (item.recommend !== undefined && item.ctime !== undefined) {
result.push({
source: `repeat`,
title:'Second round of review',
title:'Re-review',
recommend: item.recommend,
ctime: item.ctime,
ctimeFormatted: item.ctime

View File

@@ -5,7 +5,7 @@
<el-breadcrumb-item>
<i class="el-icon-collection"></i>
<router-link :to="{ path: '/peerewer' }">
<span class="top_dao"> Final Decision Article</span>
<span class="top_dao"> Final Decision </span>
</router-link>
>> Final Decision Completed
</el-breadcrumb-item>

View File

@@ -37,7 +37,7 @@
<el-col :span="22" >
<p style="padding-left: 10px;">
You can decide to review or reject it.
Please feel free to accept or decline the final review invitation.
</p>
</el-col>
</el-row>