终审提交

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,15 +53,10 @@
<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">
<el-radio :label="2" :disabled="!isEdit && questionform.is_anonymous != 2">Disclose name</el-radio> <el-radio :label="2" :disabled="!isEdit && questionform.is_anonymous != 2">Disclose name</el-radio>
<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>
@@ -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

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

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>