tijiao
This commit is contained in:
BIN
src/assets/img/ai.png
Normal file
BIN
src/assets/img/ai.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 99 KiB |
@@ -414,8 +414,15 @@ Information:'Fill in information',
|
||||
},
|
||||
Formula:{
|
||||
FormulaTemplate:'Formula Template'
|
||||
},
|
||||
AI: {
|
||||
AISummaryAnalysis: 'AI analysis',
|
||||
AIKeywords: 'Keywords',
|
||||
AIAbstract: 'Abstract',
|
||||
AIAbstractInfo: 'Analysis Result',
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -407,7 +407,13 @@ const zh = {
|
||||
},
|
||||
Formula:{
|
||||
FormulaTemplate:'公式模版'
|
||||
}
|
||||
},
|
||||
AI:{
|
||||
AISummaryAnalysis:'AI分析',
|
||||
AIKeywords:'关键词',
|
||||
AIAbstract:'摘要',
|
||||
AIAbstractInfo:'分析结果',
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1462,12 +1462,17 @@ export default {
|
||||
return false;
|
||||
}
|
||||
this.$refs.articleform.validate((valid) => {
|
||||
if (this.isAbstractTooShort(this.form.abstrart)) {
|
||||
this.$message.error('The abstract should not be less than 200 Chinese characters or English words!');
|
||||
return false;
|
||||
}
|
||||
//验证文档
|
||||
if (this.form.manuscirpt == '') {
|
||||
this.$message.error('Manuscirpt is required');
|
||||
// console.log('file up error');
|
||||
return false;
|
||||
}
|
||||
|
||||
//验证作者
|
||||
let authorlist = this.form.authorList;
|
||||
let Firsta = 0;
|
||||
@@ -1508,9 +1513,11 @@ export default {
|
||||
this.$message.error('First author and corresponding author must be exist');
|
||||
return false;
|
||||
}
|
||||
console.log('this.form.major at line 1512:', this.form.major);
|
||||
//验证文章领域
|
||||
this.form.major = this.majorValueList.map((item) => item.selectedValue[item.selectedValue.length - 1]).toString(',');
|
||||
if (this.form.major == '') {
|
||||
this.$message.error('Major is required');
|
||||
this.$message.error('Please select the Research areas');
|
||||
return false;
|
||||
}
|
||||
//验证选择转投但没选期刊项的情况
|
||||
@@ -1613,7 +1620,17 @@ export default {
|
||||
},
|
||||
|
||||
Submission_of_manuscripts() {
|
||||
// 提交稿件
|
||||
// 提交稿件AI检索
|
||||
this.$api
|
||||
// api/Article/addArticle
|
||||
.post('api/Aireview/review', {
|
||||
article_id: this.form.article_id,
|
||||
abstrart: this.form.abstrart,
|
||||
keywords: this.form.keyWords,
|
||||
api_model: 'gpt-4o'
|
||||
})
|
||||
.then((res) => {});
|
||||
|
||||
this.$api
|
||||
// api/Article/addArticle
|
||||
.post('api/Article/addArticlePart4', this.form)
|
||||
|
||||
@@ -5,7 +5,12 @@
|
||||
<el-breadcrumb-item> <i class="el-icon-lx-calendar"></i> Manuscript detail </el-breadcrumb-item>
|
||||
</el-breadcrumb>
|
||||
</div>
|
||||
<div class="container_state" v-loading="loading" style="margin: 20px 0 0 0">
|
||||
<div class="container_state" v-loading="loading" style="margin: 10px 0 0 0">
|
||||
<div style="margin-bottom: 10px; margin-top: 0px;overflow: hidden;" v-if="AIcontent!=''">
|
||||
<img src="@/assets/img/ai.png" style="width: 30px; height: 30px; margin-right: 4px;float: left;margin-top: 10px;" />
|
||||
|
||||
<p class="beautiful-gradient"style="float: right;width: calc(100% - 40px);font-size: 13px;line-height: 16px;color: #1d45f2;" >{{ AIcontent }}</p>
|
||||
</div>
|
||||
<el-row :gutter="30">
|
||||
<el-col :span="16">
|
||||
<div class="art_state_">
|
||||
@@ -57,7 +62,7 @@
|
||||
<p v-if="form.special_num > 0">
|
||||
<font>Special Issues :</font><b>{{ form.special_title }}</b>
|
||||
</p>
|
||||
|
||||
|
||||
<el-collapse class="auth_colla auth_collna_ew">
|
||||
<el-collapse-item :title="authorList_name" name="1">
|
||||
<div v-for="(item, index) in form.authorList" class="auth_mess">
|
||||
@@ -108,7 +113,7 @@
|
||||
</div>
|
||||
</el-collapse-item>
|
||||
</el-collapse>
|
||||
|
||||
|
||||
<el-collapse class="auth_colla auth_collna_ew" style="margin-top: -15px">
|
||||
<el-collapse-item name="2">
|
||||
<template slot="title">
|
||||
@@ -127,20 +132,16 @@
|
||||
</p>
|
||||
</el-collapse-item>
|
||||
</el-collapse>
|
||||
<el-collapse class="auth_colla auth_collna_ew" style="margin-top: -15px;">
|
||||
<el-collapse-item title="Research areas" name="1" >
|
||||
|
||||
|
||||
|
||||
<div style="position: relative;height: 30px;">
|
||||
<common-major
|
||||
:articleId="editform.articleId"
|
||||
@load="initMajor()"
|
||||
style="position: absolute; top: 10px; right: 10px"
|
||||
></common-major>
|
||||
|
||||
<el-collapse class="auth_colla auth_collna_ew" style="margin-top: -15px">
|
||||
<el-collapse-item title="Research areas" name="1">
|
||||
<div style="position: relative; height: 30px">
|
||||
<common-major
|
||||
:articleId="editform.articleId"
|
||||
@load="initMajor()"
|
||||
style="position: absolute; top: 10px; right: 10px"
|
||||
></common-major>
|
||||
</div>
|
||||
|
||||
|
||||
<div style="margin: 12px 20px 30px 0px; line-height: 24px; font-size: 14px; position: relative">
|
||||
<div>
|
||||
<!-- 统计数据 -->
|
||||
@@ -164,7 +165,7 @@
|
||||
</el-collapse-item>
|
||||
</el-collapse>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="art_file_">
|
||||
<el-row :gutter="24">
|
||||
<el-col :span="12" v-if="coverLetterFileList">
|
||||
@@ -552,6 +553,7 @@ export default {
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
AIcontent:'',
|
||||
previewData: {},
|
||||
baseUrl: this.Common.baseUrl,
|
||||
mediaUrl: this.Common.mediaUrl,
|
||||
@@ -672,6 +674,7 @@ export default {
|
||||
};
|
||||
},
|
||||
created: function () {
|
||||
this.getAi();
|
||||
this.initarticle();
|
||||
|
||||
this.initFileList();
|
||||
@@ -807,6 +810,18 @@ export default {
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async getAi(){
|
||||
var that = this;
|
||||
await this.$api
|
||||
.post('api/Aireview/get', {
|
||||
article_id: this.$route.query.id
|
||||
})
|
||||
.then(async (res) => {
|
||||
console.log('res at line 819:', res)
|
||||
this.AIcontent = res.data.content?res.data.content:'';
|
||||
|
||||
});
|
||||
},
|
||||
async getWordimgList() {
|
||||
var that = this;
|
||||
await this.$api
|
||||
@@ -1473,4 +1488,21 @@ export default {
|
||||
::v-deep .el-drawer__wrapper .WACContainer {
|
||||
z-index: 10000 !important;
|
||||
}
|
||||
|
||||
.beautiful-gradient {
|
||||
background: linear-gradient(135deg, #f0f9fe, #dce6ff, #d7e9fd);
|
||||
box-shadow: 0 8px 20px rgba(0, 0, 0, 0.01);
|
||||
border-radius: 16px;
|
||||
padding: 10px;
|
||||
box-sizing: border-box;
|
||||
color: #333;
|
||||
font-family: "Segoe UI", sans-serif;
|
||||
transition: transform 0.3s ease, box-shadow 0.3s ease;
|
||||
}
|
||||
|
||||
.beautiful-gradient:hover {
|
||||
transform: translateY(-4px);
|
||||
box-shadow: 0 12px 30px rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
@@ -52,7 +52,19 @@
|
||||
<el-button type="primary" icon="el-icon-search" @click="handleSearch" style="margin: 0 0 10px 0">Search </el-button>
|
||||
</div>
|
||||
<div v-if="!PreAcpVisible">
|
||||
<div v-for="(item, ikgn) in tableData" class="mangu_list">
|
||||
<div v-for="(item, ikgn) in tableData" class="mangu_list" style="position: relative">
|
||||
<img
|
||||
v-if="item.ai_review != '' && item.ai_review"
|
||||
src="@/assets/img/ai.png"
|
||||
@click="openAI(item)"
|
||||
style="cursor: pointer; width: 30px; height: 30px; position: absolute; right: 6px; top: 6px"
|
||||
/>
|
||||
<img
|
||||
v-else
|
||||
src="@/assets/img/ai.png"
|
||||
@click="creatAI(item,ikgn)"
|
||||
style="opacity: 0.5; cursor: pointer; width: 30px; height: 30px; position: absolute; right: 6px; top: 6px"
|
||||
/>
|
||||
<div>
|
||||
<font style="color: #666b7a">ID : </font>
|
||||
<span
|
||||
@@ -253,7 +265,7 @@
|
||||
<div v-if="item.reportList.length > 0" style="text-align: left">
|
||||
<div v-for="(v, i) in item.reportList" style="margin-top: 10px; overflow: hidden">
|
||||
<div style="display: flex; align-items: center; justify-content: space-between">
|
||||
<div style="display: flex; align-items: center;">
|
||||
<div style="display: flex; align-items: center">
|
||||
<span
|
||||
style="
|
||||
float: left;
|
||||
@@ -268,14 +280,20 @@
|
||||
"
|
||||
><i class="el-icon-s-custom"></i
|
||||
></span>
|
||||
<span style="max-width:80%;white-space: nowrap;display: inline-block;
|
||||
<span
|
||||
style="
|
||||
max-width: 80%;
|
||||
white-space: nowrap;
|
||||
display: inline-block;
|
||||
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;">{{ v.author_account.realname }}</span>
|
||||
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
"
|
||||
>{{ v.author_account.realname }}</span
|
||||
>
|
||||
</div>
|
||||
|
||||
<div style="max-width:260px;width:auto;">
|
||||
<div style="max-width: 260px; width: auto">
|
||||
<span style="margin-left: 6px" v-if="v.author_account.wos_time">
|
||||
<span style="font-size: 12px; font-weight: bold">WOS</span> :
|
||||
<span v-html="colorIndex1(v.author_account.wos_index)"></span>
|
||||
@@ -961,7 +979,7 @@
|
||||
"
|
||||
>
|
||||
<el-button type="primary" @click="saveUserIndex(userIndexForm)" style="float: right">{{ $t('citeList.save') }}</el-button>
|
||||
<el-button style="float: right; margin-right: 20px" @click="aiSorbox=false">{{ $t('citeList.cancel') }}</el-button>
|
||||
<el-button style="float: right; margin-right: 20px" @click="aiSorbox = false">{{ $t('citeList.cancel') }}</el-button>
|
||||
</div>
|
||||
</el-drawer>
|
||||
|
||||
@@ -1112,6 +1130,34 @@
|
||||
</div>
|
||||
</div>
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog :title="$t('AI.AISummaryAnalysis')" :visible.sync="isShowAI" width="50%" class="AIDialog">
|
||||
<div class="AISummaryAnalysis">
|
||||
<el-collapse class="auth_colla auth_collna_ew" style="margin-bottom: 0">
|
||||
<el-collapse-item name="1">
|
||||
<template slot="title">
|
||||
Abstract
|
||||
<font v-if="currentArticleData.keywords" style="margin-left: 3px">, Keywords</font>
|
||||
</template>
|
||||
<p>
|
||||
<font>Abstract :</font><b>{{ currentArticleData.abstrart }}</b>
|
||||
</p>
|
||||
<p v-if="currentArticleData.keywords">
|
||||
<font>Keywords :</font><b>{{ currentArticleData.keywords }}</b>
|
||||
</p>
|
||||
</el-collapse-item>
|
||||
</el-collapse>
|
||||
|
||||
<p style="line-height: 20px">
|
||||
<span>{{ $t('AI.AIAbstractInfo') }} :</span>
|
||||
{{ currentArticleData.ai_review }}
|
||||
</p>
|
||||
</div>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<!-- <el-button @click="isShowAI = false">取 消</el-button> -->
|
||||
<el-button type="primary" @click="isShowAI = false">Close</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -1124,6 +1170,8 @@ export default {
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
isShowAI: false,
|
||||
currentArticleData: {},
|
||||
rules: {},
|
||||
userloading: false,
|
||||
curState: null,
|
||||
@@ -1279,6 +1327,37 @@ export default {
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
openAI(data) {
|
||||
this.isShowAI = true;
|
||||
this.currentArticleData = { ...data };
|
||||
console.log('this.currentArticleData at line 1312:', this.currentArticleData);
|
||||
|
||||
},
|
||||
creatAI(data,i){
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: 'Loading...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: 'rgba(0, 0, 0, 0.7)'
|
||||
});
|
||||
console.log('data at line 1336:', data)
|
||||
this.$api
|
||||
// api/Article/addArticle
|
||||
.post('api/Aireview/review', {
|
||||
article_id: data.article_id,
|
||||
|
||||
})
|
||||
.then((res) => {
|
||||
if(res.data.content){
|
||||
this.tableData[i].ai_review=res.data.content
|
||||
loading.close()
|
||||
this.openAI({...data,ai_review:res.data.content});
|
||||
}
|
||||
}).catch((err) => {
|
||||
loading.close()
|
||||
this.$message.error('AI analysis failed')
|
||||
})
|
||||
},
|
||||
// 保存个人信息
|
||||
saveUserIndex() {
|
||||
let link_geo = '';
|
||||
@@ -1802,7 +1881,9 @@ export default {
|
||||
typeName = 'Google';
|
||||
index = this.userMessage.google_time != 0 ? this.userMessage.google_index : '';
|
||||
date = this.userMessage.google_time;
|
||||
website =this.userMessage.g_author?`https://scholar.google.com/citations?hl=en&user=${this.userMessage.g_author}`:'';
|
||||
website = this.userMessage.g_author
|
||||
? `https://scholar.google.com/citations?hl=en&user=${this.userMessage.g_author}`
|
||||
: '';
|
||||
editor = this.userMessage.google_editor;
|
||||
g_author = this.userMessage.g_author;
|
||||
this.bankVisible = false;
|
||||
@@ -2704,4 +2785,42 @@ export default {
|
||||
.userIndexBox .s_rol > div.rol_mess > font {
|
||||
width: auto;
|
||||
}
|
||||
.AISummaryAnalysis p {
|
||||
margin-top: 10px;
|
||||
font-size: 14px;
|
||||
padding-left: 10px;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.AISummaryAnalysis p span {
|
||||
display: inline-block;
|
||||
width: auto;
|
||||
color: #6157fd;
|
||||
font-weight: bold;
|
||||
}
|
||||
::v-deep .AIDialog .el-dialog__body {
|
||||
padding: 20px !important;
|
||||
}
|
||||
::v-deep .AIDialog .el-dialog__body .auth_collna_ew .el-collapse-item__arrow {
|
||||
padding-left: 0px !important;
|
||||
}
|
||||
::v-deep .AIDialog .el-dialog__body .auth_collna_ew .el-collapse-item__header {
|
||||
padding-left: 30px !important;
|
||||
}
|
||||
::v-deep .AIDialog .el-dialog {
|
||||
/* background: linear-gradient(135deg, #f0f9fe, #dce6ff, #d7e9fd) !important;
|
||||
box-shadow: 0 8px 20px rgba(0, 0, 0, 0.01) !important;
|
||||
border-radius: 16px !important;
|
||||
padding: 10px !important;
|
||||
box-sizing: border-box !important;
|
||||
color: #333 !important;
|
||||
font-family: "Segoe UI", sans-serif !important;
|
||||
transition: transform 0.3s ease, box-shadow 0.3s ease !important; */
|
||||
}
|
||||
.beautiful-gradient {
|
||||
}
|
||||
|
||||
.beautiful-gradient:hover {
|
||||
transform: translateY(-4px);
|
||||
box-shadow: 0 12px 30px rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -58,7 +58,8 @@ export default {
|
||||
watch: {
|
||||
list: {
|
||||
handler(e) {
|
||||
this.fields=[...this.list]
|
||||
|
||||
this.fields=this.list.length>0?[...this.list]:[{}]
|
||||
},
|
||||
immediate: true
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user