终审提交

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: 'https://submission.tmrjournals.com/', //正式 记得切换
// baseURL: 'http://www.tougao.com/', //测试本地 记得切换 // baseURL: 'http://www.tougao.com/', //测试本地 记得切换
// baseURL: 'http://192.168.110.110/tougao/public/index.php/', // baseURL: 'http://192.168.110.110/tougao/public/index.php/',
baseURL: '/api', //本地 // baseURL: '/api', //本地
// baseURL: '/', //正式 baseURL: '/', //正式
}); });

View File

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

View File

@@ -166,7 +166,7 @@
<div style="margin: 10px 0 0px 10px;line-height: 24px;"> <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" <a v-if="ComRespe!=''" v-for="(item,index) in ComRespe" :href="mediaUrl + item.file_url"
style="color: #333;display: block;margin-bottom: 10px;"> 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" <img src="../../assets/img/icon_0.png"
style="width: 15px;vertical-align: text-bottom;margin: 0 0 0 20px;"> style="width: 15px;vertical-align: text-bottom;margin: 0 0 0 20px;">
@@ -211,7 +211,7 @@
</el-upload> </el-upload>
</p> </p>
<br clear="both"> <br clear="both">
<h4>Supplementary Material :</h4> <h4>Supplementary material :</h4>
<p> <p>
<el-upload class="upload-demo up_newstyle" :action="upload_supplementary" accept=".zip" <el-upload class="upload-demo up_newstyle" :action="upload_supplementary" accept=".zip"
name="supplementary" :before-upload="beforeupload_supplementary" name="supplementary" :before-upload="beforeupload_supplementary"
@@ -767,7 +767,7 @@
//验证文件 //验证文件
if (this.fileMesForm.manuscirpt == undefined || this.fileMesForm.manuscirpt == '') { if (this.fileMesForm.manuscirpt == undefined || this.fileMesForm.manuscirpt == '') {
this.$message.error( 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; return false;
} }
if (this.fileMesForm.responseFile == undefined || this.fileMesForm.responseFile == '') { 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-form :model="questionform" :rules="isEdit ? rules : {}" ref="question" label-width="300px" label-position="top">
<el-divider content-position="center">REFEREE'S ASSESSMENT</el-divider> <el-divider content-position="center">REFEREE'S ASSESSMENT</el-divider>
<el-form-item label="Processing Status" prop="state"> <el-form-item label="Final Decision" prop="state">
<!-- Accept(录用)、Revision(退修)、Reject(退稿) --> <!-- Accept(录用)、Revision(退修)、Reject(退稿) -->
<!-- 1接收2拒绝3退修4拒绝邀请 --> <!-- 1接收2拒绝3退修4拒绝邀请 -->
@@ -18,6 +18,7 @@
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<template> <template>
<el-form-item label="Comments for the Authors" prop="suggest_for_author"> <el-form-item label="Comments for the Authors" prop="suggest_for_author">
<el-input v-if="isEdit" <el-input v-if="isEdit"
:autosize="{ minRows: 2, maxRows: 8 }" :autosize="{ minRows: 2, maxRows: 8 }"
@@ -27,7 +28,7 @@
v-model="questionform.suggest_for_author" v-model="questionform.suggest_for_author"
></el-input> ></el-input>
<div v-else style="color: #888;"> <div v-else style="color: #888;">
{{ questionform.suggest_for_editor }} {{ questionform.suggest_for_author }}
</div> </div>
</el-form-item> </el-form-item>
</template> </template>
@@ -40,7 +41,8 @@
:autosize="{ minRows: 2, maxRows: 10 }" :autosize="{ minRows: 2, maxRows: 10 }"
></el-input> ></el-input>
<div v-else style="color: #888;"> <div v-else style="color: #888;">
{{ questionform.suggest_for_editor }} {{ questionform.suggest_for_editor?questionform.suggest_for_editor:'No comment' }}
</div> </div>
</el-form-item> </el-form-item>
@@ -51,12 +53,7 @@
<br /> <br />
<el-radio :label="1" :disabled="!isEdit && questionform.is_anonymous != 1">Remain anonymous</el-radio> <el-radio :label="1" :disabled="!isEdit && questionform.is_anonymous != 1">Remain anonymous</el-radio>
</el-radio-group> </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-form-item label="Please choose disclose your name or remain anonymous" v-if="!isEdit && pagetype == 'Editor'"> <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">
@@ -156,8 +153,8 @@ export default {
methods: { methods: {
getData() { this.rules = { getData() { this.rules = {
state: [{ required: true, message: 'Please select the manuscript processing status', 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_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' }] suggest_for_author: [{ required: true, message: 'please Input Comments for the Authors', trigger: 'blur' }]
}; };
// Fetch article data // Fetch article data
@@ -167,7 +164,9 @@ export default {
record_id: this.baseQuestionform.record_id, record_id: this.baseQuestionform.record_id,
state: this.baseQuestionform.state, state: this.baseQuestionform.state,
suggest_for_editor: this.baseQuestionform.suggest_for_editor, 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(); this.$refs.question.clearValidate();
@@ -180,7 +179,7 @@ export default {
return false; return false;
} }
if (this.questionform.state == 0) { 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; return false;
} }
const regex = /[\u4E00-\u9FA5\uF900-\uFA2D]{1,}/; const regex = /[\u4E00-\u9FA5\uF900-\uFA2D]{1,}/;

View File

@@ -10,13 +10,31 @@
</div> </div>
<div class="container_l"> <div class="container_l">
<!-- 期刊下拉菜单 --> <!-- 期刊下拉菜单 -->
<el-select v-model="query.journal_id" filterable placeholder="Please select a journal" @change="handlejournal" style="width: 350px;"> <el-select
<el-option v-for="item in cate_jour" :key="item.journal_id" :label="item.title" :value="item.journal_id"></el-option> v-model="query.journal_id"
</el-select><br><br> 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-row :gutter="20">
<el-col :span="24"> <el-col :span="24">
<el-card class="box-card"> <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
: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"> <el-table-column prop="state" label="Status" width="130" align="center">
<template slot-scope="scope"> <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 == 0">Received</el-tag>
@@ -38,6 +56,18 @@
</template> </template>
</el-table-column> --> </el-table-column> -->
</el-table> </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-card>
</el-col> </el-col>
</el-row> </el-row>
@@ -49,27 +79,30 @@
export default { export default {
data() { data() {
return { return {
Total: 0,
Direct_log: this.$route.query.act, Direct_log: this.$route.query.act,
query: { query: {
user_id: localStorage.getItem('U_id') user_id: localStorage.getItem('U_id')
}, },
tableData2: [], tableData2: [],
link_Tota2: 0, link_Tota2: 0,
cate_jour: [] cate_jour: [],
page: {
pageIndex: 1,
pageSize: 10
}
}; };
}, },
mounted() { mounted() {},
},
created() { created() {
if (this.Direct_log == null) { if (this.Direct_log == null) {
this.getTable(); this.getTable();
} else { } else {
this.$api this.$api
.post('api/Chief/autoLoginForChief ', { .post('api/Chief/autoLoginForChief ', {
'code': this.Direct_log code: this.Direct_log
}) })
.then(res => { .then((res) => {
if (res.code == 0) { if (res.code == 0) {
localStorage.setItem('U_role', res.data.roles); localStorage.setItem('U_role', res.data.roles);
localStorage.setItem('U_name', res.data.user.account); localStorage.setItem('U_name', res.data.user.account);
@@ -80,35 +113,46 @@
this.$message.error(res.msg); this.$message.error(res.msg);
} }
}) })
.catch(err => { .catch((err) => {
this.$message.error(err); this.$message.error(err);
}); });
} }
}, },
methods: { methods: {
handlePageChange(val) {
this.$set(this.page, 'pageIndex', val);
this.getData();
},
// 获取数据 // 获取数据
getTable() { getTable() {
this.$api this.$api
.post('api/Board/getBoardJournals', this.query) .post('api/Board/getBoardJournals', this.query)
.then(res => { .then((res) => {
if (res.code == 0) { if (res.code == 0) {
this.cate_jour = res.data.journals this.cate_jour = res.data.journals;
this.query.journal_id = this.cate_jour[0].journal_id; this.query.journal_id = this.cate_jour[0].journal_id;
this.getData(); this.getData();
} else { } else {
this.$message.error(res.msg); this.$message.error(res.msg);
} }
}) })
.catch(err => { .catch((err) => {
this.$message.error(err); this.$message.error(err);
}); });
}, },
getData() { getData() {
const loading = this.$loading({
lock: true,
text: 'Loading...',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
});
this.$api this.$api
.post('api/Board/getBoardHistArticles', this.query) .post('api/Board/getBoardHistArticles', { ...this.query, ...this.page })
.then(res => { .then((res) => {
loading.close()
if (res.code == 0) { if (res.code == 0) {
for (let i = 0; i < res.data.articles.length; i++) { for (let i = 0; i < res.data.articles.length; i++) {
let date = new Date(parseInt(res.data.articles[i].ctime) * 1000); let date = new Date(parseInt(res.data.articles[i].ctime) * 1000);
@@ -118,24 +162,26 @@
res.data.articles[i].ctime = Y + M + D; res.data.articles[i].ctime = Y + M + D;
} }
this.tableData2 = res.data.articles; this.tableData2 = res.data.articles;
this.Total = res.data.count;
} else { } else {
this.$message.error(res.msg); this.$message.error(res.msg);
} }
}) })
.catch(err => { .catch((err) => {
loading.close()
this.$message.error(err); this.$message.error(err);
}); });
}, },
// 期刊下拉菜单点击 // 期刊下拉菜单点击
handlejournal() { handlejournal() {
this.page.pageIndex = 1;
this.getData(); this.getData();
} }
}, },
watch: { watch: {}
}
}; };
</script> </script>

View File

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

View File

@@ -5,9 +5,9 @@
<el-breadcrumb-item> <el-breadcrumb-item>
<i class="el-icon-collection"></i> <i class="el-icon-collection"></i>
<router-link :to="{ path: '/editPeerewer' }"> <router-link :to="{ path: '/editPeerewer' }">
<span class="top_dao"> Final Decision Article</span> <span class="top_dao"> Final Decision</span>
</router-link> </router-link>
>> Final Decision Article Detail >> Final Decision Detail
</el-breadcrumb-item> </el-breadcrumb-item>
</el-breadcrumb> </el-breadcrumb>
</div> </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">{{ item.realname }}</b>
<b v-if="item.reviewer_id != User_Id">XXXXXXXXXX</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> </p>
@@ -125,12 +123,14 @@ If you're still having trouble with Chrome, you could use other browsers to comp
:key="index" :key="index"
:timestamp="activity.ctimeFormatted"> :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> <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 == 2">Major revision</b>
<b v-if="activity.recommend == 3">Reject in current form, but may be resubmitted</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'"> <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"> <template slot="title">
<div class="review_title"> <div class="review_title">
<b>Author's reply</b> <b>Response to reviewers</b>
</div> </div>
@@ -227,7 +227,7 @@ If you're still having trouble with Chrome, you could use other browsers to comp
<!-- 审稿人表单修改 --> <!-- 审稿人表单修改 -->
<!-- Accept(录用)、Revision(退修)、Reject(退稿) --> <!-- Accept(录用)、Revision(退修)、Reject(退稿) -->
<common-editor-article @refresh="getData" type="questionform" :form="questionform" :txt_mess="txt_mess" :btn_submit="btn_submit" :articleId="articleId" :journal_id="journal_id"></common-editor-article> <common-editor-article type="questionform" :form="questionform" :txt_mess="txt_mess" :btn_submit="btn_submit" :articleId="articleId" :journal_id="journal_id"></common-editor-article>
</el-card> </el-card>
</el-col> </el-col>
</el-row> </el-row>
@@ -416,7 +416,7 @@ export default {
if (item.recommend !== undefined && item.ctime !== undefined) { if (item.recommend !== undefined && item.ctime !== undefined) {
result.push({ result.push({
source: `repeat`, source: `repeat`,
title:'Second round of review', title:'Re-review',
recommend: item.recommend, recommend: item.recommend,
ctime: item.ctime, ctime: item.ctime,
ctimeFormatted: item.ctime ctimeFormatted: item.ctime

View File

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

View File

@@ -37,7 +37,7 @@
<el-col :span="22" > <el-col :span="22" >
<p style="padding-left: 10px;"> <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> </p>
</el-col> </el-col>
</el-row> </el-row>