This commit is contained in:
2025-09-19 18:09:20 +08:00
parent 832be81848
commit 2545c123c9
2 changed files with 223 additions and 147 deletions

View File

@@ -153,16 +153,16 @@
trigger: 'blur'
}
],
name: [{
required: true,
message: 'Please enter your real name.',
trigger: 'blur'
}],
phone: [{
required: true,
message: 'Please enter the correct mobile phone number.',
trigger: 'blur'
}],
// name: [{
// required: true,
// message: 'Please enter your real name.',
// trigger: 'blur'
// }],
// phone: [{
// required: true,
// message: 'Please enter the correct mobile phone number.',
// trigger: 'blur'
// }],
email: [{
required: true,
message: 'Please enter your email address.',

View File

@@ -401,7 +401,73 @@
v-if="item.reportList.length > 0"
>
<font style="font-size: 14px; font-weight: normal; color: #333">Initial review score :</font>
{{ item.scoring }}
<el-popover placement="top-start" title="" width="540" trigger="hover">
<span style="cursor: pointer" slot="reference">{{ item.scoring }}</span>
<div>
<div class="scoringRules">
<div style="display: flex; justify-content: space-between;font-size:16px;margin-bottom: 15px;">
<div>
<span>H指数: <span :style="item.h_fen&&item.h_fen>0?`color:#db890e`:''">{{ item.h_fen }}</span></span>
</div>
<div>
<span>图表: <span :style="item.b_fen&&item.b_fen>0?`color:#db890e`:''">{{ item.b_fen }}</span></span>
</div>
<div>
<span>国家: <span :style="item.c_fen&&item.c_fen>0?`color:#db890e`:''">{{ item.c_fen }}</span></span>
</div>
<div>
<span>单位: <span :style="item.dw_fen&&item.dw_fen>0?`color:#db890e`:''">{{ item.dw_fen }}</span></span>
</div>
<div>
<span>领域分: <span :style="item.ly_fen&&item.ly_fen>0?`color:#db890e`:''">{{ item.ly_fen }}</span></span>
</div>
<div>
<span>基金分: <span :style="item.jj_fen&&item.jj_fen>0?`color:#db890e`:''">{{ item.jj_fen }}</span></span>
</div>
</div>
<ul>
<p style="font-size: 14px; font-weight: bold; margin-bottom:0px; color: #888">评分规则</p>
<div class="scoringRulesItem" style="margin-top: 6px;">
<li><span class="scoringRulesTitle">h指数</span> 0-1=0,2-5=1,6-11=2,12-19=3,20-~=4</li>
</div>
<div class="scoringRulesItem">
<div class="scoringRulesEcharts">
<span class="scoringRulesTitle">图表</span>
<div>
<li><span>Article</span> 0=1,1=0.5,2-3=1,4=1.5,5-~=2</li>
<li><span>Review</span> 0=1,1=0.5,2=1,3=1.5,4-~=2</li>
<li><span>其他类型:</span> 0=0,1=1,2=2</li>
</div>
</div>
</div>
<div class="scoringRulesItem">
<div class="scoringRulesEcharts">
<span class="scoringRulesTitle">图表扣分</span>
<div>
<p>tmr这本刊article文章&lt;3扣0.5&lt;2扣1,&lt;1扣2review:0扣1</p>
<p>其他期刊article&lt;2扣0.5&lt;1扣1review0扣0.5</p>
</div>
</div>
</div>
<div class="scoringRulesItem">
<li><span class="scoringRulesTitle">国家</span> 发达国家1,非中国印度国家0.5</li>
</div>
<div class="scoringRulesItem">
<li>
<span class="scoringRulesTitle">作者单位</span>
任意作者,来自热门机构+1.5,非热门机构+1 热门领域+1 带基金+1
</li>
</div>
</ul>
</div>
</div>
</el-popover>
<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">
@@ -559,119 +625,119 @@
<b style="font-size: 16px; letter-spacing: -0.5px">Reviewer Decision</b>
<p style="height: 5px"></p>
<div class="overflow-x-auto">
<!-- 上面的表格代码放在这里 -->
<table class="review_table" >
<thead>
<tr>
<th></th>
<!-- 补充表头文本,原代码是空,建议加上 -->
<th>1<sup>st</sup> review</th>
<!-- 表头按最大重复次数遍历生成2nd、3rd...列 -->
<template v-for="(_, index1) in maxRepeatReviewCount(item)">
<th>{{ index1 + 2 }}<sup>nd</sup> review</th>
</template>
</tr>
</thead>
<tbody>
<!-- 遍历每个评审者 -->
<tr v-for="(iken, reviewerIndex) in item.reviewScore">
<td>Reviewer {{ reviewerIndex + 1 }}</td>
<!-- 1st review原逻辑不变 -->
<td >
<span style="display: inline-block; margin-left: 4px; margin-right: 8px">
<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>
<span>{{ mystate(iken.state) }}</span>
</td>
<!-- 关键按最大重复次数遍历而非仅遍历当前iken.repeat -->
<template v-for="(_1,index1) in maxRepeatReviewCount(item)">
<!-- 上面的表格代码放在这里 -->
<table class="review_table">
<thead>
<tr>
<th></th>
<!-- 补充表头文本,原代码是空,建议加上 -->
<th>1<sup>st</sup> review</th>
<!-- 表头按最大重复次数遍历生成2nd、3rd...列 -->
<template v-for="(_, index1) in maxRepeatReviewCount(item)">
<th>{{ index1 + 2 }}<sup>nd</sup> review</th>
</template>
</tr>
</thead>
<tbody>
<!-- 遍历每个评审者 -->
<tr v-for="(iken, reviewerIndex) in item.reviewScore">
<td>Reviewer {{ reviewerIndex + 1 }}</td>
<!-- 1st review原逻辑不变 -->
<td>
<!-- 补全逻辑判断当前评审者的repeat中是否有第index1条数据 -->
<span v-if="Array.isArray(iken.repeat) && iken.repeat[index1]">
<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 style="display: inline-block; margin-left: 4px; margin-right: 8px">
<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>
<span>{{ mystate(iken.state) }}</span>
</td>
</template>
</tr>
</tbody>
</table>
</div>
<!-- 关键按最大重复次数遍历而非仅遍历当前iken.repeat -->
<template v-for="(_1, index1) in maxRepeatReviewCount(item)">
<td>
<!-- 补全逻辑判断当前评审者的repeat中是否有第index1条数据 -->
<span v-if="Array.isArray(iken.repeat) && iken.repeat[index1]">
<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>
</td>
</template>
</tr>
</tbody>
</table>
</div>
<!-- <div
v-for="(iken, index) in item.reviewScore"
@@ -768,15 +834,13 @@
</div> -->
<p style="margin-top: 10px">
<b @click="articleReviewer(item)" class="btnCliArt">
<i :class="item.state == 8 ? 'el-icon-view' : 'el-icon-edit'"></i> Inviting Reviewer
</b>
</p>
</div>
</div>
</template>
<template v-if="query.state == 8">
<div class="fixCard" style="width: calc((100% - 320px - 18px) / 2); flex-shrink: 0; position: relative">
@@ -2175,23 +2239,21 @@ export default {
},
methods: {
maxRepeatReviewCount(item) {
if (!item || !Array.isArray(item.reviewScore)) return null; // 边界处理无数据返回null
// 遍历所有评审者找到repeat数组长度最大的那条数据
const maxItem = item.reviewScore.reduce((maxItem, currentItem) => {
// 计算当前项的repeat长度非数组则视为0
const currentLen = Array.isArray(currentItem.repeat) ? currentItem.repeat.length : 0;
// 计算当前最大项的repeat长度非数组则视为0
const maxLen = Array.isArray(maxItem.repeat) ? maxItem.repeat.length : 0;
// 如果当前项长度更大,则更新最大项
return currentLen > maxLen ? currentItem : maxItem;
}, {}); // 初始值设为一个空对象
// console.log('maxItem at line 2142:', maxItem.repeat.length)
return maxItem&&maxItem.repeat?maxItem.repeat.length:0;
},
if (!item || !Array.isArray(item.reviewScore)) return null; // 边界处理无数据返回null
// 遍历所有评审者找到repeat数组长度最大的那条数据
const maxItem = item.reviewScore.reduce((maxItem, currentItem) => {
// 计算当前项的repeat长度非数组则视为0
const currentLen = Array.isArray(currentItem.repeat) ? currentItem.repeat.length : 0;
// 计算当前最大项的repeat长度非数组则视为0
const maxLen = Array.isArray(maxItem.repeat) ? maxItem.repeat.length : 0;
// 如果当前项长度更大,则更新最大项
return currentLen > maxLen ? currentItem : maxItem;
}, {}); // 初始值设为一个空对象
// console.log('maxItem at line 2142:', maxItem.repeat.length)
return maxItem && maxItem.repeat ? maxItem.repeat.length : 0;
},
mystate(mystate) {
let str = '';
switch (mystate) {
@@ -4055,7 +4117,7 @@ td {
padding: 6px;
min-width: 70px;
border: 1px solid #ddd;
text-align: left;
}
@@ -4066,15 +4128,29 @@ td {
.review_table td {
font-size: 12px;
/* background-color: #f0f0f0; */
}
.review_table tr:hover {
/* background-color: #fff; */
}
.overflow-x-auto{
.overflow-x-auto {
overflow-x: auto;
}
.scoringRules ul li {
list-style: none;
}
.scoringRules ul .scoringRulesEcharts {
display: flex;
align-items: flex-start;
justify-content: flex-start;
}
.scoringRulesTitle {
display: inline-block;
width: 60px;
color: #0077b8e6;
font-weight: 700;
}
.scoringRulesItem {
margin-top: 10px;
}
</style>