Files
tougao_web/src/components/page/partyRole.vue
2024-11-15 09:20:54 +08:00

2715 lines
114 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<template>
<div>
<div class="crumbs">
<el-breadcrumb separator="/">
<el-breadcrumb-item>
<i class="el-icon-coordinate"></i>
<router-link :to="{ path: '/partyList' }">
<span class="top_dao"> User List</span>
</router-link>
>> User Role
</el-breadcrumb-item>
</el-breadcrumb>
</div>
<div
class="container"
v-loading="loading"
element-loading-text="Loading..."
style="min-width: 800px"
element-loading-spinner="el-icon-loading"
element-loading-background="rgba(0, 0, 0, 0.8)"
>
<el-tabs tab-position="top" style="margin: 30px 20px 0 20px">
<el-tab-pane label="User information">
<div class="s_rol" style="margin-top: 10px">
<h3>
Basic information
<el-button @click="handleMessage" type="primary" icon="el-icon-edit" size="mini" round>
Edit message
</el-button>
</h3>
<div class="rol_mess">
<font style="margin-top: 35px; vertical-align: top">Picture :</font>
<div class="portrait" @click="unplIcon">
<img src="../../assets/img/userImg.jpg" class="portrait" v-if="pictureUrl == ''" />
<img :src="pictureUrl" class="portrait" v-if="pictureUrl != ''" />
<el-upload
class="avatar-uploader"
ref="upIconIMg"
:action="baseUrl + 'api/Ucenter/up_userIcon_file'"
:show-file-list="false"
name="icon"
:on-success="handleAvatarSuccess2"
:on-error="handleAvatarError2"
:before-upload="beforeAvatarUpload2"
style="display: none"
>
<img v-if="pictureUrl" :src="pictureUrl" class="avatar" accept=".png,.jpg" />
<i v-else class="el-icon-plus avatar-uploader-icon"></i>
</el-upload>
<div class="ptmark">Upload avatar</div>
</div>
</div>
<div class="rol_mess">
<font>Account :</font>
<p class="rm_huid">{{ userMessage.account }}</p>
</div>
<div class="rol_mess">
<font>Email :</font>
<p class="rm_huid">{{ userMessage.email }}</p>
</div>
<div class="rol_mess">
<font>English name :</font>
<p class="rm_huid">{{ userMessage.realname }}</p>
</div>
<div class="rol_mess">
<font>Local language name :</font>
<p class="rm_huid">{{ userMessage.localname }}</p>
</div>
<div class="rol_mess">
<font>Phone :</font>
<p class="rm_huid">{{ userMessage.phone }}</p>
</div>
<div class="rol_mess">
<font>Country :</font>
<p class="rm_huid">{{ userMessage.country }}</p>
</div>
<div class="rol_mess">
<font>Website :</font>
<p class="rm_huid">
<el-link v-if="userMessage.website != ''" :href="userMessage.website" target="_blank" type="primary"
>Personal academic introduction</el-link
>
</p>
</div>
<div class="rol_mess">
<font>Title :</font>
<p class="rm_huid">{{ userMessage.technical }}</p>
</div>
<div class="rol_mess">
<font>Major :</font>
<p class="rm_huid">{{ userMessage.majorStr }}</p>
</div>
<div class="rol_mess" v-if="userMessage.company != '' && userMessage.company != undefined">
<font>Company :</font>
<p class="rm_huid">{{ userMessage.company }}</p>
</div>
<div class="rol_mess">
<font>Field :</font>
<p class="rm_huid">{{ userMessage.field }}</p>
</div>
<div class="rol_mess">
<font>Introduction :</font>
<p class="rm_huid">{{ userMessage.introduction }}</p>
</div>
<div class="rol_mess">
<font>Grade :</font>
<p style="display: inline-block">
<img
src="../../assets/img/star-all.png"
v-for="item in starList"
v-if="starList_mark <= 8 && item.star == 1"
class="starSty"
/>
<img
src="../../assets/img/star-traf.png"
v-for="item in starList"
v-if="starList_mark <= 8 && item.star == 0"
class="starSty"
/>
<img
src="../../assets/img/star-none.png"
v-for="item in starList"
v-if="starList_mark <= 8 && item.star == 2"
class="starSty"
/>
<img src="../../assets/img/star-all.png" v-if="starList_mark > 8" class="starSty" />
<b style="font-size: 15px; color: #b77614" v-if="starList_mark > 8">× {{ starList_mark }}</b>
</p>
</div>
<div class="rol_mess" style="overflow: hidden">
<font>CV : </font>
<!-- <p style="margin: 0 0 25px 28px; font-size: 18px">CV. List</p> -->
<!-- <p style="color: #aaa; margin: 0 0 30px 28px" v-if="cvitaTable.length == 0">No data</p> -->
<div style="width: calc(100% - 175px); float: right">
<p v-if="cvitaTable && cvitaTable.length > 0" style="margin: 0 0 25px 0">
If you want to update your resume, please upload it.
</p>
<el-form :model="cvitaForm" :rules="rules" ref="cvita_Form" label-width="0px">
<el-form-item label="">
<el-upload
style="float: left"
class="upload-demo"
:action="baseUrl + 'api/Ucenter/up_cv_file'"
:on-success="handleFileSuccess1"
name="reviewerCV"
type="reviewerCV"
:on-error="handleFileError"
:on-preview="handlePreview"
:on-remove="handleRemove"
:before-remove="beforeRemove"
:on-change="handleChange1"
accept=".pdf"
:on-exceed="handleExceed"
ref="uploadRef1"
>
<el-button type="text" style="font-weight: bolder">
<b class="el-icon-lx-top" style="font-weight: bolder"></b>upload
</el-button>
</el-upload>
<span
style="
margin-left: 20px;
display: inline-block;
font-size: 12px;
color: #aaa;
margin-top: -20px;
"
>
Only pdf files can be uploaded(.pdf)
</span>
</el-form-item>
</el-form>
<p
style="width: 100%; background-color: #d7d7d7; height: 1px; margin: -10px auto 10px auto"
v-if="cvitaTable && cvitaTable.length > 0"
></p>
<div v-for="(item, index) in cvitaTable">
{{ index + 1 }}.
<img
src="../../assets/img/icon_0.png"
alt=""
class="icon_img"
style="vertical-align: middle; margin-left: 10px"
/>
<span style="margin-left: 20px; color: #888; font-size: 13px">
<i class="el-icon-paperclip"></i>
{{ formatDate(item.ctime) }}
</span>
<a :href="mediaUrl + 'reviewer/' + item.cv" target="_blank" class="txt_pdf">
<i class="el-icon-download"></i>
</a>
<i
class="el-icon-delete"
@click="deletCVita(item)"
style="color: #f12424; cursor: pointer; font-weight: bold; margin: 0 0 0 15px"
></i>
</div>
</div>
<!-- <p class="rm_huid">
<img src="../../assets/img/icon_0.png" alt="" class="icon_img"
v-if="cvitaTable.length>0&&cvitaTable!=undefined">
<span v-if="cvitaTable.length>0&&cvitaTable!=undefined"
style="margin-left: 10px;color: #888;font-size: 13px;vertical-align: text-bottom;">
<i class="el-icon-paperclip"></i>
{{formatDate(cvitaTable[cvitaTable.length-1].ctime)}}
</span>
<el-button type="primary" @click="openCVita()" size="mini"
style="vertical-align: text-bottom;padding: 4px 8px;margin-left: 10px;">
<i class="el-icon-document"></i>
Update / View
</el-button>
</p> -->
</div>
</div>
<!-- <div class="s_rol">
<h3>Index</h3>
<div class="rol_mess">
<font>Grade :</font>
<p style="display: inline-block">
<img
src="../../assets/img/star-all.png"
v-for="item in starList"
v-if="starList_mark <= 8 && item.star == 1"
class="starSty"
/>
<img
src="../../assets/img/star-traf.png"
v-for="item in starList"
v-if="starList_mark <= 8 && item.star == 0"
class="starSty"
/>
<img
src="../../assets/img/star-none.png"
v-for="item in starList"
v-if="starList_mark <= 8 && item.star == 2"
class="starSty"
/>
<img src="../../assets/img/star-all.png" v-if="starList_mark > 8" class="starSty" />
<b style="font-size: 15px; color: #b77614" v-if="starList_mark > 8">× {{ starList_mark }}</b>
</p>
</div>
<div class="rol_mess">
<font>WOS Index :</font>
<span v-html="colorIndex(userMessage.wos_index, userMessage.wos_time)"></span>
<b class="el-icon-edit pencil" @click="handleIndex(1)"></b>
</div>
<div class="rol_mess">
<font>Google Index :</font>
<span v-html="colorIndex(userMessage.google_index, userMessage.google_time)"></span>
<b class="el-icon-edit pencil" @click="handleIndex(2)" v-if="userMessage.g_author == ''"></b>
<b class="el-icon-refresh-right pencil" @click="freshIndex" v-if="userMessage.g_author != ''"></b>
</div>
<div class="rol_mess">
<img src="../../assets/img/browser.png" alt="" style="width: 20px; vertical-align: sub; margin-right: 5px" />
<font style="width: 125px">Google account :</font>
<b
class="el-icon-check"
v-if="userMessage.g_author != ''"
style="font-size: 20px; font-weight: bold; color: #2a9916"
></b>
<a
v-if="userMessage.g_author != ''"
target="_blank"
:href="'https://scholar.google.it/citations?user=' + userMessage.g_author"
class="webLink"
>
Certified
</a>
<el-button
@click="handleIndex(3)"
type="warning"
icon="el-icon-paperclip"
size="mini"
round
style="margin: 0 0 0 5px; padding: 5px 12px"
v-if="userMessage.g_author == ''"
>Certified
</el-button>
</div>
<p v-if="geogleList.length != 0 && bankVisible" style="margin: 30px 0 20px 0; font-weight: bold">
Please select one and press the OK button.
</p>
<div
v-for="item in geogleList"
:class="IndexForm.g_author == item.author_id ? 'gugeList gu_col' : 'gugeList'"
@click="choseGego(item)"
v-if="bankVisible"
>
<p style="font-weight: bold; letter-spacing: -0.5px">{{ item.name }}</p>
<p><font>Email :</font>{{ item.email }}</p>
<p><font>Affiliations :</font>{{ item.affiliations }}</p>
<p>
<a :href="item.link" target="_blank">{{ item.link }}</a>
</p>
<i class="kuangGeo"></i>
<b class="el-icon-check"></b>
</div>
<div style="text-align: right" v-if="geogleList.length != 0 && bankVisible">
<el-button @click="bankVisible = false">Cancel</el-button>
<el-button type="primary" @click="saveIndex(IndexForm)">OK</el-button>
</div>
<p v-if="geogleList.length == 0 && bankVisible" style="text-align: center; color: #999">No corresponding data</p>
</div> -->
<div style="display: flex; align-items: center; justify-content: space-between" class="userIndexBox">
<div class="s_rol">
<h3>
WOS Index
<b
class="el-icon-edit pencil"
v-if="isEditIndex('wos')"
@click="handleUserIndex('wos')"
style="float: right"
></b>
</h3>
<div class="rol_mess">
<font>Index :</font>
<span v-html="colorIndex1(userMessage.wos_index)"></span>
</div>
<div class="rol_mess">
<font>Time :</font>
<span v-html="colorIndex2(userMessage.wos_time)"></span>
</div>
</div>
<div class="s_rol">
<h3>
Scopus Index
<b
class="el-icon-edit pencil"
v-if="isEditIndex('scopus')"
@click="handleUserIndex('scopus')"
style="float: right"
></b>
</h3>
<div class="rol_mess">
<font>Index :</font>
<span v-html="colorIndex1(userMessage.scopus_index)"></span>
</div>
<div class="rol_mess">
<font>Time :</font>
<span v-html="colorIndex2(userMessage.scopus_time)"></span>
</div>
<div class="rol_mess">
<font>Editor :</font>
<span v-html="userMessage.scopus_editor"></span>
</div>
<div class="rol_mess">
<font>Website :</font>
<span
style="
display: inline-block;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
width: calc(100% - 80px);
line-height: 17px;
"
>
<a :href="userMessage.scopus_website" target="_blank" style="color: rgb(0, 102, 153) !important">{{
userMessage.scopus_website
}}</a>
</span>
</div>
</div>
<div class="s_rol">
<h3>
Google Index
<b
class="el-icon-edit pencil"
v-if="isEditIndex('google')"
@click="handleUserIndex('google')"
style="float: right"
></b>
</h3>
<div class="rol_mess">
<font>Index :</font>
<span v-html="colorIndex1(userMessage.google_index)"></span>
</div>
<div class="rol_mess">
<font>Time :</font>
<span v-html="colorIndex2(userMessage.google_time)"></span>
</div>
<div class="rol_mess">
<font>Editor :</font>
<span v-html="userMessage.google_editor"></span>
</div>
<div class="rol_mess">
<font>Google Author :</font>
<span style="line-height: 20px">{{ userMessage.g_author }}</span>
</div>
<div class="rol_mess">
<font>Website :</font>
<span
style="
display: inline-block;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
width: calc(100% - 80px);
line-height: 20px;
"
>
<a :href="this.userMessage.g_author?`https://scholar.google.com/citations?hl=en&user=${this.userMessage.g_author}`:''" target="_blank" style="color: rgb(0, 102, 153) !important">{{
this.userMessage.g_author?`https://scholar.google.com/citations?hl=en&user=${this.userMessage.g_author}`:''
}}</a>
</span>
</div>
<!-- <div class="rol_mess">
<font>Google ID :</font>
<span></span>
</div>
<div class="rol_mess">
<font>Google Author :</font>
<span></span>
</div> -->
</div>
</div>
<!-- <div style="text-align: right" v-if="geogleList.length != 0 && bankVisible">
<el-button @click="bankVisible = false">Cancel</el-button>
<el-button type="primary" @click="saveIndex(IndexForm)">OK</el-button>
</div> -->
<p v-if="geogleList.length == 0 && bankVisible" style="text-align: center; color: #999">No corresponding data</p>
</el-tab-pane>
<el-tab-pane label="User role">
<p style="text-align: right; margin: 0 0 20px 0">
<el-button @click="handleAddGuest" type="primary" icon="el-icon-plus" size="mini" round>Add User Role</el-button>
</p>
<div class="s_rol" v-if="this.role_author == 1">
<h3 style="color: #006699">Author</h3>
<div class="rol_art" style="padding: 0" v-if="authorArticlesList.length > 0">
<div class="articleTable">
<el-table
row-key="article_id"
style="width: calc(100%); margin-top: 15px; margin-bottom: 20px"
:data="authorArticlesList"
class=""
empty-text="New Data (0)"
>
<!-- <el-table-column type="index" label="No." width="45" align="center"></el-table-column> -->
<el-table-column :label="`${$t('paperArticleCount.articleTitle')}`" width="" prop="title">
<template slot-scope="scope">
<span style="font-size: 700">{{ scope.$index + 1 }}. &nbsp;&nbsp;</span>
<span v-if="scope.row.link" style="text-decoration: underline">
<a target="_blank" :href="scope.row.link" style="color: #006699 !important">{{
scope.row.title
}}</a>
</span>
<span v-else style="color: rgb(113 112 112)">
{{ scope.row.title }}
</span>
</template>
</el-table-column>
<el-table-column label="WOS" prop="title" width="100">
<template slot-scope="scope">
<el-popover ref="popover" placement="right" trigger="click" width="700">
<ul
style="
padding: 0 0px;
box-sizing: border-box;
max-height: 500px;
overflow-y: auto;
white-space: normal;
"
v-loading="wosLoading"
>
<li v-for="(v, i) in authorList" style="overflow: hidden; margin-bottom: 5px">
<div style="color: #7a2702; margin-right: 10px; float: left">{{ i + 1 }} .</div>
<div style="float: left; width: calc(100% - 100px)">
<p class="tab_tie_col">
{{ v.firstname }}&nbsp;{{ v.lastname }}
<span
>( {{ $t('partyListCorr.Email') }}:
<span style="color: #409eff">{{ v.email }}</span
>)</span
>
</p>
</div>
</li>
</ul>
<span
slot="reference"
@click="getWosList(scope.row.article_id)"
style="
color: #006699;
background: #ecf5ff;
border: 1px solid #b3d8ff;
padding: 4px;
border-radius: 4px;
margin-top: 10px;
"
>
<span style="font-size: 10px; font-weight: bold">WOS</span>
</span>
</el-popover>
</template>
</el-table-column>
<el-table-column :label="$t('partyRole.identity')" prop="title" width="200">
<template slot-scope="scope">
<div style="color: ">
<span
v-for="(v, i) in scope.row.role"
style="
padding: 4px;
border-radius: 2px;
margin-right: 10px;
color: #409eff !important;
background: #ecf5ff !important;
border-color: #b3d8ff !important;
"
>
{{
v == 'user'
? $t('partyRole.InvestorProducer')
: v == 'author'
? $t('partyRole.author')
: ''
}}
</span>
</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
style=""
v-if="
scope.row.state == 0 ||
scope.row.state == 1 ||
scope.row.state == 2 ||
scope.row.state == 3 ||
scope.row.state == 4 ||
scope.row.state == 5 ||
scope.row.state == 6
"
>
<!-- {{ scope.row.link ?$t('partyRole.Published') : '' }} -->
{{ $t(`artstate.state${scope.row.state}`) }}
</div>
</template>
</el-table-column>
<el-table-column label="" prop="title" width="100">
<template slot-scope="scope">
<el-popover ref="popover" placement="right" trigger="click" width="700">
<ul
style="
padding: 0 0px;
box-sizing: border-box;
max-height: 500px;
overflow-y: auto;
white-space: normal;
"
v-loading="citeLoading"
>
<li v-for="(v, i) in authorList" style="overflow: hidden; margin-bottom: 5px">
<div style="color: #7a2702; margin-right: 10px; float: left">{{ i + 1 }} .</div>
<div style="float: left; width: calc(100% - 100px)">
<p class="tab_tie_col">
{{ v.firstname }}&nbsp;{{ v.lastname }}
<span
>( {{ $t('partyListCorr.Email') }}:
<span style="color: #409eff">{{ v.email }}</span
>)</span
>
</p>
</div>
</li>
</ul>
<span
slot="reference"
@click="getAuthorList(scope.row.article_id)"
style="
color: #006699;
background: #ecf5ff;
border: 1px solid #b3d8ff;
padding: 4px;
border-radius: 4px;
margin-top: 10px;
"
><i class="el-icon-user-solid" style="margin-right: 5px; color: #006699"></i
>{{ $t('partyListCorr.Authors') }}</span
>
</el-popover>
</template>
</el-table-column>
</el-table>
</div>
<!-- <p v-if="authorTable.manuscriptNum != undefined">
<b class="colNUmber">{{ authorTable.manuscriptNum }}</b>
articles submitted.
</p>
<p v-if="authorTable.accept != undefined">
<b class="colNUmber">{{ authorTable.accept }}</b>
articles accepted.
</p>
<p v-if="authorTable.index != undefined">
<b class="colNUmber">{{ authorTable.index }}</b>
records citing.
</p> -->
</div>
</div>
<div class="s_rol" v-if="this.role_editor == 1">
<h3 style="color: #006699">Editor</h3>
<div class="rol_art"></div>
</div>
<div class="s_rol" v-if="this.role_chief == 1">
<h3 style="color: #006699">Editor-in-Chief</h3>
<div class="rol_art"></div>
</div>
<div class="s_rol" v-if="this.role_reviewer == 1">
<h3 style="color: #006699">Reviewer</h3>
<div class="rol_art">
<p class="roLrevi" v-for="index in review_journal">
<b>{{ index.title }}</b>
</p>
<p>
<b class="colNUmber">{{ reviewTable.successReview }}</b>
manuscripts reviewed.
</p>
</div>
</div>
<div class="s_rol" v-if="this.role_board == 1">
<h3 style="color: #006699">Editorial Board Member</h3>
<div class="rol_art">
<p v-for="(item, index) in board_journal">
<b>{{ item.title }}</b>
</p>
</div>
</div>
<div class="s_rol" v-if="this.role_yboard == 1">
<h3 style="color: #006699">Young Scientist</h3>
<div class="rol_art">
<p v-for="(item, index) in youth_journal">
<b>{{ item.title }}</b>
<i class="el-icon-arrow-up arrowBtn" v-if="item.arrowMark == 0" @click="arrowBtnChange(index, 1)"></i>
<i class="el-icon-arrow-down arrowBtn" v-if="item.arrowMark == 1" @click="arrowBtnChange(index, 0)"></i>
<font v-if="item.arrowMark == 1">
<span style="display: block; margin-top: 15px"></span>
<span v-for="ihxd in item.sd" style="display: block; margin-top: 5px">
{{ formatYear(ihxd.start_date) }}
<span style="margin: 0 3px">-</span>
{{ formatYear(ihxd.end_date) }}
<a @click="cerFicte(ihxd.icon)" class="certBtn">
<i class="el-icon-trophy"></i>
Certificate
</a>
</span>
<font style="display: block; margin: 10px 0 5px 0">
Submitted articles :
<b style="color: #006699; font-size: 16px; margin: 0 0 0 5px">{{ item.article_num }}</b>
</font>
<font style="display: block; margin: 0 0 25px 0">
Reviewed articles :
<b style="color: #006699; font-size: 16px; margin: 0 0 0 5px">{{ item.reviewer_num }}</b>
</font>
</font>
</p>
</div>
</div>
<div class="s_rol" v-if="this.role_special == 1">
<h3 style="color: #006699">Guest Editor</h3>
<div class="rol_art">
<font v-for="item in userMessage.specials">
{{ item.journal_title }}
<font style="margin: 0 10px">>></font>
{{ item.title }}
</font>
</div>
</div>
</el-tab-pane>
</el-tabs>
</div>
<!-- 编辑信息弹出框 -->
<el-dialog title="Edit personal message" :visible.sync="messageVisible" width="700px">
<el-form ref="mes_Form" :model="MessForm" :rules="rules" label-width="170px">
<el-form-item label="Account :" prop="account">
{{ MessForm.account }}
</el-form-item>
<el-form-item label="Email :" prop="email">
{{ MessForm.email }}
</el-form-item>
<el-form-item label="English name :" prop="realname">
<el-input v-model="MessForm.realname"></el-input>
<br />
<p class="zhujie_name">
(Will be used for certificate, website, etc. in TMR Publishing Group Products.<br />
Check
<a href="https://www.tmrjournals.cn/afoor_text.html?&footer_id=50" target="_blank">Privacy Policy</a>)
</p>
</el-form-item>
<el-form-item label="Local language name :" prop="localname">
<el-input v-model="MessForm.localname"></el-input>
<br />
<p class="zhujie_name">
(Just be used for view for users themselves and editors. <br />
Check
<a href="https://www.tmrjournals.cn/afoor_text.html?&footer_id=50" target="_blank">Privacy Policy</a>)
</p>
</el-form-item>
<el-form-item label="Country :" prop="country">
<el-select v-model="MessForm.country" filterable placeholder="Please select" value-key="groupID" style="width: 200px">
<el-option v-for="item in df_country" :key="item.en_name" :label="item.en_name" :value="item.en_name"></el-option>
</el-select>
</el-form-item>
<el-form-item label="Website :" prop="website">
<el-input v-model="MessForm.website" placeholder="eg:http://..."></el-input>
</el-form-item>
<el-form-item label="Title :" prop="technical">
<el-select v-model="MessForm.technical" filterable placeholder="Please select" value-key="groupID" style="width: 200px">
<el-option v-for="item in df_technical" :key="item.label" :label="item.label" :value="item.label"></el-option>
</el-select>
</el-form-item>
<el-form-item label="Major :" prop="majors_a">
<el-select
v-model="MessForm.major_a"
placeholder="Please select"
@change="majorChange(1)"
style="width: 150px; margin: 0 10px 0 0"
>
<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="MessForm.major_b"
placeholder="Please select"
v-if="majors_b != ''"
@change="majorChange(2)"
style="width: 150px; 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="MessForm.major_c"
placeholder="Please select"
v-if="majors_c != ''"
@change="majorChange(3)"
style="width: 150px"
>
<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>
</el-form-item>
<el-form-item label="Company :" prop="company">
<el-input v-model="MessForm.company" placeholder="Please enter"></el-input>
</el-form-item>
<el-form-item label="Field :" prop="field">
<el-input v-model="MessForm.field" placeholder="Please enter" type="textarea" autosize> </el-input>
</el-form-item>
<el-form-item label="Introduction :">
<el-input v-model="MessForm.introduction" placeholder="Please enter" type="textarea" autosize> </el-input>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="messageVisible = false">Cancel</el-button>
<el-button type="primary" @click="saveMessage(MessForm)">OK</el-button>
</span>
</el-dialog>
<!-- H指数弹出框 -->
<el-dialog title="Edit personal index" :visible.sync="indexVisible" width="600px">
<el-form ref="index_Form" :model="IndexForm" :rules="rules" label-width="170px">
<el-form-item label="Account :" prop="account">
{{ IndexForm.account }}
</el-form-item>
<el-form-item v-if="IndexForm.number == 1">
<span slot="label"> WOS H index ({{ this.now_year }}) : </span>
<el-input v-model="IndexForm.wos_index"></el-input>
</el-form-item>
<el-form-item v-if="IndexForm.number == 2">
<span slot="label"> Google H index ({{ this.now_year }}) : </span>
<el-input v-model="IndexForm.google_index"></el-input>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="indexVisible = false">Cancel</el-button>
<el-button type="primary" @click="saveIndex(IndexForm)">OK</el-button>
</span>
</el-dialog>
<!-- user指数弹出框 -->
<el-dialog :title="`Edit personal index ( ${userIndexForm.typeName} )`" :visible.sync="userIndexVisible" min-width="600px">
<el-form
ref="index_Form"
:model="userIndexForm"
:rules="rules"
label-width="170px"
v-loading="userloading"
element-loading-text="拼命加载中"
element-loading-spinner="el-icon-loading"
element-loading-background="rgba(255, 255, 255, 0.8)"
>
<el-form-item label="Account :" prop="account">
{{ userIndexForm.account }}
</el-form-item>
<el-form-item>
<span slot="label"> Time : </span>
<span v-html="colorIndex2(userIndexForm.date)"></span>
</el-form-item>
<el-form-item>
<span slot="label"> Index : </span>
<el-input v-model="userIndexForm.index" :disabled="userIndexForm.type == 2"></el-input>
</el-form-item>
<template v-if="userIndexForm.type == 1">
<el-form-item>
<span slot="label"> Website : </span>
<el-input v-model="userIndexForm.website"></el-input>
</el-form-item>
<template v-if="userIndexForm.type == 2"> </template>
</template>
<template v-if="userIndexForm.type == 2">
<el-form-item>
<span slot="label">
<img src="@/assets/img/browser.png" alt="" style="width: 20px; vertical-align: sub; margin-right: 5px" />
<font>Google account :</font>
</span>
<b
class="el-icon-check"
v-if="userMessage.g_author != ''"
style="font-size: 20px; font-weight: bold; color: #2a9916"
></b>
<a
v-if="userMessage.g_author != ''"
target="_blank"
:href="'https://scholar.google.it/citations?user=' + userMessage.g_author"
class="webLink"
>
Certified
</a>
<el-button
@click="handleUserIndex(3)"
type="warning"
icon="el-icon-paperclip"
size="mini"
round
style="margin: 0 0 0 5px; padding: 5px 12px"
v-if="userMessage.g_author == ''"
>Certified
</el-button>
<span style="margin: 0 0 0 5px; padding: 5px 12px; color: #999" v-if="googleSearchInfo != ''">
( {{ googleSearchInfo }} )</span
>
</el-form-item>
<p v-if="geogleList.length != 0 && bankVisible" style="margin: 20px 0 20px 0; font-weight: bold">
Please select one and press the OK button.
</p>
<div
v-for="item in geogleList"
:class="userIndexForm.g_author == item.author_id ? 'gugeList gu_col' : 'gugeList'"
@click="choseGego(item)"
v-if="bankVisible"
>
<p style="font-weight: bold; letter-spacing: -0.5px">{{ item.name }}</p>
<p><font>Email :</font>{{ item.email }}</p>
<p><font>Affiliations :</font>{{ item.affiliations }}</p>
<p>
<a :href="item.link" target="_blank">{{ item.link }}</a>
</p>
<i class="kuangGeo"></i>
<b class="el-icon-check"></b>
</div>
</template>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="userIndexVisible = false">Cancel</el-button>
<el-button type="primary" @click="saveUserIndex(userIndexForm)">OK</el-button>
</span>
</el-dialog>
<!-- 添加身份 -->
<el-dialog title="Add User Role" :visible.sync="guestVisible" width="700px">
<el-form ref="applyTab" :model="addRoleForm" :rules="rules" label-width="130px">
<el-form-item label="Realname :">
{{ addRoleForm.realname }}
</el-form-item>
<el-form-item label="Email :">
{{ addRoleForm.email }}
</el-form-item>
<el-form-item label="User Role :" prop="role_type">
<el-select v-model="addRoleForm.role_type" @change="chan_role(addRoleForm.role_type)">
<el-option v-for="item in df_role" :label="item.title" :key="item.type" :value="item.type"> </el-option>
</el-select>
</el-form-item>
<!-- 审稿人 -->
<div v-if="addRoleForm.role_type == 'reviewer'">
<el-form-item label="Journal :" prop="journal_id">
<el-select
v-model="addRoleForm.journal_id"
placeholder="Please select a journal"
@change="changeShow()"
style="width: 300px"
>
<el-option
v-for="item in df_jour_reviewer"
:label="item.title"
:key="item.journal_id"
:value="item.journal_id"
></el-option>
</el-select>
</el-form-item>
</div>
<!-- 编委 -->
<div v-if="addRoleForm.role_type == 'board'">
<el-form-item label="Journal :" prop="journal_id">
<el-select
v-model="addRoleForm.journal_id"
placeholder="Please select a journal"
@change="
changeJourboard();
changeShow();
"
style="width: 300px"
>
<el-option
v-for="item in df_jour_board"
:label="item.title"
:key="item.journal_id"
:value="item.journal_id"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="Identity :" prop="type">
<el-radio-group v-model="addRoleForm.type">
<el-radio :label="0">Editor-in-Chief</el-radio>
<el-radio :label="1">Vice Editor-in-Chief</el-radio>
<el-radio :label="2">Editorial Board Members</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="Group :" prop="board_group_id" v-if="addRoleForm.type == 2">
<el-select
v-model="addRoleForm.board_group_id"
placeholder="Please select a group"
@change="changeShow()"
style="width: 300px"
>
<el-option
v-for="item in df_group_board"
:label="item.group_name"
:key="item.board_group_id"
:value="item.board_group_id"
></el-option>
</el-select>
</el-form-item>
</div>
<!-- 青年科学家 -->
<div v-if="addRoleForm.role_type == 'yboard'">
<el-form-item label="Journal :" prop="journal_id">
<el-select
v-model="addRoleForm.journal_id"
placeholder="Please select a journal"
@change="
changeJourYboard(addRoleForm.journal_id);
changeShow();
"
style="width: 270px"
>
<el-option
v-for="item in df_jour_yboard"
:label="item.title"
:key="item.journal_id"
:value="item.journal_id"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="Term of office :" prop="year">
<el-select v-model="addRoleForm.year" placeholder="Please select a year">
<el-option v-for="item in list_year" :label="item.title" :key="item.id" :value="item.id"> </el-option>
</el-select>
<span v-if="addRoleForm.yboardMark == 1" style="margin-left: 15px; color: #888">(Journal Renewal)</span>
</el-form-item>
</div>
<!-- 客座 -->
<div v-if="addRoleForm.role_type == 'special'">
<el-form-item label="Journal :" prop="issn_id">
<el-select v-model="addRoleForm.issn_id" @change="chan_jour">
<el-option v-for="item in df_jour_special" :label="item.title" :key="item.issn" :value="item.issn"> </el-option>
</el-select>
</el-form-item>
<el-form-item label="Guest Journal :" prop="special_id">
<el-select v-model="addRoleForm.special_id" style="width: 360px">
<el-option
v-for="item in df_guest"
:label="item.title"
:key="item.journal_special_id"
:value="item.journal_special_id"
></el-option>
</el-select>
</el-form-item>
</div>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="guestVisible = false">Cancel</el-button>
<el-button type="primary" @click="saveApply">Save</el-button>
</span>
</el-dialog>
<!-- 个人简历弹出框 -->
<el-dialog title="CV. List" :visible.sync="cvitaVisible" width="500px">
<p style="margin: 0 0 25px 28px; font-size: 18px">CV. List</p>
<p style="color: #aaa; margin: 0 0 30px 28px" v-if="cvitaTable.length == 0">No data</p>
<div v-for="(item, index) in cvitaTable" style="margin: 0 0 0 30px">
{{ index + 1 }}.
<img src="../../assets/img/icon_0.png" alt="" class="icon_img" style="vertical-align: middle; margin-left: 10px" />
<span style="margin-left: 20px; color: #888; font-size: 13px">
<i class="el-icon-paperclip"></i>
{{ formatDate(item.ctime) }}
</span>
<a :href="mediaUrl + 'reviewer/' + item.cv" target="_blank" class="txt_pdf">
<i class="el-icon-download"></i>
</a>
<i
class="el-icon-delete"
@click="deletCVita(item)"
style="color: #f12424; cursor: pointer; font-weight: bold; margin: 0 0 0 15px"
></i>
</div>
<p style="width: 90%; background-color: #d7d7d7; height: 1px; margin: 10px auto 30px auto"></p>
<p style="margin: 0 0 25px 28px">If you want to update your resume, please upload it.</p>
<el-form :model="cvitaForm" :rules="rules" ref="cvita_Form" label-width="70px">
<el-form-item label="CV. :">
<el-upload
class="upload-demo"
:action="baseUrl + 'api/Ucenter/up_cv_file'"
:on-success="handleFileSuccess1"
name="reviewerCV"
type="reviewerCV"
:on-error="handleFileError"
:on-preview="handlePreview"
:on-remove="handleRemove"
:before-remove="beforeRemove"
:on-change="handleChange1"
accept=".pdf"
:on-exceed="handleExceed"
ref="uploadRef1"
>
<el-button type="text" style="font-weight: bolder">
<b class="el-icon-lx-top" style="font-weight: bolder"></b>upload
</el-button>
</el-upload>
<span style="font-size: 12px; color: #aaa"> Only pdf files can be uploaded(.pdf) </span>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="cvitaVisible = false">Close</el-button>
</span>
</el-dialog>
<!-- 证书弹出框 -->
<el-dialog :visible.sync="cerVisible" width="850px">
<p style="text-align: right; margin-bottom: 20px">
<el-button type="primary" @click="down_pic" icon="el-icon-download">Download</el-button>
</p>
<el-image class="table-td-thumb rev_digol" :src="this.IMG_Url"></el-image>
</el-dialog>
</div>
</template>
<script>
export default {
data() {
return {
citeLoading: false,
wosLoading: false,
authorList: [],
editorList: [],
loading: false,
userloading: false,
authorArticlesList: [],
userrole: localStorage.getItem('U_status'),
baseUrl: this.Common.baseUrl,
mediaUrl: this.Common.mediaUrl,
role_id: this.$route.query.id,
MessForm: {},
coreTable: {},
IndexForm: {
wos_index: '',
google_index: ''
},
userIndexForm: {},
geogleList: [],
reviewTable: {},
authorTable: {},
cvitaTable: [],
review_journal: [],
board_journal: [],
youth_journal: [],
starList: [],
starList_mark: 0,
cerVisible: false,
cvitaForm: {},
IMG_Url: '',
pictureUrl: '',
messageVisible: false,
indexVisible: false,
userIndexVisible: false,
bankVisible: false,
cvitaVisible: false,
fileL_pdf1: [],
now_year: 0,
majors_a: [],
majors_b: [],
majors_c: [],
df_jour_reviewer: [],
df_jour_board: [],
df_jour_yboard: [],
df_jour_special: [],
df_group_board: [],
df_guest: [],
df_country: [],
df_role: [
// {
// title: 'Author',
// type: 'author',
// }, {
// title: 'Editor',
// type: 'editor',
// }, {
// title: 'Editor-in-Chief',
// type: 'chief',
// },
// {
// title: 'Reviewer',
// type: 'reviewer',
// }, {
// title: 'Editorial Board',
// type: 'board',
// },
{
title: 'Young Scientist',
type: 'yboard'
},
{
title: 'Guest Editor',
type: 'special'
}
],
df_technical: [
{
label: 'Professor'
},
{
label: 'Associate Professor'
},
{
label: 'Assistant Professor'
},
// {
// label: 'Ph.D.',
// },
{
label: 'Researcher'
},
{
label: 'Associate research fellow'
},
{
label: 'Assistant research fellow'
},
{
label: 'Engineer'
},
{
label: 'Senior engineer'
},
{
label: 'Associate Researcher'
},
{
label: 'Lecturer'
},
{
label: 'Associate Chief Physician'
},
{
label: 'Assistant Researcher'
},
{
label: 'Physician'
},
{
label: 'Chief Physician'
},
{
label: 'Senior Lecturer'
},
{
label: 'Research Fellow'
},
{
label: 'Senior Investigator'
}
// {
// label: 'Others',
// }
],
list_year: [
{
title: '1 Year',
id: 1
},
{
title: '2 Years',
id: 2
},
{
title: '3 Years',
id: 3
}
],
role_author: 0,
googleSearchInfo:'',
role_editor: 0,
role_chief: 0,
role_reviewer: 0,
role_board: 0,
role_yboard: 0,
role_special: 0,
userMessage: {},
addRoleForm: {
user_id: this.$route.query.id,
role_type: '',
issn_id: '',
special_id: '',
yboardMark: 0
},
guestVisible: false,
rules: {
role_type: [
{
required: true,
message: 'Please select a role',
trigger: 'blur'
}
],
board_group_id: [
{
required: true,
message: 'Please select a group',
trigger: 'blur'
}
],
type: [
{
required: true,
message: 'Please input type',
trigger: 'blur'
}
],
issn_id: [
{
required: true,
message: 'Please select a journal',
trigger: 'blur'
}
],
special_id: [
{
required: true,
message: 'Please select a guest',
trigger: 'blur'
}
],
realname: [
{
required: true,
message: 'Please input realname',
trigger: 'blur'
}
],
journal_id: [
{
required: true,
message: 'Please select journal',
trigger: 'blur'
}
],
year: [
{
required: true,
message: 'Please select year',
trigger: 'blur'
}
],
country: [
{
required: true,
message: 'Please select country',
trigger: 'blur'
}
],
majors_a: [
{
required: true,
message: 'Please select major',
trigger: 'blur'
}
],
technical: [
{
required: true,
message: 'Please select title',
trigger: 'blur'
}
],
field: [
{
required: true,
message: 'Please input field',
trigger: 'blur'
}
]
}
};
},
mounted() {},
created() {
this.getSelectData();
this.getDate();
this.getAllEditor();
},
methods: {
async getWosList(id) {
var that = this;
this.authorList = [];
this.wosLoading = true;
await this.$api
.post('api/User/getAuthorForArticle', {
article_id: id
})
.then(async (res) => {
if (res.code == 0) {
this.authorList = res.data.list;
this.wosLoading = false;
setTimeout(() => {
that.$nextTick(() => {
that.$refs.popover.updatePopper();
});
}, 100);
} else {
this.$message.error(res.msg);
this.wosLoading = false;
}
})
.catch((err) => {
this.$message.error(err);
this.wosLoading = false;
});
},
async getAuthorList(id) {
var that = this;
this.authorList = [];
this.citeLoading = true;
await this.$api
.post('api/User/getAuthorForArticle', {
article_id: id
})
.then(async (res) => {
if (res.code == 0) {
this.authorList = res.data.list;
this.citeLoading = false;
setTimeout(() => {
that.$nextTick(() => {
that.$refs.popover.updatePopper();
});
}, 100);
} else {
this.$message.error(res.msg);
this.citeLoading = false;
}
})
.catch((err) => {
this.$message.error(err);
this.citeLoading = false;
});
},
async getAllEditor(id) {
var that = this;
this.editorList = [];
await this.$api
.post('api/User/getAllEditor', {})
.then(async (res) => {
if (res.code == 0) {
this.editorList = res.data.editors;
} else {
this.$message.error(res.msg);
}
})
.catch((err) => {
this.$message.error(err);
});
},
// 获取下拉列表
getSelectData() {
this.$api
.post('api/Admin/getCountrys')
.then((res) => {
this.df_country = res;
})
.catch((err) => {
console.log(err);
});
},
// 获取数据
getDate() {
this.loading = true;
this.now_year = new Date().getFullYear();
this.$api
.post('api/User/getUserDetail', {
user_id: this.role_id
})
.then((res) => {
if (res.code == 0) {
this.userMessage = res.data.user;
this.role_author = 0;
this.role_editor = 0;
this.role_chief = 0;
this.role_reviewer = 0;
this.role_board = 0;
this.role_yboard = 0;
this.role_special = 0;
let shenfen = this.userMessage.roles;
for (let i = 0; i < shenfen.length; i++) {
if (shenfen[i] == 'author') {
this.role_author = 1;
} else if (shenfen[i] == 'editor') {
this.role_editor = 1;
} else if (shenfen[i] == 'chief') {
this.role_chief = 1;
} else if (shenfen[i] == 'reviewer') {
this.role_reviewer = 1;
} else if (shenfen[i] == 'board') {
this.role_board = 1;
} else if (shenfen[i] == 'yboard') {
this.role_yboard = 1;
} else if (shenfen[i] == 'special') {
this.role_special = 1;
}
}
this.addRoleForm.email = res.data.user.email;
this.addRoleForm.realname = res.data.user.realname;
this.getINfodata();
this.loading = false;
} else {
this.$message.error(res.msg);
}
})
.catch((err) => {
this.$message.error(err);
});
},
// 获取补充数据
getINfodata() {
this.$api
.post('api/Ucenter/getUserInfo', {
user_id: this.role_id
})
.then((res) => {
if (res.code == 0) {
if (res.data.baseInfo.icon != '') {
this.pictureUrl = this.mediaUrl + 'usericon/' + res.data.baseInfo.icon;
} else {
this.pictureUrl = '';
}
this.userMessage.technical = res.data.baseInfo.technical;
this.userMessage.country = res.data.baseInfo.country;
this.userMessage.field = res.data.baseInfo.field;
this.userMessage.introduction = res.data.baseInfo.introduction;
this.userMessage.majorshu = res.data.baseInfo.majorshu;
this.userMessage.majorStr = res.data.baseInfo.majorStr;
this.cvitaForm.user_id = res.data.baseInfo.user_id;
this.userMessage.website = res.data.baseInfo.website;
this.coreTable = res.data.baseInfo;
this.cvitaTable = res.data.cvs;
if (res.data.Author) {
this.authorArticlesList = res.data.Author.articles ? res.data.Author.articles : [];
}
if (res.data.asAuthor) {
this.authorTable = res.data.asAuthor;
}
if (res.data.asReviewer) {
this.reviewTable = res.data.asReviewer;
this.review_journal = res.data.asReviewer.journal;
this.userMessage.reviewer_id = res.data.asReviewer.reviewer_id;
}
if (res.data.asBoard) {
this.board_journal = res.data.asBoard;
}
if (res.data.Yboard) {
this.youth_journal = res.data.Yboard;
for (let i = 0; i < this.youth_journal.length; i++) {
this.youth_journal[i].arrowMark = 1;
}
}
this.getScoreData();
} else {
this.$message.error(res.msg);
}
})
.catch((err) => {
this.$message.error(err);
});
},
// 评分
getScoreData() {
this.starList = [];
if (this.coreTable.score < 0.5 && this.coreTable.score > 0) {
this.starList.push({
star: 2
});
this.starList_mark = 1;
} else {
let zheng = Math.floor(this.coreTable.score);
let xiao = Number(this.coreTable.score) - Math.floor(this.coreTable.score);
if (xiao >= 0.5) {
xiao = 0.5;
} else {
xiao = 0;
}
for (var i = 0; i < zheng; i++) {
this.starList.push({
star: 1
});
}
if (xiao == 0.5) {
this.starList.push({
star: 0
});
}
this.starList_mark = Number(zheng) + Number(xiao);
}
},
// 简历弹出层
openCVita() {
this.cvitaVisible = true;
this.cvitaForm.cv = '';
},
// 删除简历
deletCVita(e) {
// 二次确认删除
this.$confirm('Are you sure you want to delete the CV.?', 'Tip', {
type: 'warning'
})
.then(() => {
this.$api
.post('api/Ucenter/delUserCv', e)
.then((res) => {
if (res.code == 0) {
this.$message.success('Delete successful!');
this.getDate();
} else {
this.$message.error(res.msg);
}
})
.catch((err) => {
this.$message.error(err);
});
})
.catch(() => {});
},
// 个人信息修改
handleMessage() {
// this.$router.push({
// path: 'partyRoleEdit',
// query: {
// id: this.userMessage.user_id
// }
// });
this.MessForm = JSON.parse(JSON.stringify(this.userMessage));
this.MessForm.major = 1;
this.MessForm.major_a = '';
this.MessForm.major_b = '';
this.MessForm.major_c = '';
this.MessForm.majorList = [];
if (this.MessForm.majorshu != 0) {
if (typeof this.MessForm.majorshu == 'number') {
this.MessForm.majorList.push(this.MessForm.majorshu);
} else {
this.MessForm.majorList = this.MessForm.majorshu.split(',');
}
}
this.$nextTick(() => {
this.jiLInaoan();
this.messageVisible = true;
});
},
// 保存个人信息
saveMessage() {
if (this.$validateString(this.MessForm.realname)) {
console.log('Input string is valid.');
} else {
console.log('Input string is invalid.');
this.$message.error(this.$t('info.realname'));
return false;
}
this.$api
.post('api/Ucenter/updateUserInfo', this.MessForm)
.then((res) => {
if (res.code == 0) {
this.$message.success('Successfully modified personal information');
this.messageVisible = false;
this.getDate();
} else {
this.$message.error(res.msg);
}
})
.catch((err) => {
this.$message.error(err);
});
},
// 刷新H指数
freshIndex() {
this.$api
.post('api/User/googleGetIndex', this.userMessage)
.then((res) => {
if (res.code == 0) {
this.getDate();
} else {
this.$message.error(res.msg);
}
})
.catch((err) => {
this.$message.error(err);
});
},
// 个人指数修改
handleIndex(e) {
this.IndexForm = JSON.parse(JSON.stringify(this.userMessage));
this.IndexForm.number = e;
if (e == 3) {
this.loading = true;
this.$api
.post('api/User/googleGetAuthor', this.IndexForm)
.then((res) => {
if (res.code == 0) {
this.geogleList = res.data.authors;
this.bankVisible = true;
this.loading = false;
} else {
this.$message.error(res.msg);
this.loading = false;
}
})
.catch((err) => {
this.$message.error(err);
this.loading = false;
});
} else {
this.indexVisible = true;
}
},
isEditIndex(data) {
console.log('data at line 1543:', this.userMessage);
var status;
var date = '';
switch (data) {
case 'wos':
date = this.userMessage.wos_time;
console.log('date at line 1714:', date)
break;
case 'scopus':
date = this.userMessage.scopus_time;
break;
case 'google':
date = this.userMessage.google_time;
break;
}
console.log('date at line 1714:', date);
if (date == 0) {
status = true;
} else {
var date1 = new Date(parseInt(date * 1000));
var date2 = new Date().getTime();
console.log('date2 at line 1564:', date2);
// 计算时间差(以毫秒为单位)
var timeDiff = Number(date2 - date1);
console.log('timeDiff at line 1569:', timeDiff);
// 将半年转换为毫秒
var halfYearInMilliseconds = 1000 * 60 * 60 * 24 * 182.5; // 假设一年有 365 天
// 判断时间差是否大于半年
status = timeDiff > halfYearInMilliseconds;
if (data == 'google' && this.userMessage.g_author == '') {
status = true;
}
}
console.log('status at line 1578:', status);
return status;
},
// 个人指数修改
handleUserIndex(e) {
var type = '';
var typeName = '';
var index = '';
var date = '';
var website = '';
var editor_id = '';
var g_author = '';
if (e == 3) {
this.userloading = true;
this.$api
.post('api/User/googleGetAuthor', {
user_id: this.userMessage.user_id
})
.then((res) => {
if (res.code == 0) {
this.geogleList = res.data.authors;
this.bankVisible = true;
this.userloading = false;
} else {
if (res.msg == 'no date') {
this.googleSearchInfo = 'No information has been found for this account yet.';
this.geogleList = [];
this.userloading = false;
} else {
this.$message.error(res.msg);
this.geogleList = [];
this.userloading = false;
}
}
})
.catch((err) => {
this.$message.error(err);
this.userloading = false;
});
} else {
switch (e) {
case 'wos':
type = 0;
typeName = 'WOS';
index = this.userMessage.wos_index;
date = this.userMessage.wos_time;
break;
case 'scopus':
type = 1;
typeName = 'Scopus';
index = this.userMessage.scopus_index;
date = this.userMessage.scopus_time;
website = this.userMessage.scopus_website;
break;
case 'google':
type = 2;
typeName = 'Google';
index = this.userMessage.google_index;
date = this.userMessage.google_time;
website = this.userMessage.g_website;
g_author = this.userMessage.g_author;
this.bankVisible = false;
this.geogleList = [];
break;
}
this.userIndexForm = {
type: type,
index: index,
date: date,
website: website,
editor_id: localStorage.getItem('U_id'),
g_author: g_author,
user_id: this.userMessage.user_id,
account: this.userMessage.account,
typeName: typeName
};
console.log('this.userIndexForm at line 1641:', this.userIndexForm);
// this.userIndexForm.type = e;
this.userIndexVisible = true;
}
},
// 保存个人信息
saveIndex() {
let link_geo = '';
if (this.IndexForm.number == 3) {
if (this.IndexForm.g_author == '') {
this.$message.error('Please select one!');
return;
}
link_geo = 'api/User/googleBindAuthor';
} else {
link_geo = 'api/User/editUserMsg';
}
this.$api
.post(link_geo, this.IndexForm)
.then((res) => {
if (res.code == 0) {
this.$message.success('Successfully modified personal index');
this.indexVisible = false;
this.bankVisible = false;
this.getDate();
} else {
this.$message.error(res.msg);
}
})
.catch((err) => {
this.$message.error(err);
});
},
// 保存个人信息
saveUserIndex() {
let link_geo = '';
if (this.userIndexForm.type == 2) {
if (this.userIndexForm.g_author == '') {
if (this.bankVisible) {
console.log('this.bankVisible at line 1294:', this.bankVisible);
this.$message.error('Please select one!');
return;
} else {
if (this.googleSearchInfo != '') {
this.$message.error(this.googleSearchInfo);
return;
} else {
this.$message.error('Please click Certified!');
return;
}
}
}
link_geo = 'api/User/editUserIndex';
// link_geo = 'api/User/googleBindAuthor';
} else {
link_geo = 'api/User/editUserIndex';
}
this.$api
.post(link_geo, this.userIndexForm)
.then((res) => {
if (res.code == 0) {
this.$message.success('Successfully modified personal index');
this.userIndexVisible = false;
this.bankVisible = false;
this.getDate();
} else {
this.$message.error(res.msg);
}
})
.catch((err) => {
this.$message.error(err);
});
},
// 选择填写方式
checkAddType(e) {
if (e == 1) {
this.geogleList = [];
}
this.$forceUpdate();
},
// 选择谷歌账号
choseGego(e) {
this.userIndexForm.g_author = e.author_id;
this.userIndexForm.website = e.link;
},
// 指数颜色
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:5px;"> (' +
time +
')</span>';
} else if (num < 15) {
str =
'<b style="color:#cbb504">' +
num +
'</b><span style="color:#aaa;font-size:14px;margin-left:5px;"> (' +
time +
')</span>';
} else {
str =
'<b style="color:#0cbc15">' +
num +
'</b><span style="color:#aaa;font-size:14px;margin-left:5px;"> (' +
time +
')</span>';
}
if (time == 0) {
str = '<b style="color:#aaa;">0 </b><span style="color:#aaa;font-size:14px;margin-left:5px;">(No time)</span>';
}
return str;
},
colorIndex1(num, time) {
let str = '';
if (num < 10) {
str = '<b style="color:#cb160a">' + num + '</b>';
} else if (num < 15) {
str = '<b style="color:#cbb504">' + num + '</b>';
} else {
str = '<b style="color:#0cbc15">' + num + '</b>';
}
if (time == 0) {
str = '<b style="color:#aaa;">0 </b>';
}
return str;
},
colorIndex2(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 = '';
str = '<span style="color:#aaa;font-size:14px;margin-left:5px;"> ' + time + '</span>';
if (time == 0) {
str = '<span style="color:#aaa;font-size:14px;margin-left:5px;">(No time)</span>';
}
return str;
},
// 下拉身份
chan_role(e) {
this.addRoleForm.journal_id = '';
this.addRoleForm.yboardMark = 0;
if (e == 'reviewer') {
// 申请审稿人期刊列表
if (this.role_reviewer == 1) {
this.$api
.post('api/Journal/getJournalsForReviewerInEditor', {
editor_id: localStorage.getItem('U_id'),
reviewer_id: this.userMessage.reviewer_id
})
.then((res) => {
if (res.code == 0) {
this.df_jour_reviewer = res.data.journals;
} else {
this.$message.error(res.msg);
}
})
.catch((err) => {
this.$message.error(err);
});
} else {
this.$api
.post('api/Chief/getJournalsByEditor', {
user_id: localStorage.getItem('U_id')
})
.then((res) => {
if (res.code == 0) {
this.df_jour_reviewer = res.data.journals;
} else {
this.$message.error(res.msg);
}
})
.catch((err) => {
this.$message.error(err);
});
}
} else if (e == 'board') {
// 申请编委期刊列表
this.$api
.post('api/Chief/getJournalsByEditor', {
user_id: localStorage.getItem('U_id')
})
.then((res) => {
if (res.code == 0) {
this.df_jour_board = res.data.journals;
this.addRoleForm.journal_id = this.df_jour_board[0].journal_id;
this.changeJourboard();
} else {
this.$message.error(res.msg);
}
})
.catch((err) => {
this.$message.error(err);
});
} else if (e == 'yboard') {
// 申请青年科学家期刊列表
this.$api
.post('api/Chief/getJournalsByEditor', {
user_id: localStorage.getItem('U_id')
})
.then((res) => {
if (res.code == 0) {
this.df_jour_yboard = res.data.journals;
} else {
this.$message.error(res.msg);
}
})
.catch((err) => {
this.$message.error(err);
});
} else if (e == 'special') {
// 申请客座期刊列表
this.$api
.post('api/Chief/getJournalsByEditor', {
user_id: localStorage.getItem('U_id')
})
.then((res) => {
if (res.code == 0) {
this.df_jour_special = res.data.journals;
} else {
this.$message.error(res.msg);
}
})
.catch((err) => {
this.$message.error(err);
});
}
},
// 改变编委分组
changeJourboard() {
this.$api
.post('api/Board/getBoardGroupList', {
journal_id: this.addRoleForm.journal_id
})
.then((res) => {
if (res.code == 0) {
this.df_group_board = res.data.groups;
this.df_group_board.unshift({
board_group_id: 0,
group_name: 'No Group'
});
this.addRoleForm.board_group_id = 0;
} else {
this.$message.error(res.msg);
}
})
.catch((err) => {
this.$message.error(err);
});
},
// 更改青年科学家期刊
changeJourYboard(e) {
this.addRoleForm.yboardMark = 0;
for (let i = 0; i < this.youth_journal.length; i++) {
if (e == this.youth_journal[i].journal_id) {
this.addRoleForm.yboardMark = 1;
}
}
},
// 下拉期刊客座
chan_jour() {
this.addRoleForm.special_id = '';
this.$api
.post('api/Special/getSpecialByIssn', {
journal_issn: this.addRoleForm.issn_id
})
.then((res) => {
if (res.code == 0) {
this.df_guest = res.data.specials;
} else {
this.$message.error(res.msg);
}
})
.catch((err) => {
this.$message.error(err);
});
},
// 客座弹出框
handleAddGuest() {
this.guestVisible = true;
},
// 添加身份
saveApply() {
let urlApply = '';
// 审稿人身份
if (this.addRoleForm.role_type == 'reviewer') {
urlApply = 'api/Reviewer/addReviewerBee';
}
// 编委身份
if (this.addRoleForm.role_type == 'board') {
urlApply = 'api/Board/addBoard';
}
// 青年科学家身份
if (this.addRoleForm.role_type == 'yboard') {
urlApply = 'api/User/addYboard';
}
// 客座身份
if (this.addRoleForm.role_type == 'special') {
if (this.addRoleForm.yboardMark == 1) {
urlApply = 'api/User/addYboardContinue'; //续约
} else {
urlApply = 'api/User/addUserRole';
}
}
// console.log(this.addRoleForm)
// return
this.$refs.applyTab.validate((valid) => {
if (valid) {
this.$api
.post(urlApply, this.addRoleForm)
.then((res) => {
if (res.code == 0) {
this.guestVisible = false;
this.getDate();
this.$refs.guestTab.resetFields();
} else {
this.$message.error(res.msg);
}
})
.catch((err) => {
this.$message.error(err);
});
} else {
this.$message.error('error submit!!');
return false;
}
});
},
// 修改选择领域
jiLInaoan() {
this.majors_a = [];
this.majors_b = [];
this.majors_c = [];
this.$api
.post('api/Ucenter/getMajor', {
major_id: 1
})
.then((res) => {
this.majors_a = res.data.major.children;
if (this.MessForm.majorList[0] != undefined) {
this.MessForm.major_a = Number(this.MessForm.majorList[0]);
this.$api
.post('api/Ucenter/getMajor', {
major_id: this.MessForm.major_a
})
.then((res) => {
this.majors_b = res.data.major.children;
this.majors_c = [];
this.MessForm.major_b = '';
this.MessForm.major_c = '';
this.majorChange_panduan();
if (this.MessForm.majorList[1] != undefined) {
this.MessForm.major_b = Number(this.MessForm.majorList[1]);
this.$api
.post('api/Ucenter/getMajor', {
major_id: this.MessForm.major_b
})
.then((ref) => {
if (ref.data.major.children.length != 0) {
this.majors_c = ref.data.major.children;
this.majorChange_panduan();
if (this.MessForm.majorList[2] != undefined) {
this.MessForm.major_c = Number(this.MessForm.majorList[2]);
this.majorChange_panduan();
}
}
});
}
});
}
});
},
majorChange(e) {
if (e == 1) {
this.$api
.post('api/Ucenter/getMajor', {
major_id: this.MessForm.major_a
})
.then((res) => {
this.majors_b = res.data.major.children;
this.majors_c = [];
this.MessForm.major_b = '';
this.MessForm.major_c = '';
this.majorChange_panduan();
});
} else if (e == 2 && this.MessForm.major_b != 0) {
this.$api
.post('api/Ucenter/getMajor', {
major_id: this.MessForm.major_b
})
.then((res) => {
this.majors_c = res.data.major.children;
this.MessForm.major_c = '';
this.majorChange_panduan();
});
} else {
this.majorChange_panduan();
}
},
majorChange_panduan() {
if (this.MessForm.major_c != '' || this.MessForm.major_c != 0) {
this.MessForm.major = this.MessForm.major_c;
} else if (this.MessForm.major_b != '' || this.MessForm.major_b != 0) {
this.MessForm.major = this.MessForm.major_b;
} else {
this.MessForm.major = this.MessForm.major_a;
}
},
// 证书弹出层
cerFicte(e) {
this.IMG_Url = this.Common.mediaUrl + 'cert/' + e;
this.cerVisible = true;
},
// 证书折叠
arrowBtnChange(index, e) {
this.youth_journal[index].arrowMark = e;
this.$forceUpdate();
},
// 证书下载
down_pic() {
const a_b = document.createElement('a');
a_b.href = this.IMG_Url;
a_b.download = 'certificate.png';
a_b.click();
},
// 时间格式
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;
},
formatYear(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;
return Y + M;
},
// 上传头像
unplIcon() {
this.$refs['upIconIMg'].$refs['upload-inner'].handleClick();
},
//上传头像
handleAvatarSuccess2(res, file) {
if (res.code == 0) {
this.$api
.post('api/Ucenter/updateIncon', {
user_id: this.role_id,
icon: res.upurl
})
.then((res) => {
if (res.code == 0) {
this.$message.success('Successfully uploaded the avatar!');
this.pictureUrl = URL.createObjectURL(file.raw);
} else {
this.$message.error(res.msg);
}
})
.catch((err) => {
this.$message.error(err);
});
} else {
this.$message.error(res.msg);
}
},
handleAvatarError2(res, file) {
// this.$message.error(res);
},
beforeAvatarUpload2(file) {
const isLt2M = file.size / 1024 / 1024 < 1;
if (!isLt2M) {
this.$message.error('Picture size cannot exceed 1M!');
}
return isLt2M;
},
// 上传文件
handleChange1(file, fileList) {
if (fileList.length > 0) {
this.fileL_pdf1 = [fileList[fileList.length - 1]];
}
},
handleFileSuccess1(res, file) {
this.$refs.uploadRef1.clearFiles();
if (res.code == 0) {
this.cvitaForm.cv = res.upurl;
this.$api
.post('api/Ucenter/addUserCv', this.cvitaForm)
.then((res) => {
if (res.code == 0) {
this.$message.success('Upload succeeded!');
this.getDate();
} else {
this.$message.error(res.msg);
}
})
.catch((err) => {
this.$message.error(err);
});
} else {
this.$message.error(res.msg);
}
},
beforeRemove(file, fileList) {
return this.$confirm(`Remove ${file.name}`);
},
handleFileError(res, file) {},
handleRemove(file, fileList) {},
handlePreview(file) {
window.open(file.url);
},
handleExceed(files, fileList) {
this.$message.warning('The current limit is 1 file. Please delete the current file first');
},
changeShow() {
this.$forceUpdate();
}
},
computed: {},
watch: {}
};
</script>
<style scoped>
.container {
padding: 0;
background: #fafafa;
}
.top_dao:hover {
text-decoration: underline;
cursor: pointer;
}
.portrait {
width: 83px;
height: 83px;
border-radius: 110px;
border: 1.5px solid #eee;
cursor: pointer;
position: relative;
display: inline-block;
}
.portrait > img {
width: 80px;
height: 80px;
border-radius: 110px;
}
.portrait .ptmark {
position: absolute;
top: 0;
left: 0;
bottom: 0;
right: 0;
background-color: #00000033;
color: #fff;
border-radius: 110px;
font-size: 16px;
line-height: 22px;
display: none;
padding: 22px 0 0 0;
text-align: center;
}
.portrait:hover .ptmark {
display: block;
}
.s_rol {
margin: 0 0 20px 0;
/* border: 2px solid rgba(0, 102, 153, 0.15); */
padding: 20px 20px 20px 20px;
border-radius: 10px;
background-color: rgb(255, 255, 255);
}
.s_rol:nth-child(2n) {
/* background-color: #f7fcff; */
}
.s_rol > h3 {
margin: 0 0 10px 0;
letter-spacing: -0.5px;
font-size: 16px;
border-bottom: 2px solid rgba(0, 102, 153, 0.15);
padding: 0px 0px 15px 6px;
}
.s_rol > h3 > button {
margin: 0 0 0 25px;
padding: 5px 12px;
}
.s_rol > h3 > button:hover {
text-decoration: underline;
}
.s_rol > div.rol_mess {
/* margin-bottom: 10px; */
font-size: 15px;
}
.s_rol > div.rol_mess:nth-child(2n) {
padding: 14px 10px 14px 10px;
}
.s_rol > div.rol_mess:nth-child(2n + 1) {
padding: 10px 10px 10px 10px;
background-color: #f9fdff;
}
.s_rol > div.rol_mess > font {
color: #666;
margin-right: 15px;
display: inline-block;
width: 150px;
text-align: right;
vertical-align: top;
margin-top: 2px;
}
.s_rol > div.rol_mess > .pencil {
color: #006699;
margin-left: 15px;
font-weight: bold;
cursor: pointer;
}
.s_rol > div.rol_mess > .rm_huid {
display: inline-block;
width: 75%;
line-height: 22px;
}
.s_rol > div.rol_art {
padding: 1px 10px 10px 10px;
}
.s_rol > div.rol_art > b {
display: block;
font-size: 16px;
color: #006699;
letter-spacing: -0.5px;
margin-bottom: 20px;
}
.s_rol > div.rol_art > font {
display: block;
margin: 15px 0 0 0;
font-size: 14px;
font-weight: bold;
color: #333;
}
.s_rol > div.rol_art > font:nth-child(2) {
margin-top: 25px;
}
.s_rol > div.rol_art > span {
display: block;
color: #666;
font-size: 16px;
margin: 15px 0 0 10px;
}
.s_rol > div.rol_art > p {
font-size: 14px;
margin-top: 15px;
color: #333;
}
.rol_art .colNUmber {
color: #069;
font-size: 20px;
margin-right: 5px;
}
.rol_art .certBtn {
margin: 0 0 0 20px;
color: #006699;
}
.rol_art .certBtn:hover {
cursor: pointer;
text-decoration: underline;
}
.rol_art .arrowBtn {
color: #006699;
cursor: pointer;
font-weight: bold;
margin: 0 0 0 10px;
}
.webLink {
color: #2a9916;
margin-left: 10px;
cursor: pointer;
}
.webLink:hover {
text-decoration: underline;
}
.gugeList {
font-size: 14px;
border: 2px dashed #eee;
cursor: pointer;
margin-bottom: 20px;
padding: 10px 30px 10px 15px;
position: relative;
}
.gugeList:hover {
background-color: #fdfdfd;
}
.gugeList > p {
margin-bottom: 5px;
line-height: 20px;
}
.gugeList > p > font {
margin-right: 5px;
color: #999;
}
.gugeList > p > a {
color: #006699;
}
.gugeList > p > a:hover {
text-decoration: underline;
}
.gugeList > b {
display: none;
}
.gugeList > .kuangGeo {
display: block;
position: absolute;
width: 15px;
height: 15px;
border: 2px solid #eee;
top: 10px;
right: 10px;
}
.gugeList.gu_col {
border: 2px solid #006699;
background-color: #ebf4f9;
position: relative;
}
.gugeList.gu_col > b {
display: block;
position: absolute;
top: 5px;
right: 5px;
color: #069;
font-weight: 700;
font-size: 25px;
}
.zhujie_name {
font-size: 12px;
line-height: 20px;
margin-top: 6px;
color: #999;
}
.zhujie_name a {
color: #006699;
font-weight: bold;
letter-spacing: -0.5px;
}
.zhujie_name a:hover {
text-decoration: underline;
}
.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;
}
/deep/.articleTable .el-table th {
background-color: #f0f0f0 !important;
color: #006699 !important;
padding: 3px !important;
}
.userIndexBox .s_rol {
width: 29%;
height: 300px;
}
.userIndexBox h3 {
color: rgb(0, 102, 153);
letter-spacing: 1px;
}
.userIndexBox .rol_mess {
text-align: left;
padding-top: 10px !important;
padding-bottom: 0 !important;
}
.userIndexBox .s_rol > div.rol_mess > font {
width: auto;
}
</style>