编辑工作台

This commit is contained in:
徐哼唧L
2023-06-21 14:08:51 +08:00
parent 155185d668
commit 75a08bbe70

View File

@@ -1,7 +1,7 @@
<template> <template>
<div style="min-width: 1200px;"> <div style="min-width: 1200px;">
<div class="handle-box"> <div class="handle-box">
<el-badge :value="item.num" type="warning" v-for="item in statList" :hidden='item.num==0' <el-badge :value="item.num" type="warning" v-for="item in statList" :hidden='item.num==0||item.state==3||item.state==5'
style="margin-right: 25px;"> style="margin-right: 25px;">
<el-button @click="query.state=item.state;getdate()" :type="query.state==item.state?'primary':''"> <el-button @click="query.state=item.state;getdate()" :type="query.state==item.state?'primary':''">
{{$t('artstate.state'+item.state)}} {{$t('artstate.state'+item.state)}}
@@ -40,7 +40,7 @@
</el-button> </el-button>
</div> </div>
<div v-for="item 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
@@ -51,6 +51,11 @@
<!-- <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: 50px;">Type :</span>
<font>
{{artType(item.type)}}
</font>
<span style="color: #666b7a;margin-left: 50px;">Countries :</span> <span style="color: #666b7a;margin-left: 50px;">Countries :</span>
<font v-for="(iken, index) in item.countrys"> <font v-for="(iken, index) in item.countrys">
{{iken}} {{iken}}
@@ -73,6 +78,9 @@
<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;">
<i class="el-icon-data-line"></i> Manuscript Tracking
</b>
</div> </div>
<div class="man_title"> <div class="man_title">
<el-badge is-dot :hidden="item.author_act==1?false:true"> <el-badge is-dot :hidden="item.author_act==1?false:true">
@@ -83,12 +91,19 @@
</div> </div>
<div style="display: flex;margin-left: auto;"> <div style="display: flex;margin-left: auto;">
<div class="fixCard" style="width: 27%;"> <div class="fixCard" style="width: 26%;">
<b style="font-size: 16px;letter-spacing: -0.5px;">Manuscript File</b> <b style="font-size: 16px;letter-spacing: -0.5px;">Manuscript File</b>
<p style="height: 10px;"></p> <p style="height: 10px;"></p>
<div class="fi_new" v-if="item.file.coverLetter"> <div class="fi_new" v-if="item.file.coverLetter">
<p>Cover letter : </p> <p>
<div v-for="ikrm in item.file.coverLetter" :href="mediaUrl + ikrm.file_url"> Cover letter
<sup style="color: #006699;">({{item.file.coverLetter.length}})</sup> :
<b class="btnUpDown el-icon-arrow-up" v-if="item.file_cover==0"
@click="changeFileUpdown(1,ikgn,'file_cover')"></b>
<b class="btnUpDown el-icon-arrow-down" v-if="item.file_cover==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"> <img src="../../assets/img/icon_0.png">
<span> <span>
<font>Uploader : </font>{{ikrm.username}} <font>Uploader : </font>{{ikrm.username}}
@@ -100,8 +115,15 @@
</div> </div>
</div> </div>
<div class="fi_new" v-if="item.file.picturesAndTables"> <div class="fi_new" v-if="item.file.picturesAndTables">
<p>Figures : </p> <p>
<div v-for="ikrm in item.file.picturesAndTables" :href="mediaUrl + ikrm.file_url"> Figures
<sup style="color: #006699;">({{item.file.picturesAndTables.length}})</sup> :
<b class="btnUpDown el-icon-arrow-up" v-if="item.file_figer==0"
@click="changeFileUpdown(1,ikgn,'file_figer')"></b>
<b class="btnUpDown el-icon-arrow-down" v-if="item.file_figer==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"> <img src="../../assets/img/icon_0.png">
<span> <span>
<font>Uploader : </font>{{ikrm.username}} <font>Uploader : </font>{{ikrm.username}}
@@ -113,8 +135,15 @@
</div> </div>
</div> </div>
<div class="fi_new" v-if="item.file.totalpage"> <div class="fi_new" v-if="item.file.totalpage">
<p>Title page : </p> <p>
<div v-for="ikrm in item.file.totalpage" :href="mediaUrl + ikrm.file_url"> Title page
<sup style="color: #006699;">({{item.file.totalpage.length}})</sup> :
<b class="btnUpDown el-icon-arrow-up" v-if="item.file_total==0"
@click="changeFileUpdown(1,ikgn,'file_total')"></b>
<b class="btnUpDown el-icon-arrow-down" v-if="item.file_total==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"> <img src="../../assets/img/icon_0.png">
<span> <span>
<font>Uploader : </font>{{ikrm.username}} <font>Uploader : </font>{{ikrm.username}}
@@ -126,8 +155,15 @@
</div> </div>
</div> </div>
<div class="fi_new" v-if="item.file.manuscirpt"> <div class="fi_new" v-if="item.file.manuscirpt">
<p>Manuscirpt : </p> <p>
<div v-for="ikrm in item.file.manuscirpt"> Manuscirpt
<sup style="color: #006699;">({{item.file.manuscirpt.length}})</sup> :
<b class="btnUpDown el-icon-arrow-up" v-if="item.file_maun==0"
@click="changeFileUpdown(1,ikgn,'file_maun')"></b>
<b class="btnUpDown el-icon-arrow-down" v-if="item.file_maun==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"> <img src="../../assets/img/icon_0.png">
<span> <span>
<font>Uploader : </font>{{ikrm.username}} <font>Uploader : </font>{{ikrm.username}}
@@ -139,8 +175,15 @@
</div> </div>
</div> </div>
<div class="fi_new" v-if="item.file.supplementary"> <div class="fi_new" v-if="item.file.supplementary">
<p>Supplementary Material : </p> <p>
<div v-for="ikrm in item.file.supplementary" :href="mediaUrl + ikrm.file_url"> Supplementary Material
<sup style="color: #006699;">({{item.file.supplementary.length}})</sup> :
<b class="btnUpDown el-icon-arrow-up" v-if="item.file_supper==0"
@click="changeFileUpdown(1,ikgn,'file_supper')"></b>
<b class="btnUpDown el-icon-arrow-down" v-if="item.file_supper==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"> <img src="../../assets/img/icon_0.png">
<span> <span>
<font>Uploader : </font>{{ikrm.username}} <font>Uploader : </font>{{ikrm.username}}
@@ -153,7 +196,7 @@
</div> </div>
</div> </div>
<div style="width: 1%;"></div> <div style="width: 1%;"></div>
<div class="fixCard" style="width: 19%;"> <div class="fixCard" style="width: 18%;">
<b style="font-size: 16px;letter-spacing: -0.5px;">AI scoring</b> <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;" <p style="font-size: 18px;font-weight: bold;margin-bottom: 5px;color: #db890e;"
v-if="item.reportList.length>0"> v-if="item.reportList.length>0">
@@ -182,13 +225,13 @@
</p> </p>
</div> </div>
<div style="width: 1%;"></div> <div style="width: 1%;"></div>
<div class="fixCard" style="width: 19%;"> <div class="fixCard" style="width: 18%;">
<b style="font-size: 16px;letter-spacing: -0.5px;">Reviewer Decision</b> <b style="font-size: 16px;letter-spacing: -0.5px;">Reviewer Decision</b>
<p style="height: 5px;"></p> <p style="height: 5px;"></p>
<p v-for="(iken, index) in item.review"> <p v-for="(iken, index) in item.review" style="line-height: 28px;">
Reviewer{{index+1}} score : <b style="color: #db890e;font-size: 18px;">{{iken.rated}}</b> Reviewer{{index+1}} score : <b style="color: #db890e;font-size: 18px;">{{iken.rated}}</b>
</p> </p>
<p v-if="item.review.length>0" style="font-size: 15px;margin: 5px 0;"> <p v-if="item.review.length>0" style="font-size: 15px;margin: 0 0 5px 0;">
Average : <b style="font-size: 18px;color: #db890e;">{{avegeCount(item.review)}}</b> Average : <b style="font-size: 18px;color: #db890e;">{{avegeCount(item.review)}}</b>
</p> </p>
<p> <p>
@@ -197,20 +240,21 @@
</p> </p>
<p style="margin-top: 10px;"> <p style="margin-top: 10px;">
<b @click="articleReviewer(item)" class="btnCliArt"> <b @click="articleReviewer(item)" class="btnCliArt">
<i class="el-icon-edit"></i> Peer-Review <i class="el-icon-edit"></i> Inviting Reviewer
</b> </b>
<!-- <el-button size="mini" type="primary" icon="el-icon-user" @click="articleReviewer(item)"> <!-- <el-button size="mini" type="primary" icon="el-icon-user" @click="articleReviewer(item)">
Peer-Review</el-button> --> Inviting Reviewer</el-button> -->
</p> </p>
</div> </div>
<div style="width: 1%;"></div> <div style="width: 1%;"></div>
<div class="fixCard" style="width: 27%;"> <div class="fixCard" style="width: 26%;">
<b style="font-size: 16px;letter-spacing: -0.5px;">Corresponding Author</b> <b style="font-size: 16px;letter-spacing: -0.5px;">Corresponding Author</b>
<p style="height: 10px;"></p> <p style="height: 10px;"></p>
<div style="text-align: left;"> <div style="text-align: left;">
<p v-if="item.realname!=''"> <p v-if="item.realname!=''">
<font style="color: #999;">Name :</font> <font style="color: #999;">Name :</font>
{{item.realname}} {{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;"> <p v-if="item.email!=''" style="margin: 8px 0 5px 0;line-height: 22px;">
<font style="color: #999;">Email :</font> <font style="color: #999;">Email :</font>
@@ -223,10 +267,6 @@
<i class="el-icon-refresh-left"></i> History <i class="el-icon-refresh-left"></i> History
</b> </b>
</p> </p>
<p v-if="item.phone!=''">
<font style="color: #999;">Phone:</font>
{{item.phone}}
</p>
</div> </div>
<p style="margin-top: 20px;"> <p style="margin-top: 20px;">
<b @click="articleCommun(item)" class="btnCliArt"> <b @click="articleCommun(item)" class="btnCliArt">
@@ -234,36 +274,7 @@
</b> </b>
</p> </p>
</div> </div>
<!-- <div style="width: 1%;"></div>
<div class="fixCard" style="width: 20%;">
<b style="font-size: 16px;letter-spacing: -0.5px;">Manuscript Tracking</b>
<p style="height: 10px;"></p>
<div style="text-align: left;max-height: 200px;overflow-y: scroll;">
<el-timeline>
<el-timeline-item :timestamp="formatDate_(item.ctime)" placement="top">
<el-card>
<p style="line-height: 20px;">
Manuscript submission :
<b>{{item.realname}}</b>
submitted to
<b>{{item.journalname}}</b>
</p>
</el-card>
</el-timeline-item>
<el-timeline-item v-for="(activity, index) in item.timeline" :key="index"
:timestamp="formatDate_(activity.ctime)" placement="top">
<el-card v-if="activity.ftype==0">
<p>Status change : {{stateFormat(activity.state_to)}}</p>
<p v-if="activity.content!=''">{{activity.content}}</p>
</el-card>
<el-card v-else>
<p style="margin-bottom: 5px;font-weight: bold;">Author message :</p>
<p style="line-height: 18px;">{{activity.content}}</p>
</el-card>
</el-timeline-item>
</el-timeline>
</div>
</div> -->
</div> </div>
<div style="margin: 15px 0 0 0;"> <div style="margin: 15px 0 0 0;">
@@ -386,7 +397,7 @@
circle style="padding: 5px;"></el-button> circle style="padding: 5px;"></el-button>
</p> </p>
<el-button size="mini" type="primary" plain icon="el-icon-user" @click="articleReviewer(scope.row)"> <el-button size="mini" type="primary" plain icon="el-icon-user" @click="articleReviewer(scope.row)">
Peer-Review</el-button> Inviting Reviewer</el-button>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column width="220px"> <el-table-column width="220px">
@@ -701,9 +712,43 @@
<el-dialog title="" :visible.sync="communVisible" width="800px"> <el-dialog title="" :visible.sync="communVisible" width="800px">
<p style="margin-bottom: 20px;font-size: 15px;font-weight: bold;letter-spacing: -0.5px;line-height: 22px;">{{msgform.title}}</p> <p style="word-break: normal;margin-bottom: 20px;font-size: 15px;font-weight: bold;letter-spacing: -0.5px;line-height: 22px;">
{{msgform.title}}
</p>
<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">
<p style="word-break: normal;margin-bottom: 20px;font-size: 15px;font-weight: bold;letter-spacing: -0.5px;line-height: 22px;">
{{timeLaxis.title}}
</p>
<div style="">
<el-timeline>
<el-timeline-item :timestamp="formatDate_(timeLaxis.ctime)" placement="top">
<el-card>
<p style="line-height: 20px;">
Manuscript submission :
<b>{{timeLaxis.realname}}</b>
submitted to
<b>{{timeLaxis.journalname}}</b>
</p>
</el-card>
</el-timeline-item>
<el-timeline-item v-for="(activity, index) in timeLaxis.list" :key="index"
:timestamp="formatDate_(activity.ctime)" placement="top">
<el-card v-if="activity.ftype==0">
<p>Status change : {{stateFormat(activity.state_to)}}</p>
<p v-if="activity.content!=''">{{activity.content}}</p>
</el-card>
<el-card v-else>
<p style="margin-bottom: 5px;font-weight: bold;">Author message :</p>
<p style="line-height: 18px;">{{activity.content}}</p>
</el-card>
</el-timeline-item>
</el-timeline>
</div>
</el-dialog>
</div> </div>
</template> </template>
@@ -757,7 +802,15 @@
repebox: false, repebox: false,
aiSorbox: false, aiSorbox: false,
communVisible: false, communVisible: false,
trackVisible: false,
talkMsgs: [], talkMsgs: [],
timeLaxis: {
title: '',
ctime: '',
realname: '',
journalname: '',
list: []
},
itemGuest: [], itemGuest: [],
msgform: { msgform: {
username: localStorage.getItem('U_name'), username: localStorage.getItem('U_name'),
@@ -892,6 +945,11 @@
this.Total = res.total; this.Total = res.total;
this.tableData = res.data; this.tableData = res.data;
for (let i = 0; i < this.tableData.length; i++) { for (let i = 0; i < this.tableData.length; i++) {
this.tableData[i].file_cover = 0
this.tableData[i].file_figer = 0
this.tableData[i].file_total = 0
this.tableData[i].file_maun = 0
this.tableData[i].file_supper = 0
this.tableData[i].reportList = [] this.tableData[i].reportList = []
if (this.tableData[i].reports.length == 1) { if (this.tableData[i].reports.length == 1) {
for (let j = 0; j < this.tableData[i].reports.length; j++) { for (let j = 0; j < this.tableData[i].reports.length; j++) {
@@ -935,6 +993,12 @@
this.$set(this.query, 'pageIndex', 1); this.$set(this.query, 'pageIndex', 1);
this.getdate(); this.getdate();
}, },
// 文章展开收缩
changeFileUpdown(e, i, m) {
this.tableData[i][m] = e
this.$forceUpdate()
console.log(this.tableData[i][m])
},
//文章送审 //文章送审
articleReviewer(row) { articleReviewer(row) {
this.$router.push({ this.$router.push({
@@ -1273,7 +1337,7 @@
this.$message.error(err); this.$message.error(err);
}); });
}, },
// 留言板出框 // 留言板弹出层
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
@@ -1291,6 +1355,26 @@
console.log(err); console.log(err);
}); });
},
// 时间轴弹出层
openTracking(e) {
this.timeLaxis.title = e.title
this.timeLaxis.ctime = e.ctime
this.timeLaxis.realname = e.realname
this.timeLaxis.journalname = e.journalname
this.$api
.post('api/Article/getArticleDetail', {
articleId: e.article_id,
human: 'editor'
})
.then(res => {
this.timeLaxis.list = res.msg;
this.trackVisible = true
})
.catch(err => {
console.log(err);
});
}, },
// 修改标记 // 修改标记
saveRemark() { saveRemark() {
@@ -1365,6 +1449,79 @@
return str; return str;
}, },
//文章类型
artType(e) {
let frag = '';
switch (e) {
case "A":
frag = 'ARTICLE';
break;
case 'B':
frag = 'REVIEW';
break;
case 'C':
frag = 'CASE REPORT';
break;
case 'P':
frag = 'RESEARCH PROPOSAL';
break;
case 'N':
frag = 'NEWS';
break;
case 'T':
frag = 'COMMENT';
break;
case 'CT':
frag = 'CORRECTION';
break;
case 'HT':
frag = 'HYPOTHESIS';
break;
case 'PF':
frag = 'PREFACE';
break;
case 'ET':
frag = 'EDITORIAL';
break;
case 'RP':
frag = 'REPORT';
break;
case 'LR':
frag = 'LETTER';
break;
case 'EF':
frag = 'EMPIRICAL FORMULA';
break;
case 'EM':
frag = 'EVIDENCE-BASED MEDICINE';
break;
case 'EC':
frag = 'EXPERT CONSENSUS';
break;
case 'LTE':
frag = 'LETTER TO EDITOR';
break;
case 'QI':
frag = 'QUESTIONNAIRE INVESTIGATION';
break;
case 'PT':
frag = 'PROTOCOL';
break;
case 'CS':
frag = 'CASE SERIES';
break;
case 'RT':
frag = 'RETRACTION';
break;
case 'MR':
frag = 'MINI REVIEW';
break;
default:
frag = 'OTHERS';
}
return frag;
},
// 算平均分 // 算平均分
avegeCount(arry) { avegeCount(arry) {
let str = 0; let str = 0;
@@ -1572,6 +1729,8 @@
text-align: left; text-align: left;
} }
.mangu_list div.fi_new>p { .mangu_list div.fi_new>p {
margin-bottom: 5px; margin-bottom: 5px;
} }
@@ -1579,7 +1738,7 @@
.mangu_list div.fi_new>div { .mangu_list div.fi_new>div {
color: #333; color: #333;
display: block; display: block;
margin: 0 0 15px 0; margin: 0 0 5px 0;
line-height: 22px; line-height: 22px;
} }
@@ -1605,6 +1764,10 @@
font-style: normal; font-style: normal;
} }
.mangu_list div.fi_new>div>span>i>i {
margin-right: 5px;
}
.mangu_list div.fi_new>div>a { .mangu_list div.fi_new>div>a {
margin: 0 5px 0 0; margin: 0 5px 0 0;
@@ -1618,15 +1781,29 @@
color: #75abf1; color: #75abf1;
margin: 0 0 0 10px; margin: 0 0 0 10px;
} }
.mangu_list div.fi_new>div>a:hover .download { .mangu_list div.fi_new>div>a:hover .download {
color: #006699; color: #006699;
} }
.mangu_list div.fi_new .btnUpDown {
font-weight: bold;
color: #75abf1;
cursor: pointer;
margin-left: 5px;
font-size: 16px;
}
.mangu_list div.fi_new .btnUpDown:hover {
color: #006699;
}
.mangu_list .fixCard { .mangu_list .fixCard {
text-align: center; text-align: center;
background: #0066990d; background: #0066990d;
padding: 20px 10px; padding: 20px;
} }