编辑工作台

This commit is contained in:
徐哼唧L
2023-06-21 13:03:40 +08:00
parent e8f4d19eea
commit 155185d668

View File

@@ -1,17 +1,13 @@
<template>
<div style="min-width: 1200px;">
<div class="handle-box">
<el-select v-model="query.journal" @change="chageJour" placeholder="Please select journal">
<el-option :key="0" label="All journals" :value="0"></el-option>
<el-option v-for="item in items" :key="item.journal_id" :label="item.title" :value="item.journal_id">
</el-option>
</el-select>
<el-select v-model="query.act" @change="getdate" placeholder="Please select status" style="width: 100px;">
<el-option :key="1" :label="$t('artstate.act1')" :value="1"></el-option>
<el-option :key="2" :label="$t('artstate.act2')" :value="2"></el-option>
</el-select>
<el-select v-model="query.state" @change="getdate" placeholder="Please select status" style="width: 130px;">
<el-option :key="-1" label="All status" :value="-1"></el-option>
<el-badge :value="item.num" type="warning" v-for="item in statList" :hidden='item.num==0'
style="margin-right: 25px;">
<el-button @click="query.state=item.state;getdate()" :type="query.state==item.state?'primary':''">
{{$t('artstate.state'+item.state)}}
</el-button>
</el-badge>
<!-- <el-select v-model="query.state" @change="getdate" placeholder="Please select status" style="width: 180px;">
<el-option :key="0" :label="$t('artstate.state0')" :value="0" :disabled="query.act==2"></el-option>
<el-option :key="1" :label="$t('artstate.state1')" :value="1" :disabled="query.act==2"></el-option>
<el-option :key="2" :label="$t('artstate.state2')" :value="2" :disabled="query.act==2"></el-option>
@@ -19,24 +15,49 @@
<el-option :key="4" :label="$t('artstate.state4')" :value="4" :disabled="query.act==2"></el-option>
<el-option :key="6" :label="$t('artstate.state6')" :value="6" :disabled="query.act==2"></el-option>
<el-option :key="5" :label="$t('artstate.state5')" :value="5" :disabled="query.act==1"></el-option>
</el-select> -->
<!-- <el-select v-model="query.act" @change="changeState" placeholder="Please select status"
style="width: 100px;">
<el-option :key="1" :label="$t('artstate.act1')" :value="1"></el-option>
<el-option :key="2" :label="$t('artstate.act2')" :value="2"></el-option>
</el-select> -->
<el-select v-model="query.journal" @change="chageJour" placeholder="Please select journal">
<el-option :key="0" label="All journals" :value="0"></el-option>
<el-option v-for="item in items" :key="item.journal_id" :label="item.title" :value="item.journal_id">
</el-option>
</el-select>
<p style="height: 5px;"></p>
<el-select v-model="query.special_num" @change="getdate" placeholder="Please select guest"
style="width: 185px;">
style="width: 245px;">
<el-option :key="0" label="Not select special issue" :value="0"></el-option>
<el-option v-for="item in itemGuest" :key="item.journal_special_id" :label="item.title"
:value="item.journal_special_id"></el-option>
</el-select>
<el-input v-model="query.name" placeholder="Title" style="width: 120px;"></el-input>
<el-input v-model="query.sn" placeholder="SN" style="width: 120px;margin-right: 10px;"></el-input>
<el-input v-model="query.name" placeholder="Title" style="width: 250px;"></el-input>
<el-input v-model="query.sn" placeholder="SN" style="width: 250px;margin-right: 10px;"></el-input>
<el-button type="primary" icon="el-icon-search" @click="handleSearch" style="margin:0 0 10px 0;">Search
</el-button>
</div>
<div v-for="item in tableData" class="mangu_list">
<div>
<span style="color: #666b7a;">Status :</span>
<font
style="margin-right: 15px;font-size: 16px;font-weight: bold;letter-spacing: -0.5px;">
<font style="color: #666b7a;">ID : </font>
<span
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
</span>
{{item.accept_sn}}
<!-- <b @click="showdetaileditor(item)" class="btnCliArt" style="margin-left: 15px;">
<i class="el-icon-collection"></i> Detail
</b> -->
<span style="color: #666b7a;margin-left: 50px;">Countries :</span>
<font v-for="(iken, index) in item.countrys">
{{iken}}
<font v-if="index!=item.countrys.length-1">,</font>
</font>
<span style="color: #666b7a;margin-left: 50px;">Status :</span>
<font style="margin-right: 15px;font-size: 16px;font-weight: bold;letter-spacing: -0.5px;">
{{stateFormat(item.state)}}
</font>
<b v-if="item.state!=5" @click="testvis(item)" class="btnCliArt">
@@ -45,14 +66,12 @@
<b v-if="item.state==5" @click="prodBegin(item)" class="btnCliArt">
<i class="el-icon-paperclip"></i> Begin Produce
</b>
<font style="color: #666b7a;margin-left: 80px;">ID : </font>
<span
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
</span>
{{item.accept_sn}}
<b @click="showdetaileditor(item)" class="btnCliArt" style="margin-left: 15px;">
<i class="el-icon-collection"></i> Detail
<span style="color: #666b7a;margin-left: 50px;">Plagiarism Check :</span>
<font style="margin-right: 16px;font-size: 15px;font-weight: bold;">
{{item.repetition}} %
</font>
<b @click="changeRepe(item)" class="btnCliArt">
<i class="el-icon-edit"></i> Change
</b>
</div>
<div class="man_title">
@@ -62,110 +81,199 @@
</b>
</el-badge>
</div>
<div style="display: flex;">
<div style="width: 60%;">
<div>
<span style="color: #666b7a;">Repetition :</span>
<font style="margin-right: 16px;font-size: 15px;font-weight: bold;">
{{item.repetition}} %
</font>
<b @click="changeRepe(item)" class="btnCliArt">
<i class="el-icon-edit"></i> Change
</b>
</div>
<div style="margin: 8px 0;">
<span style="color: #666b7a;">Countries :</span>
<font v-for="(iken, index) in item.countrys">
{{iken}}
<font v-if="index!=item.countrys.length-1">,</font>
</font>
</div>
<div style="display: flex;margin-top: 10px;">
<span style="color: #666b7a;margin-right: 10px;">Corresponding Author :</span>
<div>
<p v-if="item.realname!=''">
<font style="color: #999;">Name:</font>
{{item.realname}}
</p>
<p v-if="item.email!=''" style="margin: 8px 0 5px 0;">
<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>
<p v-if="item.phone!=''">
<font style="color: #999;">Phone:</font>
{{item.phone}}
</p>
<div style="display: flex;margin-left: auto;">
<div class="fixCard" style="width: 27%;">
<b style="font-size: 16px;letter-spacing: -0.5px;">Manuscript File</b>
<p style="height: 10px;"></p>
<div class="fi_new" v-if="item.file.coverLetter">
<p>Cover letter : </p>
<div v-for="ikrm in item.file.coverLetter" :href="mediaUrl + ikrm.file_url">
<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 style="margin-top: 10px;">
<span style="color: #666b7a;margin: 2px 5px 0 0;">Remarks :</span>
<font style="margin-right: 10px;line-height: 24px;">{{item.remarks}}</font>
<b @click="testedit(item)" class="btnCliArt">
<i class="el-icon-edit"></i> Change
</b>
<div class="fi_new" v-if="item.file.picturesAndTables">
<p>Figures : </p>
<div v-for="ikrm in item.file.picturesAndTables" :href="mediaUrl + ikrm.file_url">
<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 : </p>
<div v-for="ikrm in item.file.totalpage" :href="mediaUrl + ikrm.file_url">
<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 : </p>
<div v-for="ikrm in item.file.manuscirpt">
<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 : </p>
<div v-for="ikrm in item.file.supplementary" :href="mediaUrl + ikrm.file_url">
<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="display: flex;margin-left: auto;">
<div style="text-align: center;background-color: #0066990d;padding: 20px;min-width: 160px;">
<b style="font-size: 16px;letter-spacing: -0.5px;">Reviewer Decision :</b>
<p style="height: 5px;"></p>
<p v-for="(iken, index) in item.review">
Reviewer{{index+1}} score : <b style="color: #db890e;font-size: 18px;">{{iken.rated}}</b>
</p>
<p v-if="item.review.length>0" style="font-size: 15px;margin: 5px 0;">
Average : <b style="font-size: 18px;color: #db890e;">{{avegeCount(item.review)}}</b>
</p>
<p>
<el-button v-for="(iken, index) in item.review" :type="iken.state==2?'danger':'success'"
circle style="padding: 5px;"></el-button>
</p>
<p style="margin-top: 10px;">
<b @click="articleReviewer(item)" class="btnCliArt">
<i class="el-icon-edit"></i> Peer-Review
</b>
<!-- <el-button size="mini" type="primary" icon="el-icon-user" @click="articleReviewer(item)">
Peer-Review</el-button> -->
</p>
</div>
<div style="background-color: #006699cc;width: 1.5px;margin: 0 20px;"></div>
<div style="text-align: center;background-color: #0066990d;padding: 20px;min-width: 160px;">
<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}}
</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}}
</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"
<div style="width: 1%;"></div>
<div class="fixCard" style="width: 19%;">
<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}}
</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}}
</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> -->
<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;">
<font style="font-size: 14px;font-weight: normal;color: #333;">Final review score :</font>
{{finalCount(item)}}
<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;">
<font style="font-size: 14px;font-weight: normal;color: #333;">Final review score :</font>
{{finalCount(item)}}
</p>
</div>
<div style="width: 1%;"></div>
<div class="fixCard" style="width: 19%;">
<b style="font-size: 16px;letter-spacing: -0.5px;">Reviewer Decision</b>
<p style="height: 5px;"></p>
<p v-for="(iken, index) in item.review">
Reviewer{{index+1}} score : <b style="color: #db890e;font-size: 18px;">{{iken.rated}}</b>
</p>
<p v-if="item.review.length>0" style="font-size: 15px;margin: 5px 0;">
Average : <b style="font-size: 18px;color: #db890e;">{{avegeCount(item.review)}}</b>
</p>
<p>
<el-button v-for="(iken, index) in item.review" :type="iken.state==2?'danger':'success'" circle
style="padding: 5px;"></el-button>
</p>
<p style="margin-top: 10px;">
<b @click="articleReviewer(item)" class="btnCliArt">
<i class="el-icon-edit"></i> Peer-Review
</b>
<!-- <el-button size="mini" type="primary" icon="el-icon-user" @click="articleReviewer(item)">
Peer-Review</el-button> -->
</p>
</div>
<div style="width: 1%;"></div>
<div class="fixCard" style="width: 27%;">
<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}}
</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>
<p v-if="item.phone!=''">
<font style="color: #999;">Phone:</font>
{{item.phone}}
</p>
</div>
<p style="margin-top: 20px;">
<b @click="articleCommun(item)" class="btnCliArt">
<i class="el-icon-chat-line-square"></i> Communication
</b>
</p>
</div>
<br clear="both">
<!-- <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 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;">{{item.remarks}}</font>
<b @click="testedit(item)" class="btnCliArt">
<i class="el-icon-edit"></i> Change
</b>
</div>
</div>
<!-- <el-table :data="tableData" border stripe class="table" ref="multipleTable"
@@ -373,8 +481,8 @@
</template>
</el-table-column>
</el-table> -->
<div class="pagination">
<el-pagination background layout="total, prev, pager, next" :current-page="query.pageIndex"
:page-size="query.pageSize" :total="Total" @current-change="handlePageChange"></el-pagination>
@@ -590,6 +698,12 @@
<el-button type="primary" @click="saveRepe">Save</el-button>
</span>
</el-dialog>
<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>
<timetalk :talkMsgs="talkMsgs" :msgform="msgform"></timetalk>
</el-dialog>
</div>
</template>
@@ -597,7 +711,11 @@
import {
Loading
} from 'element-ui';
import timetalk from './time_talk'
export default {
components: {
timetalk
},
data() {
return {
baseUrl: this.Common.baseUrl,
@@ -609,7 +727,7 @@
special_num: 0,
name: '',
sn: '',
state: -1,
state: 0,
act: 1,
pageIndex: 1,
pageSize: 20
@@ -617,6 +735,19 @@
tableData: [],
multipleSelection: [],
delList: [],
statList: [{
state: 0
}, {
state: 1
}, {
state: 2
}, {
state: 4
}, {
state: 3
}, {
state: 5
}],
Total: 0,
geogleList: [],
IndexForm: {},
@@ -625,7 +756,15 @@
editbox: false,
repebox: false,
aiSorbox: false,
communVisible: false,
talkMsgs: [],
itemGuest: [],
msgform: {
username: localStorage.getItem('U_name'),
article_id: '',
user_id: '',
ad_content: ''
},
editform: {
editname: localStorage.getItem('U_name'),
articleId: 0,
@@ -728,6 +867,17 @@
});
},
// 改变状态
changeState() {
if (this.query.act == 1) {
this.statList = [0, 1, 2, 4, 6]
this.query.state = 0
} else {
this.statList = [3, 5]
this.query.state = 3
}
this.getdate()
},
// 获取数据
getdate() {
const loading = this.$loading({
@@ -765,8 +915,14 @@
}
};
}
};
for (let i = 0; i < res.state_num.length; i++) {
for (let j = 0; j < this.statList.length; j++) {
if (i == this.statList[j].state) {
this.statList[j].num = res.state_num[i]
}
}
}
loading.close();
})
.catch(err => {
@@ -1117,6 +1273,25 @@
this.$message.error(err);
});
},
// 留言板出框
articleCommun(e) {
this.msgform.user_id = e.user_id
this.msgform.article_id = e.article_id
this.msgform.title = e.title
this.talkMsgs = []
this.$api
.post('api/Article/getArticleDialogs', {
article_id: e.article_id
})
.then((res) => {
this.talkMsgs = res.data.dialogs;
this.communVisible = true
})
.catch((err) => {
console.log(err);
});
},
// 修改标记
saveRemark() {
this.$api.post('api/Article/editArticleRemark', this.remark)
@@ -1222,6 +1397,16 @@
var D = date.getDate() < 10 ? '0' + date.getDate() : date.getDate();
return Y + M + D;
},
formatDate_(timestamp) {
var date = new Date(timestamp * 1000); //时间戳为10位需*1000时间戳为13位的话不需乘1000
var Y = date.getFullYear() + '-';
var M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';
var D = date.getDate() < 10 ? '0' + date.getDate() : date.getDate();
var h = date.getHours() < 10 ? '0' + date.getHours() : date.getHours();
var m = date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes();
var s = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds();
return Y + M + D + ' ' + h + ':' + m + ':' + s;
},
// 分页导航
handlePageChange(val) {
this.$set(this.query, 'pageIndex', val);
@@ -1281,6 +1466,19 @@
margin: 0 5px 10px 0;
}
.markStare {
float: right;
color: #fff;
font-size: 12px;
background: #006699;
border-radius: 10px;
display: inline-block;
line-height: 18px;
height: 18px;
padding: 0 6px;
margin: 9px 0 0 0;
}
.table {
width: 100%;
font-size: 14px;
@@ -1339,7 +1537,7 @@
background-color: #fff;
position: relative;
}
.mangu_list:nth-child(2n+1) {
background-color: #fafafa;
}
@@ -1354,7 +1552,7 @@
}
.mangu_list .man_title {
margin: 2px 100px 10px 0;
margin: 2px 100px 20px 0;
font-weight: bolder;
letter-spacing: -0.5px;
font-size: 16px;
@@ -1368,6 +1566,71 @@
}
.mangu_list div.fi_new {
margin: 0 0 0 10px;
margin-bottom: 10px;
text-align: left;
}
.mangu_list div.fi_new>p {
margin-bottom: 5px;
}
.mangu_list div.fi_new>div {
color: #333;
display: block;
margin: 0 0 15px 0;
line-height: 22px;
}
.mangu_list div.fi_new>div>img {
width: 15px;
vertical-align: text-bottom;
margin: 0 5px 0 0;
}
.mangu_list div.fi_new>div>span>font {
color: #888;
margin: 0 5px 0 0;
font-size: 13px;
letter-spacing: -1px;
}
.mangu_list div.fi_new>div>span>i {
font-size: 12px;
color: #888;
margin: 0 0 0 3px;
font-style: normal;
}
.mangu_list div.fi_new>div>a {
margin: 0 5px 0 0;
}
.mangu_list div.fi_new .download {
font-weight: bold;
color: #75abf1;
margin: 0 0 0 10px;
}
.mangu_list div.fi_new>div>a:hover .download {
color: #006699;
}
.mangu_list .fixCard {
text-align: center;
background: #0066990d;
padding: 20px 10px;
}
.gugeList {