审稿人CV

This commit is contained in:
2025-06-05 13:28:26 +08:00
parent 071276e284
commit 8c4701c2e6
3 changed files with 85 additions and 74 deletions

BIN
dist.zip

Binary file not shown.

View File

@@ -315,7 +315,7 @@
<div class="list-center go-flex-center go-transition" style="width: 100%">
<div class="title">
<span>Add Table </span>
<!-- <span @click.stop="handlePaperclip"><i class="el-icon-paperclip"></i></span> -->
<span @click.stop="handlePaperclip"><i class="el-icon-paperclip"></i></span>
</div>
<div

View File

@@ -30,9 +30,10 @@
<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 clearable v-model="query.keyword" placeholder="Account / Realname / Email" style="width: 240px; margin: 0 15px"> </el-input>
<el-input clearable v-model="query.keyword" placeholder="Account / Realname / Email" style="width: 240px; margin: 0 15px">
</el-input>
<el-cascader
clearable
clearable
:ref="`cascader1`"
@change="handleChange"
v-model="selectField"
@@ -66,8 +67,29 @@
</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>
<span style="margin-left: 25px">CV: </span>
<span v-if="scope.row.cvs.length > 0" v-for="(item, index) in [scope.row.cvs[scope.row.cvs.length - 1]]">
<!-- <span style="margin-left: 20px; color: #888; font-size: 13px">
<i class="el-icon-paperclip"></i>
{{ formatDate(item.ctime) }}
</span> -->
<el-tooltip :content="formatDate(item.ctime)" placement="top">
<a
:href="mediaUrl + 'reviewer/' + item.cv"
target="_blank"
class="txt_pdf"
style="margin: 0; display: inline-block"
><img
src="@/assets/img/icon_0.png"
alt=""
class="icon_img"
style="vertical-align: middle; width: 16px; height: 16px"
/>
<i class="el-icon-download" style="font-size: 12px;margin-left: 4px;"></i>
</a>
</el-tooltip>
</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>
@@ -117,13 +139,11 @@
</font>
</p>
<p class="tab_tie_col">
<span style="color: #0b71ff;">Reviewed manuscripts {{ ReviewTime }}: </span>
<font style="display: inline-block;color: #0b71ff;font-weight: bold;" v-if="scope.row.review_num_two_year">
{{ scope.row.review_num_two_year }}
</font>
<font style="display: inline-block;color: #aaa;font-weight: bold;" v-else >
0
<span style="color: #0b71ff">Reviewed manuscripts {{ ReviewTime }}: </span>
<font style="display: inline-block; color: #0b71ff; font-weight: bold" v-if="scope.row.review_num_two_year">
{{ scope.row.review_num_two_year }}
</font>
<font style="display: inline-block; color: #aaa; font-weight: bold" v-else> 0 </font>
</p>
</template>
</el-table-column>
@@ -188,13 +208,17 @@
</el-table-column> -->
<el-table-column label="Research areas" width="300">
<template slot-scope="scope">
<div @click="BoxMajor(scope.row,majorData[scope.row.user_id])" v-if="scope.row.user_id" style="display: flex; align-items: center; justify-content: space-between; cursor: pointer;">
<div
@click="BoxMajor(scope.row, majorData[scope.row.user_id])"
v-if="scope.row.user_id"
style="display: flex; align-items: center; justify-content: space-between; cursor: pointer"
>
<!-- 使用 user_id 来获取用户的 majorData -->
<div>
<div v-if="majorData[scope.row.user_id]" class="majorDataBox">
<p v-for="(v, i) in majorData[scope.row.user_id]" style="border-top: 1px solid #b3d8ff;">
<span style="font-weight:bold">{{ i + 1 }}.</span>
{{ v.major_title.replace("Medicine >", "").trim() }}
<p v-for="(v, i) in majorData[scope.row.user_id]" style="border-top: 1px solid #b3d8ff">
<span style="font-weight: bold">{{ i + 1 }}.</span>
{{ v.major_title.replace('Medicine >', '').trim() }}
</p>
</div>
<div v-else>
@@ -203,11 +227,7 @@
</div>
</div>
<b
style="margin-left: 10px; color: #006699"
class="el-icon-edit"
></b>
<b style="margin-left: 10px; color: #006699" class="el-icon-edit"></b>
</div>
</template>
</el-table-column>
@@ -414,9 +434,10 @@
<el-dialog title="Remarks" :visible.sync="remarkBox" width="800px">
<el-form ref="remark" :model="remarkMes" label-width="95px">
<el-form-item label="Reviewer :">
<p style="line-height: 20px; margin-top: 6px;">
<span style="color:#333;font-weight:bold;">{{ remarkMes.realname }}</span>
( {{ remarkMes.email }} )</p>
<p style="line-height: 20px; margin-top: 6px">
<span style="color: #333; font-weight: bold">{{ remarkMes.realname }}</span>
( {{ remarkMes.email }} )
</p>
</el-form-item>
<el-form-item label="Content :">
<el-input type="textarea" rows="20" v-model="remarkMes.remark"></el-input>
@@ -430,16 +451,16 @@
<el-dialog title="Edit Research areas" :visible.sync="majorBox" width="800px">
<el-form ref="remark" :model="majorMes" label-width="120px">
<el-form-item label="Reviewer :">
<p style="line-height: 20px; margin-top: 6px;">
<span style="color:#333;font-weight:bold;">{{ majorMes.realname }}</span>
( {{ majorMes.email }} )</p>
<p style="line-height: 20px; margin-top: 6px">
<span style="color: #333; font-weight: bold">{{ majorMes.realname }}</span>
( {{ majorMes.email }} )
</p>
</el-form-item>
<!-- <el-form-item label="Email :">
<p style="line-height: 20px; margin-top: 6px">{{ majorMes.email }}</p>
</el-form-item> -->
<el-form-item label="Research areas :">
<common-major-list :list="majorValueList" @load="(e) => (this.majorValueList = e)"></common-major-list>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
@@ -472,18 +493,17 @@
</template>
<script>
const currentYear = new Date().getFullYear();
var ReviewTime= `(${currentYear - 2}${currentYear})`;
var ReviewTime = `(${currentYear - 2}${currentYear})`;
import commonReviewer from '../page/components/reviewerList/add.vue';
export default {
components: {
commonReviewer
},
data() {
return {
ReviewTime:ReviewTime,
ReviewTime: ReviewTime,
majorValueList: [],
majorData: [],
selectField: [],
@@ -542,9 +562,7 @@ export default {
remarkMes: {
remark: ''
},
majorMes: {
},
majorMes: {},
remarkBox: false,
majorBox: false,
gradeMes: {
@@ -733,9 +751,8 @@ export default {
},
async getContent() {
console.log('this.selectField at line 720:', this.selectField)
if(this.selectField.length > 0) {
console.log('this.selectField at line 720:', this.selectField);
if (this.selectField.length > 0) {
this.query.user_field = this.selectField[this.selectField.length - 1];
} else {
this.query.user_field = '';
@@ -756,7 +773,7 @@ export default {
background: 'rgba(0, 0, 0, 0.7)'
});
await this.$api
.post('api/Reviewer/getReviewerListByJournal',this.query)
.post('api/Reviewer/getReviewerListByJournal', this.query)
.then(async (res) => {
if (res.code == 0) {
this.tableData = res.data;
@@ -775,13 +792,10 @@ export default {
// });
this.$forceUpdate();
} else {
this.$message.error(res.msg);
loading.close();
}
})
.catch((err) => {
this.$message.error(err);
@@ -1177,27 +1191,25 @@ export default {
this.remarkMes.email = e.email;
this.remarkMes.remark = e.remark;
},
BoxMajor(e,data) {
BoxMajor(e, data) {
this.majorBox = true;
this.majorMes.realname = e.realname;
this.majorMes.user_id = e.user_id;
this.majorMes.email = e.email;
this.majorValueList = [...data].map((item) => ({
selectedValue: Array.isArray(item.shu)
? item.shu
: typeof item.shu === 'string'
? item.shu.split(',').map(Number)
: [item.shu]
}));
selectedValue: Array.isArray(item.shu)
? item.shu
: typeof item.shu === 'string'
? item.shu.split(',').map(Number)
: [item.shu]
}));
},
async fetchMajorData(userId) {
// if (!this.majorData[userId]) {
// 判断是否已经加载过该用户的数据
const data = await this.getMajorData(userId); // 获取数据
this.$set(this.majorData, userId, data); // 使用 Vue.set 确保数据是响应式的
// 判断是否已经加载过该用户的数据
const data = await this.getMajorData(userId); // 获取数据
this.$set(this.majorData, userId, data); // 使用 Vue.set 确保数据是响应式的
// }
},
// 修改标记
@@ -1226,18 +1238,20 @@ export default {
});
},
saveMajor() {
this.$api.post('api/Reviewer/updateUserField', {
user_id:this.majorMes.user_id,
user_field:this.majorValueList.map((item) => item.selectedValue[item.selectedValue.length - 1]).toString(',')
}).then((res) => {
if (res.status == 1) {
this.$message.success('Success');
this.majorBox = false;
this.fetchMajorData(this.majorMes.user_id);
} else {
this.$message.error(res.msg);
}
});
this.$api
.post('api/Reviewer/updateUserField', {
user_id: this.majorMes.user_id,
user_field: this.majorValueList.map((item) => item.selectedValue[item.selectedValue.length - 1]).toString(',')
})
.then((res) => {
if (res.status == 1) {
this.$message.success('Success');
this.majorBox = false;
this.fetchMajorData(this.majorMes.user_id);
} else {
this.$message.error(res.msg);
}
});
},
// 领域
@@ -1351,8 +1365,6 @@ export default {
},
// 指数颜色
colorIndex(num, time) {
// if (time != 0) {
// let date = new Date(parseInt(time * 1000));
// let Y = date.getFullYear() + '-';
@@ -1381,9 +1393,9 @@ export default {
// ')</span>';
str = '<b style="color:#cbb504">' + num + '</b>';
} else {
if(num==null){
num=0
}
if (num == null) {
num = 0;
}
// str =
// '<b style="color:#0cbc15">' +
// num +
@@ -1392,7 +1404,7 @@ export default {
// ')</span>';
str = '<b style="color:#0cbc15">' + num + '</b>';
}
if (time == 0||time==null) {
if (time == 0 || time == null) {
// str = '<b style="color:#aaa;">0</b><span style="color:#aaa;font-size:14px;margin-left:10px;">(No time)</span>';
str = '<b style="color:#aaa;">0</b>';
}
@@ -1549,8 +1561,7 @@ export default {
text-decoration: underline;
cursor: pointer;
}
.majorDataBox p:nth-child(1){
.majorDataBox p:nth-child(1) {
border-top: none !important;
}
</style>