Files
tougao_web/src/components/page/reviewerList.vue
徐哼唧L 186cc1b552 1
2023-06-07 09:22:26 +08:00

1319 lines
41 KiB
Vue
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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-user"></i> Reviewer list
</el-breadcrumb-item>
</el-breadcrumb>
</div>
<div class="container">
<div class="handle-box">
<el-button type="primary" icon="el-icon-plus" class="handle-del" @click="add_Selection">Add Reviewer
</el-button>
</div>
<div class="handle-box">
<el-select v-model="query.journalId" placeholder="Please select a journal"
@change="query.pageIndex = 1;getContent()">
<el-option label="All journals" :key="0" :value="0"></el-option>
<el-option v-for="item in df_jour" :label="item.title" :key="item.journal_id"
:value="item.journal_id"></el-option>
</el-select>
<!-- <span style="margin:0 10px 0 20px;font-size: 14px;">Class:</span> -->
<!-- <el-select v-model="query.class" style="width: 100px;margin: 0 0 0 15px;" @change="getContent">
<el-option label="All class" :key="0" :value="0"></el-option>
<el-option label="A" key="A" value="A"></el-option>
<el-option label="B" key="B" value="B"></el-option>
<el-option label="C" key="C" value="C"></el-option>
<el-option label="D" key="D" value="D"></el-option>
<el-option label="Not rated" key="1" value="1"></el-option>
</el-select> -->
<el-input v-model="query.keyword" placeholder="Account / Realname / Email"
style="width: 240px;margin: 0 15px;">
</el-input>
<el-button type="primary" icon="el-icon-search" @click="query.pageIndex = 1;getContent()">Search
</el-button>
</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="280px">
<template slot-scope="scope">
<p class="tab_tie_col">
<span>Realname: </span>
<b style="font-size: 15px;letter-spacing: -0.5px;">{{scope.row.realname}}</b>
<!-- <span style="margin-left:30px ;">Class: </span>
<el-button @click="BoxGrade(scope.row)" size="mini" type="text">
<b v-if="scope.row.grade!=''">{{scope.row.grade}}</b>
<b v-if="scope.row.grade==''">Not rated</b>
</el-button> -->
</p>
<p class="tab_tie_col">
<span>Title: </span>{{scope.row.technical}}
<span style="margin-left:30px ;">CV: </span>
<b class="el-icon-check" style="color: #0fa31d;font-weight: bold;"
v-if="scope.row.cvs.length>0">
</b>
<b class="el-icon-close" style="color: #ff0000;font-weight: bold;"
v-if="scope.row.cvs.length==0">
</b>
</p>
<p class="tab_tie_col">
<span>Email: </span>{{scope.row.email}}
</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">
<span>Field: </span>{{scope.row.field}}
</p>
<p class="tab_tie_col">
<span>Major: </span>{{scope.row.major_title}}
</p>
<p class="tab_tie_col">
<span>Affiliation: </span>{{scope.row.company}}
</p>
<p class="tab_tie_col">
<span>Youth editorial board: </span>
<b class="el-icon-check" style="color: #0fa31d;margin-right: 20px;font-weight: bold;"
v-if="scope.row.is_yboard=='1'">
</b>
<b class="el-icon-close" style="color: #ff0000;margin-right: 20px;font-weight: bold;"
v-if="scope.row.is_yboard=='0'">
</b>
<el-button size="mini" type="success" plain icon="el-icon-sort-up"
@click="gradeup(scope.row)" v-if="scope.row.is_yboard=='0'">Upgrade</el-button>
<el-button size="mini" type="warning" plain icon="el-icon-sort-down"
@click="gradedown(scope.row)" v-if="scope.row.is_yboard=='1'">downgrade</el-button>
</p>
</template>
</el-table-column>
<el-table-column label="Remarks" width="250">
<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="110" align="center">
<template slot-scope="scope">
<!-- <div style="margin: 0 0 6px 0;">
<el-button size="mini" type="primary" plain icon="el-icon-tickets"
@click="handleEdit(scope.$index, scope.row)">Edit</el-button>
</div> -->
<div style="margin: 0 0 6px 0;">
<el-button type="primary" plain icon="el-icon-edit" @click="handleDtail(scope.row)">
Detail
</el-button>
</div>
<div>
<el-button size="mini" type="danger" plain icon="el-icon-delete"
@click="showDelete(scope.row)">
Delete</el-button>
</div>
</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="Add User Check Email" :visible.sync="checkVisible" width="500px">
<el-form ref="check_Form" :model="checkForm" :rules="rules" label-width="80px">
<el-form-item label="Email :" prop="email">
<el-input v-model="checkForm.email" style="width: 300px;margin-right: 10px;"></el-input>
<el-button v-if="email_num==0" type="primary" @click="saveCheck(checkForm)">Check</el-button>
</el-form-item>
</el-form>
<div v-if="email_num==1" style="margin: 0 80px;color: orangered;word-break:break-word;">
<!-- 验证失败 -->
{{checkForm.email}} already exists. <br>Do you want to continue adding a new identity or modify the
mailbox for
authentication.
<div style="text-align: center;margin: 15px 0 0 0;">
<el-button type="primary" @click="NewCheck()" icon="el-icon-refresh">Re-enter</el-button>
<el-button type="primary" @click="GoldCheck()" icon="el-icon-plus">Add this user role</el-button>
</div>
</div>
<div v-if="email_num==2" style="margin: 0 80px;color: #006699;">
<!-- 验证成功 -->
Verification succeeded, continue to add information!
</div>
</el-dialog>
<!-- 添加弹出框 -->
<el-dialog title="Add User" :visible.sync="addVisible" width="700px">
<el-form ref="add_Form" :model="addForm" :rules="rules" label-width="120px">
<el-form-item label="Email :">
{{addForm.email}}
</el-form-item>
<el-form-item label="Account :" prop="account">
<span v-if="this.email_num==1">{{addForm.account}}</span>
<el-input v-model="addForm.account" v-if="this.email_num==2" @blur='saerNa_U()'></el-input>
<p v-if="btn_alert==true" style="color: orangered;">Account already exists, please rewrite it!</p>
</el-form-item>
<el-form-item label="Gender :" prop="gender">
<el-radio-group v-model="addForm.gender">
<el-radio :label="1">Male</el-radio>
<el-radio :label="2">Female</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="Journal :" prop="journal_id">
<el-select v-if="this.email_num==1" v-model="addForm.journal_id"
placeholder="Please select a journal">
<el-option v-for="item in df_jour_cun" :label="item.title" :key="item.journal_id"
:value="item.journal_id"></el-option>
</el-select>
<el-select v-if="this.email_num==2" v-model="addForm.journal_id"
placeholder="Please select a journal">
<el-option v-for="item in df_jour" :label="item.title" :key="item.journal_id"
:value="item.journal_id"></el-option>
</el-select>
</el-form-item>
<el-form-item label="Title :" prop="title">
<el-select v-model="addForm.title" filterable placeholder="Please select a title"
value-key="groupID" style="width: 300px;">
<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="Country :" prop="country">
<el-select v-model="addForm.country" filterable placeholder="Please select a country"
value-key="groupID" style="width: 300px;">
<el-option v-for="item in df_country" :label="item.en_name" :key="item.en_name"
:value="item.en_name"></el-option>
</el-select>
</el-form-item>
<el-form-item label="Realname :" prop="realname">
<el-input v-model="addForm.realname"></el-input>
</el-form-item>
<el-form-item label="Class :">
<el-select v-model="addForm.grade" placeholder="Please select a class">
<el-option key="A" label="A" value="A"></el-option>
<el-option key="B" label="B" value="B"></el-option>
<el-option key="C" label="C" value="C"></el-option>
<el-option key="D" label="D" value="D"></el-option>
</el-select>
</el-form-item>
<el-form-item label="Orcid :">
<el-input v-model="addForm.orcid"></el-input>
</el-form-item>
<el-form-item label="Introduction :">
<el-input v-model="addForm.introduction" type="textarea" :autosize="{minRows: 2}"></el-input>
</el-form-item>
<el-form-item label="Affiliation :">
<el-input v-model="addForm.company"></el-input>
</el-form-item>
<el-form-item label="Major :" prop="major_a">
<el-select v-model="addForm.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="addForm.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="addForm.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="Field :" prop="field">
<el-input v-model="addForm.field" type="textarea"></el-input>
</el-form-item>
<!-- 简历 -->
<el-form-item label="CV. :" prop="qualifications">
<div v-if="cvitaTable.length==0">
<el-upload class="upload-demo" :action="baseUrl+'api/Reviewer/up_cv_file'"
:on-success="handleFileSuccess2" name="reviewerCV" type="reviewerCV"
:on-error="handleFileError" :on-preview="handlePreview" :on-remove="handleRemove"
:before-remove="beforeRemove" :on-change="handleChange2" accept=".pdf"
:on-exceed="handleExceed" :file-list="fileL_pdf2" ref="upload">
<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>
</div>
<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>
</div>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="addVisible = false">Cancel</el-button>
<el-button type="primary" @click="saveAdd(addForm)" :disabled="this.btn_alert">OK</el-button>
</span>
</el-dialog>
<!-- 编辑弹出框 -->
<el-dialog title="Edit User Message" :visible.sync="editVisible" width="700px">
<el-form ref="edit_Form" :model="editForm" :rules="rules" label-width="120px">
<el-form-item label="Email :">
{{editForm.email}}
</el-form-item>
<el-form-item label="Account :" prop="account">
{{editForm.account}}
</el-form-item>
<el-form-item label="Gender :" prop="gender">
<span v-if="editForm.gender==1">Male</span>
<span v-if="editForm.gender==2">Female</span>
</el-form-item>
<el-form-item label="Journal :" prop="journal_title">
{{editForm.journal_title}}
</el-form-item>
<el-form-item label="Title :" prop="title">
<el-select v-model="editForm.title" filterable placeholder="Please select a title"
value-key="groupID" style="width: 300px;">
<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="Country :" prop="country">
<el-select v-model="editForm.country" filterable placeholder="Please select a country"
value-key="groupID" style="width: 300px;">
<el-option v-for="item in df_country" :label="item.en_name" :key="item.en_name"
:value="item.en_name"></el-option>
</el-select>
</el-form-item>
<el-form-item label="Realname :">
<el-input v-model="editForm.realname"></el-input>
</el-form-item>
<el-form-item label="Orcid :">
{{editForm.orcid}}
</el-form-item>
<el-form-item label="Introduction :">
<el-input v-model="editForm.introduction" type="textarea" autosize></el-input>
</el-form-item>
<el-form-item label="Affiliation :">
<el-input v-model="editForm.company"></el-input>
</el-form-item>
<el-form-item label="Major :" prop="major_a">
<el-select v-model="editForm.major_a" placeholder="Please select" @change="majorChangeEdit(1)"
style="width: 150px;margin: 0 10px 0 0;">
<el-option v-for="item in majors_a_edit" :key="item.major_id" :label="item.major_title"
:value="item.major_id"></el-option>
</el-select>
<el-select v-model="editForm.major_b" placeholder="Please select" v-if="majors_b_edit!=''"
@change="majorChangeEdit(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_edit" :key="item.major_id" :label="item.major_title"
:value="item.major_id"></el-option>
</el-select>
<el-select v-model="editForm.major_c" placeholder="Please select" v-if="majors_c_edit!=''"
@change="majorChangeEdit(3)" style="width: 150px;">
<el-option :key="0" label="None" :value="0"></el-option>
<el-option v-for="item in majors_c_edit" :key="item.major_id" :label="item.major_title"
:value="item.major_id"></el-option>
</el-select>
</el-form-item>
<el-form-item label="Field :">
<el-input v-model="editForm.field" type="textarea" autosize></el-input>
</el-form-item>
<!-- 简历 -->
<el-form-item label="CV. :" prop="qualifications">
<el-upload class="upload-demo" :action="baseUrl+'api/Reviewer/up_cv_file'"
:on-success="handleFileSuccess3" name="reviewerCV" type="reviewerCV" :on-error="handleFileError"
:on-preview="handlePreview" :on-remove="handleRemove" :before-remove="beforeRemove"
:on-change="handleChange3" accept=".pdf" :on-exceed="handleExceed" :file-list="fileL_pdf3"
ref="upload">
<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="editVisible = false">Cancel</el-button>
<el-button type="primary" @click="saveEdit(editForm)">OK</el-button>
</span>
</el-dialog>
<!-- 删除弹出框 -->
<el-dialog title="Delete Reviewer" :visible.sync="delOpen" width="600px">
<div v-for="item in lineOptions" :name='item.journal_id' :value='item.reviewer_id'
style="margin:0 0 12px 60px;">
{{item.journal.title}} - {{item.reviewer.realname}}
<font @click="lastDelete($event)" class="deteleBtn">
<i class="el-icon-delete"></i>
Delete
</font>
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="delOpen = false;">Cancel</el-button>
</span>
</el-dialog>
<!-- 标记弹出框 -->
<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>
<!-- 评级弹出框 -->
<el-dialog title="Reviewer Class" :visible.sync="gradeBox" width="400px">
<el-form ref="grade" :model="gradeMes" label-width="85px">
<el-form-item label="Reviewer :">
<p style="line-height: 20px;margin-top: 6px;">{{gradeMes.realname}}</p>
</el-form-item>
<el-form-item label="Class :">
<el-select v-model="gradeMes.grade" placeholder="Please select">
<el-option key="A" label="A" value="A"></el-option>
<el-option key="B" label="B" value="B"></el-option>
<el-option key="C" label="C" value="C"></el-option>
<el-option key="D" label="D" value="D"></el-option>
</el-select>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="gradeBox = false">Cancel</el-button>
<el-button type="primary" @click="saveGrade">Save</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
export default {
data() {
return {
tableData: [],
checkForm: {
email: ''
},
mess_age: {},
editForm: {
title: '',
},
addForm: {},
cvitaTable: [],
delOpen: false,
editVisible: false,
addVisible: false,
checkVisible: false,
btn_alert: false,
email_num: 0,
df_jour_cun: [],
df_jour: [],
df_country: [],
majors_a: [],
majors_b: [],
majors_c: [],
majors_a_edit: [],
majors_b_edit: [],
majors_c_edit: [],
lineOptions: [],
edit_id: localStorage.getItem('U_id'),
query: {
username: localStorage.getItem('U_name'),
journalId: 0,
class: 0,
pageIndex: 1,
pageSize: 15,
},
df_technical: [{
label: 'Prof',
}, {
label: 'Associate Prof.',
}, {
label: 'Assistant Prof.',
}, {
label: 'Ph.D.',
}, {
label: 'Others',
}],
remarkMes: {
remark: ''
},
remarkBox: false,
gradeMes: {
grade: ''
},
gradeBox: false,
link_Total: 0,
baseUrl: this.Common.baseUrl,
mediaUrl: this.Common.mediaUrl,
fileL_pdf2: [],
fileL_pdf3: [],
rules: {
account: [{
required: true,
message: 'Please input account',
trigger: 'blur'
}],
email: [{
required: true,
message: 'Please input email',
trigger: 'blur'
}, {
validator: function(rule, value, callback) {
if (/^[-.-_A-Za-z0-9]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/.test(value) == false) {
callback(new Error("Please enter the correct email format"));
} else {
callback();
}
},
trigger: "blur"
}],
genger: [{
required: true,
message: 'Please select genger',
trigger: 'blur'
}],
journal_id: [{
required: true,
message: 'Please select journal',
trigger: 'blur'
}],
journal_title: [{
required: true,
message: 'Please select title',
trigger: 'blur'
}],
maj_cn: [{
required: true,
message: 'Please select major',
trigger: 'blur'
}],
title: [{
required: true,
message: 'Please select title',
trigger: 'blur'
}],
technical: [{
required: true,
message: 'Please select title',
trigger: 'blur'
}],
country: [{
required: true,
message: 'Please select country',
trigger: 'blur'
}],
field: [{
required: true,
message: 'Please input field',
trigger: 'blur'
}],
realname: [{
required: true,
message: 'Please input realname',
trigger: 'blur'
}],
major_a: [{
required: true,
message: 'Please select major',
trigger: 'blur'
}],
}
};
},
created() {
this.getDate();
this.getContent();
this.initMajor()
},
methods: {
// 获取编辑列表数据
getDate() {
this.$api
.post('api/Chief/getJournalsByEditor', {
'user_id': this.edit_id
})
.then(res => {
if (res.code == 0) {
this.df_jour = res.data.journals;
} else {
this.$message.error(res.msg);
}
})
.catch(err => {
this.$message.error(err);
});
this.$api
.post('api/Reviewer/getCountrys')
.then(res => {
this.df_country = res.countrys;
})
.catch(err => {
this.$message.error(err);
});
},
getContent() {
if (this.query.class == 0) {
if (this.query.grade != undefined) {
delete this.query.grade
}
} else if (this.query.class == 1) {
this.query.grade = ''
} else {
this.query.grade = this.query.class
}
const loading = this.$loading({
lock: true,
text: 'Loading...',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
});
this.$api
.post('api/Reviewer/getReviewerListByJournal', this.query)
.then(res => {
if (res.code == 0) {
this.tableData = res.data;
for (var i = 0; i < this.tableData.length; i++) {
this.getScoreData(i, this.tableData[i].score)
}
this.link_Total = res.total || 0;
loading.close()
} else {
this.$message.error(res.msg);
loading.close()
}
})
.catch(err => {
this.$message.error(err);
loading.close()
});
},
// 评分
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.getContent();
},
// 升级
gradeup(row) {
// 二次确认
this.$confirm('确定要升级' + row.account + '为青年编委吗?', '提示', {
type: 'warning'
})
.then(() => {
this.$api
.post('api/User/upReviewerToYboard', row)
.then(res => {
if (res.code == 0) {
this.$message.success('升级' + row.account + '为青年编委成功');
this.getContent();
} else {
this.$message.error(res.msg);
}
})
.catch(err => {
this.$message.error(err);
});
})
.catch(() => {});
},
// 降级
gradedown(row) {
// 二次确认
this.$confirm('确定要降级' + row.account + '为审稿人吗?', '提示', {
type: 'warning'
})
.then(() => {
this.$api
.post('api/User/downReviewerToYboard ', row)
.then(res => {
if (res.code == 0) {
this.$message.success('降级为' + row.account + '审稿人成功');
this.getContent();
} else {
this.$message.error(res.msg);
}
})
.catch(err => {
this.$message.error(err);
});
})
.catch(() => {});
},
// 下拉级联添加
ched_id_add(event) {
this.addForm.major = event[0];
this.addForm.cmajor = event[1];
},
ched_id_edit(event) {
this.editForm.major = event[0];
this.editForm.cmajor = event[1];
},
// 添加操作
add_Selection(index, row) {
this.checkVisible = true;
this.checkForm.email = '';
this.email_num = 0;
this.addForm = {};
this.cvitaTable = []
this.fileL_pdf2 = [];
},
// 验证邮箱是否存在
saveCheck(checkForm) {
this.$refs.check_Form.validate((valid) => {
if (valid) {
this.$api
.post('api/Reviewer/checkUser', {
'account': this.checkForm.email
})
.then(res => {
if (res.code == 0) {
if (res.data.has == 'no') {
this.email_num = 2;
this.addForm.email = this.checkForm.email;
this.addForm.gender = 1;
setTimeout(() => {
this.checkVisible = false
this.addVisible = true
}, 1000);
} else {
this.email_num = 1
}
} else {
this.$message.error(res.msg);
}
})
.catch(err => {
this.$message.error(err);
});
}
});
},
// 如果重新填写
NewCheck() {
this.checkForm.email = ''
this.email_num = 0
},
// 如果继续添加
GoldCheck() {
this.$api
.post('api/Reviewer/getReviewerByNameEmail', {
'account': this.checkForm.email
})
.then(res => {
this.checkVisible = false
this.addForm = res.data.reviewer;
if (this.addForm.reviewer_id == null) {
this.addForm.reviewer_id = res.data.reviewer.user_id
}
this.addForm.title = res.data.reviewer.technical;
this.fileL_pdf2 = [];
this.cvitaTable = res.data.reviewer.cvs
if (res.data.reviewer.cvs.length == 0) {
this.addForm.cv = ''
this.addForm.qualifications = ''
} else {
this.addForm.cv = res.data.reviewer.cvs[res.data.reviewer.cvs.length - 1].cv;
this.addForm.qualifications = res.data.reviewer.cvs[res.data.reviewer.cvs.length - 1].cv;
this.fileL_pdf2 = [{}];
this.fileL_pdf2[0].name = 'reviewerCV';
this.fileL_pdf2[0].url = this.mediaUrl + 'reviewer/' + res.data.reviewer.cvs[res.data
.reviewer.cvs.length - 1].cv;
}
// this.addForm.maj_cn = [this.addForm.major, this.addForm.cmajor];
this.addForm.major = 1
this.addForm.major_a = ''
this.addForm.major_b = ''
this.addForm.major_c = ''
this.addForm.majorList = []
if (this.addForm.majorshu != 0 && this.addForm.majorshu != null) {
if (typeof(this.addForm.majorshu) == 'number') {
this.addForm.majorList.push(this.addForm.majorshu)
} else {
this.addForm.majorList = this.addForm.majorshu.split(",")
}
}
this.$nextTick(() => {
this.jiLInaoan()
this.addVisible = true
})
// 可申请审稿人的期刊
this.$api
.post('api/Journal/getJournalsForReviewerInEditor', {
'editor_id': this.edit_id,
'reviewer_id': this.addForm.reviewer_id,
})
.then(res => {
this.df_jour_cun = res.data.journals
})
.catch(err => {
this.$message.error(err);
});
})
.catch(err => {
this.$message.error(err);
});
},
// 查找与他相同的账号
saerNa_U() {
if (this.addForm.account != undefined) {
this.$api
.post('api/Reviewer/checkUser', {
'account': this.addForm.account
})
.then(res => {
if (res.code == 0) {
if (res.data.has == 'no') {
this.btn_alert = false
} else {
this.btn_alert = true
}
} else {
this.$message.error(res.msg);
}
})
.catch(err => {
this.$message.error(err);
});
}
},
// 保存用户的添加
saveAdd(addForm) {
this.$refs.add_Form.validate((valid) => {
if (this.cvitaTable.length == 0) {
if (this.addForm.qualifications == '' || this.addForm.qualifications == undefined) {
this.$message.error(
'Please make sure that CV. document is uploaded successfully');
return false;
}
}
if (valid) {
let path_add = ''
if (this.email_num == 2) {
// 新的
path_add = 'api/Reviewer/addReviewer'
} else {
// 重复
path_add = 'api/Reviewer/addReviewerBee'
}
this.$api
.post(path_add, this.addForm)
.then(res => {
if (res.code == 0) {
this.addVisible = false;
this.btn_alert = false;
this.$refs.add_Form.resetFields();
this.$message.success(`Added successfully!`);
this.getContent();
} else {
this.$message.error(res.msg);
}
})
.catch(err => {
this.$message.error(err);
});
} else {
this.$message.error('error submit!!');
return false;
}
});
},
// 编辑操作
handleEdit(index, row) {
row.title = row.technical;
this.editForm = Object.assign({}, row);
this.editForm.cv = this.editForm.qualifications;
this.fileL_pdf3 = [];
if (this.editForm.qualifications != "") {
this.fileL_pdf3 = [{}];
this.fileL_pdf3[0].name = 'reviewerCV';
this.fileL_pdf3[0].url = this.mediaUrl + 'reviewer/' + this.editForm.qualifications;
}
this.editForm.maj_cn = [this.editForm.major, this.editForm.cmajor];
this.editVisible = true;
},
// 详情
handleDtail(e) {
let routerJump = this.$router.resolve({
path: '/partyRole',
query: {
id: e.user_id
}
});
window.open(routerJump.href, '_blank');
},
// 保存编辑
saveEdit(editForm) {
this.$refs.edit_Form.validate((valid) => {
// if (this.editForm.qualifications == '') {
// this.$message.error('Please make sure that the CV. document is uploaded successfully');
// return false;
// }
if (valid) {
this.$api
.post('api/Reviewer/editReviewerForEditor', this.editForm)
.then(res => {
if (res.code == 0) {
this.editVisible = false;
this.btn_alert = false;
this.$message.success(`Successfully changed `);
this.getContent();
} else {
this.$message.error(res.msg);
}
})
.catch(err => {
this.$message.error(err);
});
} else {
this.$message.error('error submit!!');
return false;
}
});
},
// 删除弹窗
showDelete(index, row) {
this.delOpen = true;
this.$api
.post('api/User/getReviewerForDel', {
reviewer_id: index.user_id,
editor_account: localStorage.getItem('U_name')
})
.then(res => {
this.lineOptions = res.data;
})
.catch(err => {
this.$message.error(err);
});
},
// 删除操作
lastDelete(e) {
this.mess_age.reviewer_id = e.currentTarget.parentElement.getAttribute('value')
this.mess_age.journal_id = e.currentTarget.parentElement.getAttribute('name')
// 二次确认删除
// this.$confirm('Are you sure you want to delete?', 'Tip', {
// type: 'warning'
// })
// .then(() => {
this.$api
.post('api/User/deleteArticleReviewer', this.mess_age)
.then(res => {
if (res.code == 0) {
this.delOpen = false;
this.$message.success('Deleted successfully');
this.getContent();
} else {
this.$message.error(res.msg);
}
})
.catch(err => {
this.$message.error(err);
});
// })
// .catch(() => {});
},
// 评级弹出框
BoxGrade(e) {
this.gradeBox = true;
this.gradeMes.journal_id = e.journal_id;
this.gradeMes.user_id = e.user_id;
this.gradeMes.grade = e.grade;
this.gradeMes.realname = e.realname;
console.log(this.gradeMes)
},
// 修改评级
saveGrade() {
this.$api.post('api/Reviewer/editReviewerGrade', this.gradeMes)
.then(res => {
if (res.code == 0) {
this.$message.success('Success');
this.gradeBox = false;
this.getContent();
} else {
this.$message.error(res.msg);
}
});
},
// 标记弹出框
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.getContent();
} 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;
});
},
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.addForm.majorList[0] != undefined) {
this.addForm.major_a = Number(this.addForm.majorList[0])
this.$api
.post('api/Ucenter/getMajor', {
major_id: this.addForm.major_a
}).then((res) => {
this.majors_b = res.data.major.children;
this.majors_c = []
this.addForm.major_b = ''
this.addForm.major_c = ''
this.majorChange_panduan()
if (this.addForm.majorList[1] != undefined) {
this.addForm.major_b = Number(this.addForm.majorList[1])
this.$api
.post('api/Ucenter/getMajor', {
major_id: this.addForm.major_b
})
.then((ref) => {
if (ref.data.major.children.length != 0) {
this.majors_c = ref.data.major.children;
this.majorChange_panduan()
if (this.addForm.majorList[2] != undefined) {
this.addForm.major_c = Number(this.MessForm.majorList[
2])
this.majorChange_panduan()
}
}
});
}
});
}
});
},
// 搜索选择领域
majorChange(e) {
if (e == 1) {
this.$api
.post('api/Ucenter/getMajor', {
major_id: this.addForm.major_a
}).then((res) => {
this.majors_b = res.data.major.children;
this.majors_c = []
this.addForm.major_b = ''
this.addForm.major_c = ''
this.majorChange_panduan()
});
} else if (e == 2 && this.addForm.major_b != 0) {
this.$api
.post('api/Ucenter/getMajor', {
major_id: this.addForm.major_b
}).then((res) => {
this.majors_c = res.data.major.children;
this.addForm.major_c = ''
this.majorChange_panduan()
});
} else {
this.majorChange_panduan()
}
},
majorChange_panduan() {
if (this.addForm.major_c != '' || this.addForm.major_c != 0) {
this.addForm.major = this.addForm.major_c
} else if (this.addForm.major_b != '' || this.addForm.major_b != 0) {
this.addForm.major = this.addForm.major_b
} else {
this.addForm.major = this.addForm.major_a
}
},
// 指数颜色
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;
},
// 上传文件
handleChange2(file, fileList) {
if (fileList.length > 0) {
this.fileL_pdf2 = [fileList[fileList.length - 1]]
}
},
handleChange3(file, fileList) {
if (fileList.length > 0) {
this.fileL_pdf3 = [fileList[fileList.length - 1]]
}
},
handleFileSuccess1(res, file) {
if (res.code == 0) {
this.checkForm.cv = res.upurl;
this.checkForm.qualifications = res.upurl;
} else {
this.$message.error(res.msg);
}
},
handleFileSuccess2(res, file) {
if (res.code == 0) {
this.addForm.cv = res.upurl;
this.addForm.qualifications = res.upurl;
} else {
this.$message.error(res.msg);
}
},
handleFileSuccess3(res, file) {
if (res.code == 0) {
this.editForm.cv = res.upurl;
this.editForm.qualifications = res.upurl;
} 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!");
},
// 时间格式
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;
}
.deteleBtn {
color: #ce1111;
margin-left: 18px;
}
.deteleBtn i {
font-weight: bold;
}
.deteleBtn:hover {
text-decoration: underline;
cursor: pointer;
}
</style>