提交 邀请审稿人列表

This commit is contained in:
2025-06-11 17:42:46 +08:00
parent 0c4e44e858
commit 5951f26bd4
6 changed files with 1619 additions and 1030 deletions

View File

@@ -132,10 +132,11 @@
</p>
</el-collapse-item>
</el-collapse>
<el-collapse class="auth_colla auth_collna_ew" style="margin-top: -15px">
<el-collapse v-model="researchAreas" class="auth_colla auth_collna_ew" style="margin-top: -15px">
<el-collapse-item title="Research areas" name="1">
<div style="position: relative; height: 30px">
<common-major
v-if="form.state==0"
:articleId="editform.articleId"
@load="initMajor()"
style="position: absolute; top: 10px; right: 10px"
@@ -152,7 +153,7 @@
<span style="color: #006699; font-weight: bold; margin-right: 10px"
>Field {{ i + 1 }}:</span
>{{ v.str
}}<i
}}<i v-if="form.state==0"
class="el-icon-delete-solid"
style="color: #f56c6c !important; margin-left: 10px"
@click="handleDeleteMajor(v)"
@@ -553,6 +554,7 @@ export default {
},
data() {
return {
researchAreas:['1'],
AIcontent:'',
previewData: {},
baseUrl: this.Common.baseUrl,

View File

@@ -1,5 +1,5 @@
<template>
<div style="min-width: 1280px">
<div style="min-width: 1280px" class="articleListEditorA">
<div class="handle-box">
<el-badge
:value="item.num"
@@ -52,7 +52,58 @@
<el-button type="primary" icon="el-icon-search" @click="handleSearch" style="margin: 0 0 10px 0">Search </el-button>
</div>
<div v-if="!PreAcpVisible">
<div v-for="(item, ikgn) in tableData" class="mangu_list" style="position: relative">
<div v-for="(item, ikgn) in tableData">
<p
style="background-color: #0077b8e6; border-top-left-radius: 8px; border-top-right-radius: 8px"
class="articleBaseInfo articleTopBaseInfo"
>
<font class="labelTitle">ID : </font>
<span
style="
background-color: #ff0000cc;
width: 20px;
color: #fff;
margin: 0 2px 0 0;
font-weight: bold;
padding: 2px 4px;
"
v-if="item.special_num > 0"
>S
</span>
{{ item.accept_sn }}
<sapn style="margin: 0 4px">| </sapn>
<sapn style="font-size: 12px"> {{ item.type | jtName }}</sapn>
<sapn style="margin: 0 4px">| </sapn>
<sapn style="font-size: 12px">
<font v-for="(iken, index) in item.countrys">
{{ iken }}
<font v-if="index != item.countrys.length - 1">,</font>
</font>
</sapn>
<b @click="openTracking(item)" class="btnCliArt" style="color: #f0f0f0; font-size: 12px; margin-left: 10px">
<i class="el-icon-data-line"></i> Manuscript Tracking
</b>
<sapn style="float: right">
<span class="labelTitle" style="font-weight: 500">Plagiarism Check :</span>
<font style="margin-right: 16px; font-size: 15px; font-weight: bold"> {{ item.repetition }} % </font>
<b @click="changeRepe(item)" class="btnCliArt" style="color: #eaf6fb"> <i class="el-icon-edit"></i> Change </b>
</sapn>
<sapn style="margin: 0 10px; float: right">| </sapn>
<sapn style="float: right">
<span class="labelTitle" style="font-weight: 500">Status :</span>
<font style="margin-right: 15px; font-size: 16px; font-weight: bold; letter-spacing: -0.5px">
{{ stateFormat(item.state) }}
</font>
<b v-if="item.state != 5" @click="testvis(item)" class="btnCliArt" style="color: #eaf6fb">
<i class="el-icon-edit"></i> Change
</b>
<b v-if="item.state == 5" @click="prodBegin(item)" class="btnCliArt" style="color: #eaf6fb">
<i class="el-icon-paperclip"></i> Begin Produce
</b>
</sapn>
</p>
<div class="mangu_list" style="position: relative">
<img
v-if="item.ai_review != '' && item.ai_review"
src="@/assets/img/ai.png"
@@ -66,28 +117,23 @@
style="opacity: 0.5; cursor: pointer; width: 30px; height: 30px; position: absolute; right: 6px; top: 6px"
/>
<div>
<font style="color: #666b7a">ID : </font>
<!-- <font style="color: #666b7a">ID : </font>
<span
style="background-color: #006699; width: 20px; color: #fff; margin: 0 2px 0 0; font-weight: bold; padding: 2px 4px"
v-if="item.special_num > 0"
>S
</span>
{{ item.accept_sn }}
<!-- <b @click="showdetaileditor(item)" class="btnCliArt" style="margin-left: 15px;">
<i class="el-icon-collection"></i> Detail
</b> -->
{{ item.accept_sn }} -->
<span style="color: #666b7a; margin-left: 40px">Type :</span>
<!-- <span style="color: #666b7a; margin-left: 40px">Type :</span>
<font>
{{ item.type | jtName }}
</font>
<span style="color: #666b7a; margin-left: 40px">Countries :</span>
<!-- <span :class="item.countrys.length > 1 ? 'Countries': ''" > -->
<font v-for="(iken, index) in item.countrys">
{{ iken }}
<font v-if="index != item.countrys.length - 1">,</font>
</font>
<!-- </span> -->
<span style="color: #666b7a; margin-left: 40px">Status :</span>
<font style="margin-right: 15px; font-size: 16px; font-weight: bold; letter-spacing: -0.5px">
{{ stateFormat(item.state) }}
@@ -98,24 +144,64 @@
</b>
<span style="color: #666b7a; margin-left: 40px">Plagiarism Check :</span>
<font style="margin-right: 16px; font-size: 15px; font-weight: bold"> {{ item.repetition }} % </font>
<b @click="changeRepe(item)" class="btnCliArt"> <i class="el-icon-edit"></i> Change </b>
<b @click="openTracking(item)" class="btnCliArt" style="margin-left: 50px">
<b @click="changeRepe(item)" class="btnCliArt"> <i class="el-icon-edit"></i> Change </b> -->
<!-- <b @click="openTracking(item)" class="btnCliArt" style="margin-left: 50px">
<i class="el-icon-data-line"></i> Manuscript Tracking
</b>
</b> -->
</div>
<div class="man_title">
<el-badge is-dot :hidden="item.author_act == 1 ? false : true">
<b @click="showdetaileditor(item)">
{{ item.title }}
</b><b @click="corrSpe(item)" class="btnCliArt" style="margin-left: 20px">
<b @click="showdetaileditor(item)"> {{ item.title }} </b>
<b @click="corrSpe(item)" class="btnCliArt" style="margin-left: 20px; white-space: nowrap">
<i class="el-icon-paperclip"></i> Author's previous articles
</b>
<el-button
:type="item.state == 0 ? 'primary' : 'info'"
plain
size="mini"
@click="BoxMajor(item)"
style="margin-left: 10px"
>
<i class="el-icon-edit" v-if="item.state == 0"></i>
<i class="el-icon-view" v-else></i>
Research areas
</el-button>
<!-- <b @click="BoxMajor(item)" class="btnCliArt" style="margin-left: 20px; white-space: nowrap"> Research areas </b> -->
</el-badge>
</div>
<!-- <div style="margin: 0 0 10px">
<b>
<font class="labelTitle">Corresponding Author </font>
</b>
<span style="margin-left: 10px">
<b @click="articleCommun(item)" class="btnCliArt" style="">
<i class="el-icon-chat-line-square"></i> Communication
</b>
</span>
<div style="display: flex; margin-left: auto">
<div class="fixCard" :style="`width: ${query.state == 0 ? '33% !important' : '33% !important'};`">
<span style="text-align: left;margin-left: 10px"
><font class="labelTitle">Name : </font>
<span v-if="item.realname != ''">
{{ item.realname }}
<span v-if="item.phone != ''" style="margin-left: 5px; color: #666">({{ item.phone }})</span>
</span>
</span>
<span v-if="item.email != ''" style="margin-left: 10px"
><font class="labelTitle">Email : </font>
<b @click="linkEmail(item)" class="btnCliArt" style=""> {{ item.email }} </b>
<b @click="linkEmailist(item)" v-if="item.emailh == 1" class="btnCliArt" style="margin-left: 15px">
<i class="el-icon-refresh-left"></i> History
</b>
</span>
</div> -->
<div style="display: flex; margin-left: auto; flex-wrap: nowrap">
<div
class="fixCard"
:style="`width:${item.state == 0 ? '350px !important;flex-shrink: 0' : '320px !important;flex-shrink: 0'}`"
>
<b style="font-size: 16px; letter-spacing: -0.5px">Manuscript Files</b>
<p style="height: 10px"></p>
<div class="fi_new" v-if="item.file.coverLetter">
@@ -133,18 +219,25 @@
@click="changeFileUpdown(0, ikgn, 'file_cover')"
></b>
</p>
<div>
<div v-for="(ikrm, ikrmIndex) in item.file.coverLetter" v-if="item.file_cover == 1">
<img src="../../assets/img/icon_0.png" />
<span>
<font>Uploader {{ ikrmIndex+1 }} </font>
<span @click="openFile(mediaUrl + ikrm.file_url)" class="openFile">
<!-- <font>Uploader {{ ikrmIndex+1 }} </font> -->
<!-- {{ ikrm.username }} -->
<i><i class="el-icon-time"></i>{{ formatDate(ikrm.ctime) }}</i>
<i>
<!-- <i class="el-icon-time"></i> -->
{{ formatDate(ikrm.ctime) }}</i
>
</span>
<a :href="mediaUrl + ikrm.file_url">
<i class="el-icon-download download"></i>
</a>
</div>
</div>
</div>
<div class="fi_new" v-if="item.file.picturesAndTables">
<p>
Figures
@@ -160,18 +253,21 @@
@click="changeFileUpdown(0, ikgn, 'file_figer')"
></b>
</p>
<div>
<div v-for="(ikrm, ikrmIndex) in item.file.picturesAndTables" v-if="item.file_figer == 1">
<img src="../../assets/img/icon_0.png" />
<span>
<font>Uploader {{ ikrmIndex+1 }} </font>
<span @click="openFile(mediaUrl + ikrm.file_url)" class="openFile">
<!-- <font>Uploader {{ ikrmIndex+1 }} </font> -->
<!-- {{ ikrm.username }} -->
<i><i class="el-icon-time"></i>{{ formatDate(ikrm.ctime) }}</i>
<i> <!-- <i class="el-icon-time"></i> -->{{ formatDate(ikrm.ctime) }}</i>
</span>
<a :href="mediaUrl + ikrm.file_url">
<i class="el-icon-download download"></i>
</a>
</div>
</div>
</div>
<div class="fi_new" v-if="item.file.totalpage">
<p>
Title page
@@ -187,18 +283,21 @@
@click="changeFileUpdown(0, ikgn, 'file_total')"
></b>
</p>
<div>
<div v-for="(ikrm, ikrmIndex) in item.file.totalpage" v-if="item.file_total == 1">
<img src="../../assets/img/icon_0.png" />
<span>
<font>Uploader {{ikrmIndex}} </font>
<span @click="openFile(mediaUrl + ikrm.file_url)" class="openFile">
<!-- <font>Uploader {{ikrmIndex}} </font> -->
<!-- {{ ikrm.username }} -->
<i><i class="el-icon-time"></i>{{ formatDate(ikrm.ctime) }}</i>
<i> <!-- <i class="el-icon-time"></i> -->{{ formatDate(ikrm.ctime) }}</i>
</span>
<a :href="mediaUrl + ikrm.file_url">
<i class="el-icon-download download"></i>
</a>
</div>
</div>
</div>
<div class="fi_new" v-if="item.file.manuscirpt">
<p>
Manuscirpt
@@ -214,19 +313,21 @@
@click="changeFileUpdown(0, ikgn, 'file_maun')"
></b>
</p>
<div>
<div v-for="(ikrm, ikrmIndex) in item.file.manuscirpt" v-if="item.file_maun == 1">
<img src="../../assets/img/icon_0.png" />
<span>
<font>Uploader {{ ikrmIndex+1 }} </font>
<span @click="openFile(mediaUrl + ikrm.file_url)" class="openFile">
<!-- <font>Uploader {{ ikrmIndex+1 }} </font> -->
<!-- {{ ikrm.username }} -->
<i><i class="el-icon-time"></i>{{ formatDate(ikrm.ctime) }}</i>
<i> <!-- <i class="el-icon-time"></i> -->{{ formatDate(ikrm.ctime) }}</i>
</span>
<a :href="mediaUrl + ikrm.file_url">
<i class="el-icon-download download"></i>
</a>
</div>
</div>
</div>
<div class="fi_new" v-if="item.file.supplementary">
<p>
Supplementary Material
@@ -242,12 +343,13 @@
@click="changeFileUpdown(0, ikgn, 'file_supper')"
></b>
</p>
<div>
<div v-for="(ikrm, ikrmIndex) in item.file.supplementary" v-if="item.file_supper == 1">
<img src="../../assets/img/icon_0.png" />
<span>
<font>Uploader {{ ikrmIndex+1 }} </font>
<span @click="openFile(mediaUrl + ikrm.file_url)" class="openFile">
<!-- <font>Uploader {{ ikrmIndex+1 }} </font> -->
<!-- { ikrm.username }} -->
<i><i class="el-icon-time"></i>{{ formatDate(ikrm.ctime) }}</i>
<i> <!-- <i class="el-icon-time"></i> -->{{ formatDate(ikrm.ctime) }}</i>
</span>
<a :href="mediaUrl + ikrm.file_url">
<i class="el-icon-download download"></i>
@@ -255,10 +357,19 @@
</div>
</div>
</div>
<div style="width: 1%"></div>
<div class="fixCard" style="width: 36%">
</div>
<div
class="fixCard"
:style="`width: ${
item.state == 0 ? 'calc(100% - 350px - 230px - 18px)' : 'calc(100% - 350px - 230px - 18px)'
}`"
>
<b style="font-size: 16px; letter-spacing: -0.5px">AI scoring</b>
<p style="font-size: 18px; font-weight: bold; margin-bottom: 5px; color: #db890e" v-if="item.reportList.length > 0">
<p
style="font-size: 18px; font-weight: bold; margin-bottom: 5px; color: #db890e"
v-if="item.reportList.length > 0"
>
<font style="font-size: 14px; font-weight: normal; color: #333">Initial review score :</font>
{{ item.scoring }}
<i class="el-icon-refresh refreshBtn" @click="refreshScore(item)"></i>
@@ -353,18 +464,21 @@
</p>
</div>
<template v-if="query.state != 0">
<div style="width: 1%"></div>
<div class="fixCard" style="width: 17%">
<div class="fixCard" style="width: 230px; flex-shrink: 0">
<b style="font-size: 16px; letter-spacing: -0.5px">Reviewer Decision</b>
<p style="height: 5px"></p>
<p v-for="(iken, index) in item.reviewScore" style="line-height: 28px" :key="index">
Reviewer{{ index + 1 }} score : <b style="color: #db890e; font-size: 18px">{{ iken.rated }}</b
><el-button style="margin-left: 10px" type="text" @click="crateRevision(iken)" v-if="iken.can_repeat == 1"
<p v-for="(iken, index) in item.reviewScore" style="line-height: 24px" :key="index">
Reviewer{{ index + 1 }} : <b style="color: #db890e; font-size: 18px">{{ iken.rated }}</b
><el-button
style="margin-left: 10px"
type="text"
@click="crateRevision(iken)"
v-if="iken.can_repeat == 1"
>Re-review</el-button
>
</p>
<p v-if="item.reviewScore.length > 0" style="font-size: 15px; margin: 0 0 5px 0">
Average : <b style="font-size: 18px; color: #db890e">{{ avegeCount(item.reviewScore) }}</b>
Average score: <b style="font-size: 18px; color: #db890e">{{ avegeCount(item.reviewScore) }}</b>
</p>
<p>
<span v-for="(iken, index) in item.review" style="display: inline-block; padding: 5px">
@@ -375,12 +489,24 @@
</font>
<font
v-if="iken.state == 1 || iken.state == 3"
style="width: 12px; height: 12px; display: block; border-radius: 10px; background-color: #67c23a"
style="
width: 12px;
height: 12px;
display: block;
border-radius: 10px;
background-color: #67c23a;
"
>
</font>
<font
v-if="iken.state == 2"
style="width: 12px; height: 12px; display: block; border-radius: 10px; background-color: #f56c6c"
style="
width: 12px;
height: 12px;
display: block;
border-radius: 10px;
background-color: #f56c6c;
"
>
</font>
</span>
@@ -393,8 +519,37 @@
</div></template
>
<div style="width: 1%"></div>
<div class="fixCard" style="width: 26%">
<!-- <div class="fixCard" style="width: 320px; flex-shrink: 0" v-if="query.state == 0">
<b style="font-size: 16px; letter-spacing: -0.5px">Research areas</b>
<p style="height: 10px"></p>
<div style="text-align: left">
<div
@click="BoxMajor(item, majorData[item.article_id])"
v-if="item.article_id"
style="display: flex; align-items: center; justify-content: space-between; cursor: pointer"
>
<div>
<div v-if="majorData[item.article_id]" class="majorDataBox">
<p v-for="(v, i) in majorData[item.article_id]" style="border-top: 1px solid #b3d8ff">
<span style="font-weight: bold">{{ i + 1 }}.</span>
<span style="color:#666"> {{ v.str.replace('Medicine >', '').trim() }}</span>
</p>
</div>
<div v-else>
<span>Loading...</span>
</div>
</div>
<b style="margin-left: 10px; color: #006699" class="el-icon-edit"></b>
</div>
</div>
</div> -->
<div class="fixCard" style="width: 320px; flex-shrink: 0">
<b style="font-size: 16px; letter-spacing: -0.5px">Corresponding Author</b>
<p style="height: 10px"></p>
<div style="text-align: left">
@@ -404,10 +559,9 @@
<span v-if="item.phone != ''" style="margin-left: 5px; color: #666">({{ item.phone }})</span>
</p>
<p v-if="item.email != ''" style="margin: 8px 0 5px 0; line-height: 22px">
<b @click="linkEmail(item)" class="btnCliArt" style="">
<font style="color: #999">Email :</font>
{{ item.email }}
<b @click="linkEmail(item)" class="btnCliArt" style="margin-left: 15px">
<i class="el-icon-message"></i> Email
</b>
<b @click="linkEmailist(item)" v-if="item.emailh == 1" class="btnCliArt" style="margin-left: 15px">
<i class="el-icon-refresh-left"></i> History
@@ -415,7 +569,9 @@
</p>
</div>
<p style="margin-top: 20px">
<b @click="articleCommun(item)" class="btnCliArt"> <i class="el-icon-chat-line-square"></i> Communication </b>
<b @click="articleCommun(item)" class="btnCliArt">
<i class="el-icon-chat-line-square"></i> Communication
</b>
</p>
</div>
</div>
@@ -427,6 +583,7 @@
</div>
</div>
</div>
</div>
<!-- 预接收表 -->
<el-table
v-if="PreAcpVisible"
@@ -795,8 +952,8 @@
<p style="line-height: 20px; margin-top: 6px">{{ remark.title }}</p>
</el-form-item>
<el-form-item label="Content :">
<commonRemarkList :list="remark.contentList" @load="(e) => (this.remark.contentList = e)"></commonRemarkList>
<!-- <el-input type="textarea" rows="5" v-model="remark.content" ></el-input> -->
<!-- <commonRemarkList :list="remark.contentList" @load="(e) => (this.remark.contentList = e)"></commonRemarkList> -->
<el-input type="textarea" rows="5" v-model="remark.content" ></el-input>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
@@ -1200,6 +1357,29 @@
<el-button type="primary" @click="isShowAI = false">Close</el-button>
</span>
</el-dialog>
<el-dialog :title="majorMes.disabled ? 'Research areas' : 'Edit Research areas'" :visible.sync="majorBox" width="800px">
<el-form ref="remark" :model="majorMes" label-width="120px">
<el-form-item label="Title :">
<p style="line-height: 20px">
<span style="color: #333; font-weight: bold">{{ majorMes.title }}</span>
</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
:disabled="majorMes.disabled"
:list="majorValueList"
@load="(e) => (this.majorValueList = e)"
></common-major-list>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="majorBox = false">Cancel</el-button>
<el-button type="primary" @click="saveMajor" v-if="!majorMes.disabled">Save</el-button>
</span>
</el-dialog>
</div>
</template>
@@ -1215,6 +1395,9 @@ export default {
props: ['journals'],
data() {
return {
majorValueList: [],
majorBox: false,
majorMes: {},
isShowAI: false,
currentArticleData: {},
rules: {},
@@ -1363,6 +1546,7 @@ export default {
}
],
bankVisible: false,
majorData: {},
googleSearchInfo: ''
};
},
@@ -1375,6 +1559,58 @@ export default {
}
},
methods: {
async fetchMajorData(article_id) {
// if (!this.majorData[userId]) {
// 判断是否已经加载过该用户的数据
const data = await this.getMajorData(article_id); // 获取数据
this.$set(this.majorData, article_id, data); // 使用 Vue.set 确保数据是响应式的
// }
},
// 修改标记
async getMajorData(article_id) {
try {
const res = await this.$api.post('api/Article/getArticleDetail', { articleId: article_id, human: 'editor' });
if (res.article&&res.article.majors.length>0) {
return res.article.majors; // 返回数据
} else {
return []; // 如果没有数据,返回空数组
}
} catch (error) {
console.error('Error fetching data:', error);
return []; // 如果发生错误,返回空数组
}
},
BoxMajor(e, data) {
this.majorMes.disabled = e.state == 0 ? false : true;
// this.majorMes.realname = e.realname;
// this.majorMes.user_id = e.user_id;
this.majorMes.title = e.title;
this.$api
.post('api/Article/getArticleDetail', {
articleId: e.article_id,
human: 'editor'
})
.then((res) => {
if (this.majorMes.disabled) {
this.majorValueList = [...res.article.majors];
} else {
this.majorValueList = [...res.article.majors].map((item) => ({
selectedValue: Array.isArray(item.major)
? item.major
: typeof item.major === 'string'
? item.major.split(',').map(Number)
: [item.major]
}));
}
this.majorBox = true;
});
},
openFile(url) {
window.open(url, '_blank');
},
openAI(data) {
this.isShowAI = true;
this.currentArticleData = { ...data };
@@ -1579,6 +1815,10 @@ export default {
this.Total = res.total;
this.tableData = res.data;
for (let i = 0; i < this.tableData.length; i++) {
// if (this.query.state == 0) {
// this.fetchMajorData(this.tableData[i].article_id); // 加载第一个用户的数据
// }
this.tableData[i].file_cover = 1;
this.tableData[i].file_figer = 1;
this.tableData[i].file_total = 1;
@@ -1948,13 +2188,14 @@ export default {
this.editbox = true;
this.remark.title = e.title;
this.remark.articleId = e.article_id;
this.remark.content = e.remarks;
// var remarksList = e.remarks.split(/。|\n|\r\n/);
var remarksList = e.remarks.split('');
this.remark.contentList = remarksList
.filter((item) => item.trim() !== '') // 过滤空内容
.map((item) => {
return { text: item + '' }; // 补回句号,或根据需要自定义
});
// var remarksList = e.remarks.split('');
// this.remark.contentList = remarksList
// .filter((item) => item.trim() !== '') // 过滤空内容
// .map((item) => {
// return { text: item + '' }; // 补回句号,或根据需要自定义
// });
},
// 查重弹出框
changeRepe(e) {
@@ -2530,14 +2771,22 @@ export default {
.mangu_list {
color: #333;
margin: 0 0 20px 0;
margin: 0 0 35px 0;
font-size: 14px;
padding: 10px 20px;
border-radius: 5px;
border-bottom-right-radius: 8px;
border-bottom-left-radius: 8px;
/* border-radius: 5px; */
border: 1px solid #ebeef5;
/* border: 1px solid #0077b8e6; */
background-color: #fff;
position: relative;
}
.mangu_list:hover {
border: 1px solid #0077b8e6;
}
.mangu_list:nth-child(2n + 1) {
background-color: #fafafa;
@@ -2553,7 +2802,7 @@ export default {
}
.mangu_list .man_title {
margin: 2px 100px 20px 0;
margin: 2px 40px 10px 0;
font-weight: bolder;
letter-spacing: -0.5px;
font-size: 16px;
@@ -2567,8 +2816,10 @@ export default {
}
.mangu_list div.fi_new {
margin: 0 0 0 10px;
margin-bottom: 10px;
display: flex;
align-items: center;
margin: 0 0 0 00px;
margin-bottom: 1px;
text-align: left;
}
@@ -2576,48 +2827,48 @@ export default {
margin-bottom: 5px;
}
.mangu_list div.fi_new > div {
.mangu_list div.fi_new div > div {
color: #333;
display: block;
margin: 0 0 5px 0;
margin: 5px 0 0px 5px;
line-height: 22px;
}
.mangu_list div.fi_new > div > img {
.mangu_list div.fi_new div > div > img {
width: 15px;
vertical-align: text-bottom;
margin: 0 5px 0 0;
}
.mangu_list div.fi_new > div > span > font {
.mangu_list div.fi_new div > div > span > font {
color: #888;
margin: 0 5px 0 0;
font-size: 13px;
letter-spacing: -1px;
}
.mangu_list div.fi_new > div > span > i {
.mangu_list div.fi_new div > div > span > i {
font-size: 12px;
color: #888;
margin: 0 0 0 3px;
font-style: normal;
}
.mangu_list div.fi_new > div > span > i > i {
.mangu_list div.fi_new div > div > span > i > i {
margin-right: 5px;
}
.mangu_list div.fi_new > div > a {
.mangu_list div.fi_new div > div > a {
margin: 0 5px 0 0;
}
.mangu_list div.fi_new .download {
font-weight: bold;
color: #75abf1;
margin: 0 0 0 10px;
margin: 0 0 0 4px;
}
.mangu_list div.fi_new > div > a:hover .download {
.mangu_list div.fi_new div > div > a:hover .download {
color: #006699;
}
@@ -2636,7 +2887,12 @@ export default {
.mangu_list .fixCard {
text-align: center;
background: #0066990d;
padding: 14px 20px;
padding: 14px 10px;
margin-left: 6px;
box-sizing: border-box;
}
.mangu_list .fixCard:nth-child(1) {
margin-left: 0px;
}
.gugeList {
@@ -2808,4 +3064,38 @@ export default {
transform: translateY(-4px);
box-shadow: 0 12px 30px rgba(0, 0, 0, 0.15);
}
.openFile {
cursor: pointer;
}
.openFile :hover i {
color: #333 !important;
}
.articleBaseInfo {
text-align: left !important;
line-height: 28px;
color: #333;
}
.articleTopBaseInfo {
color: #fff;
padding: 0 10px;
font-size: 14px;
}
.articleBaseInfo .labelTitle {
color: #333;
font-weight: bold;
}
.articleTopBaseInfo .labelTitle {
color: #fff !important;
font-size: 16px;
}
.articleListEditorA .el-button--mini,
.el-button--mini.is-round {
padding: 6px 10px;
}
.majorDataBox p:nth-child(1) {
border-top: none !important;
}
.mangu_list div.fi_new div > div:nth-child(1) {
margin-top: 0px;
}
</style>

View File

@@ -3,61 +3,136 @@
<div class="crumbs">
<el-breadcrumb separator="/">
<el-breadcrumb-item> <i class="el-icon-lx-calendar"></i> Manuscript reviewer list </el-breadcrumb-item>
<el-breadcrumb-item>
<div>
<span>ID:{{ articleBaseInfo.accept_sn }} </span>
</div>
</el-breadcrumb-item>
</el-breadcrumb>
</div>
<div class="container">
<div class="handle-box">
<div>
<el-button type="primary" icon="el-icon-plus" @click="openAddRev">Reviewer Bank</el-button>
<el-button type="primary" icon="el-icon-plus" @click="openSuggRev">Reviewers Suggested By Author
({{tableSuggest.length}})</el-button>
<el-button
:type="tableSuggest.length > 0 ? 'primary' : 'info'"
:plain="tableSuggest.length == 0"
:disabled="tableSuggest.length == 0"
icon="el-icon-plus"
@click="tableSuggest.length > 0 ? openSuggRev() : ''"
>Reviewers Suggested By Author ({{ tableSuggest.length }})</el-button
>
</div>
<!-- <el-button type="primary" icon="el-icon-circle-plus-outline" @click="editVisible1 = true">Supplement</el-button> -->
</div>
<el-table :data="tableData" border stripe class="table" ref="multipleTable"
header-cell-class-name="table-header" empty-text="New messages (0)">
<el-table
:data="tableData"
stripe
size="mini"
class="table"
ref="multipleTable"
header-cell-class-name="table-header"
empty-text="New messages (0)"
>
<el-table-column type="index" label="No." align="center" width="50"></el-table-column>
<el-table-column label="Base Information" width="280px">
<template slot-scope="scope">
<p class="tab_tie_col">
<span>Name: </span>
<el-badge is-dot :hidden="scope.row.reviewer_act == 1 ? false : true" class="item">
<b style="font-size: 15px; letter-spacing: -0.5px">{{ scope.row.reviewer }}</b>
</el-badge>
</p>
<p class="tab_tie_col">
<span>Realname: </span>
{{ scope.row.realname }}
</p>
<p class="tab_tie_col"><span>Country: </span>{{ scope.row.country }}</p>
<p class="tab_tie_col"><span>Email: </span>{{ scope.row.email }}</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>Company: </span>
{{ scope.row.company }}
</p>
</template>
</el-table-column>
<!-- <el-table-column prop="art_rev_id" label="ID" align="center" width="60"></el-table-column> -->
<el-table-column label="Reviewer" align="center" width="130">
<!-- <el-table-column label="Reviewer" align="center" width="130">
<template slot-scope="scope">
<el-badge is-dot :hidden="scope.row.reviewer_act == 1 ? false : true" class="item">
{{ scope.row.reviewer }}
</el-badge>
</template>
</el-table-column>
<el-table-column prop="country" label="Country" align="center" width="100"></el-table-column>
<el-table-column prop="email" label="Email" align="center"></el-table-column>
<el-table-column prop="company" label="Company" align="center"></el-table-column>
<el-table-column prop="major_str" label="Major"></el-table-column>
<el-table-column prop="field" label="Field"></el-table-column>
<el-table-column label="state" align="center" width="95">
</el-table-column> -->
<!-- <el-table-column prop="country" label="Country" align="center" width="100"></el-table-column> -->
<!-- <el-table-column prop="email" label="Email" align="center"></el-table-column> -->
<!-- <el-table-column prop="company" label="Company" align="center"></el-table-column> -->
<!-- <el-table-column prop="major_str" label="Major"></el-table-column> -->
<el-table-column label="Research areas" width="300">
<template slot-scope="scope">
{{revstate(scope.row)}}
<font style="color: #aaa;display: block;line-height: 18px;font-size: 13px;margin: 5px 0 0 0;">
{{formatDate(scope.row.ctime)}}</font>
<commonMajorTableList
:user_id="scope.row.reviewer_id"
:baseInfo="scope.row"
:key="scope.row.reviewer_id"
:disabled="true"
></commonMajorTableList>
</template>
</el-table-column>
<el-table-column label="" width="110" align="center">
<!-- <el-table-column prop="field" label="Field"></el-table-column> -->
<el-table-column label="State" align="center" width="120">
<template slot-scope="scope">
<el-button size="mini" type="primary" plain icon="el-icon-tickets"
@click="showdetail(scope.row)">Detail</el-button>
{{ revstate(scope.row) }}
<font
style="color: #aaa; display: block; line-height: 18px; font-size: 13px; margin: 5px 0 0 0"
v-html="formatDate(scope.row.ctime)"
>
</font>
</template>
</el-table-column>
<el-table-column label="" width="100" align="center">
<template slot-scope="scope">
<el-button size="mini" type="primary" plain icon="el-icon-tickets" @click="showdetail(scope.row)">Detail</el-button>
</template>
</el-table-column>
</el-table>
<div class="pagination">
<el-pagination background layout="total, prev, pager, next" :current-page="query.pageIndex"
:page-size="query.pageSize" :total="Total" @current-change="handlePageChange"></el-pagination>
<el-pagination
background
layout="total, prev, pager, next"
:current-page="query.pageIndex"
:page-size="query.pageSize"
:total="Total"
@current-change="handlePageChange"
></el-pagination>
</div>
</div>
<el-dialog title="Add Suggest Reviewer" :visible.sync="AddSuggest" width="800px">
<el-table :data="tableSuggest" border stripe class="table" ref="multipleTable"
header-cell-class-name="table-header" empty-text="New messages (0)">
<el-table
:data="tableSuggest"
border
stripe
class="table"
ref="multipleTable"
header-cell-class-name="table-header"
empty-text="New messages (0)"
>
<el-table-column prop="account" label="Email"></el-table-column>
<el-table-column prop="realname" label="Realname"></el-table-column>
<el-table-column prop="cmajor" label="Major"></el-table-column>
<el-table-column label="" width="120" align="center">
<template slot-scope="scope">
<el-button size="mini" type="primary" plain icon="el-icon-check" @click="selSuggest(scope.row)">
Select</el-button>
<el-button size="mini" type="primary" plain icon="el-icon-check" @click="selSuggest(scope.row)"> Select</el-button>
</template>
</el-table-column>
</el-table>
@@ -65,15 +140,21 @@
<el-button type="primary" @click="AddSuggest = false">Cancel</el-button>
</span>
</el-dialog>
<el-dialog title="add reviewer" :closeOnClickModal="false" :visible.sync="editVisible" width="80%"
v-loading="loading" element-loading-text="Loading..." element-loading-spinner="el-icon-loading"
element-loading-background="rgba(0, 0, 0, 0.8)">
<el-dialog
title="add reviewer"
:closeOnClickModal="false"
:visible.sync="editVisible"
width="80%"
v-loading="loading"
element-loading-text="Loading..."
element-loading-spinner="el-icon-loading"
element-loading-background="rgba(0, 0, 0, 0.8)"
>
<el-form ref="editform" :model="editform" label-width="100px">
<el-form-item label="state">
<el-select v-model="editform.uid" filterable @change="changereviewer()" placeholder="Please select">
<el-option :key="0" label="please select" :value="0"></el-option>
<el-option v-for="item in reviewerList" :key="item.user_id" :label="item.account"
:value="item.user_id"></el-option>
<el-option v-for="item in reviewerList" :key="item.user_id" :label="item.account" :value="item.user_id"></el-option>
</el-select>
</el-form-item>
<el-form-item label="Country" v-if="editform.uid != 0">
@@ -97,9 +178,15 @@
<el-button type="primary" @click="saveEdit">save</el-button>
</span>
</el-dialog>
<el-dialog title="Supplement" :visible.sync="editVisible1" width="40%" v-loading="loading"
element-loading-text="Loading..." element-loading-spinner="el-icon-loading"
element-loading-background="rgba(0, 0, 0, 0.8)">
<el-dialog
title="Supplement"
:visible.sync="editVisible1"
width="40%"
v-loading="loading"
element-loading-text="Loading..."
element-loading-spinner="el-icon-loading"
element-loading-background="rgba(0, 0, 0, 0.8)"
>
<el-form :model="questionform" ref="question" label-width="300px" label-position="top">
<el-divider content-position="center">REFEREE'S ASSESSMENT</el-divider>
<el-row :gutter="24">
@@ -163,12 +250,14 @@
</el-radio-group>
</el-col>
<el-col :span="12">
<el-collapse-item name="1" style="margin-top: -10px;">
<template slot="title">
<i class="el-icon-edit"></i>Comments/ Suggestions
</template>
<el-input type="textarea" placeholder="please input content"
v-model="questionform.qu9contents" :rows="4"></el-input>
<el-collapse-item name="1" style="margin-top: -10px">
<template slot="title"> <i class="el-icon-edit"></i>Comments/ Suggestions </template>
<el-input
type="textarea"
placeholder="please input content"
v-model="questionform.qu9contents"
:rows="4"
></el-input>
</el-collapse-item>
</el-col>
</el-form-item>
@@ -176,7 +265,6 @@
</el-col>
</el-row>
<el-collapse>
<el-form-item label="7.Is the Abstract accurate and concise?">
<el-col :span="4">
@@ -186,12 +274,14 @@
</el-radio-group>
</el-col>
<el-col :span="20">
<el-collapse-item name="2" style="margin-top: -10px;">
<template slot="title">
<i class="el-icon-edit"></i>Comments/ Suggestions
</template>
<el-input type="textarea" placeholder="please input content"
v-model="questionform.qu10contents" :rows="4"></el-input>
<el-collapse-item name="2" style="margin-top: -10px">
<template slot="title"> <i class="el-icon-edit"></i>Comments/ Suggestions </template>
<el-input
type="textarea"
placeholder="please input content"
v-model="questionform.qu10contents"
:rows="4"
></el-input>
</el-collapse-item>
</el-col>
</el-form-item>
@@ -203,12 +293,14 @@
</el-radio-group>
</el-col>
<el-col :span="20">
<el-collapse-item name="3" style="margin-top: -10px;">
<template slot="title">
<i class="el-icon-edit"></i>Comments/ Suggestions
</template>
<el-input type="textarea" placeholder="please input content"
v-model="questionform.qu11contents" :rows="4"></el-input>
<el-collapse-item name="3" style="margin-top: -10px">
<template slot="title"> <i class="el-icon-edit"></i>Comments/ Suggestions </template>
<el-input
type="textarea"
placeholder="please input content"
v-model="questionform.qu11contents"
:rows="4"
></el-input>
</el-collapse-item>
</el-col>
</el-form-item>
@@ -220,12 +312,14 @@
</el-radio-group>
</el-col>
<el-col :span="20">
<el-collapse-item name="4" style="margin-top: -10px;">
<template slot="title">
<i class="el-icon-edit"></i>Comments/ Suggestions
</template>
<el-input type="textarea" placeholder="please input content"
v-model="questionform.qu12contents" :rows="4"></el-input>
<el-collapse-item name="4" style="margin-top: -10px">
<template slot="title"> <i class="el-icon-edit"></i>Comments/ Suggestions </template>
<el-input
type="textarea"
placeholder="please input content"
v-model="questionform.qu12contents"
:rows="4"
></el-input>
</el-collapse-item>
</el-col>
</el-form-item>
@@ -237,12 +331,14 @@
</el-radio-group>
</el-col>
<el-col :span="20">
<el-collapse-item name="5" style="margin-top: -10px;">
<template slot="title">
<i class="el-icon-edit"></i>Comments/ Suggestions
</template>
<el-input type="textarea" placeholder="please input content"
v-model="questionform.qu13contents" :rows="4"></el-input>
<el-collapse-item name="5" style="margin-top: -10px">
<template slot="title"> <i class="el-icon-edit"></i>Comments/ Suggestions </template>
<el-input
type="textarea"
placeholder="please input content"
v-model="questionform.qu13contents"
:rows="4"
></el-input>
</el-collapse-item>
</el-col>
</el-form-item>
@@ -263,10 +359,10 @@
<el-radio-button label="9"></el-radio-button>
<el-radio-button label="10"></el-radio-button>
</el-radio-group>
<span style="margin-left: 20px;">>Your score:{{questionform.rated}}</span>
<span style="margin-left: 20px">>Your score:{{ questionform.rated }}</span>
</el-form-item>
<el-form-item label="REFEREE'S RECOMMENDATIONS" prop="recommend">
<el-radio-group v-model="questionform.recommend" style="line-height: 30px;">
<el-radio-group v-model="questionform.recommend" style="line-height: 30px">
<el-radio :label="1">Accept with minor revision</el-radio>
<br />
<el-radio :label="2">Accept with major revision</el-radio>
@@ -277,7 +373,7 @@
</el-radio-group>
</el-form-item>
<el-form-item label="OTHER SPECIFIC CRITICISMS">
<el-radio-group v-model="questionform.other" style="line-height: 30px;">
<el-radio-group v-model="questionform.other" style="line-height: 30px">
<el-radio :label="1">Imperfect style</el-radio>
<br />
<el-radio :label="2">Too long</el-radio>
@@ -288,25 +384,22 @@
</el-radio-group>
</el-form-item>
<el-form-item label="Comments for the Authors">
<el-input type="textarea" placeholder="please input content" v-model="questionform.comment"
:rows="8"></el-input>
<el-input type="textarea" placeholder="please input content" v-model="questionform.comment" :rows="8"></el-input>
</el-form-item>
<el-form-item label="Confidential Comments to the Editor">
<el-input type="textarea" placeholder="please input content" v-model="questionform.confident"
:rows="8"></el-input>
<el-input type="textarea" placeholder="please input content" v-model="questionform.confident" :rows="8"></el-input>
</el-form-item>
<el-form-item label="Please choose disclose your name or remain anonymous.">
<el-radio-group v-model="questionform.is_anonymous" style="line-height: 30px;">
<el-radio-group v-model="questionform.is_anonymous" style="line-height: 30px">
<el-radio :label="0">Disclose name</el-radio>
<br />
<el-radio :label="1">Remain anonymous</el-radio>
</el-radio-group>
<p style="line-height: 20px;color: #aaa;font-size: 13px;margin: 12px 0 0 0;">
If you agree to disclose your name, we will acknowledge you by name in the published
PDF. However, if you prefer to remain anonymous, we will still express our gratitude
by thanking you as an anonymous reviewer.
<br />For example, {{txt_mess.title}} would like to thank AAAAAAAA, BBBBBBBB, and other anonymous reviewers for their
invaluable contributions to the peer review process of this paper.
<p style="line-height: 20px; color: #aaa; font-size: 13px; margin: 12px 0 0 0">
If you agree to disclose your name, we will acknowledge you by name in the published PDF. However, if you prefer
to remain anonymous, we will still express our gratitude by thanking you as an anonymous reviewer.
<br />For example, {{ txt_mess.title }} would like to thank AAAAAAAA, BBBBBBBB, and other anonymous reviewers
for their invaluable contributions to the peer review process of this paper.
</p>
</el-form-item>
<el-form-item>
@@ -319,10 +412,16 @@
</template>
<script>
import commonMajorTableList from '../page/components/major/tableList.vue';
export default {
components: {
commonMajorTableList
},
data() {
return {
majorData: [],
baseUrl: this.Common.baseUrl,
articleBaseInfo: {},
questionform: {
uid: 0,
articleId: this.$route.query.id,
@@ -390,6 +489,7 @@
};
},
created() {
this.initArticle();
this.getdate();
this.initreviewerList();
},
@@ -399,6 +499,17 @@
}
},
methods: {
initArticle() {
this.$api
.post('api/Article/getArticleDetail', {
articleId: this.query.article_id,
human: 'editor'
})
.then((res) => {
this.articleBaseInfo = res.article;
});
},
// 获取编辑列表数据
getdate() {
this.$api
@@ -475,11 +586,12 @@
addArtRev() {
if (this.questionform.uid == 0) {
this.$message.error('Please select a reviewer');
} else if (this.questionform.is_anonymous == "" && this.questionform.is_anonymous != "0") {
} else if (this.questionform.is_anonymous == '' && this.questionform.is_anonymous != '0') {
this.$message.error('Please choose disclose your name or remain anonymous.');
} else {
this.loading = true;
this.$api.post('api/Article/addArtRev', this.questionform)
this.$api
.post('api/Article/addArtRev', this.questionform)
.then((res) => {
this.loading = false;
if (res.code == 0) {
@@ -496,7 +608,7 @@
},
// 添加推荐审稿人
openSuggRev() {
this.AddSuggest = true
this.AddSuggest = true;
},
selSuggest(e) {
this.loading = true;
@@ -509,7 +621,7 @@
this.loading = false;
if (res.code == 0) {
this.$message.success('Add Success');
this.AddSuggest = false
this.AddSuggest = false;
this.getdate();
} else {
this.$message.error('Add Error');
@@ -596,14 +708,29 @@
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 + ' ' + h + ':' + m + ':' + s;
},
return Y + M + D + '<br/>' + h + ':' + m + ':' + s;
}
}
};
</script>
<style scoped>
.container {
padding: 10px;
}
.reviewerListBox {
color: rgba(0, 119, 184, 1);
font-size: 14px;
font-weight: bold;
cursor: pointer;
}
.reviewerListBox .labelTitle {
color: rgba(0, 119, 184, 1);
}
.handle-box {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 20px;
}
@@ -651,4 +778,16 @@
.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;
}
</style>

View File

@@ -1,6 +1,9 @@
<template>
<div class="block commonMajor" style="width: 100%;overflow: hidden;">
<el-button type="primary" plain size="mini" @click="handleAdd" style="float:right;margin-bottom: 20px;"><i class="el-icon-plus" ></i>Add Field </el-button>
<div class="block commonMajor" style="width: 100%; overflow: hidden">
<div v-if="!disabled">
<el-button type="primary" plain size="mini" @click="handleAdd" style="float: right; margin-bottom: 20px"
><i class="el-icon-plus"></i>Add Field
</el-button>
<div
v-for="(field, index) in fields"
:key="index"
@@ -20,8 +23,32 @@
></el-cascader>
<!-- Delete button -->
<el-button size="mini" type="danger" style="margin-left: 10px;" @click="handleDelete(index)"><i class="el-icon-delete"></i></el-button>
<el-button size="mini" type="danger" style="margin-left: 10px" @click="handleDelete(index)"
><i class="el-icon-delete"></i
></el-button>
</div>
</div>
<div v-else>
<div
v-for="(field, index) in fields"
:key="index"
class="cascader-container"
style="display: flex; align-items: center; justify-content: space-between"
>
<span style="margin-right: 10px; font-size: 12px; color: #006699; font-weight: bold">Field {{ Number(index + 1) }} :</span>
<div style="width: calc(100% - 60px)">
{{field.str.replace('Medicine >', '').trim() }}
</div>
</div>
</div>
<!-- <el-dialog title="Add Field " :visible.sync="coreVisible1" width="780px" :close-on-click-modal="false">
<el-form :model="coreForm1" :rules="rules1" ref="core_Form1" label-width="140px" >
<el-form-item prop="major">
@@ -53,17 +80,19 @@ export default {
list: {
type: Array,
default: []
},
disabled: {
type: Boolean,
default: false
}
},
watch: {
list: {
handler(e) {
this.fields=this.list.length>0?[...this.list]:[{}]
this.fields = this.list.length > 0 ? [...this.list] : [{}];
},
immediate: true
},
}
},
data() {
return {
@@ -88,7 +117,7 @@ export default {
this.$refs[`cascader${i}`][0].dropDownVisible = false;
this.coreForm1.majorList = this.fields[i].selectedValue;
this.$emit('load',this.fields)
this.$emit('load', this.fields);
this.$forceUpdate();
});
@@ -112,7 +141,7 @@ this.coreForm1.majorList = this.fields[i].selectedValue;
this.$message.success('Personal information modified successfully!');
this.coreVisible1 = false;
// this.tipVisible = false;
this.$emit('load')
this.$emit('load');
} else {
this.$message.error(res.msg);
}
@@ -131,7 +160,7 @@ this.coreForm1.majorList = this.fields[i].selectedValue;
this.$nextTick(() => {
// this.fields=[]
this.fields.push({ selectedValue: [] }); // 添加一个新的字段
this.$emit('load',this.fields)
this.$emit('load', this.fields);
// this.coreVisible1 = true;
});
},
@@ -139,7 +168,7 @@ this.coreForm1.majorList = this.fields[i].selectedValue;
// 删除指定的 Cascader
handleDelete(index) {
this.fields.splice(index, 1); // 删除指定索引的字段
this.$emit('load',this.fields)
this.$emit('load', this.fields);
},
// 获取 Cascader 配置

View File

@@ -0,0 +1,147 @@
<template>
<div>
<div
@click="disabled?'':BoxMajor()"
v-if="user_id"
style="display: flex; align-items: center; justify-content: space-between;"
:style="{ cursor: disabled ? '' : 'pointer' }"
>
<!-- 使用 user_id 来获取用户的 majorData -->
<div>
<div v-if="!loading" class="majorDataBox">
<p v-for="(v, i) in majorData" 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>
<span>Loading...</span>
<!-- 如果数据还在加载显示 "Loading..." -->
</div>
</div>
<b style="margin-left: 10px; color: #006699" class="el-icon-edit" v-if="!disabled"></b>
</div>
<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>
</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">
<el-button @click="majorBox = false">Cancel</el-button>
<el-button type="primary" @click="saveMajor">Save</el-button>
</span>
</el-dialog>
<!-- 评级弹出框 -->
</div>
</template>
<script>
export default {
components: {},
props: ['user_id','baseInfo','disabled'],
data() {
return {
majorValueList: [],
majorData: [],
majorMes: {},
majorBox: false,
loading: false,
};
},
created() {
this.loading = true; // 开始加载数据
// this.initMajor()
},
mounted() {
this.fetchMajorData(this.user_id); // 加载第一个用户的数据
},
methods: {
BoxMajor() {
this.majorBox = true;
this.majorMes.realname = this.baseInfo.realname;
this.majorMes.user_id = this.baseInfo.user_id;
this.majorMes.email = this.baseInfo.email;
this.majorValueList = [...this.majorData].map((item) => ({
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]) {
// 判断是否已经加载过该用户的数据
this.majorData = await this.getMajorData(userId);
this.$forceUpdate()
// }
},
// 修改标记
async getMajorData(userId) {
try {
const res = await this.$api.post('api/Reviewer/getUserField', { user_id: userId });
this.loading = false; // 开始加载数据
if (res.status === 1) {
return res.data; // 返回数据
} else {
return []; // 如果没有数据,返回空数组
}
} catch (error) {
console.error('Error fetching data:', error);
return []; // 如果发生错误,返回空数组
}
},
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);
}
});
}
}
};
</script>
<style scoped>
.deteleBtn {
color: #ce1111;
margin-left: 18px;
}
.deteleBtn i {
font-weight: bold;
}
.deteleBtn:hover {
text-decoration: underline;
cursor: pointer;
}
.majorDataBox p:nth-child(1) {
border-top: none !important;
}
</style>

View File

@@ -208,27 +208,7 @@
</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"
>
<!-- 使用 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>
</div>
<div v-else>
<span>Loading...</span>
<!-- 如果数据还在加载显示 "Loading..." -->
</div>
</div>
<b style="margin-left: 10px; color: #006699" class="el-icon-edit"></b>
</div>
<commonMajorTableList :user_id="scope.row.user_id" :baseInfo="scope.row" :key="scope.row.user_id"></commonMajorTableList>
</template>
</el-table-column>
@@ -496,9 +476,11 @@
const currentYear = new Date().getFullYear();
var ReviewTime = `(${currentYear - 2}${currentYear})`;
import commonReviewer from '../page/components/reviewerList/add.vue';
import commonMajorTableList from '../page/components/major/tableList.vue';
export default {
components: {
commonReviewer
commonReviewer,
commonMajorTableList,
},
data() {
@@ -778,7 +760,7 @@ export default {
if (res.code == 0) {
this.tableData = res.data;
for (var i = 0; i < this.tableData.length; i++) {
this.fetchMajorData(this.tableData[i].user_id); // 加载第一个用户的数据
// this.fetchMajorData(this.tableData[i].user_id); // 加载第一个用户的数据
this.getScoreData(i, this.tableData[i].score);
}
this.link_Total = res.total || 0;