上传文件

This commit is contained in:
徐哼唧L
2024-02-08 09:15:38 +08:00
parent a5110e7c16
commit 9fdafcb949
8 changed files with 820 additions and 500 deletions

1
.gitignore vendored
View File

@@ -24,3 +24,4 @@ node_modules
/package-lock.json /package-lock.json
/src/api/index.js /src/api/index.js
/src/components/common/common.vue /src/components/common/common.vue
/vue.config.js

Binary file not shown.

After

Width:  |  Height:  |  Size: 710 B

View File

@@ -151,7 +151,8 @@
Website : Website :
</div> </div>
<div class="expInde" style="margin-top: 0;"> <div class="expInde" style="margin-top: 0;">
<el-link :href="coreTable.website" target="_blank" type="primary">Personal academic introduction</el-link> <el-link :href="coreTable.website" target="_blank" type="primary">Personal academic
introduction</el-link>
</div> </div>
</div> </div>
<div v-if="coreTable.company!=''"> <div v-if="coreTable.company!=''">
@@ -240,11 +241,12 @@
<p>Published articles</p> <p>Published articles</p>
</div> </div>
<div class="numerItem"> <div class="numerItem">
<b >{{authorTable.tj}}</b> <b>{{authorTable.tj}}</b>
<p>Recommended manuscripts</p> <p>Recommended manuscripts</p>
</div> </div>
<div class="numerItem" > <div class="numerItem">
<b @click="JumpPage(6)" v-if="reviewTable.successReview">{{reviewTable.successReview}}</b> <b @click="JumpPage(6)"
v-if="reviewTable.successReview">{{reviewTable.successReview}}</b>
<b @click="JumpPage(6)" v-else>0</b> <b @click="JumpPage(6)" v-else>0</b>
<p>Reviewed manuscripts</p> <p>Reviewed manuscripts</p>
</div> </div>
@@ -562,11 +564,11 @@
</div> </div>
<div class="new_scard" v-if="!this.usercap.includes('editor')"> <div class="new_scard" v-if="!this.usercap.includes('editor')">
<p> <!-- <p>
New Zealand New Zealand
<img src="../../assets/img/New_Z.png" <img src="../../assets/img/New_Z.png"
style="width: 45px;margin: 0 0 0 15px;vertical-align: middle;"> style="width: 45px;margin: 0 0 0 15px;vertical-align: middle;">
</p> </p> -->
<p style="margin: 10px 0;white-space:nowrap;"> <p style="margin: 10px 0;white-space:nowrap;">
<b style="color: #666;font-size: 14px;cursor: text;">Telephone number :</b> +64 <b style="color: #666;font-size: 14px;cursor: text;">Telephone number :</b> +64
02108293806 02108293806
@@ -1018,54 +1020,54 @@
youth_journal: [], youth_journal: [],
df_country: [], df_country: [],
df_technical: [{ df_technical: [{
label: 'Professor', label: 'Professor',
}, { }, {
label: 'Associate Professor', label: 'Associate Professor',
}, { }, {
label: 'Assistant Professor', label: 'Assistant Professor',
}, },
// { // {
// label: 'Ph.D.', // label: 'Ph.D.',
// }, // },
{ {
label: 'Researcher', label: 'Researcher',
}, { }, {
label: 'Associate research fellow', label: 'Associate research fellow',
}, { }, {
label: 'Assistant research fellow', label: 'Assistant research fellow',
}, { }, {
label: 'Engineer', label: 'Engineer',
}, { }, {
label: 'Senior engineer', label: 'Senior engineer',
}, },
{ {
label: 'Associate Researcher', label: 'Associate Researcher',
}, },
{ {
label: 'Lecturer', label: 'Lecturer',
}, },
{ {
label: 'Associate Chief Physician', label: 'Associate Chief Physician',
}, },
{ {
label: 'Assistant Researcher', label: 'Assistant Researcher',
}, },
{ {
label: 'Physician', label: 'Physician',
}, },
{ {
label: 'Chief Physician', label: 'Chief Physician',
}, },
{ {
label: 'Senior Lecturer', label: 'Senior Lecturer',
}, },
{ {
label: 'Research Fellow', label: 'Research Fellow',
}, },
{ {
label: 'Senior Investigator', label: 'Senior Investigator',
}, },
], ],
fileL_pdf1: [], fileL_pdf1: [],
pwdVisible: false, pwdVisible: false,
usermsgList: [], usermsgList: [],
@@ -1477,7 +1479,7 @@
} }
if (res.data.asReviewer) { if (res.data.asReviewer) {
this.review_journal = res.data.asReviewer.journal this.review_journal = res.data.asReviewer.journal
this.reviewTable = res.data.asReviewer this.reviewTable = res.data.asReviewer
if (!this.usercap.includes('reviewer')) { if (!this.usercap.includes('reviewer')) {
localStorage.setItem('U_role', this.usercap + ',reviewer') localStorage.setItem('U_role', this.usercap + ',reviewer')
} }
@@ -1491,7 +1493,11 @@
if (res.data.Yboard) { if (res.data.Yboard) {
this.youth_journal = res.data.Yboard this.youth_journal = res.data.Yboard
for (let i = 0; i < this.youth_journal.length; i++) { for (let i = 0; i < this.youth_journal.length; i++) {
this.youth_journal[i].arrowMark = 0 if (i == 0) {
this.youth_journal[i].arrowMark = 1
} else {
this.youth_journal[i].arrowMark = 0
}
} }
if (!this.usercap.includes('yboard')) { if (!this.usercap.includes('yboard')) {
localStorage.setItem('U_role', this.usercap + ',yboard') localStorage.setItem('U_role', this.usercap + ',yboard')
@@ -2685,4 +2691,4 @@
line-height: 140px; line-height: 140px;
text-align: center; text-align: center;
} */ } */
</style> </style>

View File

@@ -76,7 +76,7 @@
<el-option v-for="item in journal_type" :key="item.value" :label="item.name" <el-option v-for="item in journal_type" :key="item.value" :label="item.name"
:value="item.value"></el-option> :value="item.value"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="Major :" :required="true" prop="major_a"> <el-form-item label="Major :" :required="true" prop="major_a">
<el-select v-model="form.major_a" placeholder="Please select major" @change="majorChange(1)" <el-select v-model="form.major_a" placeholder="Please select major" @change="majorChange(1)"
@@ -100,14 +100,32 @@
<el-form-item label="Manuscript Title :" prop="title"> <el-form-item label="Manuscript Title :" prop="title">
<el-input v-model="form.title" placeholder="Please enter title"></el-input> <el-input v-model="form.title" placeholder="Please enter title"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="Whether ethical approval was obtained ?" v-show="form.type == 'A'" <el-form-item label="Whether ethical approval was obtained ?" prop="approval"
label-width="300px"> label-width="300px">
<el-switch v-model="form.approval" active-text="yes" inactive-text="no"></el-switch> <el-radio-group v-model="form.approval">
<p v-show="form.approval == true" <el-radio :label="1">Yes</el-radio>
style="display: inline-block;width: 440px;margin-left: 60px;vertical-align: top;line-height: 22px;color: #999;font-size: 12px;"> <el-radio :label="0">No</el-radio>
For authors who selected 'Yes', please provide the approval number and name of the </el-radio-group>
ethics committee or institutional review board that approved the study. </el-form-item>
</p> <el-form-item label="Ethical approval file :" prop="approval_file" v-if="form.approval == 1"
label-width="300px">
<el-upload ref="uploadFile" class="upload-demo up_newstyle" :action="upload_articleApproval"
accept=".pdf" name="articleApproval" :before-upload="beforeupload_articleApproval"
:on-error="uperr_coverLetter" :on-success="upSuccess_articleApproval" :limit="1"
:on-exceed="alertlimit" :on-remove="removefilearticleApproval" :file-list="fileL_articleApproval"
:on-preview="dowloadFile">
<div class="el-upload__text" @click="clearUploadedFile">
<em>Upload</em>
</div>
<div class="el-upload__tip" slot="tip">
Only Word and compressed files can be uploaded (file format: .pdf).
</div>
</el-upload>
</el-form-item>
<el-form-item label="Explain the reason clearly :" prop="approval_content"
v-if="form.approval === 0" label-width="300px">
<el-input type="textarea" rows="2" v-model="form.approval_content"
placeholder="Please enter"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="Abstract :" prop="abstrart"> <el-form-item label="Abstract :" prop="abstrart">
<el-input type="textarea" rows="5" v-model="form.abstrart" <el-input type="textarea" rows="5" v-model="form.abstrart"
@@ -326,7 +344,7 @@
Only Word and compressed files can be uploaded (file format: .docx). Only Word and compressed files can be uploaded (file format: .docx).
</div> </div>
</el-upload> </el-upload>
</el-form-item> </el-form-item>
<el-form-item label="Supplementary Material :" label-width="200px"> <el-form-item label="Supplementary Material :" label-width="200px">
<el-upload class="upload-demo up_newstyle" :action="upload_supplementary" accept=".zip" <el-upload class="upload-demo up_newstyle" :action="upload_supplementary" accept=".zip"
@@ -488,7 +506,7 @@
</el-form-item> </el-form-item>
<el-form-item label="Major :" prop="major_all"> <el-form-item label="Major :" prop="major_all">
<el-cascader :options="step4MajorList" v-model="item.major_all" :props="default4Params" <el-cascader :options="step4MajorList" v-model="item.major_all" :props="default4Params"
placeholder="Please select major" style="width: 270px;" clearable ></el-cascader> placeholder="Please select major" style="width: 270px;" clearable></el-cascader>
</el-form-item> </el-form-item>
<el-button :disabled="tuiJianForm.length==1" @click="onDeleteTuijian(item, index)" <el-button :disabled="tuiJianForm.length==1" @click="onDeleteTuijian(item, index)"
type="danger" icon="el-icon-delete" class="shanchu_tj"></el-button> type="danger" icon="el-icon-delete" class="shanchu_tj"></el-button>
@@ -653,7 +671,7 @@
checkedjours: [], checkedjours: [],
abstrart: '', abstrart: '',
type: '', type: '',
approval: false, approval: '',
istransfer: false, istransfer: false,
becomeRev: false, becomeRev: false,
keyWords: '', keyWords: '',
@@ -664,6 +682,8 @@
totalpage: '', totalpage: '',
manuscirpt: '', manuscirpt: '',
supplementary: '', supplementary: '',
approval_file:'',
approval_content:'',
code: '', code: '',
// topics:null // topics:null
}, },
@@ -756,6 +776,7 @@
major_all: '' major_all: ''
}], }],
countrys: [], countrys: [],
fileL_articleApproval: [],
fileL_coverLetter: [], fileL_coverLetter: [],
fileL_picturesAndTables: [], fileL_picturesAndTables: [],
fileL_manuscirpt: [], fileL_manuscirpt: [],
@@ -857,6 +878,21 @@
message: 'Please select major', message: 'Please select major',
trigger: 'blur' trigger: 'blur'
}], }],
approval: [{
required: true,
message: 'Please select whether ethical approval was obtained',
trigger: 'blur'
}],
approval_content: [{
required: true,
message: 'Please enter reason',
trigger: 'blur'
}],
approval_file: [{
required: true,
message: 'Please upload ethical approva file',
trigger: 'blur'
}],
}, },
activeNames: [1], activeNames: [1],
keywordsList: [{ keywordsList: [{
@@ -874,22 +910,22 @@
companyList: [], companyList: [],
countrys: [], countrys: [],
majorList: [], majorList: [],
step4MajorList:[], // 第四步的major数据 step4MajorList: [], // 第四步的major数据
jl_major: [], jl_major: [],
defaultParams: { defaultParams: {
label: 'title', label: 'title',
value: 'major_id', value: 'major_id',
children: 'children' children: 'children'
}, },
default4Params:{ default4Params: {
label: 'major_title', label: 'major_title',
value: 'major_id', value: 'major_id',
children: 'children' children: 'children'
}, },
mj_jour: [], mj_jour: [],
jour_name: '', jour_name: '',
topicsList:null, // 话题列表 topicsList: null, // 话题列表
topicsProps:{ topicsProps: {
multiple: true, multiple: true,
emitPath: false, // 只返回该节点的值 emitPath: false, // 只返回该节点的值
value: "journal_topic_id", // 自定义要映射的键名 value: "journal_topic_id", // 自定义要映射的键名
@@ -917,6 +953,9 @@
} }
}, },
computed: { computed: {
upload_articleApproval: function() {
return this.baseUrl + 'api/Article/up_approval_file';
},
upload_coverLetter: function() { upload_coverLetter: function() {
return this.baseUrl + 'api/Article/up_file/type/coverLetter'; return this.baseUrl + 'api/Article/up_file/type/coverLetter';
}, },
@@ -1030,14 +1069,15 @@
if (vali) { if (vali) {
tuijian_yanzheng += 0 tuijian_yanzheng += 0
//this.tuiJianForm[i].major = this.tuiJianForm[i].major_all[0] //this.tuiJianForm[i].major = this.tuiJianForm[i].major_all[0]
this.tuiJianForm[i].major = this.tuiJianForm[i].major_all[this.tuiJianForm[i].major_all.length - 1] this.tuiJianForm[i].major = this.tuiJianForm[i].major_all[this
.tuiJianForm[i].major_all.length - 1]
//this.tuiJianForm[i].cmajor = this.tuiJianForm[i].major_all[1] //this.tuiJianForm[i].cmajor = this.tuiJianForm[i].major_all[1]
} else { } else {
tuijian_yanzheng += 1 tuijian_yanzheng += 1
} }
}) })
} }
this.form.reviewers = this.tuiJianForm this.form.reviewers = this.tuiJianForm
} else { } else {
this.form.reviewers = [] this.form.reviewers = []
} }
@@ -1192,21 +1232,20 @@
'value': res.data.companys[i].title 'value': res.data.companys[i].title
}) })
} }
}); });
this.$api this.$api
.post('/api/Reviewer/getMajorForReviewer', { .post('/api/Reviewer/getMajorForReviewer', {
username: localStorage.getItem('U_name'), username: localStorage.getItem('U_name'),
}).then(res => { }).then(res => {
if (res.data.major != 0) { if (res.data.major != 0) {
this.$api this.$api
.post('api/User/getMajorList') .post('api/User/getMajorList')
.then(res => { .then(res => {
this.majorList = res.data; this.majorList = res.data;
}) })
} }
}) })
this.$api this.$api
.post('api/Reviewer/getAllMajor') .post('api/Reviewer/getAllMajor')
.then(res => { .then(res => {
@@ -1219,12 +1258,12 @@
this.checkReviewer() this.checkReviewer()
this.$api this.$api
.post('api/Major/getMajorList') .post('api/Major/getMajorList')
.then(res => { .then(res => {
console.log(res,99) console.log(res, 99)
this.step4MajorList = res.data.majors; this.step4MajorList = res.data.majors;
}) })
}, },
@@ -1396,6 +1435,17 @@
document.body.removeChild(downloadElement); document.body.removeChild(downloadElement);
}, },
//检验上传文件的格式 //检验上传文件的格式
beforeupload_articleApproval(file) {
// const ismau =
// file.type === 'application/msword' ||
// file.type === 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' ||
// file.type === 'application/x-zip-compressed' ||
// file.name.split('.')[1] === 'rar';
// if (!ismau) {
// this.$message.error('Only word and compressed files(.doc,.docx,.rar,.zip)');
// }
// return ismau;
},
beforeupload_coverLetter(file) { beforeupload_coverLetter(file) {
// const isWORd = // const isWORd =
// file.type === 'application/msword' || // file.type === 'application/msword' ||
@@ -1451,6 +1501,17 @@
// return ismau; // return ismau;
}, },
//文件上传成功后的操作 //文件上传成功后的操作
upSuccess_articleApproval(res, file) {
if (res.code == 0) {
this.form.approval_file = 'articleApproval/' + res.upurl;
this.fileL_articleApproval = [{}];
this.fileL_articleApproval[0].name = "Ethical approval File";
this.fileL_articleApproval[0].url = 'articleApproval/' + res.upurl;
} else {
this.$message.error('service error: ' + res.msg);
}
console.log(this.form)
},
upSuccess_coverLetter(res, file) { upSuccess_coverLetter(res, file) {
if (res.code == 0) { if (res.code == 0) {
this.form.coverLetter = 'coverLetter/' + res.upurl; this.form.coverLetter = 'coverLetter/' + res.upurl;
@@ -1510,6 +1571,10 @@
this.$message.error('The maximum number of uploaded files has been exceeded'); this.$message.error('The maximum number of uploaded files has been exceeded');
}, },
//清除文件时的事件 //清除文件时的事件
removefilearticleApproval(file, fileList) {
this.form.approval_file = '';
this.fileL_articleApproval = [];
},
removefilecoverLetter(file, fileList) { removefilecoverLetter(file, fileList) {
this.form.coverLetter = ''; this.form.coverLetter = '';
this.fileL_coverLetter = [] this.fileL_coverLetter = []
@@ -1709,9 +1774,15 @@
} }
} }
}, },
showFiles() { showFiles() {
// 文件显示出来 // 文件显示出来
this.fileL_articleApproval = [];
if (this.form.approval_file != '') {
this.fileL_articleApproval = [{}]
this.fileL_articleApproval[0].name = "Ethical approval file";
this.fileL_articleApproval[0].url = this.form.approval_file;
}
this.fileL_coverLetter = []; this.fileL_coverLetter = [];
if (this.form.coverLetter != '') { if (this.form.coverLetter != '') {
this.fileL_coverLetter = [{}] this.fileL_coverLetter = [{}]
@@ -1965,8 +2036,10 @@
this.form.type = res.data.base.type this.form.type = res.data.base.type
this.form.title = res.data.base.title this.form.title = res.data.base.title
this.form.approval = res.data.base.approval this.form.approval = res.data.base.approval
this.form.approval_content = res.data.base.approval_content
this.form.abstrart = res.data.base.abstrart this.form.abstrart = res.data.base.abstrart
this.form.fund = res.data.base.fund this.form.fund = res.data.base.fund
console.log(res.data.base)
// this.form.topics = res.data.base.topics // this.form.topics = res.data.base.topics
// 领域 // 领域
this.$api this.$api
@@ -2034,6 +2107,10 @@
// 文件 // 文件
if (res.data.files.length > 0) { if (res.data.files.length > 0) {
for (let i = 0; i < res.data.files.length; i++) { for (let i = 0; i < res.data.files.length; i++) {
if (res.data.files[i].type_name == 'articleApprova') {
this.form.approval_file = res.data.files[i].file_url
this.form.approval_fileId = res.data.files[i].file_id
}
if (res.data.files[i].type_name == 'coverLetter') { if (res.data.files[i].type_name == 'coverLetter') {
this.form.coverLetter = res.data.files[i].file_url this.form.coverLetter = res.data.files[i].file_url
this.form.coverLetterId = res.data.files[i].file_id this.form.coverLetterId = res.data.files[i].file_id
@@ -2065,20 +2142,22 @@
}, },
// 获取话题 // 获取话题
getTopics(){ getTopics() {
this.$api this.$api
.post('api/Article/getJournalTopics', {'journal_id': this.Reviewerof.journal}) .post('api/Article/getJournalTopics', {
.then((res) => { 'journal_id': this.Reviewerof.journal
if (res.code == 0) { })
this.topicsList = res.data.topics .then((res) => {
// console.log(res.data.topics,'话题') if (res.code == 0) {
} else { this.topicsList = res.data.topics
this.$message.error(res.msg); // console.log(res.data.topics,'话题')
} } else {
}); this.$message.error(res.msg);
}
});
}, },
// 选中值变化 // 选中值变化
topicsChange(e){ topicsChange(e) {
// console.log(this.form.topics,'选中的话题id') // console.log(this.form.topics,'选中的话题id')
} }
@@ -2087,7 +2166,7 @@
</script> </script>
<style scoped> <style scoped>
.formTopics{ .formTopics {
width: 100%; width: 100%;
} }
</style> </style>
@@ -2343,7 +2422,7 @@
.jour_ku_all { .jour_ku_all {
font-size: 12px; font-size: 12px;
float: left; float: left;
width: 210px; width: 265px;
padding-left: 10px; padding-left: 10px;
cursor: pointer; cursor: pointer;
color: #666; color: #666;
@@ -2351,11 +2430,11 @@
} }
.jour_ku_all:nth-child(3n+1) { .jour_ku_all:nth-child(3n+1) {
width: 270px; width: 230px;
} }
.jour_ku_all:nth-child(3n+2) { .jour_ku_all:nth-child(3n+2) {
width: 240px; width: 220px;
} }
.jour_ku_all.B_style { .jour_ku_all.B_style {
@@ -2419,4 +2498,4 @@
word-break: break-word; word-break: break-word;
text-align: left; text-align: left;
} }
</style> </style>

View File

@@ -22,8 +22,19 @@
<font>Title :</font> <font>Title :</font>
<b> {{form.title}}</b> <b> {{form.title}}</b>
</p> </p>
<p v-show="form.type=='A'"> <!-- <p v-show="form.type=='A'">
<font>Ethical Approval :</font><b>{{form.approval?'Yes':'No'}}</b> <font>Ethical Approval :</font><b>{{form.approval?'Yes':'No'}}</b>
</p> -->
<p>
<font>Ethical Approval :</font><b>{{form.approval?'Yes':'No'}}</b>
<a target="_blank" :href="mediaUrl + form.approval_file" v-if="form.approval==1&&form.approval_file!=''" style="color: #777;">
<img src="../../assets/img/icon_0.png" style="vertical-align: text-bottom;margin: 0 10px 0 30px;width: 15px;">
<font>Ethical approval file</font>
<i class="el-icon-download download" style="vertical-align: middle;margin:0 20px;font-weight: bold;color: #75abf1;"></i>
</a>
</p>
<p v-if="form.approval==0&&form.approval_content!=''">
<font>Explain the reason clearly :</font><b>{{form.approval_content}}</b>
</p> </p>
<p v-if="form.special_num > 0"> <p v-if="form.special_num > 0">
<font>Special Issues :</font><b>{{ form.special_title }}</b> <font>Special Issues :</font><b>{{ form.special_title }}</b>
@@ -499,6 +510,8 @@
type: '', type: '',
major: '', major: '',
approval: false, approval: false,
approval_file:'',
approval_content:'',
repetition: '', repetition: '',
manuscirpt: '', manuscirpt: '',
remarks: '', remarks: '',
@@ -767,6 +780,8 @@
this.form.special_title = res.article.special_title; this.form.special_title = res.article.special_title;
this.form.major = res.major; this.form.major = res.major;
this.form.approval = res.article.approval == 1 ? true : false; this.form.approval = res.article.approval == 1 ? true : false;
this.form.approval_file = res.article.approval_file
this.form.approval_content = res.article.approval_content
this.form.repetition = res.article.repetition; this.form.repetition = res.article.repetition;
this.form.remarks = res.article.remarks; this.form.remarks = res.article.remarks;
this.form.repeurl = res.article.repeurl; this.form.repeurl = res.article.repeurl;

View File

@@ -1,5 +1,5 @@
<template> <template>
<div > <div>
<div class="crumbs"> <div class="crumbs">
<el-breadcrumb separator="/"> <el-breadcrumb separator="/">
<el-breadcrumb-item> <el-breadcrumb-item>
@@ -96,8 +96,8 @@
<font> | </font> <font> | </font>
<span @click="goPre_ingested(item.article_id)" class="preButton"> <span @click="goPre_ingested(item.article_id)" class="preButton">
<!-- <el-badge is-dot class="item" > --> <!-- <el-badge is-dot class="item" > -->
<i class="el-icon-edit"></i>Enter Pre-accept Process <i class="el-icon-edit"></i>Enter Pre-accept Process
<!-- </el-badge> --> <!-- </el-badge> -->
</span> </span>
</span> </span>
</div> </div>
@@ -135,7 +135,7 @@
<span style="margin: 0 4px 0 5px;">Click here to :</span> <span style="margin: 0 4px 0 5px;">Click here to :</span>
<b style="color: #5fab3b;">Confirm the Proof</b> <b style="color: #5fab3b;">Confirm the Proof</b>
</router-link> </router-link>
</div> </div>
</div> </div>
@@ -157,8 +157,16 @@
<p> <p>
<font>Type :</font><b>{{artextForm.type | ellipsis}}</b> <font>Type :</font><b>{{artextForm.type | ellipsis}}</b>
</p> </p>
<p v-show="artextForm.type=='A'"> <p>
<font>Ethical Approval :</font><b>{{artextForm.approval?'Yes':'No'}}</b> <font>Ethical Approval :</font><b>{{artextForm.approval?'Yes':'No'}}</b>
<a target="_blank" :href="mediaUrl + artextForm.approval_file" v-if="artextForm.approval==1&&artextForm.approval_file!=''" style="color: #777;">
<img src="../../assets/img/icon_0.png" style="vertical-align: text-bottom;margin: 0 10px 0 30px;width: 15px;">
<font>Ethical approval file</font>
<i class="el-icon-download download" style="vertical-align: middle;margin:0 20px;font-weight: bold;color: #75abf1;"></i>
</a>
</p>
<p v-if="artextForm.approval==0&&artextForm.approval_content!=''">
<font>Explain the reason clearly :</font><b>{{artextForm.approval_content}}</b>
</p> </p>
<p v-if="artextForm.special_num > 0"> <p v-if="artextForm.special_num > 0">
<font>Special Issues :</font><b>{{ artextForm.special_title }}</b> <font>Special Issues :</font><b>{{ artextForm.special_title }}</b>
@@ -312,59 +320,64 @@
</template> </template>
<!-- 时间轴 --> <!-- 时间轴 -->
<el-timeline v-if="item.question && item.question[0] != null"> <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-timeline-item :timestamp="item1.ctime|formatDatehms" placement="top"
<el-card> 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> <div v-if="index1 == item.question.length-1">
<!-- 内容 --> <h4><el-tag>Under review</el-tag></h4>
<div class="art_author_coment"> <!-- 内容 -->
<p v-if="item1.qu9_contents!=''"> <div class="art_author_coment">
<font>Does the title represent manuscript's contents?</font> <p v-if="item1.qu9_contents!=''">
<pre>{{item1.qu9_contents}}</pre> <font>Does the title represent manuscript's contents?</font>
</p> <pre>{{item1.qu9_contents}}</pre>
<p v-if="item1.qu10_contents!=''"> </p>
<font>Is the Abstract accurate and concise?</font> <p v-if="item1.qu10_contents!=''">
<pre>{{item1.qu10_contents}}</pre> <font>Is the Abstract accurate and concise?</font>
</p> <pre>{{item1.qu10_contents}}</pre>
<p v-if="item1.qu11_contents!=''"> </p>
<font>Are the approach/ methods properly described?</font> <p v-if="item1.qu11_contents!=''">
<pre>{{item1.qu11_contents}}</pre> <font>Are the approach/ methods properly described?</font>
</p> <pre>{{item1.qu11_contents}}</pre>
<p v-if="item1.qu12_contents!=''"> </p>
<font>Are the conclusions and interpretations sound?</font> <p v-if="item1.qu12_contents!=''">
<pre>{{item1.qu12_contents}}</pre> <font>Are the conclusions and interpretations sound?</font>
</p> <pre>{{item1.qu12_contents}}</pre>
<p v-if="item1.qu13_contents!=''"> </p>
<font>Are the references properly cited?</font> <p v-if="item1.qu13_contents!=''">
<pre>{{item1.qu13_contents}}</pre> <font>Are the references properly cited?</font>
</p> <pre>{{item1.qu13_contents}}</pre>
<p v-if="item1.comments!=''"> </p>
<font>Comments for the Authors</font> <p v-if="item1.comments!=''">
<pre>{{item1.comments}}</pre> <font>Comments for the Authors</font>
</p> <pre>{{item1.comments}}</pre>
</div> </p>
</div> </div>
<div v-else> </div>
<!-- 复审 --> <div v-else>
<el-tag type="success">Second review</el-tag> <!-- 复审 -->
<p style="margin-top: 20px;" > <el-tag type="success">Second review</el-tag>
<i class="el-icon-check final Accept" v-if="item1.recommend == 1" >{{item1.recommend | getOpinion}}</i> <p style="margin-top: 20px;">
<i class="el-icon-close final Reject" v-if="item1.recommend == 2" >{{item1.recommend | getOpinion}}</i> <i class="el-icon-check final Accept"
<i class="el-icon-refresh-left final Revison" v-if="item1.recommend == 3" >{{item1.recommend | getOpinion}}</i> v-if="item1.recommend == 1">{{item1.recommend | getOpinion}}</i>
</p> <i class="el-icon-close final Reject"
<p class="commentfs" v-if="item1.recommend == 3" style="margin-bottom: 10px;"> v-if="item1.recommend == 2">{{item1.recommend | getOpinion}}</i>
<font style="display: inline-block; margin-right: 20px;">Comments for the Authors</font> <i class="el-icon-refresh-left final Revison"
<pre>{{item1.content}}</pre> v-if="item1.recommend == 3">{{item1.recommend | getOpinion}}</i>
</p> </p>
<p style="" class="stime" v-if="item1.stime != 0"> <p class="commentfs" v-if="item1.recommend == 3" style="margin-bottom: 10px;">
Response time: {{item1.stime|formatDatehms}} * {{item1.stime}} <font style="display: inline-block; margin-right: 20px;">Comments for the
</p> Authors</font>
</div> <pre>{{item1.content}}</pre>
</el-card> </p>
</el-timeline-item> <p style="" class="stime" v-if="item1.stime != 0">
</el-timeline> Response time: {{item1.stime|formatDatehms}} * {{item1.stime}}
<!-- end --> </p>
</div>
</el-card>
</el-timeline-item>
</el-timeline>
<!-- end -->
</el-collapse-item> </el-collapse-item>
</el-collapse> </el-collapse>
<p v-if="comentDeploy==''" style="color: #888888;margin: 0 0 0 10px;">No Comment</p> <p v-if="comentDeploy==''" style="color: #888888;margin: 0 0 0 10px;">No Comment</p>
@@ -473,11 +486,11 @@
}, },
// 显示预收录页面 // 显示预收录页面
goPre_ingested(id){ goPre_ingested(id) {
this.$router.push({ this.$router.push({
path: 'PreIngested', path: 'PreIngested',
query: { query: {
id: id id: id
// id: 3070 // id: 3070
} }
}); });
@@ -503,8 +516,8 @@
// 弹出框 // 弹出框
this.comentDeploy = res.suggest this.comentDeploy = res.suggest
this.comentDeploy.map(item => { this.comentDeploy.map(item => {
if(item.question && item.question.length > 0) if (item.question && item.question.length > 0)
item.question = item.question.reverse() item.question = item.question.reverse()
}) })
// this.activeComment = [] // this.activeComment = []
// for (var i = 0; i < res.suggest.length; i++) { // for (var i = 0; i < res.suggest.length; i++) {
@@ -572,6 +585,7 @@
.catch(err => { .catch(err => {
console.log(err); console.log(err);
}); });
}, },
@@ -594,9 +608,9 @@
}, },
}, },
filters: { filters: {
// 复审意见结果 // 复审意见结果
getOpinion(value){ getOpinion(value) {
switch (value) { switch (value) {
case 1: case 1:
return 'Accept' return 'Accept'
@@ -609,7 +623,7 @@
break; break;
} }
}, },
// 文章类型 // 文章类型
ellipsis(value) { ellipsis(value) {
let frag = ''; let frag = '';
@@ -786,14 +800,36 @@
</script> </script>
<style scoped> <style scoped>
.time p{color: #606266;} .time p {
.Accept{color: #67c23a;} color: #606266;
.Reject{color: #909399;} }
.Revison{color: #e6a23c;}
.final{ font-size: 20px;} .Accept {
.preButton{ display: inline-block; position: relative; } color: #67c23a;
/* .preButton:after{content: ''; display: block; width: 6px; height: 6px; background: #ff0000; position: absolute; right: 0; top: -5px; border-radius: 6px;} */ }
.preButton:hover{text-decoration:underline !important;}
.Reject {
color: #909399;
}
.Revison {
color: #e6a23c;
}
.final {
font-size: 20px;
}
.preButton {
display: inline-block;
position: relative;
}
/* .preButton:after{content: ''; display: block; width: 6px; height: 6px; background: #ff0000; position: absolute; right: 0; top: -5px; border-radius: 6px;} */
.preButton:hover {
text-decoration: underline !important;
}
.container { .container {
color: #333; color: #333;
} }
@@ -979,4 +1015,4 @@
font-weight: bold; font-weight: bold;
letter-spacing: -0.5px; letter-spacing: -0.5px;
} }
</style> </style>

View File

@@ -39,274 +39,283 @@
<el-button type="primary" icon="el-icon-search" @click="handleSearch" style="margin:0 0 10px 0;">Search <el-button type="primary" icon="el-icon-search" @click="handleSearch" style="margin:0 0 10px 0;">Search
</el-button> </el-button>
</div> </div>
<div v-if="!PreAcpVisible" > <div v-if="!PreAcpVisible">
<div v-for="(item,ikgn) in tableData" class="mangu_list"> <div v-for="(item,ikgn) in tableData" class="mangu_list">
<div> <div>
<font style="color: #666b7a;">ID : </font> <font style="color: #666b7a;">ID : </font>
<span <span
style="background-color: #006699;width: 20px;color: #fff;margin: 0 2px 0 0;font-weight: bold;padding: 2px 4px;" style="background-color: #006699;width: 20px;color: #fff;margin: 0 2px 0 0;font-weight: bold;padding: 2px 4px;"
v-if="item.special_num>0">S v-if="item.special_num>0">S
</span> </span>
{{item.accept_sn}} {{item.accept_sn}}
<!-- <b @click="showdetaileditor(item)" class="btnCliArt" style="margin-left: 15px;"> <!-- <b @click="showdetaileditor(item)" class="btnCliArt" style="margin-left: 15px;">
<i class="el-icon-collection"></i> Detail <i class="el-icon-collection"></i> Detail
</b> --> </b> -->
<span style="color: #666b7a;margin-left: 40px;">Type :</span> <span style="color: #666b7a;margin-left: 40px;">Type :</span>
<font> <font>
{{artType(item.type)}} {{artType(item.type)}}
</font> </font>
<span style="color: #666b7a;margin-left: 40px;">Countries :</span> <span style="color: #666b7a;margin-left: 40px;">Countries :</span>
<!-- <span :class="item.countrys.length > 1 ? 'Countries': ''" > --> <!-- <span :class="item.countrys.length > 1 ? 'Countries': ''" > -->
<font v-for="(iken, index) in item.countrys"> <font v-for="(iken, index) in item.countrys">
{{iken}} {{iken}}
<font v-if="index!=item.countrys.length-1">,</font> <font v-if="index!=item.countrys.length-1">,</font>
</font> </font>
<!-- </span> --> <!-- </span> -->
<span style="color: #666b7a;margin-left: 40px;">Status :</span> <span style="color: #666b7a;margin-left: 40px;">Status :</span>
<font style="margin-right: 15px;font-size: 16px;font-weight: bold;letter-spacing: -0.5px;"> <font style="margin-right: 15px;font-size: 16px;font-weight: bold;letter-spacing: -0.5px;">
{{stateFormat(item.state)}} {{stateFormat(item.state)}}
</font> </font>
<b v-if="item.state!=5" @click="testvis(item)" class="btnCliArt"> <b v-if="item.state!=5" @click="testvis(item)" class="btnCliArt">
<i class="el-icon-edit"></i> Change <i class="el-icon-edit"></i> Change
</b> </b>
<b v-if="item.state==5" @click="prodBegin(item)" class="btnCliArt"> <b v-if="item.state==5" @click="prodBegin(item)" class="btnCliArt">
<i class="el-icon-paperclip"></i> Begin Produce <i class="el-icon-paperclip"></i> Begin Produce
</b> </b>
<span style="color: #666b7a;margin-left: 40px;">Plagiarism Check :</span> <span style="color: #666b7a;margin-left: 40px;">Plagiarism Check :</span>
<font style="margin-right: 16px;font-size: 15px;font-weight: bold;"> <font style="margin-right: 16px;font-size: 15px;font-weight: bold;">
{{item.repetition}} % {{item.repetition}} %
</font> </font>
<b @click="changeRepe(item)" class="btnCliArt"> <b @click="changeRepe(item)" class="btnCliArt">
<i class="el-icon-edit"></i> Change <i class="el-icon-edit"></i> Change
</b> </b>
<b @click="openTracking(item)" class="btnCliArt" style="margin-left: 50px;"> <b @click="openTracking(item)" class="btnCliArt" style="margin-left: 50px;">
<i class="el-icon-data-line"></i> Manuscript Tracking <i class="el-icon-data-line"></i> Manuscript Tracking
</b>
</div>
<div class="man_title">
<el-badge is-dot :hidden="item.author_act==1?false:true">
<b @click="showdetaileditor(item)">
{{item.title}}
</b> </b>
</el-badge>
</div>
<div style="display: flex;margin-left: auto;">
<div class="fixCard" style="width: 33%;">
<b style="font-size: 16px;letter-spacing: -0.5px;">Manuscript Files</b>
<p style="height: 10px;"></p>
<div class="fi_new" v-if="item.file.coverLetter">
<p>
Cover letter
<sup style="color: #006699;">({{item.file.coverLetter.length}})</sup> :
<b class="btnUpDown el-icon-arrow-up"
v-if="item.file_cover==0&&item.file.coverLetter.length>1"
@click="changeFileUpdown(1,ikgn,'file_cover')"></b>
<b class="btnUpDown el-icon-arrow-down"
v-if="item.file_cover==1&&item.file.coverLetter.length>1"
@click="changeFileUpdown(0,ikgn,'file_cover')"></b>
</p>
<div v-for="ikrm in item.file.coverLetter" v-if="item.file_cover==1">
<img src="../../assets/img/icon_0.png">
<span>
<font>Uploader : </font>{{ikrm.username}}
<i><i class="el-icon-time"></i>{{formatDate(ikrm.ctime)}}</i>
</span>
<a :href="mediaUrl + ikrm.file_url">
<i class="el-icon-download download"></i>
</a>
</div>
</div>
<div class="fi_new" v-if="item.file.picturesAndTables">
<p>
Figures
<sup style="color: #006699;">({{item.file.picturesAndTables.length}})</sup> :
<b class="btnUpDown el-icon-arrow-up"
v-if="item.file_figer==0&&item.file.picturesAndTables.length>1"
@click="changeFileUpdown(1,ikgn,'file_figer')"></b>
<b class="btnUpDown el-icon-arrow-down"
v-if="item.file_figer==1&&item.file.picturesAndTables.length>1"
@click="changeFileUpdown(0,ikgn,'file_figer')"></b>
</p>
<div v-for="ikrm in item.file.picturesAndTables" v-if="item.file_figer==1">
<img src="../../assets/img/icon_0.png">
<span>
<font>Uploader : </font>{{ikrm.username}}
<i><i class="el-icon-time"></i>{{formatDate(ikrm.ctime)}}</i>
</span>
<a :href="mediaUrl + ikrm.file_url">
<i class="el-icon-download download"></i>
</a>
</div>
</div>
<div class="fi_new" v-if="item.file.totalpage">
<p>
Title page
<sup style="color: #006699;">({{item.file.totalpage.length}})</sup> :
<b class="btnUpDown el-icon-arrow-up"
v-if="item.file_total==0&&item.file.totalpage.length>1"
@click="changeFileUpdown(1,ikgn,'file_total')"></b>
<b class="btnUpDown el-icon-arrow-down"
v-if="item.file_total==1&&item.file.totalpage.length>1"
@click="changeFileUpdown(0,ikgn,'file_total')"></b>
</p>
<div v-for="ikrm in item.file.totalpage" v-if="item.file_total==1">
<img src="../../assets/img/icon_0.png">
<span>
<font>Uploader : </font>{{ikrm.username}}
<i><i class="el-icon-time"></i>{{formatDate(ikrm.ctime)}}</i>
</span>
<a :href="mediaUrl + ikrm.file_url">
<i class="el-icon-download download"></i>
</a>
</div>
</div>
<div class="fi_new" v-if="item.file.manuscirpt">
<p>
Manuscirpt
<sup style="color: #006699;">({{item.file.manuscirpt.length}})</sup> :
<b class="btnUpDown el-icon-arrow-up"
v-if="item.file_maun==0&&item.file.manuscirpt.length>1"
@click="changeFileUpdown(1,ikgn,'file_maun')"></b>
<b class="btnUpDown el-icon-arrow-down"
v-if="item.file_maun==1&&item.file.manuscirpt.length>1"
@click="changeFileUpdown(0,ikgn,'file_maun')"></b>
</p>
<div v-for="ikrm in item.file.manuscirpt" v-if="item.file_maun==1">
<img src="../../assets/img/icon_0.png">
<span>
<font>Uploader : </font>{{ikrm.username}}
<i><i class="el-icon-time"></i>{{formatDate(ikrm.ctime)}}</i>
</span>
<a :href="mediaUrl + ikrm.file_url">
<i class="el-icon-download download"></i>
</a>
</div>
</div>
<div class="fi_new" v-if="item.file.supplementary">
<p>
Supplementary Material
<sup style="color: #006699;">({{item.file.supplementary.length}})</sup> :
<b class="btnUpDown el-icon-arrow-up"
v-if="item.file_supper==0&&item.file.supplementary.length>1"
@click="changeFileUpdown(1,ikgn,'file_supper')"></b>
<b class="btnUpDown el-icon-arrow-down"
v-if="item.file_supper==1&&item.file.supplementary.length>1"
@click="changeFileUpdown(0,ikgn,'file_supper')"></b>
</p>
<div v-for="ikrm in item.file.supplementary" v-if="item.file_supper==1">
<img src="../../assets/img/icon_0.png">
<span>
<font>Uploader : </font>{{ikrm.username}}
<i><i class="el-icon-time"></i>{{formatDate(ikrm.ctime)}}</i>
</span>
<a :href="mediaUrl + ikrm.file_url">
<i class="el-icon-download download"></i>
</a>
</div>
</div>
</div> </div>
<div style="width: 1%;"></div> <div class="man_title">
<div class="fixCard" style="width: 16%;"> <el-badge is-dot :hidden="item.author_act==1?false:true">
<b style="font-size: 16px;letter-spacing: -0.5px;">AI scoring</b> <b @click="showdetaileditor(item)">
<p style="font-size: 18px;font-weight: bold;margin-bottom: 5px;color: #db890e;" {{item.title}}
v-if="item.reportList.length>0"> </b>
<font style="font-size: 14px;font-weight: normal;color: #333;">Initial review score :</font> </el-badge>
{{item.scoring}} <b @click="corrSpe(item)" class="btnCliArt" style="margin-left: 20px;">
<i class="el-icon-refresh refreshBtn" @click="refreshScore(item)"></i> <i class="el-icon-paperclip"></i> Author's previous articles
</p>
<p style="font-size: 18px;font-weight: bold;margin-bottom: 5px;" v-if="item.reportList.length==0">
<font style="font-size: 14px;font-weight: normal;">Initial review score :</font>
{{item.scoring}} <i class="el-icon-refresh refreshBtn" @click="refreshScore(item)"></i>
</p>
<p v-if="item.scoring!=0&&item.H!=null" style="color: #999;">{{item.H.google_editor}}
</p>
<p v-if="item.scoring!=0&&item.H!=null&&item.H.google_time!=0" style="color: #999;">
{{formatDate(item.H.google_time)}}
</p>
<b @click="aiSoring(item)" class="btnCliArt" v-if="item.reportList.length>0"
style="margin-top: 10px;display: block;">
<i class="el-icon-edit"></i> Edit Hindex
</b> </b>
<!-- <el-button @click="aiSoring(item)" size="mini" type="primary" icon="el-icon-edit" </div>
<div style="display: flex;margin-left: auto;">
<div class="fixCard" style="width: 33%;">
<b style="font-size: 16px;letter-spacing: -0.5px;">Manuscript Files</b>
<p style="height: 10px;"></p>
<div class="fi_new" v-if="item.file.coverLetter">
<p>
Cover letter
<sup style="color: #006699;">({{item.file.coverLetter.length}})</sup> :
<b class="btnUpDown el-icon-arrow-up"
v-if="item.file_cover==0&&item.file.coverLetter.length>1"
@click="changeFileUpdown(1,ikgn,'file_cover')"></b>
<b class="btnUpDown el-icon-arrow-down"
v-if="item.file_cover==1&&item.file.coverLetter.length>1"
@click="changeFileUpdown(0,ikgn,'file_cover')"></b>
</p>
<div v-for="ikrm in item.file.coverLetter" v-if="item.file_cover==1">
<img src="../../assets/img/icon_0.png">
<span>
<font>Uploader : </font>{{ikrm.username}}
<i><i class="el-icon-time"></i>{{formatDate(ikrm.ctime)}}</i>
</span>
<a :href="mediaUrl + ikrm.file_url">
<i class="el-icon-download download"></i>
</a>
</div>
</div>
<div class="fi_new" v-if="item.file.picturesAndTables">
<p>
Figures
<sup style="color: #006699;">({{item.file.picturesAndTables.length}})</sup> :
<b class="btnUpDown el-icon-arrow-up"
v-if="item.file_figer==0&&item.file.picturesAndTables.length>1"
@click="changeFileUpdown(1,ikgn,'file_figer')"></b>
<b class="btnUpDown el-icon-arrow-down"
v-if="item.file_figer==1&&item.file.picturesAndTables.length>1"
@click="changeFileUpdown(0,ikgn,'file_figer')"></b>
</p>
<div v-for="ikrm in item.file.picturesAndTables" v-if="item.file_figer==1">
<img src="../../assets/img/icon_0.png">
<span>
<font>Uploader : </font>{{ikrm.username}}
<i><i class="el-icon-time"></i>{{formatDate(ikrm.ctime)}}</i>
</span>
<a :href="mediaUrl + ikrm.file_url">
<i class="el-icon-download download"></i>
</a>
</div>
</div>
<div class="fi_new" v-if="item.file.totalpage">
<p>
Title page
<sup style="color: #006699;">({{item.file.totalpage.length}})</sup> :
<b class="btnUpDown el-icon-arrow-up"
v-if="item.file_total==0&&item.file.totalpage.length>1"
@click="changeFileUpdown(1,ikgn,'file_total')"></b>
<b class="btnUpDown el-icon-arrow-down"
v-if="item.file_total==1&&item.file.totalpage.length>1"
@click="changeFileUpdown(0,ikgn,'file_total')"></b>
</p>
<div v-for="ikrm in item.file.totalpage" v-if="item.file_total==1">
<img src="../../assets/img/icon_0.png">
<span>
<font>Uploader : </font>{{ikrm.username}}
<i><i class="el-icon-time"></i>{{formatDate(ikrm.ctime)}}</i>
</span>
<a :href="mediaUrl + ikrm.file_url">
<i class="el-icon-download download"></i>
</a>
</div>
</div>
<div class="fi_new" v-if="item.file.manuscirpt">
<p>
Manuscirpt
<sup style="color: #006699;">({{item.file.manuscirpt.length}})</sup> :
<b class="btnUpDown el-icon-arrow-up"
v-if="item.file_maun==0&&item.file.manuscirpt.length>1"
@click="changeFileUpdown(1,ikgn,'file_maun')"></b>
<b class="btnUpDown el-icon-arrow-down"
v-if="item.file_maun==1&&item.file.manuscirpt.length>1"
@click="changeFileUpdown(0,ikgn,'file_maun')"></b>
</p>
<div v-for="ikrm in item.file.manuscirpt" v-if="item.file_maun==1">
<img src="../../assets/img/icon_0.png">
<span>
<font>Uploader : </font>{{ikrm.username}}
<i><i class="el-icon-time"></i>{{formatDate(ikrm.ctime)}}</i>
</span>
<a :href="mediaUrl + ikrm.file_url">
<i class="el-icon-download download"></i>
</a>
</div>
</div>
<div class="fi_new" v-if="item.file.supplementary">
<p>
Supplementary Material
<sup style="color: #006699;">({{item.file.supplementary.length}})</sup> :
<b class="btnUpDown el-icon-arrow-up"
v-if="item.file_supper==0&&item.file.supplementary.length>1"
@click="changeFileUpdown(1,ikgn,'file_supper')"></b>
<b class="btnUpDown el-icon-arrow-down"
v-if="item.file_supper==1&&item.file.supplementary.length>1"
@click="changeFileUpdown(0,ikgn,'file_supper')"></b>
</p>
<div v-for="ikrm in item.file.supplementary" v-if="item.file_supper==1">
<img src="../../assets/img/icon_0.png">
<span>
<font>Uploader : </font>{{ikrm.username}}
<i><i class="el-icon-time"></i>{{formatDate(ikrm.ctime)}}</i>
</span>
<a :href="mediaUrl + ikrm.file_url">
<i class="el-icon-download download"></i>
</a>
</div>
</div>
</div>
<div style="width: 1%;"></div>
<div class="fixCard" style="width: 16%;">
<b style="font-size: 16px;letter-spacing: -0.5px;">AI scoring</b>
<p style="font-size: 18px;font-weight: bold;margin-bottom: 5px;color: #db890e;"
v-if="item.reportList.length>0">
<font style="font-size: 14px;font-weight: normal;color: #333;">Initial review score :</font>
{{item.scoring}}
<i class="el-icon-refresh refreshBtn" @click="refreshScore(item)"></i>
</p>
<p style="font-size: 18px;font-weight: bold;fmargin-bottom: 5px;"
v-if="item.reportList.length==0">
<font style="font-size: 14px;font-weight: normal;">Initial review score :</font>
{{item.scoring}} <i class="el-icon-refresh refreshBtn" @click="refreshScore(item)"></i>
</p>
<p v-if="item.scoring!=0&&item.H!=null" style="color: #999;">{{item.H.google_editor}}
</p>
<p v-if="item.scoring!=0&&item.H!=null&&item.H.google_time!=0" style="color: #999;">
{{formatDate(item.H.google_time)}}
</p>
<b @click="aiSoring(item)" class="btnCliArt" v-if="item.reportList.length>0"
style="margin-top: 10px;display: block;">
<i class="el-icon-edit"></i> Edit Hindex
</b>
<!-- <el-button @click="aiSoring(item)" size="mini" type="primary" icon="el-icon-edit"
v-if="item.reportList.length>0" style="margin-top: 1px;">Edit Hindex</el-button> --> v-if="item.reportList.length>0" style="margin-top: 1px;">Edit Hindex</el-button> -->
<p v-if="item.review.length>0" <p v-if="item.review.length>0"
style="font-size: 18px;font-weight: bold;margin-top: 15px;padding-top: 10px;border-top: 1px solid #dddddd;color: #db890e;"> style="font-size: 18px;font-weight: bold;margin-top: 15px;padding-top: 10px;border-top: 1px solid #dddddd;color: #db890e;">
<font v-if="finalCount(item) > 0 && finalCount(item) != 'NaN'" style="font-size: 14px;font-weight: normal;color: #333;">Comprehensive Score :</font> <font v-if="finalCount(item) > 0 && finalCount(item) != 'NaN'"
<span v-if="finalCount(item) > 0 && finalCount(item) != 'NaN'">{{finalCount(item)}}</span> style="font-size: 14px;font-weight: normal;color: #333;">Comprehensive Score :</font>
</p> <span v-if="finalCount(item) > 0 && finalCount(item) != 'NaN'">{{finalCount(item)}}</span>
</div>
<div style="width: 1%;"></div>
<div class="fixCard" style="width: 17%;">
<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: 28px;" :key="index">
Reviewer{{index+1}} score : <b style="color: #db890e;font-size: 18px;">{{iken.rated}}</b><el-button style="margin-left: 10px;" type="text" @click="crateRevision(iken)" v-if="iken.can_repeat == 1" >Re-review</el-button>
</p>
<p v-if="item.reviewScore.length>0" style="font-size: 15px;margin: 0 0 5px 0;">
Average : <b style="font-size: 18px;color: #db890e;">{{avegeCount(item.reviewScore)}}</b>
</p>
<p>
<span v-for="(iken, index) in item.review" style="display: inline-block;padding: 5px;">
<font v-if="iken.state==0"
style="width: 12px;height: 12px;display: block;border-radius: 10px;background-color: #ccc;">
</font>
<font v-if="iken.state==1||iken.state==3"
style="width: 12px;height: 12px;display: block;border-radius: 10px;background-color: #67c23a;">
</font>
<font v-if="iken.state==2"
style="width: 12px;height: 12px;display: block;border-radius: 10px;background-color: #f56c6c;">
</font>
</span>
</p>
<p style="margin-top: 10px;">
<b @click="articleReviewer(item)" class="btnCliArt">
<i class="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>
<div style="width: 1%;"></div>
<div class="fixCard" style="width: 26%;">
<b style="font-size: 16px;letter-spacing: -0.5px;">Corresponding Author</b>
<p style="height: 10px;"></p>
<div style="text-align: left;">
<p v-if="item.realname!=''">
<font style="color: #999;">Name :</font>
{{item.realname}}
<span v-if="item.phone!=''" style="margin-left: 5px;color: #666;">({{item.phone}})</span>
</p> </p>
<p v-if="item.email!=''" style="margin: 8px 0 5px 0;line-height: 22px;"> </div>
<font style="color: #999;">Email :</font> <div style="width: 1%;"></div>
{{item.email}} <div class="fixCard" style="width: 17%;">
<b @click="linkEmail(item)" class="btnCliArt" style="margin-left: 15px;"> <b style="font-size: 16px;letter-spacing: -0.5px;">Reviewer Decision</b>
<i class="el-icon-message"></i> Email <p style="height: 5px;"></p>
<p v-for="(iken, index) in item.reviewScore" style="line-height: 28px;" :key="index">
Reviewer{{index+1}} score : <b
style="color: #db890e;font-size: 18px;">{{iken.rated}}</b><el-button
style="margin-left: 10px;" type="text" @click="crateRevision(iken)"
v-if="iken.can_repeat == 1">Re-review</el-button>
</p>
<p v-if="item.reviewScore.length>0" style="font-size: 15px;margin: 0 0 5px 0;">
Average : <b style="font-size: 18px;color: #db890e;">{{avegeCount(item.reviewScore)}}</b>
</p>
<p>
<span v-for="(iken, index) in item.review" style="display: inline-block;padding: 5px;">
<font v-if="iken.state==0"
style="width: 12px;height: 12px;display: block;border-radius: 10px;background-color: #ccc;">
</font>
<font v-if="iken.state==1||iken.state==3"
style="width: 12px;height: 12px;display: block;border-radius: 10px;background-color: #67c23a;">
</font>
<font v-if="iken.state==2"
style="width: 12px;height: 12px;display: block;border-radius: 10px;background-color: #f56c6c;">
</font>
</span>
</p>
<p style="margin-top: 10px;">
<b @click="articleReviewer(item)" class="btnCliArt">
<i class="el-icon-edit"></i> Inviting Reviewer
</b> </b>
<b @click="linkEmailist(item)" v-if="item.emailh==1" class="btnCliArt" <!-- <el-button size="mini" type="primary" icon="el-icon-user" @click="articleReviewer(item)">
style="margin-left: 15px;"> Inviting Reviewer</el-button> -->
<i class="el-icon-refresh-left"></i> History </p>
</div>
<div style="width: 1%;"></div>
<div class="fixCard" style="width: 26%;">
<b style="font-size: 16px;letter-spacing: -0.5px;">Corresponding Author</b>
<p style="height: 10px;"></p>
<div style="text-align: left;">
<p v-if="item.realname!=''">
<font style="color: #999;">Name :</font>
{{item.realname}}
<span v-if="item.phone!=''"
style="margin-left: 5px;color: #666;">({{item.phone}})</span>
</p>
<p v-if="item.email!=''" style="margin: 8px 0 5px 0;line-height: 22px;">
<font style="color: #999;">Email :</font>
{{item.email}}
<b @click="linkEmail(item)" class="btnCliArt" style="margin-left: 15px;">
<i class="el-icon-message"></i> Email
</b>
<b @click="linkEmailist(item)" v-if="item.emailh==1" class="btnCliArt"
style="margin-left: 15px;">
<i class="el-icon-refresh-left"></i> History
</b>
</p>
</div>
<p style="margin-top: 20px;">
<b @click="articleCommun(item)" class="btnCliArt">
<i class="el-icon-chat-line-square"></i> Communication
</b> </b>
</p> </p>
</div> </div>
<p style="margin-top: 20px;">
<b @click="articleCommun(item)" class="btnCliArt">
<i class="el-icon-chat-line-square"></i> Communication
</b>
</p>
</div> </div>
<div style="margin: 15px 0 0 0;">
<span style="color: #666b7a;margin: 2px 5px 0 0;">Remarks :</span>
<font style="margin-right: 10px;line-height: 24px;font-weight: bold;">{{item.remarks}}</font>
<b @click="testedit(item)" class="btnCliArt">
<i class="el-icon-edit"></i> Change
</b>
</div>
</div> </div>
<div style="margin: 15px 0 0 0;">
<span style="color: #666b7a;margin: 2px 5px 0 0;">Remarks :</span>
<font style="margin-right: 10px;line-height: 24px;font-weight: bold;">{{item.remarks}}</font>
<b @click="testedit(item)" class="btnCliArt">
<i class="el-icon-edit"></i> Change
</b>
</div>
</div>
</div> </div>
<!-- 预接收表 --> <!-- 预接收表 -->
<el-table v-if="PreAcpVisible" :data="tableData" border stripe class="table" ref="multipleTable" <el-table v-if="PreAcpVisible" :data="tableData" border stripe class="table" ref="multipleTable"
@@ -335,7 +344,7 @@
<el-table-column label=" " align="center" width="200px"> <el-table-column label=" " align="center" width="200px">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button @click="changeEnter(scope.row)" size="mini" type="primary" plain <el-button @click="changeEnter(scope.row)" size="mini" type="primary" plain
icon="el-icon-edit">Edit</el-button> icon="el-icon-edit">Edit</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@@ -570,7 +579,8 @@
<el-option :key="3" label="Reject" :value="3"></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="4" label="Revision" :value="4"></el-option>
<el-option :key="6" label="Pre-accept" :value="6"></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-option :key="5" label="Accept" :value="5"
:disabled="curState == 6 ? false : true"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="Comments for authors :" v-show="editform.state==4"> <el-form-item label="Comments for authors :" v-show="editform.state==4">
@@ -772,6 +782,7 @@
<timetalk :talkMsgs="talkMsgs" :msgform="msgform"></timetalk> <timetalk :talkMsgs="talkMsgs" :msgform="msgform"></timetalk>
</el-dialog> </el-dialog>
<el-dialog title="Manuscript Tracking" :visible.sync="trackVisible" width="700px"> <el-dialog title="Manuscript Tracking" :visible.sync="trackVisible" width="700px">
<p <p
style="word-break: normal;margin-bottom: 20px;font-size: 15px;font-weight: bold;letter-spacing: -0.5px;line-height: 22px;"> style="word-break: normal;margin-bottom: 20px;font-size: 15px;font-weight: bold;letter-spacing: -0.5px;line-height: 22px;">
@@ -804,6 +815,39 @@
</div> </div>
</el-dialog> </el-dialog>
<el-dialog title="" :visible.sync="corresVisible" width="800px">
<div class="corrPeo">
<div v-if="corresList.article"
style="line-height: 30px;line-height: 22px;font-size: 16px;font-weight: bold;letter-spacing: -0.5px;">
{{corresList.article.title}}
</div>
<div v-for="(item, index) in corresList.author_articles">
<div class="corrPUser">
{{item.firstname}} {{item.lastname}}
<font v-if="item.is_super==1">#</font>
<font v-if="item.is_report==1">*</font>
</div>
<div class="corrPTim" v-for="(pku, iken) in item.articles"
@click="corresVisible=false;showdetaileditor(pku)">
<span>{{stateFormat(pku.state)}}</span>
{{pku.title}}
<font> - {{pku.journal_title}}</font>
</div>
<div v-if="item.articles.length==0">No article</div>
</div>
<div class="corrPUser">User articles</div>
<div v-for="(item, index) in corresList.user_articles">
<div class="corrPTim" @click="corresVisible=false;showdetaileditor(item)">
<span>{{stateFormat(item.state)}}</span>
{{item.title}}
<font> - {{item.journal_title}}</font>
</div>
<div v-if="item.length==0">No article</div>
</div>
</div>
</el-dialog>
</div> </div>
</template> </template>
@@ -818,7 +862,7 @@
}, },
data() { data() {
return { return {
curState:null, curState: null,
baseUrl: this.Common.baseUrl, baseUrl: this.Common.baseUrl,
mediaUrl: this.Common.mediaUrl, mediaUrl: this.Common.mediaUrl,
items: '', items: '',
@@ -837,35 +881,37 @@
multipleSelection: [], multipleSelection: [],
delList: [], delList: [],
statList: [{ statList: [{
state: 0 state: 0
}, { }, {
state: 1 state: 1
}, { }, {
state: 2 state: 2
}, { }, {
state: 4 state: 4
}, },
{ {
state: 6 state: 6
}, },
{ {
state: 5 state: 5
}, },
{ {
state: 3 state: 3
}, },
], ],
Total: 0, Total: 0,
geogleList: [], geogleList: [],
IndexForm: {}, IndexForm: {},
editVisible: false, editVisible: false,
guestVisible: false, guestVisible: false,
PreAcpVisible:false, PreAcpVisible: false,
editbox: false, editbox: false,
repebox: false, repebox: false,
aiSorbox: false, aiSorbox: false,
communVisible: false, communVisible: false,
trackVisible: false, trackVisible: false,
corresVisible: false,
corresList: [],
talkMsgs: [], talkMsgs: [],
timeLaxis: { timeLaxis: {
title: '', title: '',
@@ -968,22 +1014,22 @@
}); });
}, },
// 创建复审 // 创建复审
crateRevision(item){ crateRevision(item) {
// 二次询问 // 二次询问
this.$confirm('Do you want to send a review invitation?', 'Tip', { this.$confirm('Do you want to send a review invitation?', 'Tip', {
type: 'warning' type: 'warning'
}) })
.then(() => { .then(() => {
this.$api this.$api
.post('api/Reviewer/startRepeatReviewer', { .post('api/Reviewer/startRepeatReviewer', {
'art_rev_id': item.art_rev_id 'art_rev_id': item.art_rev_id
}) })
.then(res => { .then(res => {
//console.log(res) //console.log(res)
if(res.code == 0){ if (res.code == 0) {
this.$message.success('A review invitation was successfully sent!') this.$message.success('A review invitation was successfully sent!')
this.getdate() this.getdate()
}else{ } else {
this.$message.error(res.msg) this.$message.error(res.msg)
} }
}) })
@@ -992,13 +1038,13 @@
}); });
}) })
.catch(() => {}); .catch(() => {});
}, },
// 更新评分 // 更新评分
refreshScore(row){ refreshScore(row) {
this.$api this.$api
.post('api/Article/refuseScore', { .post('api/Article/refuseScore', {
'article_id': row.article_id 'article_id': row.article_id
}) })
.then(res => { .then(res => {
@@ -1011,8 +1057,14 @@
}, },
// 跳入预收录编辑页面 // 跳入预收录编辑页面
changeEnter(val) { changeEnter(val) {
console.log(val,'val') console.log(val, 'val')
this.$router.push({name: 'PreIngestedEditor', query: {id: val.article_id, uid:val.user_id}}) this.$router.push({
name: 'PreIngestedEditor',
query: {
id: val.article_id,
uid: val.user_id
}
})
}, },
// 改变期刊 // 改变期刊
chageJour() { chageJour() {
@@ -1042,7 +1094,7 @@
this.getdate() this.getdate()
}, },
// 获取数据 // 获取数据
getdate() { getdate() {
this.query.state == 6 ? this.PreAcpVisible = true : this.PreAcpVisible = false this.query.state == 6 ? this.PreAcpVisible = true : this.PreAcpVisible = false
const loading = this.$loading({ const loading = this.$loading({
lock: true, lock: true,
@@ -1077,11 +1129,12 @@
} }
} }
if (this.tableData[i].file.manuscirpt) { if (this.tableData[i].file.manuscirpt) {
if (this.tableData[i].file.coverLetter || this.tableData[i].file.picturesAndTables || this.tableData[i] if (this.tableData[i].file.coverLetter || this.tableData[i].file.picturesAndTables ||
this.tableData[i]
.file.totalpage || this.tableData[i].file.supplementary) { .file.totalpage || this.tableData[i].file.supplementary) {
if(this.tableData[i].file.manuscirpt.length > 1){ if (this.tableData[i].file.manuscirpt.length > 1) {
this.tableData[i].file_maun = 0 this.tableData[i].file_maun = 0
} }
} }
} }
if (this.tableData[i].file.supplementary) { if (this.tableData[i].file.supplementary) {
@@ -1089,10 +1142,10 @@
this.tableData[i].file_supper = 0 this.tableData[i].file_supper = 0
} }
} }
this.tableData[i].reviewScore = [] this.tableData[i].reviewScore = []
for (let j = 0; j < this.tableData[i].review.length; j++){ for (let j = 0; j < this.tableData[i].review.length; j++) {
if(this.tableData[i].review[j].rated!=null){ if (this.tableData[i].review[j].rated != null) {
this.tableData[i].reviewScore.push(this.tableData[i].review[j]) this.tableData[i].reviewScore.push(this.tableData[i].review[j])
} }
} }
@@ -1121,10 +1174,10 @@
}; };
} }
}; };
for (let i = 0; i < res.state_num.length; i++) { for (let i = 0; i < res.state_num.length; i++) {
for (let j = 0; j < this.statList.length; j++) { for (let j = 0; j < this.statList.length; j++) {
if (i == this.statList[j].state) { if (i == this.statList[j].state) {
this.statList[j].num = res.state_num[i] this.statList[j].num = res.state_num[i]
} }
} }
} }
@@ -1166,7 +1219,7 @@
this.editform.state_old = e.state; this.editform.state_old = e.state;
this.editform.editormsg = ''; this.editform.editormsg = '';
this.editform.proposal_content = ''; this.editform.proposal_content = '';
this.$api this.$api
.post('api/Article/getArticleDetail', { .post('api/Article/getArticleDetail', {
articleId: e.article_id, articleId: e.article_id,
@@ -1495,11 +1548,11 @@
}); });
}, },
// 留言板弹出层 // 留言板弹出层
articleCommun(e) { articleCommun(e) {
this.msgform.user_id = e.user_id this.msgform.user_id = e.user_id
this.msgform.article_id = e.article_id this.msgform.article_id = e.article_id
this.msgform.title = e.title this.msgform.title = e.title
this.talkMsgs = [] this.talkMsgs = []
this.$api this.$api
.post('api/Article/getArticleDialogs', { .post('api/Article/getArticleDialogs', {
article_id: e.article_id article_id: e.article_id
@@ -1575,6 +1628,29 @@
alertlimit() { alertlimit() {
this.$message.error('The maximum number of uploaded files has been exceeded'); this.$message.error('The maximum number of uploaded files has been exceeded');
}, },
// 相关文章
corrSpe(value) {
this.$api
.post('api/Article/getArticlesByArticle', {
article_id: value.article_id
})
.then(res => {
if (res.code == 0) {
this.corresList = res.data
this.corresList.article = value
this.corresVisible = true
console.log(this.corresList)
} else {
this.$message.error(res.msg);
}
});
},
//格式化状态输出 //格式化状态输出
stateFormat(e) { stateFormat(e) {
let str = ''; let str = '';
@@ -1695,15 +1771,15 @@
let str = 0; let str = 0;
let sgr = 0; let sgr = 0;
let all = 0; let all = 0;
let j = 0 // null 评分人数 let j = 0 // null 评分人数
for (let i = 0; i < arry.review.length; i++) { for (let i = 0; i < arry.review.length; i++) {
if(arry.review[i].rated == null){ if (arry.review[i].rated == null) {
j += 1 j += 1
continue; continue;
}else{ } else {
all += arry.review[i].rated all += arry.review[i].rated
} }
}; };
str = (all / (arry.review.length - j)).toFixed(1) str = (all / (arry.review.length - j)).toFixed(1)
sgr = ((Number(str) + Number(arry.scoring)) / 2).toFixed(1) sgr = ((Number(str) + Number(arry.scoring)) / 2).toFixed(1)
@@ -1770,12 +1846,21 @@
</script> </script>
<style scoped> <style scoped>
.refreshBtn{cursor: pointer; color: #069;} .refreshBtn {
.Countries{ cursor: pointer;
display: inline-block; color: #069;
width: 20px; vertical-align: middle;
white-space: nowrap;text-overflow:ellipsis; overflow:hidden; margin-bottom:3px;
} }
.Countries {
display: inline-block;
width: 20px;
vertical-align: middle;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
margin-bottom: 3px;
}
.art_file>h4 { .art_file>h4 {
text-align: left; text-align: left;
} }
@@ -2054,4 +2139,48 @@
.webLink:hover { .webLink:hover {
text-decoration: underline; text-decoration: underline;
} }
</style>
.corrPeo {
word-break: normal;
}
.corrPeo .corrPUser {
border-bottom: 1px solid #00669936;
color: #006699;
font-size: 16px;
padding: 0 0 10px 0;
margin: 25px 0 10px 0;
font-weight: bold;
}
.corrPeo .corrPTim {
line-height: 22px;
margin-bottom: 20px;
}
.corrPeo .corrPTim:hover {
text-decoration: underline;
cursor: pointer;
}
.corrPeo .corrPTim span {
background: #db890e21;
color: #db890e;
display: inline-block;
padding: 1px 5px;
border-radius: 5px;
font-size: 12px;
margin-right: 10px;
letter-spacing: 0.5px;
font-weight: bold;
}
.corrPeo .corrPTim font {
font-weight: bold;
margin-left: 10px;
letter-spacing: -0.5px;
}
</style>

View File

@@ -1,28 +1,82 @@
// // const webpack = require("webpack")
// module.exports = {
// publicPath: './',
// assetsDir: 'static',
// productionSourceMap: false,
// devServer: {
// // public: 'http://192.168.110.156:8080/', // 你自己本地的ip地址:端口号
// // host:'localhost'
// public: '0.0.0.0:8080/',
// port: '8080',
// // open: true,
// // overlay: {
// // warnings: false,
// // errors: true
// // },
// // proxy: {
// // '/api': {
// // // target: 'https://www.tmrjournals.cn',
// // target: 'https://submission.tmrjournals.com/',
// // changeOrigin: true,
// // pathRewrite: {
// // '^/api': ''
// // }
// // }
// // }
// },
// // devServer: {
// // port: port,
// // open: true,
// // overlay: {
// // warnings: false,
// // errors: true
// // },
// // // before: require('./mock/mock-server.js') // 注释掉这一行
// // proxy: {
// // '/dev-api': { // 因为默认开发api就是dev-api所以我这里就没有改其他名字也叫dev-api
// // target: 'https://ceshi.xxxxxxxx.com/',
// // pathRewrite: {
// // '^/dev-api': ''
// // }, // 记得也哟改dev-api
// // }
// // }
// // },
// // 配置插件参数
// // configureWebpack: {
// // plugins: [
// // new webpack.ProvidePlugin({
// // 'window.Quill': 'quill'
// // })
// // ]
// // }
// }
// const webpack = require("webpack") // const webpack = require("webpack")
module.exports = { module.exports = {
publicPath: './', publicPath: './',
assetsDir: 'static', assetsDir: 'static',
productionSourceMap: false, productionSourceMap: false,
devServer: { devServer: {
// public: 'http://192.168.110.156:8080/', // 你自己本地的ip地址:端口号 // public: 'http://192.168.110.159:8080/', // 你自己本地的ip地址:端口号
// host:'localhost'
public: '0.0.0.0:8080/',
port: '8080', port: '8080',
// open: true, open: true,
// overlay: { overlay: {
// warnings: false, warnings: false,
// errors: true errors: true
// }, },
// proxy: { proxy: {
// '/api': { '/api': {
// // target: 'https://www.tmrjournals.cn', // target: 'https://www.tmrjournals.cn',
// target: 'https://submission.tmrjournals.com/', target: 'https://submission.tmrjournals.com/',
// changeOrigin: true, changeOrigin: true,
// pathRewrite: { pathRewrite: {
// '^/api': '' '^/api': ''
// } }
// } }
// } }
}, },
// devServer: { // devServer: {