Compare commits

2 Commits

3 changed files with 263 additions and 239 deletions

View File

@@ -19,8 +19,8 @@ const service = axios.create({
// baseURL: 'https://submission.tmrjournals.com/', //正式 记得切换
// baseURL: 'http://www.tougao.com/', //测试本地 记得切换
// baseURL: 'http://192.168.110.110/tougao/public/index.php/',
baseURL: '/api', //本地
// baseURL: '/', //正式
// baseURL: '/api', //本地
baseURL: '/', //正式
});

View File

@@ -173,7 +173,7 @@
<span class="el-icon-info help"></span>
<div>
<h4>Any questions/Help</h4>
<p class="mt20">Should you encounter any issues, please feel free to contact us at {{ journalInfo.email }}</p>
<p class="mt20">Should you encounter any issues, please feel free to contact us at {{ journalInfo.email }}.</p>
</div>
</div>
</div>

View File

@@ -1,6 +1,6 @@
<template>
<div style="min-width: 1280px" class="articleListEditorA">
<div class="handle-box" >
<div class="handle-box">
<div class="handle-item">
<el-select style="width: 280px" v-model="query.journal_id" @change="chageJour" placeholder="Journal" size="small">
<el-option key="all" label="All journals" value="all"></el-option>
@@ -9,15 +9,22 @@
<el-select
size="small"
v-model="query.state"
@change="getdate()"
@change="changeState"
placeholder="Status"
style="width: 200px"
popper-class="state-select"
:popper-append-to-body="true"
>
<el-option key="all" label="processing MS" value="all"></el-option>
<el-option v-for="(item,index) in statusList" class="state-select-option" :key="item.key" :label="$t(`artstate.state${item.key}`)" :value="item.key"> </el-option>
<el-option
v-for="(item, index) in statusList"
class="state-select-option"
:key="item.key"
:label="$t(`artstate.state${item.key}`)"
:value="item.key"
>
</el-option>
<!-- <el-option :key="0" :label="$t('artstate.state0')" :value="0" class="state-select-option"></el-option>
<el-option :key="1" :label="$t('artstate.state1')" :value="1" class="state-select-option"></el-option>
<el-option :key="2" :label="$t('artstate.state2')" :value="2" class="state-select-option"></el-option>
@@ -30,7 +37,13 @@
<el-option :key="3" :label="$t('artstate.state3')" :value="3" class="state-select-option"></el-option> -->
</el-select>
<el-select size="small" v-model="query.country" @change="getdate()" placeholder="Please select country" style="width: 200px">
<el-select
size="small"
v-model="query.country"
@change="changeCountry"
placeholder="Please select country"
style="width: 200px"
>
<el-option key="all" label="All country" value="all"></el-option>
<el-option :key="1" label="China" :value="1"></el-option>
<el-option :key="2" label="International" :value="2"></el-option>
@@ -104,13 +117,13 @@
</b>
<span style="float: right">
<span class="labelTitle" style="font-weight: 500; font-size: 13px;">Plagiarism Check :</span>
<span class="labelTitle" style="font-weight: 500; font-size: 13px">Plagiarism Check :</span>
<font style="margin-right: 16px; font-size: 13px; font-weight: 700"> {{ item.repetition }} % </font>
</span>
<span style="margin: 0 10px; float: right">| </span>
<span style="float: right">
<span class="labelTitle" style="font-weight: 500; font-size: 13px;">Status :</span>
<span class="labelTitle" style="font-weight: 500; font-size: 13px">Status :</span>
<font style="margin-right: 15px; font-size: 13px; letter-spacing: -0.5px; font-weight: 700">
{{ stateFormat(item.state) }}
</font>
@@ -124,7 +137,8 @@
</el-badge>
</div>
<div style="display: flex; width: 100%">
<span style="color: #666b7a;font-size: 13px; margin: 2px 5px 0 0; width: 65px !important; display: inline-block"
<span
style="color: #666b7a; font-size: 13px; margin: 2px 5px 0 0; width: 65px !important; display: inline-block"
>Remarks :</span
>
<font
@@ -154,7 +168,7 @@
<b style="font-size: 13px; letter-spacing: -0.5px; margin-right: 10px">AI scoring</b>
<el-popover placement="top-start" title="" width="540" trigger="hover">
<span
style="cursor: pointer; color: #db890e; margin-right: 6px; font-weight: bold; font-size: 14px;"
style="cursor: pointer; color: #db890e; margin-right: 6px; font-weight: bold; font-size: 14px"
slot="reference"
>{{ item.scoring }}</span
>
@@ -253,7 +267,7 @@
<i class="el-icon-refresh refreshBtn" @click="refreshScore(item)"></i>
</div>
<div style="margin-top: -2px;font-size: 13px" >
<div style="margin-top: -2px; font-size: 13px">
<div v-if="item.reportList.length > 0" style="text-align: left">
<div
v-for="(v, i) in item.showAll ? item.reportList : item.reportList.slice(0, 1)"
@@ -274,7 +288,7 @@
overflow: hidden;
text-overflow: ellipsis;
"
>{{ v.realname || v.email ||'-' }}
>{{ v.realname || v.email || '-' }}
</span>
<svg
@click="linkEmail(item, v.art_aut_id)"
@@ -321,8 +335,8 @@
</div>
</div>
<div v-if="item.state != 0" class="reviewer_decision reviewer_decision1" style="margin-top: 0px">
<div style="display: flex; align-items: center" >
<div style="" v-if="item.state==6">
<div style="display: flex; align-items: center">
<div style="" v-if="item.state == 6">
<span
v-if="item.is_buy == 0"
style="
@@ -363,11 +377,12 @@
</span>
</div> -->
</div>
<p style="cursor: pointer; color: #006699;font-size: 13px">
<p style="cursor: pointer; color: #006699; font-size: 13px">
<span @click="loadReviewData(item)">Review decision <i class="el-icon-view"></i></span>
</p>
<el-button style="padding: 4px 6px !important"
<el-button
style="padding: 4px 6px !important"
v-if="item.state == 6"
@click="changeEnter(item)"
size="mini"
@@ -879,7 +894,7 @@
<p v-if="currentArticleData" class="reviewer-decision-title">
{{ currentArticleData.title }}
</p>
<!-- <div v-if="currentArticleData&&currentArticleData.state!=0" style="overflow: hidden;">
<span style="float: right;">
@@ -889,170 +904,155 @@
</span>
</div> -->
<div class="art_author_" style="padding: 0;" v-if="reviewList.length > 0">
<div class="fixCard reviewer_decision" style="position: relative">
<div class="overflow-x-auto">
<!-- 上面的表格代码放在这里 -->
<div class="art_author_" style="padding: 0" v-if="reviewList.length > 0">
<div class="fixCard reviewer_decision" style="position: relative">
<div class="overflow-x-auto">
<!-- 上面的表格代码放在这里 -->
<table class="review_table">
<thead>
<tr>
<th class="review_table_index">No.</th>
<th>Name <span style="color: #888">( score )</span> </th>
<!-- 补充表头文本,原代码是空,建议加上 -->
<th>1<sup>st</sup> review</th>
<!-- 表头按最大重复次数遍历生成2nd、3rd...列 -->
<template v-for="(_, index1) in maxRepeatReviewCount()">
<th>{{ index1 + 2 }}<sup>nd</sup> review</th>
</template>
<!-- <th>final state</th> -->
</tr>
</thead>
<tbody>
<!-- 遍历每个评审者 -->
<tr v-for="(iken, reviewerIndex) in reviewList">
<td class="review_table_index">
Reviewer {{ reviewerIndex + 1 }}
</td>
<td style="position: relative; cursor: pointer">
<span style="">{{ iken.realname }}</span>
<span v-if="iken.state != 0"
style="
color: rgb(219, 137, 14);
font-weight: 700;
margin-left: 10px;
font-size: 14px;
"
>( {{ iken.rated }} )</span
>
<span v-if="iken.state != 0"
style="color: #006699;float: right;margin-top: 2px"
@click="handleClick(iken)"
>Detail</span
>
</td>
<!-- 1st review原逻辑不变 -->
<td style="cursor: pointer">
<span style="display: inline-block; margin-left: 4px; margin-right: 8px">
<font
v-if="iken.recommend == 1 || iken.recommend == 2"
style="
width: 12px;
height: 12px;
display: block;
border-radius: 10px;
background-color: #67c23a;
"
>
</font>
<font
v-if="iken.recommend == 3 || iken.recommend == 4"
style="
width: 12px;
height: 12px;
display: block;
border-radius: 10px;
background-color: #f56c6c;
"
>
</font>
<font
v-if="iken.state == 0"
style="
width: 12px;
height: 12px;
display: block;
border-radius: 10px;
background-color: #ccc;
"
>
</font>
</span>
<span v-if="iken.recommend == 1">Minor</span>
<span v-else-if="iken.recommend == 2">Major</span>
<span v-else-if="iken.recommend == 3">reject and resubmission</span>
<span v-else-if="iken.recommend == 4">Reject</span>
</td>
<!-- 关键按最大重复次数遍历而非仅遍历当前iken.repeat -->
<template v-for="(_1, index1) in maxRepeatReviewCount()">
<td>
<!-- 补全逻辑判断当前评审者的repeat中是否有第index1条数据 -->
<span
v-if="Array.isArray(iken.repeat) && iken.repeat[index1]"
style="cursor: pointer"
@click="handleClick(iken)"
>
<span style="display: inline-block; margin-left: 4px; margin-right: 8px">
<font
v-if="iken.repeat[index1].recommend == 1"
style="
width: 12px;
height: 12px;
display: block;
border-radius: 10px;
background-color: #67c23a;
"
>
</font>
<font
v-if="iken.repeat[index1].recommend == 2"
style="
width: 12px;
height: 12px;
display: block;
border-radius: 10px;
background-color: #f56c6c;
"
>
</font>
<font
v-if="iken.repeat[index1].recommend == 3"
style="
width: 12px;
height: 12px;
display: block;
border-radius: 10px;
background-color: #006699;
"
>
</font>
</span>
<!-- 有数据按原逻辑显示Accept/Reject等 -->
<span v-if="iken.repeat[index1].recommend == 1">Accept</span>
<span v-else-if="iken.repeat[index1].recommend == 2">Reject</span>
<span v-else-if="iken.repeat[index1].recommend == 3">Revision</span>
<span v-else>No reply</span>
</span>
<span v-else>
<!-- 无数据:补全空内容(可自定义为“-”“无”等) -->
<span >-</span>
</span>
</td>
</template>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div v-if="currentArticleData&&currentArticleData.state!=0" style="overflow: hidden;">
<span style="float: right;">
<table class="review_table">
<thead>
<tr>
<th class="review_table_index">No.</th>
<th>Name <span style="color: #888">( score )</span></th>
<!-- 补充表头文本,原代码是空,建议加上 -->
<th>1<sup>st</sup> review</th>
<!-- 表头按最大重复次数遍历生成2nd、3rd...列 -->
<template v-for="(_, index1) in maxRepeatReviewCount()">
<th>{{ index1 + 2 }}<sup>nd</sup> review</th>
</template>
<!-- <th>final state</th> -->
</tr>
</thead>
<tbody>
<!-- 遍历每个评审者 -->
<tr v-for="(iken, reviewerIndex) in reviewList">
<td class="review_table_index">Reviewer {{ reviewerIndex + 1 }}</td>
<td style="position: relative; cursor: pointer">
<span style="">{{ iken.realname }}</span>
<span
v-if="iken.state != 0"
style="color: rgb(219, 137, 14); font-weight: 700; margin-left: 10px; font-size: 14px"
>( {{ iken.rated }} )</span
>
<span
v-if="iken.state != 0"
style="color: #006699; float: right; margin-top: 2px"
@click="handleClick(iken)"
>Detail</span
>
</td>
<!-- 1st review原逻辑不变 -->
<td style="cursor: pointer">
<span style="display: inline-block; margin-left: 4px; margin-right: 8px">
<font
v-if="iken.recommend == 1 || iken.recommend == 2"
style="
width: 12px;
height: 12px;
display: block;
border-radius: 10px;
background-color: #67c23a;
"
>
</font>
<font
v-if="iken.recommend == 3 || iken.recommend == 4"
style="
width: 12px;
height: 12px;
display: block;
border-radius: 10px;
background-color: #f56c6c;
"
>
</font>
<font
v-if="iken.state == 0"
style="
width: 12px;
height: 12px;
display: block;
border-radius: 10px;
background-color: #ccc;
"
>
</font>
</span>
<span v-if="iken.recommend == 1">Minor</span>
<span v-else-if="iken.recommend == 2">Major</span>
<span v-else-if="iken.recommend == 3">reject and resubmission</span>
<span v-else-if="iken.recommend == 4">Reject</span>
</td>
<!-- 关键按最大重复次数遍历而非仅遍历当前iken.repeat -->
<template v-for="(_1, index1) in maxRepeatReviewCount()">
<td>
<!-- 补全逻辑判断当前评审者的repeat中是否有第index1条数据 -->
<span
v-if="Array.isArray(iken.repeat) && iken.repeat[index1]"
style="cursor: pointer"
@click="handleClick(iken)"
>
<span style="display: inline-block; margin-left: 4px; margin-right: 8px">
<font
v-if="iken.repeat[index1].recommend == 1"
style="
width: 12px;
height: 12px;
display: block;
border-radius: 10px;
background-color: #67c23a;
"
>
</font>
<font
v-if="iken.repeat[index1].recommend == 2"
style="
width: 12px;
height: 12px;
display: block;
border-radius: 10px;
background-color: #f56c6c;
"
>
</font>
<font
v-if="iken.repeat[index1].recommend == 3"
style="
width: 12px;
height: 12px;
display: block;
border-radius: 10px;
background-color: #006699;
"
>
</font>
</span>
<!-- 有数据按原逻辑显示Accept/Reject等 -->
<span v-if="iken.repeat[index1].recommend == 1">Accept</span>
<span v-else-if="iken.repeat[index1].recommend == 2">Reject</span>
<span v-else-if="iken.repeat[index1].recommend == 3">Revision</span>
<span v-else>No reply</span>
</span>
<span v-else>
<!-- 无数据:补全空内容(可自定义为“-”“无”等) -->
<span>-</span>
</span>
</td>
</template>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div v-if="currentArticleData && currentArticleData.state != 0" style="overflow: hidden">
<span style="float: right">
<span style="font-size: 14px; margin-top: 10px; margin-right: 10px; text-align: right; font-weight: 400">
Average score : <b style="font-size: 18px; color: #db890e">{{ avegeCount(reviewList) }}</b>
</span>
Average score : <b style="font-size: 18px; color: #db890e">{{ avegeCount(reviewList) }}</b>
</span>
</span>
</div>
</div>
</div>
<span slot="footer" class="dialog-footer">
@@ -1074,46 +1074,37 @@ export default {
components: {
timetalk,
commonRemarkList,
articleEditorDetail,
articleEditorDetail
},
props: ['journals'],
data() {
return {
statusList:[
currentSearchForm: {},
statusList: [
{
key:0,
key: 0
},
{
key:1,
key: 1
},
{
key:2,
key: 2
},
{
key:4,
key: 4
},
{
key:8,
key: 8
},
{
key:6,
key: 6
},
{
key:5,
key: 5
},
{
key:3,
},
key: 3
}
],
reviewList: [],
finalList: [],
@@ -1716,7 +1707,7 @@ export default {
};
}
this.aiReview[0] = aiReview;
})
})
.catch((err) => {
loading.close();
this.$message.error('AI analysis failed');
@@ -1748,8 +1739,7 @@ export default {
} else {
this.creatAI(data, i, loading);
}
})
})
.catch((err) => {
loading.close();
// this.$message.error('AI analysis failed');
@@ -1892,7 +1882,7 @@ export default {
})
.then((res) => {
console.log(res);
this.getdate();
this.getdate(this.currentSearchForm);
})
.catch((err) => {
console.log(err);
@@ -1909,32 +1899,46 @@ export default {
}
});
},
changeCountry() {
this.currentSearchForm={}
this.query.title='';
this.query.accept_sn='';
this.query.page=1;
this.query.size=20;
this.$forceUpdate()
this.getdate();
},
// 改变期刊
chageJour() {
this.currentSearchForm={}
this.query.title='';
this.query.accept_sn='';
this.query.page=1;
this.query.size=20
this.$forceUpdate()
this.getdate();
// this.$api
// .post('api/Special/getSpecial', {
// journal_id: this.query.journal_id
// })
// .then((res) => {
// this.itemGuest = res.data.specials;
// this.query.special_num = 0;
// this.getdate();
// })
// .catch((err) => {
// console.log(err);
// });
},
// 改变状态
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;
}
// 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.currentSearchForm={}
this.query.title='';
this.query.accept_sn='';
this.query.page=1;
this.query.size=20
this.$forceUpdate()
this.getdate();
},
handleReset() {
this.query = {
@@ -1953,10 +1957,34 @@ export default {
},
handleSearch1(type) {
if (type == 'title') {
this.query = {
account: localStorage.getItem('U_name'),
journal_id: 'all',
accept_sn: '',
title: this.query.title,
state: 'all',
country: 'all',
page: 1,
size: 20
};
this.getdate({
title: this.query.title
});
} else if (type == 'accept_sn') {
this.query = {
account: localStorage.getItem('U_name'),
journal_id: 'all',
accept_sn: this.query.accept_sn,
title: '',
state: 'all',
country: 'all',
page: 1,
size: 20
};
this.getdate({
accept_sn: this.query.accept_sn
});
@@ -1964,7 +1992,7 @@ export default {
},
// 获取数据
async getdate(options) {
console.log('options at line 1917:', options)
console.log('options at line 1917:', options);
const loading = this.$loading({
lock: true,
text: 'Loading...',
@@ -1977,21 +2005,19 @@ export default {
} else {
data = {
account: this.query.account,
size: this.query.size,
page: this.query.page
};
}
this.currentSearchForm = { ...data };
if (this.query.state != 'all') {
data.state = this.query.state;
data.state = this.query.state;
}
if (this.query.journal_id != 'all') {
data.journal_id = this.query.journal_id;
}
if (this.query.country != 'all') {
data.country = this.query.country;
data.country = this.query.country;
}
this.$api
.post('api/Workbench/lists', data)
@@ -2059,7 +2085,6 @@ export default {
});
// 新开窗口跳转(第二个参数 '_blank' 表示新窗口)
window.open(routeData.href, '_blank');
},
articleEditorialBoard(row) {
this.$router.push({
@@ -3179,7 +3204,6 @@ export default {
.articleBaseInfo .labelTitle {
color: #333;
font-weight: bold;
}
.articleTopBaseInfo .labelTitle {
color: #fff !important;
@@ -3338,7 +3362,7 @@ td {
margin-left: auto;
flex-wrap: nowrap;
width: 100%;
justify-content: space-around
justify-content: space-around;
}
.reportIcon {
float: left;
@@ -3387,12 +3411,12 @@ td {
border: 1px solid #ed444494 !important;
}
.sticky-header {
position: sticky;
top: -10px;
z-index: 999;
background: #fff;
padding: 10px 0 0;
border-bottom: 1px solid #f0f0f0;
/* box-shadow: 0 2px 8px rgba(0,0,0,0.1); */
position: sticky;
top: -10px;
z-index: 999;
background: #fff;
padding: 10px 0 0;
border-bottom: 1px solid #f0f0f0;
/* box-shadow: 0 2px 8px rgba(0,0,0,0.1); */
}
</style>