作者库

This commit is contained in:
2024-09-14 09:14:31 +08:00
parent bc5f3d7456
commit e1807241b5
5 changed files with 1250 additions and 500 deletions

View File

@@ -65,7 +65,7 @@ const en = {
InvestorProducer:'Investor Producer',
author:'Author',
status:'Status',
Published:'Published',
Published:'Published',journal:'Journal',
},
paperArticleCount:{
Periodroll:'Period Roll',
@@ -79,7 +79,13 @@ const en = {
},
partyListCorr:{
Realname:'Realname',
Email:'Email',
unregistered:'unregistered',
OtherInformation:'Other Information',
articlelist: 'Article List',journal:'Journal',
},
sidebar: {
main: 'Personal Center',
author: 'Author',

View File

@@ -64,16 +64,22 @@ const zh = {
articleTitle: '文章标题',
articleLen: '文章数量',
articleLen1: '文章数量',
cite: '引用',
relation: '关联',
cite: '引用',
relation: '关联',
}, partyListCorr: {
Realname: '姓名',
Email: '邮箱',
unregistered:'unregistered',
OtherInformation:'其他信息',
articlelist: '文章列表',journal: '期刊',
},
partyRole:{
identity:'身份',
InvestorProducer:'投稿者',
author:'作者',
status:'状态',
Published:'已发表',
partyRole: {
identity: '身份',
InvestorProducer: '投稿者',
author: '作者',
status: '状态',
Published: '已发表',journal:'Journal',
},
sidebar: {
main: '个人中心',

View File

@@ -0,0 +1,555 @@
<template>
<div>
<div class="crumbs">
<el-breadcrumb separator="/">
<el-breadcrumb-item>
<i class="el-icon-user"></i> Author Database
</el-breadcrumb-item>
</el-breadcrumb>
</div>
<div class="container">
<div class="handle-box">
<el-select v-model="query.journal_id" placeholder="Please select a journal"
@change="query.pageIndex = 1;getData()">
<el-option v-for="item in jourList" :label="item.title" :key="item.journal_id"
:value="item.journal_id"></el-option>
</el-select>
<el-select v-model="query.year" placeholder="Please select a year"
@change="query.pageIndex = 1;getData()" style="margin: 0 0 0 15px;width: 100px;">
<el-option v-for="item in yearList" :label="item.title" :key="item.year" :value="item.year">
</el-option>
</el-select>
<el-input v-model="query.keywords" placeholder="Account / Realname / Email"
style="width: 240px;margin: 0 15px;">
</el-input>
<el-button type="primary" icon="el-icon-search" @click="query.pageIndex = 1;getData()">Search
</el-button>
<p style="height: 20px;"></p>
<span style="font-size: 14px;color: #606266;margin: 0 10px 0 0;">Research direction :</span>
<el-select v-model="query.major_a" placeholder="Please select major" @change="majorChange(1)"
style="width: 240px;margin: 0 10px 0 0;">
<el-option :key="0" label="All major" :value="0"></el-option>
<el-option v-for="item in majors_a" :key="item.major_id" :label="item.major_title"
:value="item.major_id"></el-option>
</el-select>
<el-select v-model="query.major_b" placeholder="Please select major" v-if="majors_b!=''"
@change="majorChange(2)" style="width: 240px;margin:0 10px 0 0;">
<el-option :key="0" label="None" :value="0"></el-option>
<el-option v-for="item in majors_b" :key="item.major_id" :label="item.major_title"
:value="item.major_id"></el-option>
</el-select>
<el-select v-model="query.major_c" placeholder="Please select major" v-if="majors_c!=''"
@change="majorChange(3)" style="width: 240px;margin:0 10px 0 0;">
<el-option :key="0" label="None" :value="0"></el-option>
<el-option v-for="item in majors_c" :key="item.major_id" :label="item.major_title"
:value="item.major_id"></el-option>
</el-select>
</div>
<el-table :data="tableData" border class="table" ref="multipleTable" header-cell-class-name="table-header"
empty-text="Messages (0)">
<el-table-column label="Base Information" width="250px">
<template slot-scope="scope">
<p class="tab_tie_col">
<span>Realname: </span><b style="font-size: 15px;">{{scope.row.realname}}</b>
</p>
<p class="tab_tie_col">
<span>Email: </span>{{scope.row.email}}
</p>
<p class="tab_tie_col">
<span>Title: </span>{{scope.row.technical}}
</p>
<p class="tab_tie_col">
<span>H-WOS: </span>
<font v-html="colorIndex(scope.row.wos_index,scope.row.wos_time)"></font>
</p>
<p class="tab_tie_col">
<span>H-Google: </span>
<font v-html="colorIndex(scope.row.google_index,scope.row.google_time)"></font>
</p>
<p class="tab_tie_col" v-if="scope.row.starList_mark!=0">
<span>Grade: </span>
<font style="display: inline-block;">
<img src="../../assets/img/star-all.png" v-for="item in scope.row.starList"
v-if="scope.row.starList_mark<=8&&item.star==1" class="starSty">
<img src="../../assets/img/star-traf.png" v-for="item in scope.row.starList"
v-if="scope.row.starList_mark<=8&&item.star==0" class="starSty">
<img src="../../assets/img/star-none.png" v-for="item in scope.row.starList"
v-if="scope.row.starList_mark<=8&&item.star==2" class="starSty">
<img src="../../assets/img/star-all.png" v-if="scope.row.starList_mark>8"
class="starSty">
<b style="font-size: 15px;color: #b77614;" v-if="scope.row.starList_mark>8">×
{{scope.row.starList_mark}}</b>
</font>
</p>
</template>
</el-table-column>
<el-table-column label="Other Information">
<template slot-scope="scope">
<p class="tab_tie_col" v-if="scope.row.field!=''&&scope.row.field!=null">
<span>Field: </span>{{scope.row.field}}
</p>
<p class="tab_tie_col" v-if="scope.row.major_str!=''&&scope.row.major_str!=null">
<span>Major: </span>{{scope.row.major_str}}
</p>
<p class="tab_tie_col" v-if="scope.row.company!=''&&scope.row.company!=null">
<span>Affiliation: </span>{{scope.row.company}}
</p>
</template>
</el-table-column>
<el-table-column label="Article List" width="280" :key="Math.random()">
<template slot-scope="scope">
<!-- <div class="iss_vol">
<el-popover placement="top-start" width="300" trigger="hover">
<p class="tipck">
<b>{{scope.row.realname}}</b>
</p>
<p class="tipck" style="margin: 5px 0pt;">
<b style="letter-spacing: -0.5px;color: #006699;">25 March 2023, Volume 5 Issue
1</b>
</p>
<p class="tipck" style="margin: 10px 0;word-wrap: break-word;word-break: normal;">
{{scope.row.field}}
</p>
<span slot="reference">
25 March 2023, Volume 5 Issue 1
</span>
</el-popover>
</div> -->
<div class="iss_vol" v-for="(item,index) in scope.row.art_detail"
v-if="index<scope.row.art_detail_num" @click="openActicle(item)">
<b style="margin-right: 2px;">{{item.journal_abbr}}</b>: {{item.doi}}
<font v-if="item.doi==''">Link</font>
</div>
<p class="moreShrink" v-if="scope.row.art_detail.length>5&&scope.row.art_detail_num==5"
@click="moreShrink(scope,1)">
<i class="el-icon-bottom"></i>
More
</p>
<p class="moreShrink" v-if="scope.row.art_detail.length>5&&scope.row.art_detail_num!=5"
@click="moreShrink(scope,0)">
<i class="el-icon-top"></i>
More
</p>
</template>
</el-table-column>
<el-table-column label="Remarks" width="180">
<template slot-scope="scope">
{{scope.row.remark}}
<b @click="BoxRemark(scope.row)" style="margin-left:10px;cursor: pointer;color:#006699;"
class="el-icon-edit"></b>
</template>
</el-table-column>
<el-table-column label="" width="105" align="center">
<template slot-scope="scope">
<el-button type="primary" plain icon="el-icon-edit" @click="handleDtail(scope.row)">
Detail
</el-button>
</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="link_Total" @current-change="handlePageChange"></el-pagination>
</div>
</div>
<!-- 标记弹出框 -->
<el-dialog title="Remarks" :visible.sync="remarkBox" width="550px">
<el-form ref="remark" :model="remarkMes" label-width="95px">
<el-form-item label="Reviewer :">
<p style="line-height: 20px;margin-top: 6px;">{{remarkMes.realname}}</p>
</el-form-item>
<el-form-item label="Email :">
<p style="line-height: 20px;margin-top: 6px;">{{remarkMes.email}}</p>
</el-form-item>
<el-form-item label="Content :">
<el-input type="textarea" rows="5" v-model="remarkMes.remark"></el-input>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="remarkBox = false">Cancel</el-button>
<el-button type="primary" @click="saveRemark">Save</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
export default {
data() {
return {
baseUrl: this.Common.baseUrl,
mediaUrl: this.Common.mediaUrl,
query: {
journal_id: '',
year: 0,
keywords: '',
pageIndex: 1,
pageSize: 15,
major: 0,
major_a: 0,
major_b: '',
major_c: '',
},
edit_id: localStorage.getItem('U_id'),
tableData: [],
link_Total: 0,
jourList: [],
yearList: [{
title: 'All years',
year: 0
}],
majors_a: [],
majors_b: [],
majors_c: [],
remarkMes: {
remark: ''
},
remarkBox: false,
};
},
created() {
this.getJournal();
this.initMajor()
},
methods: {
// 获取期刊列表数据
getJournal() {
this.$api
.post('api/Chief/getJournalsByEditor', {
'user_id': this.edit_id
})
.then(res => {
if (res.code == 0) {
this.jourList = res.data.journals;
this.query.journal_id = this.jourList[0].journal_id
this.getData();
} else {
this.$message.error(res.msg);
}
})
.catch(err => {
this.$message.error(err);
});
for (var i = 2015; i <= new Date().getFullYear(); i++) {
this.yearList.push({
title: i,
year: i
})
}
},
getData() {
const loading = this.$loading({
lock: true,
text: 'Loading...',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
});
this.$api
.post('api/User/getAuthorUserList', this.query)
.then(res => {
if (res.code == 0) {
this.tableData = res.data.list;
for (var i = 0; i < this.tableData.length; i++) {
this.getScoreData(i, this.tableData[i].score)
if (this.tableData[i].art_detail.length > 5) {
this.tableData[i].art_detail_num = 5
} else {
this.tableData[i].art_detail_num = this.tableData[i].art_detail.length
}
}
this.link_Total = res.data.count || 0;
loading.close()
} else {
this.$message.error(res.msg);
loading.close()
}
})
.catch(err => {
this.$message.error(err);
loading.close()
});
},
// 文章跳转
openActicle(e) {
window.open(e.link, '_blank');
},
// 文章展开收缩
moreShrink(e, m) {
if (m == 1) {
this.tableData[e.$index].art_detail_num = this.tableData[e.$index].art_detail.length
} else if (m == 0) {
this.tableData[e.$index].art_detail_num = 5
}
console.log(this.tableData[e.$index])
console.log(this.tableData[e.$index].art_detail_num)
this.$forceUpdate()
},
// 评分
getScoreData(i, e) {
this.tableData[i].starList = []
this.tableData[i].starList_mark = 0
if (e < 0.5 && e > 0) {
this.tableData[i].starList.push({
star: 2
})
this.tableData[i].starList_mark = 1
} else {
let zheng = Math.floor(e)
let xiao = Number(e) - Math.floor(e)
if (xiao >= 0.5) {
xiao = 0.5
} else {
xiao = 0
}
for (var j = 0; j < zheng; j++) {
this.tableData[i].starList.push({
star: 1
})
}
if (xiao == 0.5) {
this.tableData[i].starList.push({
star: 0
})
}
this.tableData[i].starList_mark = Number(zheng) + Number(xiao)
}
},
// 分页导航
handlePageChange(val) {
this.$set(this.query, 'pageIndex', val);
this.getData();
},
// 详情
handleDtail(e) {
let routerJump = this.$router.resolve({
path: '/partyRole',
query: {
id: e.user_id
}
});
window.open(routerJump.href, '_blank');
},
// 标记弹出框
BoxRemark(e) {
this.remarkBox = true;
this.remarkMes.realname = e.realname;
this.remarkMes.user_id = e.user_id;
this.remarkMes.email = e.email;
this.remarkMes.remark = e.remark;
},
// 修改标记
saveRemark() {
this.$api
.post('api/User/editRemarkForUser', this.remarkMes)
.then(res => {
if (res.code == 0) {
this.$message.success('Success');
this.remarkBox = false;
this.getData();
} else {
this.$message.error(res.msg);
}
});
},
// 领域
initMajor() {
this.$api
.post('api/Ucenter/getMajor', {
major_id: 1
}).then((res) => {
this.majors_a = res.data.major.children;
});
},
// 搜索选择领域
majorChange(e) {
if (e == 1) {
this.$api
.post('api/Ucenter/getMajor', {
major_id: this.query.major_a
}).then((res) => {
this.majors_b = res.data.major.children;
this.majors_c = []
this.query.major_b = ''
this.query.major_c = ''
this.majorChange_panduan()
});
} else if (e == 2 && this.query.major_b != 0) {
this.$api
.post('api/Ucenter/getMajor', {
major_id: this.query.major_b
}).then((res) => {
this.majors_c = res.data.major.children;
this.query.major_c = ''
this.majorChange_panduan()
});
} else {
this.majorChange_panduan()
}
},
majorChange_panduan() {
if (this.query.major_c != '' || this.query.major_c != 0) {
this.query.major = this.query.major_c
} else if (this.query.major_b != '' || this.query.major_b != 0) {
this.query.major = this.query.major_b
} else {
this.query.major = this.query.major_a
}
this.query.pageIndex = 1
this.getData();
},
// 指数颜色
colorIndex(num, time) {
if (time != 0) {
let date = new Date(parseInt(time * 1000));
let Y = date.getFullYear() + '-';
let M = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) + '-' : date.getMonth() + 1 + '-';
let D = date.getDate() < 10 ? '0' + date.getDate() : date.getDate();
let H = date.getHours() < 10 ? '0' + date.getHours() + ':' : date.getHours() + ':';
let U = date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes();
time = Y + M + D;
}
let str = '';
if (num < 10) {
str = '<b style="color:#cb160a">' + num +
'</b><span style="color:#aaa;font-size:14px;margin-left:10px;">(' + time +
')</span>'
} else if (num < 15) {
str = '<b style="color:#cbb504">' + num +
'</b><span style="color:#aaa;font-size:14px;margin-left:10px;">(' + time +
')</span>'
} else {
str = '<b style="color:#0cbc15">' + num +
'</b><span style="color:#aaa;font-size:14px;margin-left:10px;">(' + time +
')</span>'
}
if (time == 0) {
str =
'<b style="color:#aaa;">0</b><span style="color:#aaa;font-size:14px;margin-left:10px;">(No time)</span>'
}
return str;
},
// 时间格式
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;
},
}
};
</script>
<style scoped>
.handle-box {
margin-bottom: 20px;
}
.table {
width: 100%;
font-size: 14px;
}
.table-td-thumb {
display: block;
margin: auto;
width: 40px;
height: 40px;
}
.el-table .warning-row {
background: #f3ca7f;
}
.el-table .success-row {
background: #bcfc9a;
}
.el-table .normol-row {
background: #d8f1c7;
}
.el-table .red-row {
background: #f05555;
}
.tab_tie_col {
margin-bottom: 5px;
color: #333;
word-wrap: break-word;
word-break: normal;
}
.tab_tie_col>span {
color: #888;
margin: 0 5px 0 0;
font-size: 13px;
}
.starSty {
width: 18px;
margin-right: 4px;
vertical-align: text-top;
}
.starSty:nth-last-child(1) {
margin-right: 0;
}
.txt_pdf {
margin: 0 0 20px 10px;
display: inline-block;
color: #333;
}
.txt_pdf>i {
color: #66a9f0;
font-weight: bold;
margin-left: 10px;
}
.iss_vol {
/* color: #006699; */
margin: 5px 0;
}
.iss_vol:hover {
cursor: pointer;
text-decoration: underline;
}
.moreShrink {
text-align: right;
color: #006699;
font-weight: bold;
}
.moreShrink:hover {
cursor: pointer;
text-decoration: underline;
}
</style>

File diff suppressed because it is too large Load Diff

View File

@@ -337,6 +337,16 @@
</div>
</template>
</el-table-column>
<el-table-column :label="$t('partyRole.journal')" prop="title" width="100">
<template slot-scope="scope">
<el-tooltip class="item" effect="dark" :content="scope.row.journal_title
" placement="top-start">
<div>
{{ scope.row.abbr }}
</div>
</el-tooltip>
</template>
</el-table-column>
<el-table-column :label="$t('partyRole.status')" prop="title" width="80">
<template slot-scope="scope">
<div