This commit is contained in:
2025-09-23 14:11:52 +08:00
parent 6c3b7ea922
commit fccc3df1aa
7 changed files with 1027 additions and 383 deletions

View File

@@ -12,12 +12,12 @@
<el-row :gutter="30">
<el-col :span="16">
<div class="art_state_">
<div style="position: relative" v-if="currentArticleData.ai_review==''">
<div style="position: relative" v-if="currentArticleData.ai_review == ''">
<img
src="@/assets/img/ai.png"
class="beautiful-gradient"
style="
opacity: 0.5;
opacity: 0.5;
width: 30px;
height: 30px;
margin-right: 4px;
@@ -163,18 +163,24 @@
</p>
</el-collapse-item>
</el-collapse>
<el-collapse v-model="AIcontent" class="auth_colla auth_collna_ew" style="margin-top: -15px" v-if="form.is_use_ai==1">
<el-collapse-item title="Artificial intelligence was utilized in the research or manuscript of the article" name="1">
<el-collapse
v-model="AIcontent"
class="auth_colla auth_collna_ew"
style="margin-top: -15px"
v-if="form.is_use_ai == 1"
>
<el-collapse-item
title="Artificial intelligence was utilized in the research or manuscript of the article"
name="1"
>
{{ form.use_ai_explain }}
</el-collapse-item>
</el-collapse>
<el-collapse class="auth_colla auth_collna_ew" style="margin-top: -15px" v-if="form.is_use_ai==2">
<el-collapse-item title="No artificial intelligence was utilized in the research or manuscript writing process of this article" name="1">
<el-collapse class="auth_colla auth_collna_ew" style="margin-top: -15px" v-if="form.is_use_ai == 2">
<el-collapse-item
title="No artificial intelligence was utilized in the research or manuscript writing process of this article"
name="1"
>
</el-collapse-item>
</el-collapse>
<el-collapse v-model="researchAreas" class="auth_colla auth_collna_ew research_area" style="margin-top: -15px">
@@ -329,16 +335,11 @@
<common-word-html :articleId="$route.query.id" style="box-sizing: border-box"></common-word-html>
</div>
<div v-if="reviewList.length>0">
<!-- 初审 --> <div class="art_author_">
<h2>
Reviewer Decision
</h2>
<div
class="fixCard reviewer_decision"
style="position: relative"
>
<div v-if="reviewList.length > 0">
<!-- 初审 -->
<div class="art_author_">
<h2>Reviewer Decision</h2>
<div class="fixCard reviewer_decision" style="position: relative">
<div class="overflow-x-auto">
<!-- 上面的表格代码放在这里 -->
@@ -357,9 +358,9 @@
<tbody>
<!-- 遍历每个评审者 -->
<tr v-for="(iken, reviewerIndex) in reviewList">
<td>Reviewer {{ reviewerIndex + 1 }}</td>
<td style="position: relative;cursor: pointer;">Reviewer {{ reviewerIndex + 1 }} <span style="color:#006699;position: absolute;right: 10px;top: 10px;" @click="handleClick(iken)" >Detail</span></td>
<!-- 1st review原逻辑不变 -->
<td @click="handleClick(iken)" style="cursor: pointer;">
<td @click="handleClick(iken)" style="cursor: pointer">
<span style="display: inline-block; margin-left: 4px; margin-right: 8px">
<font
v-if="iken.state == 0"
@@ -396,12 +397,18 @@
</font>
</span>
<span>{{ mystate(iken.state) }}</span>
</td>
<!-- 关键按最大重复次数遍历而非仅遍历当前iken.repeat -->
<template v-for="(_1, index1) in maxRepeatReviewCount()">
<td >
<td>
<!-- 补全逻辑判断当前评审者的repeat中是否有第index1条数据 -->
<span v-if="Array.isArray(iken.repeat) && iken.repeat[index1]" style="cursor: pointer;" @click="handleClick(iken)">
<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"
@@ -442,7 +449,7 @@
<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>
<span v-else>
<!-- 无数据补全空内容可自定义为- -->
-
@@ -453,19 +460,21 @@
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
<div v-if="finalList.length>0">
<div v-if="finalList.length > 0">
<!-- 终审 -->
<div class="art_author_">
<h2>
Final Decision
</h2>
<el-collapse v-model="activeFinalComment" style="background-color: #fff;">
<h2>Final Decision</h2>
<div>
<common-editor-article-detail style="margin-top: 20px;" v-for="(item, index) in finalList" :detailDate="{reviewer:item.realname,article_final:item,ctime:formatDate_(item.update_time)}"></common-editor-article-detail>
</div>
<!-- <el-collapse v-model="activeFinalComment" style="background-color: #fff;">
<el-collapse-item v-for="(item,index) in finalList" :name="index" :key="index"
class="art_author_list">
<template slot="title">
@@ -484,13 +493,10 @@
</div>
</template>
<!-- 时间轴 -->
<el-timeline >
<el-timeline>
<el-card>
<!-- 内容 -->
<div class="art_author_coment" style="margin-top: 0px;">
<p v-if="item.suggest_for_author!=''">
@@ -509,11 +515,10 @@
</el-card>
</el-timeline>
<!-- end -->
</el-collapse-item>
</el-collapse>
</div>
</el-collapse> -->
</div>
</div>
<!-- 被拒稿件操作 --->
<div class="art_caozuo_" v-if="opname == 'rejectArticles'">
@@ -826,38 +831,51 @@
</span>
<div style="">
<div style="color: #333">
<template v-if="item.isShowSign==1">
<template v-if="item.isShowSign == 1">
{{ currentArticleData.ai_review[item.value] }}
</template>
<template v-else>
{{ currentArticleData.ai_review[item.value] }}
</template>
<span v-if="item.explanationValue">
{{ currentArticleData.ai_review[item.explanationValue] }}
</span>
<div v-if="item.explanationValue">
<div >
<p
:class="{ 'short-content': !item.showFullContent }"
@click="toggleContent2(i, index)"
style="margin-top: 0; cursor: pointer;color: #888;line-height: 22px"
>
<span>{{ $t('aiReview.Explain') }} : </span> {{ currentArticleData.ai_review[item.explanationValue] }}
</p>
</div>
<div style="color: #006699;" v-if="item.explanationValue == 'other_journal_explanation'&&currentArticleData.ai_review['other_journal_issn']">
ISSN : {{ currentArticleData.ai_review['other_journal_issn'] }}
</div>
</div>
</div>
</div>
</div>
</div>
<div style="color: #333" v-else>
<template v-if="v.isShowSign==1">
{{ currentArticleData.ai_review[v.value] }}
</template>
<template v-else>
{{ currentArticleData.ai_review[v.value] }}
</template>
<template v-if="v.isShowSign == 1"> {{ currentArticleData.ai_review[v.value] }} </template>
<template v-else>
{{ currentArticleData.ai_review[v.value] }}
</template>
</div>
<div style="color: #888; line-height: 22px" v-if="v.explanationValue">
<span>{{ $t('aiReview.Explain') }} : </span> {{ currentArticleData.ai_review[v.explanationValue] }}
<p
:class="{ 'short-content': !v.showFullContent }"
@click="toggleContent1(i)"
style="margin-top: 0; cursor: pointer;color: #888;"
>
<span>{{ $t('aiReview.Explain') }} : </span> {{ currentArticleData.ai_review[v.explanationValue] }}
</p>
</div>
</div>
</el-form-item>
@@ -1011,48 +1029,137 @@ export default {
//1
{
topic: this.$t('aiReview.state0'),
value: 'journal_scope_assessment',
explanationValue: 'journal_scope_explanation',
isShowSign:1
},//10
{
topic: this.$t('aiReview.state16'),
value: 'submit_direction',
explanationValue: '',isShowSign:0
value: 'journal_scope_assessment1',
explanationValue: '',
isShowSign: 0,
parameter: [
{
topic: this.$t('aiReview.state0'),
value: 'journal_scope_assessment',
explanationValue: 'journal_scope_explanation',
isShowSign: 1
},
{
topic: this.$t('aiReview.state22'),
value: 'other_journal_assessment',
explanationValue: 'other_journal_explanation',
isShowSign: 1
}
]
},
//3
{
topic: this.$t('aiReview.state4'),
value: 'contradiction_assessment',
explanationValue: 'contradiction_explanation',isShowSign:1
},
//4
{
topic: this.$t('aiReview.state6'),
value: 'unreasonable_assessment',
explanationValue: 'unreasonable_explanation',isShowSign:1
},
//6
topic: this.$t('aiReview.state8'),
value: 'ethics_assessment',
explanationValue: '',
isShowSign: 0,
parameter: [
{
topic: this.$t('aiReview.state8'),
value: 'ethics_assessment',
explanationValue: 'ethics_explanation',
isShowSign: 1
},
{
topic: this.$t('aiReview.state20'),
value: 'registration_assessment',
explanationValue: '',
isShowSign: 1
}
]
},//6
{
topic: this.$t('aiReview.state10'),
value: 'academic_assessment',
explanationValue: 'academic_explanation',isShowSign:1
},
//8
explanationValue: 'academic_explanation',
isShowSign: 1
}, //3
{
topic: this.$t('aiReview.state4'),
value: 'contradiction_assessment',
explanationValue: 'contradiction_explanation',
isShowSign: 1
},
//8
{
topic: this.$t('aiReview.state14'),
value: 'fund_number',
explanationValue: '',isShowSign:0
explanationValue: '',
isShowSign: 0
},
//2
{
topic: this.$t('aiReview.state2'),
value: 'attribute_assessment',
explanationValue: 'attribute_explanation',
isShowSign: 1
},
//9
{
topic: this.$t('aiReview.state15'),
value: 'hotspot',
explanationValue: '',isShowSign:0
explanationValue: '',
isShowSign: 0
},
//12
{
topic: this.$t('aiReview.state19'),
value: 'create_time',
explanationValue: '',
color: 'rgb(0, 112, 192)',
isShowSign: 0,
parameter: [
{
topic: this.$t('aiReview.state191'),
value: 'references_past_three',
explanationValue: '',
color: 'rgb(0, 112, 192)',
isShowSign: 0
},
{
topic: this.$t('aiReview.state192'),
value: 'references_past_five',
explanationValue: '',
color: 'rgb(0, 112, 192)',
isShowSign: 0
},
// {
// topic: this.$t('aiReview.state193'),
// value: 'references_ratio_JCR1',
// explanationValue: '',
// color: 'rgb(0, 112, 192)',
// isShowSign: 0
// },
// {
// topic: this.$t('aiReview.state194'),
// value: 'references_ratio_JCR2',
// explanationValue: '',
// color: 'rgb(0, 112, 192)',
// isShowSign: 0
// }
]
},
// {
// topic: this.$t('aiReview.state16'),
// value: 'submit_direction',
// explanationValue: '',
// isShowSign: 0
// },
//10
//4
// {
// topic: this.$t('aiReview.state6'),
// value: 'unreasonable_assessment',
// explanationValue: 'unreasonable_explanation',
// isShowSign: 1
// },
//9
//11
// {
// topic: this.$t('aiReview.state17'),
@@ -1060,75 +1167,25 @@ export default {
// explanationValue: ''
// },
//2
{
topic: this.$t('aiReview.state2'),
value: 'attribute_assessment',
explanationValue: 'attribute_explanation',isShowSign:1
},
//5
{
topic: this.$t('aiReview.state8'),
value: 'ethics_assessment',
explanationValue: '',isShowSign:0,
parameter: [
{
topic: this.$t('aiReview.state8'),
value: 'ethics_assessment',
explanationValue: 'ethics_explanation',isShowSign:1
},
{
topic: this.$t('aiReview.state20'),
value: 'registration_assessment',
explanationValue: '',isShowSign:0
}
]
},
//7
{
topic: this.$t('aiReview.state12'),
value: 'conclusion_assessment',
explanationValue: 'conclusion_explanation',isShowSign:1
},
// {
// topic: this.$t('aiReview.state12'),
// value: 'conclusion_assessment',
// explanationValue: 'conclusion_explanation',
// isShowSign: 1
// },
//12
{
topic: this.$t('aiReview.state19'),
value: 'create_time',
explanationValue: '',
color: 'rgb(0, 112, 192)',isShowSign:0,
parameter: [
{
topic: this.$t('aiReview.state191'),
value: 'references_past_three',
explanationValue: '',
color: 'rgb(0, 112, 192)',isShowSign:0
},
{
topic: this.$t('aiReview.state192'),
value: 'references_past_five',
explanationValue: '',
color: 'rgb(0, 112, 192)',isShowSign:0
},
{
topic: this.$t('aiReview.state193'),
value: 'references_ratio_JCR1',
explanationValue: '',
color: 'rgb(0, 112, 192)',isShowSign:0
},
{
topic: this.$t('aiReview.state194'),
value: 'references_ratio_JCR2',
explanationValue: '',
color: 'rgb(0, 112, 192)',isShowSign:0
}
]
},
//13
{
topic: this.$t('aiReview.state21'),
value: 'cite_rate',
explanationValue: '',isShowSign:0
}
// {
// topic: this.$t('aiReview.state21'),
// value: 'cite_rate',
// explanationValue: '',
// isShowSign: 0
// }
// {
// topic: this.$t('aiReview.state18'),
@@ -1136,12 +1193,12 @@ export default {
// explanationValue: ''
// }
],
finalList:[],
reviewList:[],
finalList: [],
reviewList: []
};
},
async created() {
await this.initarticle();
await this.initarticle();
await this.getAi();
this.initFileList();
this.getWordimgList();
@@ -1209,6 +1266,14 @@ export default {
}
},
methods: {
toggleContent1(i) {
this.aiReview[i].showFullContent = !this.aiReview[i].showFullContent;
this.$forceUpdate();
},
toggleContent2(i, index) {
this.aiReview[i].parameter[index].showFullContent = !this.aiReview[i].parameter[index].showFullContent;
this.$forceUpdate();
},
maxRepeatReviewCount() {
if (!this.reviewList || !Array.isArray(this.reviewList)) return null; // 边界处理无数据返回null
@@ -1225,66 +1290,60 @@ export default {
// console.log('maxItem at line 2142:', maxItem.repeat.length)
return maxItem && maxItem.repeat ? maxItem.repeat.length : 0;
},
handleClick(item){
console.log('item at line 1228:', item)
this.$router.push({
path: 'articleReviewerDetail',
query: {
id: item.art_rev_id
}
});
handleClick(item) {
console.log('item at line 1228:', item);
this.$router.push({
path: 'articleReviewerDetail',
query: {
id: item.art_rev_id
}
});
},
goReviewerDetail(id){
console.log('id at line 1112:', id)
this.$router.push({
path: 'articleReviewerDetail',
query: {
id: id
}
});
goReviewerDetail(id) {
console.log('id at line 1112:', id);
this.$router.push({
path: 'articleReviewerDetail',
query: {
id: id
}
});
},
getFinalList(){
this.$api
getFinalList() {
this.$api
// api/Article/addArticle
.post('api/Finalreview/getArticleFinalReview', {
article_id: this.editform.articleId
})
.then(async(res) => {
if (res.status==1) {
if(res.status==1){
this.finalList = [...res.data.final_review,];
this.reviewList = res.data.review;
}
.then(async (res) => {
if (res.status == 1) {
if (res.status == 1) {
this.finalList = [...res.data.final_review];
this.reviewList = res.data.review;
}
}
})
.catch((err) => {
});
},
async creatAI() {
.catch((err) => {});
},
async creatAI() {
const loading = this.$loading({
lock: true,
text: 'loading...',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
});
await this.$api
await this.$api
// api/Article/addArticle
.post('api/Aireview/review', {
article_id: this.editform.articleId
})
.then(async(res) => {
if (res.status==1) {
.then(async (res) => {
if (res.status == 1) {
loading.close();
await this.getAi()
await this.openAI();
await this.getAi();
await this.openAI();
}
})
.catch((err) => {
@@ -1310,6 +1369,37 @@ getFinalList(){
};
if (res.data != null) {
this.currentArticleData.ai_review = res.data;
var aiReview = {};
if (this.currentArticleData.ai_review.journal_scope_assessment == '否') {
aiReview = {
topic: this.$t('aiReview.state0'),
value: 'journal_scope_assessment1',
explanationValue: '',
isShowSign: 0,
parameter: [
{
topic: this.$t('aiReview.state0'),
value: 'journal_scope_assessment',
explanationValue: 'journal_scope_explanation',
isShowSign: 1
},
{
topic: this.$t('aiReview.state22'),
value: 'other_journal_assessment',
explanationValue: 'other_journal_explanation',
isShowSign:1
}
]
};
} else {
aiReview = {
topic: this.$t('aiReview.state0'),
value: 'journal_scope_assessment',
explanationValue: 'journal_scope_explanation',
isShowSign: 1
};
}
this.aiReview[0] = aiReview;
}
console.log('this.currentArticleData at line 1312:', this.currentArticleData);
@@ -1373,7 +1463,7 @@ getFinalList(){
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 ;
return Y + M + D;
},
//弹出编辑框
testvis() {
@@ -1809,7 +1899,7 @@ getFinalList(){
removefilerepezip(file, fileList) {
this.repeform.zipurl = '';
},
formatDate_(timestamp) {
var date = new Date(timestamp * 1000); //时间戳为10位需*1000时间戳为13位的话不需乘1000
var Y = date.getFullYear() + '-';
@@ -2043,7 +2133,8 @@ getFinalList(){
::v-deep .AISummaryAnalysis .el-form-item--mini.el-form-item,
.el-form-item--small.el-form-item {
margin-bottom: 10px;
}.beautiful-gradient1 {
}
.beautiful-gradient1 {
background: linear-gradient(135deg, #f0f9fe, #dce6ff, #d7e9fd);
box-shadow: 0 8px 20px rgba(0, 0, 0, 0.01);
border-radius: 10px;
@@ -2054,111 +2145,111 @@ getFinalList(){
transition: transform 0.3s ease, box-shadow 0.3s ease;
border-radius: 30px;
}
/deep/.research_area .el-collapse-item__content{
padding-bottom: 0 !important;
}
/deep/.research_area .el-collapse-item__content {
padding-bottom: 0 !important;
}
.art_author_ {
padding: 20px 0;
}
.art_author_ {
padding: 20px 0;
}
.art_author_>h2 {
font-size: 18px;
margin: 0 0 15px 0;
letter-spacing: -0.8px;
}
.art_author_ > h2 {
font-size: 18px;
margin: 0 0 15px 0;
letter-spacing: -0.8px;
}
.art_author_list {
margin: 0 0 0 5px;
}
.art_author_list {
margin: 0 0 0 5px;
}
.art_author_list .com_shu {
background-color: #006699;
color: #fff;
display: inline-block;
width: 18px;
height: 18px;
line-height: 18px;
text-align: center;
margin: 0 10px 0 0;
}
.art_author_list .com_shu {
background-color: #006699;
color: #fff;
display: inline-block;
width: 18px;
height: 18px;
line-height: 18px;
text-align: center;
margin: 0 10px 0 0;
}
.art_author_peng {
margin: 10px 0 0px 10px;
line-height: 24px;
.art_author_peng {
margin: 10px 0 0px 10px;
line-height: 24px;
}
}
.art_author_peng > a {
color: #333;
}
.art_author_peng>a {
color: #333;
}
.art_author_peng > a:hover {
text-decoration: underline;
}
.art_author_peng>a:hover {
text-decoration: underline;
}
.art_author_peng > a > img {
width: 15px;
vertical-align: text-bottom;
margin: 0 15px 0 0;
}
.art_author_peng>a>img {
width: 15px;
vertical-align: text-bottom;
margin: 0 15px 0 0;
}
.art_author_peng > a > span {
color: #888;
margin: 0 0 0 30px;
}
.art_author_peng>a>span {
color: #888;
margin: 0 0 0 30px;
}
.art_author_peng > a > i {
font-weight: bold;
color: #75abf1;
margin: 0 0 0 18px;
}
.art_author_peng>a>i {
font-weight: bold;
color: #75abf1;
margin: 0 0 0 18px;
}
.art_author_btn > div {
margin-bottom: 30px;
color: #006699;
}
.art_author_btn > h4 {
float: left;
width: 180px;
padding: 8px 20px 0 0;
letter-spacing: -0.5px;
text-align: right;
}
.art_author_btn>div {
margin-bottom: 30px;
color: #006699;
}
.art_author_btn > p {
float: left;
margin: 0 0 30px 0;
}
.art_author_btn>h4 {
float: left;
width: 180px;
padding: 8px 20px 0 0;
letter-spacing: -0.5px;
text-align: right;
}
.el-upload__tip {
margin-left: 6px;
}
.art_author_btn>p {
float: left;
margin: 0 0 30px 0;
}
.el-collapse {
border-bottom: 0;
}
.el-upload__tip {
margin-left: 6px;
}
.art_author_coment {
}
.el-collapse {
border-bottom: 0;
}
.art_author_coment > p {
line-height: 20px;
}
.art_author_coment {}
.art_author_coment > p:first-child {
margin-top: 0;
}
.art_author_coment>p {
line-height: 20px;
}
.art_author_coment>p:first-child {
margin-top: 0;
}
.art_author_coment>p>font,.commentfs>font {
display: block;
margin: 15px 0 5px 0;
color: #333;
font-weight: bold;
letter-spacing: -0.5px;
}
.review_table {
.art_author_coment > p > font,
.commentfs > font {
display: block;
margin: 15px 0 5px 0;
color: #333;
font-weight: bold;
letter-spacing: -0.5px;
}
.review_table {
width: 100%;
background-color: #fff;
/* margin-top: 10px; */
@@ -2188,5 +2279,26 @@ td {
}
.overflow-x-auto {
overflow-x: auto;
}.short-content {
max-height: 120px;
display: -webkit-box;
-webkit-line-clamp: 3; /* 设置显示的行数 */
-webkit-box-orient: vertical;
overflow: hidden;
text-overflow: ellipsis;
overflow: hidden;
}
.show-more-btn {
background-color: #4caf50;
color: white;
padding: 10px;
border: none;
cursor: pointer;
margin-top: 10px;
}
.show-more-btn:hover {
background-color: #45a049;
}
</style>