作者端看到 初审的审稿问卷

This commit is contained in:
2026-02-11 13:17:38 +08:00
parent d05ffdf9c6
commit 81d3dd9320
2 changed files with 338 additions and 2 deletions

View File

@@ -41,11 +41,13 @@
</template>
<!-- 时间轴 -->
<el-timeline v-if="item.question && item.question[0] != null">
<el-timeline-item :timestamp="item1.ctime|formatDatehms" placement="top" v-for="(item1, index1) in item.question" :key="index1">
<el-card>
<!-- 初审 -->
<div v-if="index1 == item.question.length-1">
<h4><el-tag >Under review</el-tag></h4>
<h4 style="position: relative;"><el-tag >Under review</el-tag><el-button type="primary" size="mini" style="position: absolute;right: 0;" @click="showDetail(item1)">Detail</el-button></h4>
<!-- 内容 -->
<div class="art_author_coment">
<p v-if="item1.qu9_contents!=''">
@@ -502,6 +504,20 @@
<el-button type="primary" @click="Detailvisible=false">OK</el-button>
</span>
</el-dialog>
<el-dialog title="Feedback questionnaire" :visible.sync="dialogFormVisible" width="900px" :close-on-click-modal="false">
<!-- 审稿人表单修改 -->
<common-author-article
type="questionform"
pagetype="Editor"
:form="questionform"
:txt_mess="artMes"
:btn_submit="1"
:articleId="articleId"
:journal_id="journal_id"
></common-author-article>
</el-dialog>
</div>
</template>
@@ -509,6 +525,8 @@
export default {
data() {
return {
questionform:{},
dialogFormVisible:false,
baseUrl: this.Common.baseUrl,
mediaUrl: this.Common.mediaUrl,
articleId: this.$route.query.id,
@@ -581,7 +599,43 @@
return this.baseUrl + 'api/Article/up_response_file';
},
},
methods: {
methods: {
showDetail(data){
this.questionform = data;
this.questionform.rev_qu_id = data.rev_qu_id;
this.questionform.qu1 = data.qu1;
this.questionform.qu2 = data.qu2;
this.questionform.qu3 = data.qu3;
this.questionform.qu4 = data.qu4;
this.questionform.qu5 = data.qu5;
this.questionform.qu6 = data.qu6;
this.questionform.qu7 = data.qu7;
this.questionform.qu8 = data.qu8;
this.questionform.qu9 = data.qu9 == 0 ? false : true;
this.questionform.qu9contents = data.qu9_contents;
this.questionform.qu10 = data.qu10 == 0 ? false : true;
this.questionform.qu10contents = data.qu10_contents;
this.questionform.qu11 = data.qu11 == 0 ? false : true;
this.questionform.qu11contents = data.qu11_contents;
this.questionform.qu12 = data.qu12 == 0 ? false : true;
this.questionform.qu12contents = data.qu12_contents;
this.questionform.qu13 = data.qu13 == 0 ? false : true;
this.questionform.qu13contents = data.qu13_contents;
this.questionform.qu14 = data.qu14 == 0 ? false : true;
this.questionform.qu14contents = data.qu14_contents;
this.questionform.qu15 = data.qu15 == 0 ? false : true;
this.questionform.qu15contents = data.qu15_contents;
this.questionform.rated = data.rated;
this.questionform.recommend = data.recommend;
this.questionform.other = data.other;
this.questionform.confident = data.confidential;
this.questionform.comment = data.comments;
this.questionform.is_anonymous = data.is_anonymous;
this.questionform.type= data.type;
this.questionform.score = data.score;
this.dialogFormVisible = true;
},
//初始化文章信息
initarticle() {
this.$api

View File

@@ -0,0 +1,282 @@
<template>
<div>
<el-form :model="questionform" :rules="isEdit ? rules : {}" ref="question" label-width="300px" label-position="top">
<el-divider content-position="center">REVIEWER'S ASSESSMENT</el-divider>
<oldForm
v-if="!isNewForm"
:txt_mess="txt_mess"
:isEdit="isEdit"
:form="baseQuestionform"
@update="(e) => (questionform = e)"
></oldForm>
<newForm
v-if="isNewForm"
:txt_mess="txt_mess"
:isEdit="isEdit"
:form="baseQuestionform"
@update="(e) => (questionform = e)"
></newForm>
</el-form>
</div>
</template>
<script>
import oldForm from './old.vue';
import newForm from './new.vue';
export default {
components: {
oldForm,
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() {
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 = 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(this.isNewForm ? 'api/Reviewer/questionSubmitNew' : 'api/Reviewer/questionSubmit', {
...this.questionform,
type: this.isNewForm ? (this.txt_mess.atype == 'REVIEW' || this.txt_mess.atype == 'MINI REVIEW' ? 3 : 2) : 1
})
.then((res) => {
if (res.code == 0) {
loading.close();
this.$message.success('Success!!');
this.$emit('refresh');
this.$router.push('/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;
}
</style>