tijiao
This commit is contained in:
@@ -1886,6 +1886,10 @@
|
||||
margin: 0 -17px
|
||||
}
|
||||
|
||||
.state-select .el-scrollbar .el-select-dropdown__wrap {
|
||||
max-height: 400px !important;
|
||||
}
|
||||
|
||||
.el-dropdown-menu--small {
|
||||
padding: 6px 0
|
||||
}
|
||||
@@ -2558,6 +2562,7 @@
|
||||
max-height: 274px
|
||||
}
|
||||
|
||||
|
||||
.el-select-dropdown__list {
|
||||
list-style: none;
|
||||
padding: 6px 0;
|
||||
@@ -15836,4 +15841,4 @@
|
||||
|
||||
.el-drawer-fade-leave-active {
|
||||
animation: el-drawer-fade-in 225ms cubic-bezier(0, 0, .2, 1) 0s reverse
|
||||
}
|
||||
}
|
||||
BIN
src/assets/img/error.png
Normal file
BIN
src/assets/img/error.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.2 KiB |
@@ -73,10 +73,15 @@ export default {
|
||||
|
||||
|
||||
getJournalTypeName(value) {
|
||||
|
||||
var list = JSON.parse(localStorage.getItem('journalTypeDataAll'));
|
||||
|
||||
const type = list.find(item => item.value === value);
|
||||
if(list&&list.length>0){
|
||||
const type = list.find(item => item.value === value);
|
||||
return type ? type.name : 'OTHERS';
|
||||
}else{
|
||||
return ''
|
||||
}
|
||||
|
||||
|
||||
|
||||
},
|
||||
@@ -1197,9 +1202,8 @@ export default {
|
||||
// 遍历行
|
||||
table.forEach((row) => {
|
||||
tableHtml += `<tr>`;
|
||||
|
||||
// 遍历单元格
|
||||
row.forEach((cell) => {
|
||||
if(row&&row.length>0){
|
||||
row.forEach((cell) => {
|
||||
tableHtml += `
|
||||
<td
|
||||
colspan="${cell.colspan || 1}"
|
||||
@@ -1210,6 +1214,11 @@ export default {
|
||||
</td>
|
||||
`;
|
||||
});
|
||||
}else{
|
||||
tableHtml+=``
|
||||
}
|
||||
// 遍历单元格
|
||||
|
||||
|
||||
tableHtml += `</tr>`;
|
||||
});
|
||||
@@ -2100,70 +2109,41 @@ export default {
|
||||
|
||||
|
||||
|
||||
ed.ui.registry.addButton('myuppercase', {
|
||||
text: 'A', // 按钮文本
|
||||
|
||||
// 全部大写按钮(按钮文本:A)
|
||||
ed.ui.registry.addButton('myuppercase', {
|
||||
text: 'A', // 按钮文本(大写标识)
|
||||
onAction: function () {
|
||||
// 获取选中的文本(保留 HTML 格式,确保空格等内容不丢失)
|
||||
var selectedText = ed.selection.getContent({ format: 'html' });
|
||||
|
||||
onAction: function () {
|
||||
// 在选中的文本周围包裹 <blue> 标签
|
||||
var selectedText = ed.selection.getContent({ format: 'html' });
|
||||
// 校验:非空且仅含字母、数字、空格(可根据需求调整正则)
|
||||
// if (selectedText.trim() && /^[\s\w]+$/.test(selectedText)) {
|
||||
// 直接将选中的所有内容转为大写(无需正则,整体转换)
|
||||
var allUppercaseText = selectedText.toUpperCase();
|
||||
// 替换选中的文本
|
||||
ed.selection.setContent(allUppercaseText);
|
||||
// } else {
|
||||
// vueInstance.$message.error(vueInstance.$t('commonTable.selectWord'));
|
||||
// }
|
||||
}
|
||||
});
|
||||
|
||||
// 确保选中的文本是单个单词,包括空格
|
||||
if (selectedText.trim() && /^[\s\w]+$/.test(selectedText)) {
|
||||
// 使用正则将选中的文本中的第一个字母大写
|
||||
var capitalizedText = selectedText.replace(/(^|\s)([a-zA-Z])/g, function (match, p1, p2) {
|
||||
return p1 + p2.toUpperCase();
|
||||
});
|
||||
// 全部小写按钮(按钮文本:a)
|
||||
ed.ui.registry.addButton('myuppercasea', {
|
||||
text: 'a', // 按钮文本(小写标识)
|
||||
onAction: function () {
|
||||
var selectedText = ed.selection.getContent({ format: 'html' });
|
||||
|
||||
// 替换选中的文本,保持空格和其他内容
|
||||
ed.selection.setContent(capitalizedText);
|
||||
} else {
|
||||
vueInstance.$message.error(vueInstance.$t('commonTable.selectWord'));
|
||||
|
||||
}
|
||||
}
|
||||
});
|
||||
ed.ui.registry.addButton('myuppercase', {
|
||||
text: 'A', // 按钮文本
|
||||
|
||||
onAction: function () {
|
||||
// 在选中的文本周围包裹 <blue> 标签
|
||||
var selectedText = ed.selection.getContent({ format: 'html' });
|
||||
|
||||
// 确保选中的文本是单个单词,包括空格
|
||||
if (selectedText.trim() && /^[\s\w]+$/.test(selectedText)) {
|
||||
// 使用正则将选中的文本中的第一个字母大写
|
||||
var capitalizedText = selectedText.replace(/(^|\s)([a-zA-Z])/g, function (match, p1, p2) {
|
||||
return p1 + p2.toUpperCase();
|
||||
});
|
||||
|
||||
// 替换选中的文本,保持空格和其他内容
|
||||
ed.selection.setContent(capitalizedText);
|
||||
} else {
|
||||
vueInstance.$message.error(vueInstance.$t('commonTable.selectWord'));
|
||||
|
||||
}
|
||||
}
|
||||
});
|
||||
ed.ui.registry.addButton('myuppercasea', {
|
||||
text: 'a', // 按钮文本(小写字母)
|
||||
onAction: function () {
|
||||
// 获取选中的文本,保留 HTML 格式
|
||||
var selectedText = ed.selection.getContent({ format: 'html' });
|
||||
|
||||
// 确保选中的文本是单个有效的单词,包括空格
|
||||
if (selectedText.trim() && /^[\s\w]+$/.test(selectedText)) {
|
||||
// 使用正则将选中的文本中的第一个字母转换为小写
|
||||
var lowercasedText = selectedText.replace(/(^|\s)([a-zA-Z])/g, function (match, p1, p2) {
|
||||
return p1 + p2.toLowerCase();
|
||||
});
|
||||
|
||||
// 替换选中的文本,保持空格和其他内容
|
||||
ed.selection.setContent(lowercasedText);
|
||||
} else {
|
||||
vueInstance.$message.error(vueInstance.$t('commonTable.selectWord'));
|
||||
}
|
||||
}
|
||||
});
|
||||
// if (selectedText.trim() && /^[\s\w]+$/.test(selectedText)) {
|
||||
// 直接将选中的所有内容转为小写(整体转换)
|
||||
var allLowercaseText = selectedText.toLowerCase();
|
||||
ed.selection.setContent(allLowercaseText);
|
||||
// } else {
|
||||
// vueInstance.$message.error(vueInstance.$t('commonTable.selectWord'));
|
||||
// }
|
||||
}
|
||||
});
|
||||
ed.ui.registry.addButton('Line', {
|
||||
text: '–', // 按钮文本
|
||||
onAction: function () {
|
||||
|
||||
@@ -26,7 +26,7 @@ function debounce(func, wait = 500, immediate = false) {
|
||||
}
|
||||
}
|
||||
function throttle(fn, delay = 1000, immediate = false) {
|
||||
console.log("进入节流对象")
|
||||
|
||||
let timer
|
||||
let status = false // 是否为重复点击状态
|
||||
return function () {
|
||||
|
||||
@@ -67,7 +67,7 @@ export default {
|
||||
vTags
|
||||
},
|
||||
created() {
|
||||
console.log('route at line 38:', this.$route)
|
||||
|
||||
bus.$on('collapse-content', (msg) => {
|
||||
this.collapse = msg;
|
||||
localStorage.setItem('collapse', this.collapse);
|
||||
|
||||
@@ -71,9 +71,9 @@
|
||||
<!-- <el-menu-item index="editorial">
|
||||
{{ $t('sidebar.edit_oria1') }}
|
||||
</el-menu-item> -->
|
||||
<el-menu-item index="edithistory">
|
||||
<!-- <el-menu-item index="edithistory">
|
||||
{{ $t('sidebar.edit_oria2') }}
|
||||
</el-menu-item>
|
||||
</el-menu-item> -->
|
||||
<el-menu-item index="editPeerewer">
|
||||
{{ $t('sidebar.edit_ewer1') }}
|
||||
</el-menu-item>
|
||||
|
||||
@@ -1,50 +1,56 @@
|
||||
<template>
|
||||
<div>
|
||||
<div class="commonCvList">
|
||||
<!-- 个人简历弹出框 -->
|
||||
<p style="margin: 0 0 25px 28px; font-size: 18px">CV. List</p>
|
||||
<p style="color: #aaa; margin: 0 0 30px 28px" v-if="cvitaTable.length == 0">No data</p>
|
||||
<div v-for="(item, index) in cvitaTable" style="margin: 0 0 0 30px">
|
||||
{{ index + 1 }}.
|
||||
<img src="../../assets/img/icon_0.png" alt="" class="icon_img" style="vertical-align: middle; margin-left: 10px" />
|
||||
<span style="margin-left: 20px; color: #888; font-size: 13px">
|
||||
<i class="el-icon-paperclip"></i>
|
||||
{{ formatDate(item.ctime) }}
|
||||
</span>
|
||||
<a :href="mediaUrl + 'reviewer/' + item.cv" target="_blank" class="txt_pdf">
|
||||
<i class="el-icon-download"></i>
|
||||
</a>
|
||||
<i
|
||||
class="el-icon-delete"
|
||||
@click="deletCVita(item)"
|
||||
style="color: #f12424; cursor: pointer; font-weight: bold; margin: 0 0 0 15px"
|
||||
></i>
|
||||
|
||||
|
||||
<p style="color: #aaa; margin: 0 0 0px 0px" v-if="cvitaTable1 && cvitaTable1.length == 0">No data</p>
|
||||
|
||||
|
||||
<div style="margin: 0 0 0 0px">
|
||||
<div v-for="(item, index) in cvitaTable1" style="height: 30px;">
|
||||
<span style="color: #888;">{{ index + 1 }}.</span>
|
||||
<img src="../../assets/img/icon_0.png" alt="" class="icon_img" style="vertical-align: middle; margin-left: 10px" />
|
||||
<span style="margin-left: 20px; color: #888; font-size: 13px">
|
||||
<i class="el-icon-paperclip"></i>
|
||||
{{ formatDate(item.ctime) }}
|
||||
</span>
|
||||
<a :href="mediaUrl + 'reviewer/' + item.cv" target="_blank" class="txt_pdf">
|
||||
<i class="el-icon-download"></i>
|
||||
</a>
|
||||
<i v-if="isEdit"
|
||||
class="el-icon-delete"
|
||||
@click="deletCVita(item)"
|
||||
style="color: #f12424; cursor: pointer; font-weight: bold; margin: 0 0 0 15px"
|
||||
></i>
|
||||
</div>
|
||||
</div>
|
||||
<p style="width: 90%; background-color: #d7d7d7; height: 1px; margin: 10px auto 30px auto"></p>
|
||||
<p style="margin: 0 0 25px 28px">If you want to update your resume, please upload it.</p>
|
||||
<el-form :model="cvitaForm" :rules="rules" ref="cvita_Form" label-width="70px">
|
||||
<el-form-item label="CV. :">
|
||||
<el-upload
|
||||
class="upload-demo"
|
||||
:action="baseUrl + 'api/Ucenter/up_cv_file'"
|
||||
:on-success="handleFileSuccess1"
|
||||
name="reviewerCV"
|
||||
type="reviewerCV"
|
||||
:on-error="handleFileError"
|
||||
:on-preview="handlePreview"
|
||||
:on-remove="handleRemove"
|
||||
:before-remove="beforeRemove"
|
||||
:on-change="handleChange1"
|
||||
accept=".pdf"
|
||||
:on-exceed="handleExceed"
|
||||
ref="uploadRef1"
|
||||
>
|
||||
<el-button type="text" style="font-weight: bolder">
|
||||
<b class="el-icon-lx-top" style="font-weight: bolder"></b>upload
|
||||
</el-button>
|
||||
</el-upload>
|
||||
<span style="font-size: 12px; color: #aaa"> Only pdf files can be uploaded(.pdf) </span>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div v-if="isEdit">
|
||||
<p style="margin: 20px 0"></p>
|
||||
<el-upload style="position: relative"
|
||||
class="upload-demo"
|
||||
:action="baseUrl + 'api/Ucenter/up_cv_file'"
|
||||
:on-success="handleFileSuccess1"
|
||||
name="reviewerCV"
|
||||
type="reviewerCV"
|
||||
:on-error="handleFileError"
|
||||
:on-preview="handlePreview"
|
||||
:on-remove="handleRemove"
|
||||
:before-remove="beforeRemove"
|
||||
:on-change="handleChange1"
|
||||
accept=".pdf"
|
||||
:on-exceed="handleExceed"
|
||||
ref="uploadRef1"
|
||||
>
|
||||
<el-button type="text" style="font-weight: bolder">
|
||||
<b class="el-icon-lx-top" style="font-weight: bolder"></b>upload
|
||||
</el-button>
|
||||
<div class="el-upload__tip" slot="tip">
|
||||
Only PDF and compressed files can be uploaded (file format: .pdf).
|
||||
<div style="font-size: 12px; color: #888; line-height: 14px">If you want to update your resume, please upload it.</div>
|
||||
</div>
|
||||
</el-upload>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -53,6 +59,12 @@ import Schart from 'vue-schart';
|
||||
import bus from '../common/bus';
|
||||
export default {
|
||||
name: 'dashboard',
|
||||
props:{
|
||||
isEdit: {
|
||||
type: Boolean,
|
||||
default:true
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
user_id: '',
|
||||
@@ -71,11 +83,12 @@ export default {
|
||||
},
|
||||
computed: {},
|
||||
methods: {
|
||||
init() {
|
||||
init(list) {
|
||||
this.user_id = localStorage.getItem('U_id');
|
||||
this.cvitaForm.user_id = this.user_id;
|
||||
console.log('this.user_id at line 75:', this.user_id)
|
||||
this.getCVitaData();
|
||||
console.log('this.user_id at line 75:', this.user_id);
|
||||
this.cvitaTable1=[...list]
|
||||
// this.getCVitaData();
|
||||
},
|
||||
// 获取简历列表
|
||||
getCVitaData() {
|
||||
@@ -205,4 +218,11 @@ export default {
|
||||
font-weight: bold;
|
||||
margin-left: 10px;
|
||||
}
|
||||
.commonCvList .el-upload__tip {
|
||||
position: absolute;
|
||||
top: -14px;
|
||||
left: 70px;
|
||||
color: #333;
|
||||
font-size: 12px;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -224,7 +224,7 @@ const en = {
|
||||
rev_ewer: 'Reviewer',
|
||||
rev_ewer1: 'Peer Review',
|
||||
rev_ewer2: 'Review History',
|
||||
|
||||
|
||||
man_ing: 'Editor-in-Chief',
|
||||
man_ing1: 'Journal information',
|
||||
man_ing2: 'Article List',
|
||||
@@ -365,7 +365,7 @@ const en = {
|
||||
reply: 'Reply',
|
||||
execute: 'Execute',
|
||||
revoke: 'Revoke',
|
||||
|
||||
|
||||
solve: 'Solve',
|
||||
cancelsolve: 'Cancel resolved',
|
||||
Resolved: 'Resolved',
|
||||
@@ -385,16 +385,20 @@ const en = {
|
||||
exportImg: 'Export PNG',
|
||||
PaperRotation: 'Paper Rotation',
|
||||
removeAnnotations: 'Are you sure you want to delete this Annotation?',
|
||||
removeProofread
|
||||
: 'Are you sure to delete this suggestion?',
|
||||
removeProofread: 'Are you sure to delete this suggestion?',
|
||||
removeContent: 'Are you sure you want to delete this content?',
|
||||
reContent: 'Are you sure you want to restore this content?',
|
||||
uploadImageInfo: 'Figures can only upload files in JPG, JPEG, and PNG formats!',
|
||||
selectComment: 'Please select the text to add annotations to!',
|
||||
selectWord: 'Please select only a single word!',
|
||||
selectOne: 'Please select only a single paragraph!',
|
||||
alreadyCommented: 'There are already annotations in the text, please select again!',
|
||||
Multicolumn: 'Multicolumn',
|
||||
singleRow: "single-row",
|
||||
Row: "Row",
|
||||
Uncheck: 'Uncheck the paragraph',
|
||||
ManuscirptAIProofreading: 'Manuscript AI Proofreading',
|
||||
BatchAddcontent: 'Batch Add content',
|
||||
},
|
||||
pendingPayment: {
|
||||
title: 'Title',
|
||||
|
||||
@@ -382,9 +382,14 @@ const zh = {
|
||||
uploadImageInfo: 'Figures 只能上传 JPG、JPEG 和 PNG 格式的文件',
|
||||
selectComment: '请选择要添加批注的文本',
|
||||
selectWord:'请只选中单个单词!',
|
||||
selectOne:'请只勾选单个段落!',
|
||||
alreadyCommented:'文本中已有批注内容请重新选择',
|
||||
Multicolumn:'多列',
|
||||
singleRow:"单列",
|
||||
Row:"空行",
|
||||
Uncheck:'取消勾选段落',
|
||||
ManuscirptAIProofreading:'稿件AI校对',
|
||||
BatchAddcontent: '批量添加内容',
|
||||
},
|
||||
pendingPayment: {
|
||||
title: 'Title',
|
||||
|
||||
@@ -231,7 +231,7 @@ export default {
|
||||
article_id: this.$route.query.id
|
||||
})
|
||||
.then((res) => {
|
||||
console.log('res at line 191:', res);
|
||||
|
||||
if (res.code == 0) {
|
||||
this.tableData = [{ ...res.data }];
|
||||
}
|
||||
@@ -243,7 +243,7 @@ export default {
|
||||
article_id: this.$route.query.id
|
||||
})
|
||||
.then((res) => {
|
||||
console.log('res at line 191:', res);
|
||||
|
||||
if (res.code == 0) {
|
||||
this.articleInfo = res.data.article_detail;
|
||||
this.journalInfo = res.data.journal_detail;
|
||||
|
||||
@@ -866,17 +866,10 @@
|
||||
<el-form-item label="Real name :" prop="realname">
|
||||
<el-input type="text" placeholder="Please enter..." v-model="coreForm.realname" style="width: 320px"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="Phone :">
|
||||
<el-input type="text" placeholder="Please enter..." v-model="coreForm.phone" style="width: 320px"> </el-input>
|
||||
</el-form-item>
|
||||
<!-- <el-form-item label="Gender :" prop="gender">
|
||||
<el-radio-group v-model="coreTable.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="Academic title :" prop="technical">
|
||||
<el-form-item label="Academic title :" prop="technical">
|
||||
<el-select
|
||||
v-model="coreForm.technical"
|
||||
filterable
|
||||
@@ -906,30 +899,6 @@
|
||||
<el-form-item label="Website :" prop="website">
|
||||
<el-input type="text" placeholder="eg:http://..." v-model="coreForm.website" style="width: 320px"> </el-input>
|
||||
</el-form-item>
|
||||
<!-- <el-form-item prop="major_a">
|
||||
<span slot="label">
|
||||
<i style="color: #F56C6C;margin-right: 4px;">*</i>
|
||||
Research areas
|
||||
</span>
|
||||
<common-major v-if="coreVisible"></common-major>
|
||||
<el-select v-model="coreForm.major_a" placeholder="Please select major" @change="majorChange(1)"
|
||||
style="width: 180px">
|
||||
<el-option v-for="item in majors_a" :key="item.major_id"
|
||||
:label="item.major_title+' ('+item.nickname+')'" :value="item.major_id"></el-option>
|
||||
</el-select>
|
||||
<el-select v-model="coreForm.major_b" placeholder="Please select major" v-if="majors_b!=''"
|
||||
@change="majorChange(2)" style="margin:0 15px;width: 180px">
|
||||
<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+' ('+item.nickname+')'" :value="item.major_id"></el-option>
|
||||
</el-select>
|
||||
<el-select v-model="coreForm.major_c" placeholder="Please select major" v-if="majors_c!=''"
|
||||
style="width: 180px" @change="majorChange(3)">
|
||||
<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+' ('+item.nickname+')'" :value="item.major_id"></el-option>
|
||||
</el-select>
|
||||
</el-form-item> -->
|
||||
<el-form-item label="Field :" prop="field">
|
||||
<el-input v-model="coreForm.field" type="textarea" style="width: 570px" autosize></el-input>
|
||||
</el-form-item>
|
||||
@@ -987,7 +956,7 @@
|
||||
</el-dialog>
|
||||
|
||||
<!-- 申请青年科学家弹出框 -->
|
||||
<el-dialog title="Apply Young Scientist" :visible.sync="youthVisible" width="450px" :close-on-click-modal="false">
|
||||
<el-dialog title="Apply Young Scientist" :visible.sync="youthVisible" width="600px" :close-on-click-modal="false">
|
||||
<el-form :model="youthForm" :rules="rules" ref="youth_Form" label-width="100px">
|
||||
<el-form-item label="Journal :" prop="journal_id">
|
||||
<el-select v-model="youthForm.journal_id" placeholder="Please select a journal" style="width: 300px">
|
||||
@@ -1000,9 +969,9 @@
|
||||
</el-select>
|
||||
|
||||
</el-form-item>
|
||||
<!-- <el-form-item label=" " label-width="0px">
|
||||
<commonCv ref="commoncv" @cvitaTable="getCVitaData"></commonCv>
|
||||
</el-form-item> -->
|
||||
<el-form-item label="CV :" >
|
||||
<commonCv ref="commoncv" @cvitaTable="updateCVitaData"></commonCv>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="youthVisible = false">Cancel</el-button>
|
||||
@@ -1355,7 +1324,7 @@ export default {
|
||||
},
|
||||
computed: {},
|
||||
methods: {
|
||||
getCVitaData(data){
|
||||
updateCVitaData(data){
|
||||
this.applyCvitaTable = data;
|
||||
},
|
||||
handleDeleteMajor(v) {
|
||||
@@ -1525,12 +1494,13 @@ this.applyCvitaTable = data;
|
||||
// 获取简历列表
|
||||
getCVitaData() {
|
||||
this.$api
|
||||
.post('api/Ucenter/getUserInfo', {
|
||||
.post('api/User/getUser', {
|
||||
user_id: this.user_id
|
||||
})
|
||||
.then((res) => {
|
||||
if (res.code == 0) {
|
||||
this.cvitaTable = res.data.cvs;
|
||||
if (res.status == 1) {
|
||||
this.cvitaTable = res.data.cv || [];
|
||||
this.applyCvitaTable = res.data.cv || [];
|
||||
} else {
|
||||
this.$message.error(res.msg);
|
||||
}
|
||||
@@ -1542,6 +1512,7 @@ this.applyCvitaTable = data;
|
||||
|
||||
// 简历弹出层
|
||||
openCVita() {
|
||||
this.cvitaTable=[...this.applyCvitaTable]
|
||||
this.cvitaVisible = true;
|
||||
this.cvitaForm.cv = '';
|
||||
},
|
||||
@@ -2112,42 +2083,42 @@ this.applyCvitaTable = data;
|
||||
|
||||
// 青年科学家弹出框
|
||||
youthPoint() {
|
||||
// this.youthForm.journal_id = '';
|
||||
|
||||
// this.youthVisible = true;
|
||||
// this.$nextTick(()=>{
|
||||
// this.$refs.commoncv.init();
|
||||
// })
|
||||
this.youthForm.journal_id = '';
|
||||
this.youthVisible = true;
|
||||
this.$nextTick(()=>{
|
||||
this.$refs.commoncv.init(this.applyCvitaTable);
|
||||
})
|
||||
// 判断
|
||||
this.$api
|
||||
.post('api/Ucenter/checkApply', {
|
||||
user_id: this.user_id,
|
||||
type: 2
|
||||
})
|
||||
.then((res) => {
|
||||
if (res.code == 0) {
|
||||
this.youthForm.journal_id = '';
|
||||
// this.$api
|
||||
// .post('api/Ucenter/checkApply', {
|
||||
// user_id: this.user_id,
|
||||
// type: 2
|
||||
// })
|
||||
// .then((res) => {
|
||||
// if (res.code == 0) {
|
||||
// this.youthForm.journal_id = '';
|
||||
|
||||
this.youthVisible = true;
|
||||
// this.$nextTick(()=>{
|
||||
// this.$refs.commoncv.init();
|
||||
// })
|
||||
|
||||
} else {
|
||||
// 提示完善信息
|
||||
this.tipVisible = true;
|
||||
this.tipTable.message = res.msg;
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
console.log(err);
|
||||
});
|
||||
// this.youthVisible = true;
|
||||
|
||||
// } else {
|
||||
// // 提示完善信息
|
||||
// this.tipVisible = true;
|
||||
// this.tipTable.message = res.msg;
|
||||
// }
|
||||
// })
|
||||
// .catch((err) => {
|
||||
// console.log(err);
|
||||
// });
|
||||
},
|
||||
|
||||
// 点击提交青年科学家信息
|
||||
onSubmit_youth(youthForm) {
|
||||
this.$refs.youth_Form.validate((valid) => {
|
||||
if (valid) {
|
||||
if(this.applyCvitaTable.length == 0){
|
||||
this.$message.error('Please upload your resume!');
|
||||
return false;
|
||||
}
|
||||
this.$api
|
||||
.post('api/Ucenter/applyYboard', this.youthForm)
|
||||
.then((res) => {
|
||||
@@ -2171,8 +2142,8 @@ this.applyCvitaTable = data;
|
||||
this.$message.error(err);
|
||||
});
|
||||
} else {
|
||||
this.$message.error('Please select a journal!');
|
||||
return false;
|
||||
// this.$message.error('Please select a journal!');
|
||||
// return false;
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
@@ -697,15 +697,7 @@ export default {
|
||||
async saveContent(content, am_id) {
|
||||
var that = this;
|
||||
var str = content.replace(/^<p>\s*(.*?)\s*<\/p>$/, '$1').trim();
|
||||
// var str = content.replace(/^<p>(.*?)<\/p>$/, '$1') ? content.replace(/^<p>(.*?)<\/p>$/, '$1') : '';
|
||||
console.log('str at line 580:', JSON.stringify(str));
|
||||
|
||||
// if (str == '') {
|
||||
// this.$message({
|
||||
// type: 'warning',
|
||||
// message: 'Please enter the content!'
|
||||
// });
|
||||
// }
|
||||
|
||||
str = await that.$commonJS.decodeHtml(str);
|
||||
|
||||
await that.$api
|
||||
@@ -938,7 +930,6 @@ export default {
|
||||
})
|
||||
.then(async () => {
|
||||
var that = this;
|
||||
|
||||
await that.$api
|
||||
.post('/api/Preaccept/delMoreArticleMains', {
|
||||
ids: dataId
|
||||
@@ -1201,14 +1192,21 @@ export default {
|
||||
},
|
||||
|
||||
async onAddRow(mainId) {
|
||||
|
||||
await this.$api
|
||||
.post(this.urlList.addRow, {
|
||||
am_id: mainId,
|
||||
article_id: this.articleId
|
||||
})
|
||||
.then(async (res) => {
|
||||
this.getDate();
|
||||
if(res.code == 0){
|
||||
this.getDate();
|
||||
|
||||
this.getCommentList();
|
||||
}else{
|
||||
this.$message.error(res.msg);
|
||||
}
|
||||
|
||||
})
|
||||
.catch((err) => {
|
||||
this.$message.error(err.msg);
|
||||
@@ -1477,120 +1475,13 @@ export default {
|
||||
});
|
||||
},
|
||||
getWord() {
|
||||
// var htmlContent = `<h3 class="man_Title" contenteditable="false">${this.detailTitle} </h3>`;
|
||||
// htmlContent += this.Main_List.map((item) => {
|
||||
// //批注
|
||||
// let contentHtml = '';
|
||||
// var isRemark = ``;
|
||||
// if (item.remark && item.remark != '') {
|
||||
// // isRemark = `<img class="isRemark" main-id="${item.am_id}" src="${this.remarkImageUrl}" alt="" style="width:20px;height:20px;"/>`;
|
||||
// isRemark = `<span class="isRemark" main-id="${item.am_id}"><img class="isRemarkIcon" main-id="${item.am_id}" src="${
|
||||
// this.remarkImageUrl
|
||||
// }" alt="" style="width: 20px; height: 20px" />
|
||||
|
||||
// <span class="isRemarkIcon" main-id="${item.am_id}" > (${item.am_id})</span>
|
||||
// ${item.state == 0 ? `<span class="Resolved" main-id="${item.am_id}">Resolved</span>` : ''}
|
||||
// </span>
|
||||
|
||||
// `;
|
||||
// }
|
||||
// // 判断是否是图片
|
||||
// if (item.type == 1) {
|
||||
// var extension = item.image.url.split('.').pop().toLowerCase();
|
||||
// if (extension == 'tif') {
|
||||
// contentHtml = `
|
||||
// <p contenteditable="false" main-state="${item.state}" class="MaxPicture pMain" data-id="${item.ami_id}" main-id="${
|
||||
// item.am_id
|
||||
// }">
|
||||
// <img src="" data-img-id="${item.ami_id}" style="width: ${item.width ? `${item.width}px` : '100%'}" />
|
||||
// <font class="font" style="width: ${item.width ? `${item.width}px` : '100%'}">${item.image.note ? item.image.note : ''}</font>
|
||||
// </p>
|
||||
// `;
|
||||
// } else if (['jpg', 'jpeg', 'png'].includes(extension)) {
|
||||
// contentHtml = `
|
||||
// <p contenteditable="false" main-state="${item.state}" class="MaxPicture pMain" data-id="${
|
||||
// item.ami_id
|
||||
// }" main-id="${item.am_id}">
|
||||
// ${isRemark}
|
||||
// <img src="${this.mediaUrl + item.image.url}" style="width: ${
|
||||
// item.width ? `${item.width}px` : '100%'
|
||||
// }" />
|
||||
// <font class="font" style="width: ${item.width ? `${item.width}px` : '100%'}" >${
|
||||
// item.image.note ? item.image.note : ''
|
||||
// }</font>
|
||||
// </p>
|
||||
// `;
|
||||
// } else {
|
||||
// contentHtml = `
|
||||
// <p contenteditable="false" main-state="${item.state}" class="MaxPicture pMain" data-id="${
|
||||
// item.ami_id
|
||||
// }" main-id="${item.am_id}">
|
||||
// ${isRemark}
|
||||
// <span
|
||||
// style="
|
||||
// text-align: center;
|
||||
// font-size: 30px;
|
||||
// display: flex;
|
||||
// align-items: center;
|
||||
// justify-content: center;
|
||||
// "
|
||||
// >
|
||||
// Figures ( .${item.image.url.split('.').pop().toUpperCase()})
|
||||
// </span>
|
||||
|
||||
// <font class="font" style="width: ${item.width ? `${item.width}px` : '100%'}" >${
|
||||
// item.image.note ? item.image.note : ''
|
||||
// }</font>
|
||||
// </p>
|
||||
// `;
|
||||
// }
|
||||
// } else if (item.type == 2) {
|
||||
// var tableList = JSON.parse(item.table.table_data);
|
||||
|
||||
// contentHtml = `
|
||||
// <div contenteditable="false" data-id="${item.amt_id}" main-state="${item.state}" main-id="${
|
||||
// item.am_id
|
||||
// }" class="thumbnailTableBox wordTableHtml table_Box pMain" style="width: 100%; padding: 8px 15px; box-sizing: border-box; border-radius: 4px; position: relative;">
|
||||
// ${isRemark}
|
||||
// <font class="font tableTitle" style="width:100%" >${item.table.title ? item.table.title : ''}</font>
|
||||
// <table border="1" style="width: auto; border-collapse: collapse; text-align: center; ">
|
||||
// ${tableList
|
||||
// .map((row) => {
|
||||
// return `
|
||||
// <tr>
|
||||
// ${row
|
||||
// .map((cell) => {
|
||||
// return `
|
||||
// <td colspan="${cell.colspan || 1}" rowspan="${cell.rowspan || 1}">
|
||||
// <span>${cell.text || ''}</span>
|
||||
// </td>
|
||||
// `;
|
||||
// })
|
||||
// .join('')} <!-- join the cells in the row -->
|
||||
// </tr>
|
||||
// `;
|
||||
// })
|
||||
// .join('')} <!-- join the rows -->
|
||||
// </table>
|
||||
// <font class="font" style="width:100%" >${item.table.note ? item.table.note : ''}</font>
|
||||
// </div>
|
||||
// `;
|
||||
// } else {
|
||||
// contentHtml = `<p class="pMain" main-state="${item.state}" contenteditable="false" data-id="${item.am_id}" main-id="${item.am_id}">${isRemark}${item.content}</p>`;
|
||||
// }
|
||||
|
||||
// // 判断是否是表格类型
|
||||
|
||||
// return contentHtml;
|
||||
// }).join('');
|
||||
// this.htmlContent = htmlContent;
|
||||
|
||||
this.htmlContent = 'true';
|
||||
|
||||
},
|
||||
// 获取数据
|
||||
async getDate() {
|
||||
// await this.$api.post('api/Proofread/proofRead', {
|
||||
// article_id: this.$route.query.id
|
||||
// });
|
||||
|
||||
this.imagesList = [];
|
||||
let urlLInk = '';
|
||||
let urlTask = {};
|
||||
@@ -1598,7 +1489,6 @@ export default {
|
||||
urlLInk = 'api/Preaccept/getArticleMainsNew';
|
||||
urlTask.article_id = this.Art_Id;
|
||||
}
|
||||
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: 'Loading...',
|
||||
@@ -1611,26 +1501,22 @@ export default {
|
||||
.post(urlLInk, urlTask)
|
||||
.then(async (res) => {
|
||||
if (res.code == 0) {
|
||||
// res.data.list.forEach((data) => {
|
||||
// if (data.amt_id) {
|
||||
// try {
|
||||
// const parsedData = JSON.parse(data.table.table_data);
|
||||
// } catch (e) {
|
||||
// console.error(e.message);
|
||||
// }
|
||||
// }
|
||||
// });
|
||||
|
||||
this.Main_List = res.data.list;
|
||||
this.Main_List = res.data.list.map(e=>{
|
||||
e.checked = false;
|
||||
return e;
|
||||
});
|
||||
this.getManuscirptContent();
|
||||
for (let i = 0; i < this.Main_List.length; i++) {
|
||||
this.Main_List[i].text = this.Main_List[i].content;
|
||||
this.Main_List[i].getnum = 0;
|
||||
// this.Main_List[i].checked = false;
|
||||
}
|
||||
|
||||
// setTimeout(async () => {
|
||||
this.$nextTick(async () => {
|
||||
await this.getWord();
|
||||
|
||||
|
||||
loading.close();
|
||||
});
|
||||
// }, 1000);
|
||||
|
||||
2279
src/components/page/OnlineProofreading.vue
Normal file
2279
src/components/page/OnlineProofreading.vue
Normal file
File diff suppressed because it is too large
Load Diff
@@ -99,7 +99,7 @@
|
||||
</el-upload>
|
||||
</el-form-item>
|
||||
<el-form-item label="Manuscript Title :" prop="title" label-width="160px">
|
||||
<el-input v-model="form.title"></el-input>
|
||||
<el-input v-model="form.title" type="textarea" rows="2"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="Whether ethical approval was obtained ?" prop="approval" label-width="290px">
|
||||
@@ -166,21 +166,33 @@
|
||||
</el-form-item> -->
|
||||
|
||||
<el-form-item label="Key words :">
|
||||
<el-input
|
||||
v-for="(item, index) in keywordsList"
|
||||
:key="index"
|
||||
:name="index + 1"
|
||||
v-model="item.ke"
|
||||
clearable
|
||||
style="width: 150px; margin-right: 15px; margin-bottom: 3px"
|
||||
>
|
||||
</el-input>
|
||||
<div v-if="keywordsList&&keywordsList.length > 0">
|
||||
<el-checkbox :indeterminate="isIndeterminate" v-model="checkAll" @change="handleCheckAllChange" style="color: #006699;">Select All</el-checkbox>
|
||||
<el-checkbox-group v-model="checkedCities" @change="handleCheckedCitiesChange">
|
||||
<div v-for="(item, index) in keywordsList" :key="index" style="margin-right:16px;display: inline-block;">
|
||||
<el-checkbox style="margin-right: 4px;" :label="index + 1" v-model="item.checked">{{item.keyword}}</el-checkbox>
|
||||
<el-input
|
||||
:name="index + 1"
|
||||
v-model="item.ke"
|
||||
clearable
|
||||
style="width: 150px; margin-right: 15px; margin-bottom: 3px"
|
||||
>
|
||||
</el-input>
|
||||
</div>
|
||||
</el-checkbox-group>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<el-button type="text" @click="addfund">
|
||||
<i class="el-icon-circle-plus-outline">Add</i>
|
||||
</el-button>
|
||||
<el-button v-if="checkedCities.length > 0" type="text" @click="deletefund" style="color: #f56c6c;margin-left: 20px;">
|
||||
<i class="el-icon-remove-outline" style="color: #f56c6c;">Delete</i>
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
<el-form-item label="Fund :">
|
||||
<el-input v-model="form.fund"> </el-input>
|
||||
<el-input v-model="form.fund" type="textarea" rows="2"> </el-input>
|
||||
</el-form-item>
|
||||
|
||||
<div style="text-align: center; margin: 40px 0 0 0">
|
||||
@@ -1023,6 +1035,7 @@ export default {
|
||||
ProgressBar
|
||||
},
|
||||
data() {
|
||||
|
||||
// 自定义校验:禁止QQ邮箱
|
||||
const validateNotQQEmail = (rule, value, callback) => {
|
||||
// 通用邮箱格式正则(基础校验,匹配大多数标准邮箱格式)
|
||||
@@ -1056,8 +1069,12 @@ export default {
|
||||
}
|
||||
};
|
||||
return {
|
||||
isNewArticle:true,
|
||||
checkAll: false,
|
||||
isIndeterminate: false,
|
||||
stepStatusCurrent: '',
|
||||
isNewArticle: true,
|
||||
oldMajorValueList: [],
|
||||
checkedCities: [],
|
||||
newOptionLabel: '',
|
||||
showAddOption: false,
|
||||
nextId: 0, // 用于生成新选项的ID
|
||||
@@ -1513,9 +1530,7 @@ export default {
|
||||
immediate: true
|
||||
},
|
||||
form: {
|
||||
async handler(newVal, oldVal) {
|
||||
|
||||
},
|
||||
async handler(newVal, oldVal) {},
|
||||
deep: true,
|
||||
immediate: true
|
||||
}
|
||||
@@ -1532,7 +1547,7 @@ export default {
|
||||
// 分支处理
|
||||
if (this.stagingID !== undefined) {
|
||||
this.form.article_id = this.stagingID;
|
||||
|
||||
|
||||
await this.getMajorData();
|
||||
await this.initStepStatus((step1Incomplete) => {
|
||||
this.show_step = step1Incomplete.current.step;
|
||||
@@ -1540,7 +1555,7 @@ export default {
|
||||
});
|
||||
await this.Temporary();
|
||||
} else {
|
||||
this.isNewArticle=true;
|
||||
this.isNewArticle = true;
|
||||
await this.initMajor();
|
||||
}
|
||||
|
||||
@@ -1583,6 +1598,19 @@ export default {
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
handleCheckAllChange(val) {
|
||||
this.checkedCities = val
|
||||
? this.keywordsList.map((_, index) => index + 1) // 遍历数组,取 index+1 作为选中值
|
||||
: [];
|
||||
this.isIndeterminate = false;
|
||||
},
|
||||
handleCheckedCitiesChange(){
|
||||
|
||||
console.log('this.checkedCities at line 1594:', this.checkedCities)
|
||||
},
|
||||
handleDelete(index){
|
||||
this.keywordsList.splice(index, 1);
|
||||
},
|
||||
closeAuthorDialog() {
|
||||
this.getAuthorList();
|
||||
this.authorVisible = false;
|
||||
@@ -1708,7 +1736,7 @@ export default {
|
||||
.then((res) => {
|
||||
if (res.status == 1) {
|
||||
this.stagingID = res.data.article_id;
|
||||
this.form.article_id = res.data.article_id;
|
||||
this.form.article_id = res.data.article_id;
|
||||
this.initStepStatus();
|
||||
this.$message.success('Saving succeeded!');
|
||||
} else {
|
||||
@@ -1745,29 +1773,27 @@ export default {
|
||||
{ step: 4, status: 0, name: 'four', msg: 'four_msg' }
|
||||
]
|
||||
};
|
||||
await this.$api
|
||||
await this.$api
|
||||
.post('api/Article/getArticleState', {
|
||||
article_id: this.form.article_id,
|
||||
user_id: this.form.user_id
|
||||
})
|
||||
.then(async(res) => {
|
||||
.then(async (res) => {
|
||||
if (res.status == 1) {
|
||||
step1Incomplete.list= step1Incomplete.list.map((item) => ({
|
||||
step1Incomplete.list = step1Incomplete.list.map((item) => ({
|
||||
...item,
|
||||
status: res.data[item.name],
|
||||
msg: res.data[item.msg]
|
||||
}));
|
||||
this.stepStatus = step1Incomplete.list
|
||||
this.stepStatus = step1Incomplete.list;
|
||||
if (res.data.current_step) {
|
||||
step1Incomplete.current = step1Incomplete.list.find((item) => item.name == res.data.current_step);
|
||||
this.stepStatusCurrent = step1Incomplete.current;
|
||||
}
|
||||
|
||||
if (fn) {
|
||||
console.log('step1Incomplete at line 1766:', step1Incomplete)
|
||||
fn(step1Incomplete);
|
||||
|
||||
|
||||
|
||||
console.log('step1Incomplete at line 1766:', step1Incomplete);
|
||||
fn(step1Incomplete);
|
||||
}
|
||||
console.log('this.stepStatus at line 1571:', this.stepStatus);
|
||||
}
|
||||
@@ -1928,7 +1954,25 @@ export default {
|
||||
ke: ''
|
||||
});
|
||||
},
|
||||
deletefund() {
|
||||
if (!this.checkedCities.length) {
|
||||
this.$message.error('please select the key word to delete');
|
||||
return;
|
||||
}
|
||||
|
||||
// 2. 将选中的序号(index+1)转成原始索引(index),并存入集合(提高查询效率)
|
||||
const selectedIndexes = new Set(
|
||||
this.checkedCities.map(seq => seq - 1) // 序号 - 1 = 原始索引
|
||||
);
|
||||
|
||||
// 3. 过滤 keywordsList:保留索引不在选中集合中的项
|
||||
this.keywordsList = this.keywordsList.filter((_, index) =>
|
||||
!selectedIndexes.has(index)
|
||||
);
|
||||
this.checkAll = false;
|
||||
// 4. 清空选中状态和半选状态(删除后无选中项)
|
||||
this.checkedCities = [];
|
||||
this.isIndeterminate = false; },
|
||||
//初始化期刊选项
|
||||
initSelect() {
|
||||
this.items = this.$store.state.journalList;
|
||||
@@ -2716,9 +2760,9 @@ export default {
|
||||
} else {
|
||||
this.$message.error(res.msg);
|
||||
this.form.manuscirpt = '';
|
||||
this.fileL_manuscirpt = [];
|
||||
this.isShowCommonWord = false;
|
||||
this.initStepStatus()
|
||||
this.fileL_manuscirpt = [];
|
||||
this.isShowCommonWord = false;
|
||||
this.initStepStatus();
|
||||
loading.close();
|
||||
}
|
||||
})
|
||||
@@ -2832,7 +2876,7 @@ export default {
|
||||
.then((res) => {
|
||||
if (res.code == 0) {
|
||||
this.$message.success('Deletion succeeded!');
|
||||
this.initStepStatus()
|
||||
this.initStepStatus();
|
||||
} else {
|
||||
this.$message.error(res.msg);
|
||||
}
|
||||
@@ -2985,36 +3029,10 @@ export default {
|
||||
this.move_step = e;
|
||||
} else if (this.move_step < e) {
|
||||
this.$refs.articleform.validate((valid) => {
|
||||
console.log('valid at line 2963:', valid);
|
||||
if (valid) {
|
||||
// deepEqual(this.form, this.oldForm);
|
||||
if (this.move_step == 1) {
|
||||
//暂时注销 start
|
||||
// var flist = this.keywordsList;
|
||||
// var fstr = '';
|
||||
// for (var fu in flist) {
|
||||
// if (flist[fu].ke != '') {
|
||||
// fstr += flist[fu].ke.trim() + ',';
|
||||
// }
|
||||
// }
|
||||
// this.form.keyWords = fstr == '' ? '' : fstr.substring(0, fstr.length - 1);
|
||||
// this.$api.post('api/Article/addArticlePart1', this.form).then((res) => {
|
||||
// if (res.code == 0) {
|
||||
// this.stagingID = res.data.article_id;
|
||||
// this.form.article_id = res.data.article_id;
|
||||
|
||||
// this.$message.success('Saving succeeded!');
|
||||
//暂时注销 End
|
||||
this.move_step = 2; //进行步骤
|
||||
this.show_step = 2; //显示内容
|
||||
|
||||
//暂时注销 start
|
||||
// } else {
|
||||
// // this.$message.error(res.msg);
|
||||
// }
|
||||
|
||||
// });
|
||||
//暂时注销 End
|
||||
this.move_step = 2;
|
||||
this.show_step = 2;
|
||||
} else if (this.move_step == 2) {
|
||||
this.onStaging(2);
|
||||
this.show_step = 3;
|
||||
@@ -3025,7 +3043,6 @@ export default {
|
||||
}
|
||||
} else {
|
||||
this.$message.error('Please fill in the current content first!');
|
||||
// return false;
|
||||
}
|
||||
});
|
||||
} else {
|
||||
@@ -3041,42 +3058,39 @@ export default {
|
||||
}
|
||||
},
|
||||
isArrayEqual(arr1, arr2) {
|
||||
if ((arr1 === null || arr1 === undefined) && (arr2 === null || arr2 === undefined)) return true;
|
||||
if (arr1 === null || arr1 === undefined || arr2 === null || arr2 === undefined) return false;
|
||||
|
||||
if ((arr1 === null || arr1 === undefined) && (arr2 === null || arr2 === undefined)) return true;
|
||||
if (arr1 === null || arr1 === undefined || arr2 === null || arr2 === undefined) return false;
|
||||
|
||||
if (!Array.isArray(arr1) || !Array.isArray(arr2)) return false;
|
||||
|
||||
if (arr1.length !== arr2.length) return false;
|
||||
|
||||
return arr1.every((val, index) => val === arr2[index]);
|
||||
},
|
||||
if (!Array.isArray(arr1) || !Array.isArray(arr2)) return false;
|
||||
|
||||
if (arr1.length !== arr2.length) return false;
|
||||
|
||||
return arr1.every((val, index) => val === arr2[index]);
|
||||
},
|
||||
isMajorValueListEqual(list1, list2) {
|
||||
|
||||
if ((list1 === null || list1 === undefined) && (list2 === null || list2 === undefined)) return true;
|
||||
if (list1 === null || list1 === undefined || list2 === null || list2 === undefined) return false;
|
||||
|
||||
if (!Array.isArray(list1) || !Array.isArray(list2)) return false;
|
||||
|
||||
if (list1.length !== list2.length) return false;
|
||||
|
||||
return list1.every((item1, index) => {
|
||||
const item2 = list2[index];
|
||||
|
||||
if ((item1 === null || item1 === undefined) && (item2 === null || item2 === undefined)) return true;
|
||||
if (item1 === null || item1 === undefined || item2 === null || item2 === undefined) return false;
|
||||
|
||||
const sv1 = item1.selectedValue;
|
||||
const sv2 = item2.selectedValue;
|
||||
return this.isArrayEqual(sv1, sv2);
|
||||
});
|
||||
},
|
||||
if ((list1 === null || list1 === undefined) && (list2 === null || list2 === undefined)) return true;
|
||||
if (list1 === null || list1 === undefined || list2 === null || list2 === undefined) return false;
|
||||
|
||||
if (!Array.isArray(list1) || !Array.isArray(list2)) return false;
|
||||
|
||||
if (list1.length !== list2.length) return false;
|
||||
|
||||
return list1.every((item1, index) => {
|
||||
const item2 = list2[index];
|
||||
|
||||
if ((item1 === null || item1 === undefined) && (item2 === null || item2 === undefined)) return true;
|
||||
if (item1 === null || item1 === undefined || item2 === null || item2 === undefined) return false;
|
||||
|
||||
const sv1 = item1.selectedValue;
|
||||
const sv2 = item2.selectedValue;
|
||||
return this.isArrayEqual(sv1, sv2);
|
||||
});
|
||||
},
|
||||
|
||||
StepCode(step, i) {
|
||||
var that = this;
|
||||
const targetIndex = step.index; // 目标步骤索引(1、2、3等)
|
||||
const currentStep = this.move_step; // 当前所在步骤
|
||||
console.log('当前步骤:', currentStep, '目标步骤:', targetIndex, '步骤状态:', this.stepStatus);
|
||||
|
||||
// 1. 后退
|
||||
if (currentStep > targetIndex) {
|
||||
@@ -3091,8 +3105,7 @@ export default {
|
||||
// ? item.selectedValue[item.selectedValue.length - 1]
|
||||
// : []
|
||||
// )
|
||||
// .toString(',');
|
||||
|
||||
// .toString(',');
|
||||
// this.$api
|
||||
// .post('api/Article/addArticleStaging', {
|
||||
// user_id: this.form.user_id,
|
||||
@@ -3104,10 +3117,7 @@ export default {
|
||||
// this.oldMajorValueList = [...this.majorValueList];
|
||||
// }
|
||||
// });
|
||||
|
||||
// }
|
||||
|
||||
|
||||
// }
|
||||
}
|
||||
this.show_step = targetIndex;
|
||||
@@ -3121,32 +3131,40 @@ export default {
|
||||
if (!valid) {
|
||||
this.$message.error('Please fill in the current content first!');
|
||||
return false;
|
||||
} else if (this.stepStatus[currentStep - 1].status != 1) {
|
||||
this.$message.error(
|
||||
this.stepStatus[currentStep - 1].msg
|
||||
? this.stepStatus[currentStep - 1].msg
|
||||
: 'Please fill in the current content first!'
|
||||
);
|
||||
return false;
|
||||
} else {
|
||||
let invalidStep = null;
|
||||
for (let i = 0; i < targetIndex - 1; i++) {
|
||||
const step = this.stepStatus[i];
|
||||
if (step.status !== 1) {
|
||||
invalidStep = step;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (invalidStep) {
|
||||
this.$message.error(
|
||||
this.stepStatusCurrent.msg ? this.stepStatusCurrent.msg : 'Please fill in the current content first!'
|
||||
);
|
||||
|
||||
this.show_step = this.stepStatusCurrent.step;
|
||||
this.move_step = this.stepStatusCurrent.step;
|
||||
this.$forceUpdate();
|
||||
} else {
|
||||
this.show_step = targetIndex;
|
||||
this.move_step = targetIndex;
|
||||
}
|
||||
if (targetIndex == 4) {
|
||||
if (
|
||||
Array.isArray(this.majorValueList) &&
|
||||
this.majorValueList.some((item) => item.selectedValue !== null && item.selectedValue !== undefined)
|
||||
) {
|
||||
} else {
|
||||
if(this.isNewArticle){
|
||||
this.getMajorData();
|
||||
if (this.isNewArticle) {
|
||||
this.getMajorData();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
this.show_step = targetIndex;
|
||||
this.move_step = targetIndex;
|
||||
}
|
||||
|
||||
this.show_step = targetIndex;
|
||||
this.move_step = targetIndex;
|
||||
});
|
||||
// return;
|
||||
}
|
||||
@@ -3287,20 +3305,20 @@ export default {
|
||||
this.stagingID = res.data.article_id;
|
||||
this.form.article_id = res.data.article_id;
|
||||
this.$message.success('Saving succeeded!');
|
||||
this.initStepStatus(step1Incomplete=>{
|
||||
console.log('step1Incomplete at line 3283:', step1Incomplete)
|
||||
this.$nextTick(()=>{
|
||||
if(step1Incomplete.list&&step1Incomplete.list.length>0&&step1Incomplete.list[0].status==1){
|
||||
this.move_step = 2; //进行步骤
|
||||
this.show_step = 2; //显示内容
|
||||
this.$forceUpdate()
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
this.initStepStatus((step1Incomplete) => {
|
||||
console.log('step1Incomplete at line 3283:', step1Incomplete);
|
||||
this.$nextTick(() => {
|
||||
if (
|
||||
step1Incomplete.list &&
|
||||
step1Incomplete.list.length > 0 &&
|
||||
step1Incomplete.list[0].status == 1
|
||||
) {
|
||||
this.move_step = 2; //进行步骤
|
||||
this.show_step = 2; //显示内容
|
||||
this.$forceUpdate();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
} else {
|
||||
this.$message.error(res.msg);
|
||||
}
|
||||
@@ -3369,7 +3387,7 @@ export default {
|
||||
},
|
||||
|
||||
// save暂存
|
||||
onStagingSave: throttle(function (e) {
|
||||
onStagingSave: throttle(function (e) {
|
||||
if (e == 1) {
|
||||
this.onStaging(1);
|
||||
} else if (e == 2) {
|
||||
@@ -3379,9 +3397,9 @@ export default {
|
||||
} else if (e == 4) {
|
||||
this.onStaging('save4');
|
||||
}
|
||||
},1000),
|
||||
}, 1000),
|
||||
//暂存加下一步
|
||||
onStagingSubmit: throttle(function (e) {
|
||||
onStagingSubmit: throttle(function (e) {
|
||||
if (e == 3) {
|
||||
this.$api
|
||||
.post('api/Article/addArticlePart3', {
|
||||
@@ -3399,10 +3417,9 @@ export default {
|
||||
this.majorValueList.some((item) => item.selectedValue !== null && item.selectedValue !== undefined)
|
||||
) {
|
||||
} else {
|
||||
if(this.isNewArticle){
|
||||
if (this.isNewArticle) {
|
||||
this.getMajorData();
|
||||
}
|
||||
|
||||
}
|
||||
this.move_step = 4;
|
||||
this.show_step = 4;
|
||||
@@ -3414,7 +3431,7 @@ export default {
|
||||
}
|
||||
});
|
||||
}
|
||||
},1000),
|
||||
}, 1000),
|
||||
|
||||
// 暂存
|
||||
onStaging(e) {
|
||||
@@ -3441,7 +3458,7 @@ export default {
|
||||
article_id: this.form.article_id,
|
||||
journal: this.form.journal,
|
||||
title: this.form.title,
|
||||
keyWords: this.form.keyWords,
|
||||
keywords: this.form.keyWords,
|
||||
abstrart: this.form.abstrart,
|
||||
type: this.form.type,
|
||||
username: this.form.username,
|
||||
@@ -3454,11 +3471,9 @@ export default {
|
||||
},
|
||||
(res) => {
|
||||
if (res.status == 1) {
|
||||
|
||||
const url = new URL(window.location.href);
|
||||
url.searchParams.set('id', res.data.article_id); // 替换或新增 id 参数
|
||||
window.history.replaceState({}, document.title, url.toString());
|
||||
|
||||
}
|
||||
}
|
||||
);
|
||||
@@ -3643,8 +3658,7 @@ export default {
|
||||
? item.shu.split(',').map(Number)
|
||||
: [item.shu]
|
||||
}));
|
||||
this.isNewArticle=false;
|
||||
|
||||
this.isNewArticle = false;
|
||||
});
|
||||
},
|
||||
changeUseAi(e) {
|
||||
@@ -3936,7 +3950,7 @@ export default {
|
||||
}
|
||||
|
||||
.step_list_new .C_style {
|
||||
background-color: #ecf5ff !important;
|
||||
background-color: #ecf5ff !important;
|
||||
-webkit-box-shadow: 2px 30px 15px -20px #ebf5ff inset !important;
|
||||
box-shadow: 2px 30px 15px -20px #ebf5ff inset !important;
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -106,18 +106,31 @@
|
||||
.catch(err => {
|
||||
this.$message.error(err);
|
||||
});
|
||||
|
||||
var data={article_id: this.articleId}
|
||||
if(this.$route.query.user_id){
|
||||
data.art_aut_id=this.$route.query.user_id
|
||||
}
|
||||
this.$api
|
||||
.post('api/Article/getArticleUserDetail', {
|
||||
article_id: this.articleId
|
||||
.post(this.$route.query.user_id?'api/Workbench/getCorrespondingInfo':'api/Article/getArticleUserDetail', {
|
||||
...data
|
||||
})
|
||||
.then(res => {
|
||||
if (res.code == 0) {
|
||||
if(this.$route.query.user_id){
|
||||
if (res.status == 1) {
|
||||
this.AuthorMes = res.data.user;
|
||||
this.EmailData.topmail = 'Dear Dr. ' + this.AuthorMes.realname + ',<br/>';
|
||||
} else {
|
||||
this.$message.error(res.msg);
|
||||
}
|
||||
}else{
|
||||
if (res.code == 0) {
|
||||
this.AuthorMes = res.data.userDetail;
|
||||
this.EmailData.topmail = 'Dear Dr. ' + this.AuthorMes.realname + ',<br/>';
|
||||
} else {
|
||||
this.$message.error(res.msg);
|
||||
}
|
||||
}
|
||||
|
||||
})
|
||||
.catch(err => {
|
||||
this.$message.error(err);
|
||||
|
||||
@@ -11,9 +11,9 @@
|
||||
</el-breadcrumb>
|
||||
</div>
|
||||
<div class="container">
|
||||
<div class="handle-box">
|
||||
<div class="handle-box" v-if="articleBaseInfo.state == 8">
|
||||
<div>
|
||||
<el-button type="primary" icon="el-icon-plus" @click="openSuggRev">Editorial Board Bank</el-button>
|
||||
<el-button type="primary" icon="el-icon-plus" @click="openSuggRev">Editorial Board Bank</el-button>
|
||||
</div>
|
||||
|
||||
<!-- <el-button type="primary" icon="el-icon-circle-plus-outline" @click="editVisible1 = true">Supplement</el-button> -->
|
||||
@@ -575,60 +575,23 @@ export default {
|
||||
|
||||
|
||||
showdetail(row) {
|
||||
console.log('row at line 577:', row)
|
||||
|
||||
|
||||
this.FinalDetailBaseInfo={...row}
|
||||
|
||||
|
||||
// const loading = this.$loading({
|
||||
// lock: true,
|
||||
// text: 'Loading',
|
||||
// spinner: 'el-icon-loading',
|
||||
// background: 'rgba(0, 0, 0, 0.7)',
|
||||
// zIndex: 9999 // 设置一个足够高的层级
|
||||
// });
|
||||
// this.$api
|
||||
// .post('api/Finalreview/view', {
|
||||
// record_id: row.id
|
||||
// // reviewer_id: this.$route.query.reviewer_id
|
||||
// })
|
||||
// .then((res) => {
|
||||
|
||||
// this.detailDate.artrevid = res.art_rev_id;
|
||||
// this.detailDate.article = res.data.article.title;
|
||||
// this.detailDate.reviewer = res.data.article_final.realname;
|
||||
// this.detailDate.ctime = res.data.article_final.update_time;
|
||||
// this.detailDate.article_final = res.data.article_final;
|
||||
// this.detailDate.state = res.state;
|
||||
|
||||
// this.txt_mess = res;
|
||||
|
||||
// this.journal_id = res.journal_id;
|
||||
// this.articleId = res.data.article.article_id;
|
||||
// this.$nextTick(() => {
|
||||
// this.$refs.commonEditor.getData();
|
||||
|
||||
// loading.close();
|
||||
// });
|
||||
|
||||
// this.$forceUpdate();
|
||||
// })
|
||||
// .catch((err) => {
|
||||
// loading.close();
|
||||
// console.log(err);
|
||||
// });
|
||||
|
||||
|
||||
this.$nextTick(() => {
|
||||
this.$refs.commonFinalDetail.init();
|
||||
this.$api
|
||||
.post('api/Workbench/updateArticleState', {
|
||||
article_id: this.$route.query.id,
|
||||
act_id: row.id,
|
||||
type: '3',
|
||||
account: localStorage.getItem('U_name')
|
||||
})
|
||||
});
|
||||
|
||||
// this.$router.push({
|
||||
// path: 'articleEditorDetail',
|
||||
// query: {
|
||||
// id: row.id
|
||||
// }
|
||||
// });
|
||||
|
||||
},
|
||||
changereviewer() {
|
||||
if (this.editform.uid !== 0) {
|
||||
|
||||
4299
src/components/page/articleListEditor_A copy.vue
Normal file
4299
src/components/page/articleListEditor_A copy.vue
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,7 +1,15 @@
|
||||
<template>
|
||||
<div>
|
||||
<div>
|
||||
<div class="tab_post">
|
||||
|
||||
<el-button
|
||||
size="mini"
|
||||
type="success"
|
||||
plain
|
||||
icon="el-icon-tickets"
|
||||
@click="showdetaileditor(detailMes)"
|
||||
style="padding:6px;margin-left: 0px;position: absolute;bottom: -32px;left: 0px;"
|
||||
> Detailed for MS</el-button
|
||||
>
|
||||
<div v-for="(item, index) in tabsList" @click="jumpTab(index, item)" :class="tabName == item.refName ? 'P_style' : ''">
|
||||
<h5>
|
||||
<span>{{ index + 1 }}</span>
|
||||
@@ -10,12 +18,34 @@
|
||||
<p>{{ item.rongCont }}</p>
|
||||
<div class="line"></div>
|
||||
</div>
|
||||
<div style="margin: 30px 0 0 0">
|
||||
<div style="margin: 20px 0 0 0">
|
||||
<el-button type="primary" @click="pushOnline(detailMes)" style="width: 220px">
|
||||
<i class="el-icon-finished"></i>
|
||||
Push Online
|
||||
</el-button>
|
||||
|
||||
<div class="editorial_advisory_board" style="margin: 12px 0 0" v-if="finalReview">
|
||||
|
||||
<li>Editorial Advisory Board :
|
||||
<template v-if="finalReview.reviewer_id">
|
||||
<span style="font-weight: bold;color: #333;" v-if="finalReview.realname">{{finalReview.realname}}</span>
|
||||
<span style="font-weight: bold;color: #333;" v-else>No reviewer name</span>
|
||||
</template>
|
||||
|
||||
<span v-else>No</span>
|
||||
|
||||
</li>
|
||||
<template v-if="finalReview.reviewer_id">
|
||||
<li>Received : {{ finalReview.received_time? finalReview.received_time : 'No Time' }}</li>
|
||||
<li>Revision : {{ finalReview.revision_time? finalReview.revision_time : 'No Time' }}</li>
|
||||
<li>Accepted : {{ finalReview.accepted_time? finalReview.accepted_time : 'No Time' }}</li>
|
||||
<li>Available online : {{ finalReview.available_online? finalReview.available_online : 'No Time' }}</li>
|
||||
|
||||
</template>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div
|
||||
@@ -101,6 +131,35 @@
|
||||
<el-form-item label="Author Contribution :" prop="author_contribution">
|
||||
<el-input v-model="detailMes.author_contribution"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="Abstract :" prop="abstract">
|
||||
<template slot="label">
|
||||
<span style="color: #f56c6c; margin-right: 4px">*</span>Abstract :
|
||||
</template>
|
||||
<tinymce
|
||||
type="Abstract"
|
||||
:height="160"
|
||||
:id="id"
|
||||
ref="tinymceChild1"
|
||||
:wordStyle="`p{font-size: 13px;}`"
|
||||
:isAutomaticUpdate="true"
|
||||
@getContent="getContent"
|
||||
@updateChange="updateChange"
|
||||
:value="abstract"
|
||||
class="paste-area text-container"
|
||||
:toolbar="['bold italic |customBlue removeBlue|myuppercase myuppercasea Line|subscript superscript|clearButton']"
|
||||
style="
|
||||
line-height: 12px;
|
||||
|
||||
overflow: auto;
|
||||
|
||||
font-size: 13px; /* 字体大小 */
|
||||
margin-top: 0pt; /* 段前间距 */
|
||||
margin-bottom: 0pt; /* 段后间距 */
|
||||
"
|
||||
></tinymce>
|
||||
|
||||
<!-- <quill-editor ref="myTextEditor" v-model="detailMes.abstract" :options="editorOption"> </quill-editor> -->
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div style="text-align: center; margin: 25px 0 0 0">
|
||||
<el-button type="primary" @click="ZsSaveMes" style="width: 400px; margin-right: 20px">
|
||||
@@ -193,13 +252,13 @@
|
||||
<el-form-item label="Affiliated organization :">
|
||||
<el-checkbox-group v-model="addFomauthor.organs" class="suoshu_jigou">
|
||||
<el-checkbox
|
||||
v-for="item in mechanism"
|
||||
v-for="(item,index) in mechanism"
|
||||
style="display: block"
|
||||
name="type"
|
||||
:label="item.p_article_organ_id"
|
||||
:key="item.p_article_organ_id"
|
||||
>
|
||||
{{ item.organ_name }}
|
||||
<span style="margin-right:4px ;">{{ index+1 }}. </span> {{ item.organ_name }}
|
||||
</el-checkbox>
|
||||
</el-checkbox-group>
|
||||
</el-form-item>
|
||||
@@ -259,12 +318,12 @@
|
||||
<el-form-item label="Affiliated organization :">
|
||||
<el-checkbox-group v-model="editFomauthor.organs" class="suoshu_jigou">
|
||||
<el-checkbox
|
||||
v-for="item in mechanism"
|
||||
v-for="(item,index) in mechanism"
|
||||
style="display: block"
|
||||
:label="item.p_article_organ_id + ''"
|
||||
:key="item.p_article_organ_id"
|
||||
>
|
||||
{{ item.organ_name }}
|
||||
<span style="margin-right:4px ;">{{ index+1 }}. </span> {{ item.organ_name }}
|
||||
</el-checkbox>
|
||||
</el-checkbox-group>
|
||||
</el-form-item>
|
||||
@@ -303,6 +362,7 @@
|
||||
</h4>
|
||||
<!-- 机构列表 -->
|
||||
<el-table :data="schoolData" border class="table" ref="multipleTable" header-cell-class-name="table-header">
|
||||
<el-table-column type="index" label="No." width="55" align="center"></el-table-column>
|
||||
<el-table-column prop="organ_name" label="Affiliation"></el-table-column>
|
||||
<el-table-column label="" width="190" align="center">
|
||||
<template slot-scope="scope">
|
||||
@@ -744,9 +804,7 @@
|
||||
<h5 style="font-size: 16px; margin: 0 0 30px 0; letter-spacing: -0.5px">Improve information</h5>
|
||||
<!-- 时间Doi简介信息 -->
|
||||
<el-form ref="Abs_Form" :model="detailMes" :rules="rules" label-width="150px" style="margin-top: 30px">
|
||||
<el-form-item label="Abstract :" prop="abstract">
|
||||
<quill-editor ref="myTextEditor" v-model="detailMes.abstract" :options="editorOption"> </quill-editor>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="Doi :" prop="doi">
|
||||
<span>https://doi.org/10.53388/</span>
|
||||
<el-input v-model="detailMes.doi" style="margin-left: 10px; width: 325px"> </el-input>
|
||||
@@ -959,10 +1017,11 @@ import PreIngestedEditorProduce from './PreIngestedEditorProduce.vue';
|
||||
import comArtHtmlCreatNewProduce from './comArtHtmlCreatNewProduce.vue';
|
||||
import commonTopic from '../page/components/article/topic.vue';
|
||||
import commonRelated from '../page/components/article/Related.vue';
|
||||
|
||||
import Tinymce from '@/components/page/components/Tinymce';
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
finalReview: null,
|
||||
baseUrl: this.Common.baseUrl,
|
||||
mediaUrl: this.Common.mediaUrl,
|
||||
p_article_id: this.$route.query.id,
|
||||
@@ -1027,8 +1086,10 @@ export default {
|
||||
],
|
||||
detailMes: {
|
||||
type: '',
|
||||
journal_special_id: 'None'
|
||||
journal_special_id: 'None',
|
||||
|
||||
},
|
||||
abstract: '',
|
||||
opInstal: [],
|
||||
// opMedical: [
|
||||
// {
|
||||
@@ -1307,13 +1368,13 @@ export default {
|
||||
trigger: 'blur'
|
||||
}
|
||||
],
|
||||
abstract: [
|
||||
{
|
||||
required: true,
|
||||
message: 'Please enter abstract',
|
||||
trigger: 'blur'
|
||||
}
|
||||
],
|
||||
// abstract: [
|
||||
// {
|
||||
// required: true,
|
||||
// message: 'Please enter abstract',
|
||||
// trigger: 'blur'
|
||||
// }
|
||||
// ],
|
||||
keywords: [
|
||||
{
|
||||
required: true,
|
||||
@@ -1399,11 +1460,54 @@ export default {
|
||||
this.getHight();
|
||||
window.addEventListener('resize', this.getHight);
|
||||
this.getData();
|
||||
|
||||
|
||||
this.getAuthorJG();
|
||||
this.getCount();
|
||||
this.getWorldPdf();
|
||||
},
|
||||
methods: {
|
||||
getArticleFinal(id){
|
||||
// api/Finalreview/getRecord
|
||||
this.$api
|
||||
.post('api/Finalreview/getRecord', {
|
||||
article_id: id,
|
||||
// article_id: 6075
|
||||
})
|
||||
.then((res) => {
|
||||
console.log('res at line 1460:', res)
|
||||
if (res.status == 1) {
|
||||
this.finalReview = res.data;
|
||||
|
||||
|
||||
}else{
|
||||
this.finalReview = {reviewer_id: null};
|
||||
}
|
||||
})
|
||||
},
|
||||
updateChange(content){
|
||||
|
||||
this.abstract = content
|
||||
|
||||
},
|
||||
getTinymceContent(type) {
|
||||
this.$refs.tinymceChild1.getContent(type);
|
||||
},
|
||||
getContent(type, content) {
|
||||
console.log('content at line 1449:', content)
|
||||
console.log('type at line 1449:', type)
|
||||
|
||||
|
||||
},
|
||||
// 跳转文章详情
|
||||
showdetaileditor(data) {
|
||||
this.$router.push({
|
||||
path: 'articleDetailEditor',
|
||||
query: {
|
||||
id: data.article_id
|
||||
}
|
||||
});
|
||||
},
|
||||
allLoad() {
|
||||
let excelList = [
|
||||
'https://submission.tmrjournals.com/public/manuscirpt/20220831/c7d75d49bf25cf56906d56d07e00a31e.docx',
|
||||
@@ -1441,7 +1545,7 @@ export default {
|
||||
this.addFomauthor.p_article_id = this.p_article_id;
|
||||
this.addFomschool.p_article_id = this.p_article_id;
|
||||
this.UpTypeFile.p_article_id = this.p_article_id;
|
||||
|
||||
this.abstract = ''
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: 'Loading...',
|
||||
@@ -1455,8 +1559,9 @@ export default {
|
||||
.then((res) => {
|
||||
if (res.code == 0) {
|
||||
this.detailMes = res.data.production;
|
||||
this.abstract = res.data.production.abstract;
|
||||
this.UpTyFIle = res.data.production.file_pdf;
|
||||
|
||||
this.getArticleFinal(res.data.production.article_id);
|
||||
if (res.data.production.icon != '') {
|
||||
this.imageUrl = this.mediaUrl + 'articleicon/' + res.data.production.icon;
|
||||
}
|
||||
@@ -1740,17 +1845,64 @@ export default {
|
||||
neYStage(e) {
|
||||
return e.stage_year + ' Vol.' + e.stage_vol + ' issue.' + e.stage_no + e.stage_pagename + e.stage_page;
|
||||
},
|
||||
async abstractFormat(content) {
|
||||
content = this.$commonJS.transformHtmlString(content);
|
||||
var div = document.createElement('div');
|
||||
div.innerHTML = content;
|
||||
|
||||
// 1. 剔除所有 img 标签
|
||||
var imgTags = div.getElementsByTagName('img');
|
||||
for (var i = imgTags.length - 1; i >= 0; i--) {
|
||||
imgTags[i].parentNode.removeChild(imgTags[i]);
|
||||
}
|
||||
|
||||
// 2. 新增:剔除所有 table 相关标签(table、tr、td)
|
||||
var tableTags = div.getElementsByTagName('table');
|
||||
for (var i = tableTags.length - 1; i >= 0; i--) {
|
||||
tableTags[i].parentNode.removeChild(tableTags[i]);
|
||||
}
|
||||
|
||||
// 3. 替换 strong → b、em → i(原有逻辑)
|
||||
var strongTags = div.getElementsByTagName('strong');
|
||||
for (var i = 0; i < strongTags.length; i++) {
|
||||
var bTag = document.createElement('b');
|
||||
bTag.innerHTML = strongTags[i].innerHTML;
|
||||
strongTags[i].parentNode.replaceChild(bTag, strongTags[i]);
|
||||
}
|
||||
var emTags = div.getElementsByTagName('em');
|
||||
for (var i = 0; i < emTags.length; i++) {
|
||||
var iTag = document.createElement('i');
|
||||
iTag.innerHTML = emTags[i].innerHTML;
|
||||
emTags[i].parentNode.replaceChild(iTag, emTags[i]);
|
||||
}
|
||||
|
||||
// 处理 p 标签 + 解码
|
||||
content = div.innerHTML;
|
||||
content = content.replace(/^<p>\s*(.*?)\s*<\/p>$/, '$1').trim();
|
||||
content = await this.$commonJS.decodeHtml(content);
|
||||
return content;
|
||||
},
|
||||
// 1----保存稿件信息
|
||||
ZsSaveMes() {
|
||||
async ZsSaveMes() {
|
||||
|
||||
var abstractStr = "";
|
||||
if (this.detailMes.journal_stage_id == 0) {
|
||||
this.$message.error('Please select an installment!');
|
||||
return;
|
||||
}
|
||||
if (this.abstract == "") {
|
||||
this.$message.error('Please input abstract!');
|
||||
return;
|
||||
} else{
|
||||
abstractStr = await this.abstractFormat(this.abstract);
|
||||
|
||||
}
|
||||
console.log('abstractStr at line 1820:', abstractStr)
|
||||
|
||||
this.$refs.Mes_Form.validate((valid) => {
|
||||
if (valid) {
|
||||
this.$api
|
||||
.post('api/Production/editProduction', this.detailMes)
|
||||
.post('api/Production/editProduction', {...this.detailMes,abstract:abstractStr})
|
||||
.then((res) => {
|
||||
if (res.code == 0) {
|
||||
this.$message.success(`Successfully save the article!`);
|
||||
@@ -2260,7 +2412,7 @@ export default {
|
||||
this.$api
|
||||
.post('api/Production/editArticleLast', {
|
||||
p_article_id: this.detailMes.p_article_id,
|
||||
abstract: this.detailMes.abstract,
|
||||
// abstract: this.detailMes.abstract,
|
||||
doi: this.detailMes.doi,
|
||||
pub_date: this.detailMes.pub_date
|
||||
})
|
||||
@@ -2853,9 +3005,9 @@ export default {
|
||||
// 判断滚动条滚动距离是否大于当前滚动项可滚动距离
|
||||
let judge = e.target.scrollTop >= scrollItems[i].offsetTop - scrollItems[0].offsetTop;
|
||||
if (judge) {
|
||||
console.log('judge at line 2846:', judge)
|
||||
|
||||
this.tabIndex = i.toString();
|
||||
console.log('this.tabIndex at line 2848:', this.tabIndex)
|
||||
|
||||
// 找对应的tab-name值
|
||||
this.tabName = this.tabsList[this.tabIndex].refName;
|
||||
// this.tabClick = this.tabsList[this.tabIndex].refName
|
||||
@@ -2865,12 +3017,13 @@ export default {
|
||||
},
|
||||
|
||||
getHight() {
|
||||
this.contentStyleObj.height = window.innerHeight - 120 + 'px';
|
||||
this.contentStyleObj.height = window.innerHeight - 140 + 'px';
|
||||
// this.jumpTab(0,this.tabsList[0])
|
||||
}
|
||||
},
|
||||
components: {
|
||||
quillEditor,
|
||||
Tinymce,
|
||||
PreIngestedEditorProduce,
|
||||
comArtHtmlCreatNewProduce,
|
||||
commonTopic,
|
||||
@@ -2878,7 +3031,15 @@ export default {
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.editorial_advisory_board {
|
||||
margin-bottom: 20px;
|
||||
list-style: none;
|
||||
line-height: 18px;
|
||||
color: #888;
|
||||
font-size: 12px;
|
||||
}
|
||||
</style>
|
||||
<style>
|
||||
.handle-box {
|
||||
margin-bottom: 20px;
|
||||
@@ -2892,7 +3053,7 @@ export default {
|
||||
background-color: #fafafa;
|
||||
position: absolute;
|
||||
left: 25px;
|
||||
top: 60px;
|
||||
top: 40px;
|
||||
width: 220px;
|
||||
z-index: 50;
|
||||
}
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
</el-breadcrumb>
|
||||
</div>
|
||||
<div class="container">
|
||||
<div class="handle-box" v-if="articleBaseInfo.state != 7">
|
||||
<div class="handle-box" v-if="[1,2,4,8].includes(articleBaseInfo.state)">
|
||||
|
||||
<div>
|
||||
<el-button type="primary" icon="el-icon-plus" @click="openAddRev">Reviewer Bank</el-button>
|
||||
@@ -120,7 +120,7 @@
|
||||
></el-pagination>
|
||||
</div>
|
||||
</div>
|
||||
<el-dialog title="Add Suggest Reviewer" :visible.sync="AddSuggest" width="800px" :close-on-click-modal="false">
|
||||
<el-dialog title="Add Suggest Reviewer" :visible.sync="AddSuggest" width="1200px" :close-on-click-modal="false">
|
||||
<el-table
|
||||
:data="tableSuggest"
|
||||
border
|
||||
@@ -130,9 +130,10 @@
|
||||
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 prop="account" label="Email" width="180"></el-table-column>
|
||||
<el-table-column prop="realname" label="Realname" width="180"></el-table-column>
|
||||
<el-table-column prop="company" label="Affiliation"></el-table-column>
|
||||
<el-table-column prop="cmajor" label="Major" width="300"></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>
|
||||
|
||||
@@ -8,8 +8,8 @@
|
||||
</div>
|
||||
<div class="container">
|
||||
<el-row :gutter="10">
|
||||
<el-col :span="16">
|
||||
<div class="form-box">
|
||||
<el-col :span="20">
|
||||
<div class="form-box" style="width: 100%;">
|
||||
<el-form ref="articleform" :model="detailDate" label-width="130px">
|
||||
<el-form-item label="Article">
|
||||
<span>{{ detailDate.article }}</span>
|
||||
@@ -23,15 +23,176 @@
|
||||
<el-form-item label="CreateTime">
|
||||
<span>{{ formatDate(detailDate.ctime) }}</span>
|
||||
</el-form-item>
|
||||
<el-form-item label="Status">
|
||||
<el-form-item label="Disclose name or anonymous" label-width="200px">
|
||||
<span v-if="reviewList.length > 0&&reviewList[0].is_anonymous == 0">Disclose name</span>
|
||||
<span v-if="reviewList.length > 0&&reviewList[0].is_anonymous == 1">Remain anonymous</span>
|
||||
</el-form-item>
|
||||
<!-- <el-form-item label="Status">
|
||||
<span>{{ mystate(detailDate.state) }}</span>
|
||||
<el-button style="margin-left: 10px" type="text" @click="dialogFormVisible = true" icon="el-icon-view"
|
||||
>See Feedback</el-button
|
||||
>
|
||||
</el-form-item>
|
||||
</el-form-item> -->
|
||||
<el-form-item v-if="canRepeat == 1">
|
||||
<el-button type="primary" @click="createRevision">Re-review</el-button>
|
||||
</el-form-item>
|
||||
|
||||
<div v-if="reviewList.length > 0" style="margin-top: 40px;">
|
||||
<div class="clearfix fsheader">
|
||||
<h4>Peer-review Archive</h4>
|
||||
</div>
|
||||
<!-- 初审 -->
|
||||
<div class="art_author_">
|
||||
|
||||
<div class="fixCard reviewer_decision" style="position: relative">
|
||||
<div class="overflow-x-auto">
|
||||
<table class="review_table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th></th>
|
||||
<!-- 表头遍历评审者 -->
|
||||
<template v-for="(iken, reviewerIndex) in reviewList">
|
||||
<th>Status
|
||||
</th>
|
||||
<th>Time
|
||||
</th>
|
||||
<th>Response time
|
||||
</th>
|
||||
<th>Comments
|
||||
</th>
|
||||
</template>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<!-- 遍历评审轮次:1st + 重复轮次 -->
|
||||
<tr >
|
||||
<td>1<sup>st</sup> review</td>
|
||||
<!-- 遍历每个评审者的1st评审结果 -->
|
||||
<template v-for="(iken, reviewerIndex) in reviewList">
|
||||
<td style="cursor: pointer;">
|
||||
<span style="display: inline-block; margin-left: 4px; margin-right: 8px">
|
||||
<font
|
||||
v-if="iken.recommend == 1 || iken.recommend == 2"
|
||||
style="
|
||||
width: 12px;
|
||||
height: 12px;
|
||||
display: block;
|
||||
border-radius: 10px;
|
||||
background-color: #67c23a;
|
||||
"
|
||||
>
|
||||
</font>
|
||||
<font
|
||||
v-if="iken.recommend == 3|| iken.recommend == 4"
|
||||
style="
|
||||
width: 12px;
|
||||
height: 12px;
|
||||
display: block;
|
||||
border-radius: 10px;
|
||||
background-color: #f56c6c;
|
||||
"
|
||||
>
|
||||
</font>
|
||||
</span>
|
||||
<span v-if="iken.recommend == 1">Minor</span>
|
||||
<span v-else-if="iken.recommend == 2">Major</span>
|
||||
<span v-else-if="iken.recommend == 3">reject and resubmission</span>
|
||||
<span v-else-if="iken.recommend == 4">Reject</span>
|
||||
|
||||
</td>
|
||||
|
||||
<td>
|
||||
<p style="line-height: 30px;" v-if="iken.ctime > 0">{{ iken.ctime | formatDatehms }}</p>
|
||||
<p v-else style="" class="stime">Response time: Re-reviewing...</p>
|
||||
</td> <td></td>
|
||||
<td style="">
|
||||
<el-button
|
||||
style="margin-left: 10px"
|
||||
type="text"
|
||||
@click="showUnderReview(iken.question)"
|
||||
icon="el-icon-view"
|
||||
>Details</el-button
|
||||
>
|
||||
</td>
|
||||
</template>
|
||||
</tr>
|
||||
<!-- 遍历重复评审轮次(2nd、3rd...) -->
|
||||
<template v-for="(round, index1) in maxRepeatReviewCount()">
|
||||
<tr>
|
||||
<td>{{ index1 + 2 }}<sup>nd</sup> review</td>
|
||||
<!-- 遍历每个评审者在该轮次的结果 -->
|
||||
<template v-for="(iken, reviewerIndex) in reviewList">
|
||||
<td style="">
|
||||
<span style="cursor: pointer"
|
||||
v-if="Array.isArray(iken.repeat) && iken.repeat[index1]"
|
||||
>
|
||||
<span style="display: inline-block; margin-left: 4px; margin-right: 8px">
|
||||
<font
|
||||
v-if="iken.repeat[index1].recommend == 1"
|
||||
style="
|
||||
width: 12px;
|
||||
height: 12px;
|
||||
display: block;
|
||||
border-radius: 10px;
|
||||
background-color: #67c23a;
|
||||
"
|
||||
>
|
||||
</font>
|
||||
<font
|
||||
v-if="iken.repeat[index1].recommend == 2"
|
||||
style="
|
||||
width: 12px;
|
||||
height: 12px;
|
||||
display: block;
|
||||
border-radius: 10px;
|
||||
background-color: #f56c6c;
|
||||
"
|
||||
>
|
||||
</font>
|
||||
<font
|
||||
v-if="iken.repeat[index1].recommend == 3"
|
||||
style="
|
||||
width: 12px;
|
||||
height: 12px;
|
||||
display: block;
|
||||
border-radius: 10px;
|
||||
background-color: #006699;
|
||||
"
|
||||
>
|
||||
</font>
|
||||
</span>
|
||||
<span v-if="iken.repeat[index1].recommend == 1">Accept</span>
|
||||
<span v-else-if="iken.repeat[index1].recommend == 2">Reject</span>
|
||||
<span v-else-if="iken.repeat[index1].recommend == 3">Revision</span>
|
||||
<span v-else>No reply</span>
|
||||
|
||||
</span>
|
||||
<span v-else>-</span>
|
||||
</td>
|
||||
<td>
|
||||
<p style="line-height: 30px;" v-if="iken.repeat[index1].ctime > 0">{{ iken.repeat[index1].ctime | formatDatehms }}</p>
|
||||
</td>
|
||||
<td><p style="line-height: 30px;" v-if="iken.repeat[index1].stime > 0">{{ iken.repeat[index1].stime | formatDatehms }}</p>
|
||||
<p v-else style="" class="stime">Re-reviewing...</p></td>
|
||||
<td>
|
||||
<el-button v-if="[1,2,3].includes(iken.repeat[index1].recommend)"
|
||||
style="margin-left: 10px"
|
||||
type="text"
|
||||
@click="showSecondReview(iken.repeat[index1].question)"
|
||||
icon="el-icon-view"
|
||||
>Details</el-button
|
||||
>
|
||||
|
||||
</td>
|
||||
</template>
|
||||
</tr>
|
||||
</template>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- <el-form-item label="Article file">
|
||||
<el-popover placement="right" width="350" trigger="click">
|
||||
<el-table :data="articlefileList">
|
||||
@@ -751,6 +912,7 @@ export default {
|
||||
FdialogFormVisible: false,
|
||||
dialogFormVisible1: false,
|
||||
recordList: [],
|
||||
reviewList: [],
|
||||
journal_id: null,
|
||||
baseUrl: this.Common.baseUrl,
|
||||
mediaUrl: this.Common.mediaUrl,
|
||||
@@ -812,11 +974,44 @@ export default {
|
||||
created: function () {
|
||||
this.getDate();
|
||||
this.initFileList();
|
||||
|
||||
this.initquesion();
|
||||
this.getHistoryList();
|
||||
},
|
||||
computed: {},
|
||||
methods: {
|
||||
maxRepeatReviewCount() {
|
||||
if (!this.reviewList || !Array.isArray(this.reviewList)) return null; // 边界处理:无数据返回null
|
||||
|
||||
// 遍历所有评审者,找到repeat数组长度最大的那条数据
|
||||
const maxItem = this.reviewList.reduce((maxItem, currentItem) => {
|
||||
// 计算当前项的repeat长度,非数组则视为0
|
||||
const currentLen = Array.isArray(currentItem.repeat) ? currentItem.repeat.length : 0;
|
||||
// 计算当前最大项的repeat长度,非数组则视为0
|
||||
const maxLen = Array.isArray(maxItem.repeat) ? maxItem.repeat.length : 0;
|
||||
|
||||
// 如果当前项长度更大,则更新最大项
|
||||
return currentLen > maxLen ? currentItem : maxItem;
|
||||
}, {}); // 初始值设为一个空对象
|
||||
// console.log('maxItem at line 2142:', maxItem.repeat.length)
|
||||
return maxItem && maxItem.repeat ? maxItem.repeat.length : 0;
|
||||
},
|
||||
getReviewList() {
|
||||
this.$api
|
||||
|
||||
.post('api/Finalreview/getArticleFinalReview', {
|
||||
article_id: this.articleId
|
||||
})
|
||||
.then(async (res) => {
|
||||
if (res.status == 1) {
|
||||
if (res.status == 1) {
|
||||
|
||||
// this.reviewList = res.data.review.filter(e=>e.art_rev_id==this.questionform.art_rev_id);
|
||||
}
|
||||
}
|
||||
})
|
||||
.catch((err) => {});
|
||||
},
|
||||
// 显示复审对话框
|
||||
showSecondReview(item) {
|
||||
this.FdialogFormVisible = true;
|
||||
@@ -853,18 +1048,73 @@ export default {
|
||||
this.FdialogFormVisible = false;
|
||||
this.ReReviewQuestion = {};
|
||||
},
|
||||
// 2. 定义所有必需字段(确保所有数据结构统一)
|
||||
|
||||
// 3. 核心函数:提取第一个元素,剩余放入 repeat
|
||||
splitQuestion(questionArr = []) {
|
||||
const requiredFields = [
|
||||
'rev_qu_id', 'art_rev_id', 'type',
|
||||
'art_rev_rep_id', 'recommend', 'score', 'state',
|
||||
'reviewer_id', 'realname', 'ctime', 'stime','is_anonymous'
|
||||
];
|
||||
// 解构数组:firstItem 取第一个元素,restItems 取剩余所有元素
|
||||
const [firstItem = {}, ...restItems] = questionArr;
|
||||
|
||||
// 工具函数:补全单个对象的必需字段(空值用 null 填充)
|
||||
const completeFields = (item) => {
|
||||
console.log('item at line 1056:', item)
|
||||
const result = {question:item};
|
||||
requiredFields.forEach(field => {
|
||||
result[field] = item[field] ? item[field]: '';
|
||||
});
|
||||
return result;
|
||||
};
|
||||
|
||||
// 补全第一个元素的字段
|
||||
const firstCompleted = completeFields(firstItem);
|
||||
|
||||
// 补全剩余元素的字段,存入 repeat 数组
|
||||
const repeat = restItems.map(item => completeFields(item));
|
||||
|
||||
// 返回结果:按需选择格式(二选一)
|
||||
return {...firstCompleted, repeat: repeat}
|
||||
|
||||
|
||||
|
||||
|
||||
},
|
||||
|
||||
|
||||
// 获取历史审稿列表
|
||||
getHistoryList() {
|
||||
async getHistoryList() {
|
||||
this.loading = true;
|
||||
this.$api
|
||||
.post('api/Reviewer/getReviewerRepeatDetail', {
|
||||
art_rev_id: this.$route.query.id
|
||||
})
|
||||
.then((res) => {
|
||||
.then(async(res) => {
|
||||
this.loading = false;
|
||||
if (res.code == 0) {
|
||||
// this.reviewList=[{...res.data.art_rev_info}]
|
||||
if (res.data.art_rev_info.question && res.data.art_rev_info.question[0] != null) {
|
||||
this.recordList = res.data.art_rev_info.question.reverse();
|
||||
|
||||
// 4. 调用函数得到结果
|
||||
this.reviewList = [await this.splitQuestion(res.data.art_rev_info.question)];
|
||||
|
||||
if(this.reviewList.length>0){
|
||||
|
||||
this.$api
|
||||
.post('api/Workbench/updateArticleState', {
|
||||
article_id: res.data.article_info.article_id,
|
||||
act_p_id: this.$route.query.id,
|
||||
type: '1,2',
|
||||
account: localStorage.getItem('U_name')
|
||||
})
|
||||
|
||||
}
|
||||
console.log('at line 1094:', this.reviewList)
|
||||
|
||||
// this.recordList = res.data.art_rev_info.question.reverse();
|
||||
}
|
||||
} else {
|
||||
this.$message.error(res.msg);
|
||||
@@ -937,6 +1187,7 @@ export default {
|
||||
this.canRepeat = res.can_repeat;
|
||||
this.journal_id = res.journal_id;
|
||||
this.articleId = res.article_id;
|
||||
this.getReviewList()
|
||||
})
|
||||
.catch((err) => {
|
||||
console.log(err);
|
||||
@@ -1039,6 +1290,15 @@ export default {
|
||||
this.$message.error('服务器上传错误:' + res.msg);
|
||||
}
|
||||
},
|
||||
handleClick(item) {
|
||||
console.log('item at line 1228:', item);
|
||||
this.$router.push({
|
||||
path: 'articleReviewerDetail',
|
||||
query: {
|
||||
id: item.art_rev_id
|
||||
}
|
||||
});
|
||||
},
|
||||
formatDate(timestamp) {
|
||||
var date = new Date(timestamp * 1000); //时间戳为10位需*1000,时间戳为13位的话不需乘1000
|
||||
var Y = date.getFullYear() + '-';
|
||||
@@ -1101,5 +1361,41 @@ export default {
|
||||
}
|
||||
::v-deep .el-dialog__body{
|
||||
padding: 10px 20px 20px !important;
|
||||
}.review_table {
|
||||
width: 100%;
|
||||
background-color: #fff;
|
||||
/* margin-top: 10px; */
|
||||
border-collapse: collapse; /* 合并表格边框 */
|
||||
}
|
||||
|
||||
.review_table th,
|
||||
td {
|
||||
padding: 6px;
|
||||
min-width: 70px;
|
||||
border: 1px solid #ddd;
|
||||
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.review_table th {
|
||||
font-size: 14px;
|
||||
background-color: #f0f0f0;
|
||||
}
|
||||
.review_table td {
|
||||
font-size: 14px;
|
||||
/* background-color: #f0f0f0; */
|
||||
}
|
||||
.review_table th:first-child, .review_table td:first-child {
|
||||
width: 100px;
|
||||
/* 内容过长时自动换行 */
|
||||
word-wrap: break-word;
|
||||
/* 强制在单词内换行(针对长单词) */
|
||||
word-break: break-all;
|
||||
}
|
||||
.review_table tr:hover {
|
||||
/* background-color: #fff; */
|
||||
}
|
||||
.overflow-x-auto {
|
||||
overflow-x: auto;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -26,15 +26,15 @@
|
||||
<template v-if="detailDate.article_final">
|
||||
<el-form-item label="Comment for authors : " prop="suggest_for_author">
|
||||
|
||||
<div style="color: #888;" :class="{ 'short-content': !showFullContent1 }"
|
||||
@click="showFullContent1=!showFullContent1">
|
||||
<div style="color: #888;"
|
||||
>
|
||||
{{ detailDate.article_final.suggest_for_author? detailDate.article_final.suggest_for_author : 'No comment' }}
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="Comment for editor : " prop="suggest_for_editor">
|
||||
|
||||
<div style="color: #888;" :class="{ 'short-content': !showFullContent2 }"
|
||||
@click="showFullContent1=!showFullContent2">
|
||||
<div style="color: #888;"
|
||||
>
|
||||
{{ detailDate.article_final.suggest_for_editor? detailDate.article_final.suggest_for_editor : 'No comment' }}
|
||||
</div>
|
||||
</el-form-item>
|
||||
|
||||
@@ -696,7 +696,7 @@ export default {
|
||||
//获取内容
|
||||
async getContent(type) {
|
||||
var content = window.tinymce.get(this.tinymceId).getContent();
|
||||
console.log('content at line 627:', content);
|
||||
|
||||
content = content.replace(/<span[^>]*>/g, '').replace(/<\/span>/g, ''); // 去除span标签
|
||||
|
||||
content = content.replace(/<strong>/g, '<b>').replace(/<\/strong>/g, '</b>');
|
||||
|
||||
@@ -27,12 +27,13 @@
|
||||
<div class="journal-dropdown" v-if="showDropdown && filteredJournals.length">
|
||||
<div class="journal-item" v-for="journal in filteredJournals" :key="journal.id" @click="selectJournal(journal)">
|
||||
<div class="flexBox alignCenter justBetween">
|
||||
<img
|
||||
<img v-if="journal.journal_icon"
|
||||
:src="journalUrl+journal.journal_icon"
|
||||
:alt="journal.title"
|
||||
class=""
|
||||
style="width: 35px; height: 45px"
|
||||
/>
|
||||
<img src="" alt="" v-else style="background-color: #e0e0e0;width: 35px; height: 45px">
|
||||
<div class="journal-title">{{ journal.title }}</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -87,7 +88,7 @@ export default {
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
journalUrl: 'https://www.tmrjournals.com/public/journalicon/',
|
||||
journalUrl: '',
|
||||
searchTerm: '',
|
||||
showDropdown: false,
|
||||
selectedJournal: null,
|
||||
|
||||
@@ -45,16 +45,9 @@
|
||||
|
||||
<script>
|
||||
export default {
|
||||
props: {
|
||||
userId: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
articleId: {
|
||||
type: String,
|
||||
default: ''
|
||||
}
|
||||
},
|
||||
props: ['userId','articleId'],
|
||||
|
||||
|
||||
data() {
|
||||
return {
|
||||
rules1:{},
|
||||
|
||||
@@ -240,7 +240,6 @@ export default {
|
||||
.then((res) => {
|
||||
console.log('res at line 222:', res);
|
||||
if (res.code == 0) {
|
||||
|
||||
window.location.href = res.data.detail.paystation_url;
|
||||
loading.close();
|
||||
} else {
|
||||
|
||||
@@ -1,25 +1,28 @@
|
||||
<template>
|
||||
<div class="success-box" v-if="articleInfo.order_sn">
|
||||
<div class="payment-success">
|
||||
<div class="success-box" v-if="articleInfo&&(articleInfo.state==0||articleInfo.state==1)">
|
||||
<div :class="{'payment-success': articleInfo.state==1, 'payment-failed': articleInfo.state==0}">
|
||||
<div style="display: flex; align-items: center; margin-bottom: 10px">
|
||||
<h2 style="margin: 0 auto; display: flex; align-items: center">
|
||||
<img src="@/assets/img/success.png" alt="" style="margin-right: 20px; width: 128px; height: 128px" />Payment Successful
|
||||
</h2>
|
||||
<img v-if="articleInfo.state==1" src="@/assets/img/success.png" alt="" style="margin-right: 20px; width: 128px; height: 128px" />
|
||||
<img v-if="articleInfo.state==0" src="@/assets/img/error.png" alt="" style="margin-right: 20px; width: 128px; height: 128px" />
|
||||
{{ articleInfo.state==1 ? 'Payment Successful' : 'Payment Failed' }}
|
||||
</h2>
|
||||
</div>
|
||||
<p>Thank you for your payment. Your order has been successfully processed.</p>
|
||||
<p>
|
||||
<p v-if="articleInfo.state==1">Thank you for your payment. Your order has been successfully processed.</p>
|
||||
<p v-else>We are sorry, but your payment has failed. Please try again.</p>
|
||||
<!-- <p>
|
||||
Article ID:
|
||||
|
||||
<span style="color: #333; font-weight: 600"> {{ articleInfo.order_sn }}</span>
|
||||
</p>
|
||||
<p>
|
||||
</p> -->
|
||||
<p v-if="articleInfo.state==1">
|
||||
Total Amount: <span style="color: #ff5000"></span
|
||||
><span style="color: #ff5000; font-size: 24px; line-height: 24px">{{ formatAmount(total) }} <span class="" style="font-size: 20px;">{{ articleInfo.paystation.currency }}</span></span>
|
||||
</p>
|
||||
<!-- <p>Payment Method: {{ paymentMethod }}</p> -->
|
||||
<p>You will receive an email confirmation shortly.</p>
|
||||
<button @click="goBack">Continue Operation</button>
|
||||
<p style="color: #67c23a; font-size: 13px; line-height: 40px">Automatically jump after {{ hideSec }} seconds</p>
|
||||
<p v-if="articleInfo.state==1">You will receive an email confirmation shortly.</p>
|
||||
<button @click="goBack" :class="articleInfo.state==1?'btn-success':'btn-danger'">Continue Operation</button>
|
||||
<p :style="articleInfo.state==1?'color:#67c23a':'color:#F56C6C'" style="font-size: 13px; line-height: 40px">Automatically jump after {{ hideSec }} seconds</p>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
@@ -49,18 +52,27 @@ export default {
|
||||
},
|
||||
methods: {
|
||||
hideAlert() {
|
||||
this.dingshi = setInterval(() => {
|
||||
this.dingshi = setInterval(() => {
|
||||
this.hideSec -= 1;
|
||||
// console.log(this.hideSec)
|
||||
if (this.hideSec == 0) {
|
||||
if (this.hideSec == 1) {
|
||||
this.goBack();
|
||||
return false
|
||||
}
|
||||
|
||||
// console.log(this.hideSec)
|
||||
|
||||
}, 1000);
|
||||
},
|
||||
formatAmount(amount) {
|
||||
return amount.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
|
||||
},
|
||||
getDetail() {
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: 'Querying payment results...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: 'rgba(0, 0, 0, 0.7)'
|
||||
});
|
||||
this.$api
|
||||
.post(this.urlList.detail, {
|
||||
article_id: this.articleId
|
||||
@@ -68,11 +80,16 @@ export default {
|
||||
.then((res) => {
|
||||
console.log('res at line 191:', res);
|
||||
if (res.code == 0) {
|
||||
this.articleInfo = res.data.order;
|
||||
// this.journalInfo = res.data.journal_detail;
|
||||
|
||||
setTimeout(() => {
|
||||
loading.close();
|
||||
this.articleInfo = res.data.order;
|
||||
|
||||
this.total = Number(res.data.order.paystation.amount / 100);
|
||||
}, 1000);
|
||||
|
||||
}
|
||||
}).catch(() => {
|
||||
loading.close();
|
||||
});
|
||||
},
|
||||
goBack() {
|
||||
@@ -119,6 +136,18 @@ export default {
|
||||
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); /* 添加阴影效果 */
|
||||
width: 600px;
|
||||
}
|
||||
.payment-failed {
|
||||
margin-top: 40px;
|
||||
margin: 0 auto;
|
||||
text-align: center;
|
||||
padding: 20px;
|
||||
background-color: #fff;
|
||||
border: 1px solid #fcc3c3;
|
||||
border-radius: 16px;
|
||||
color: #F56C6C;
|
||||
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); /* 添加阴影效果 */
|
||||
width: 600px;
|
||||
}
|
||||
|
||||
h2 {
|
||||
margin-bottom: 20px;
|
||||
@@ -130,7 +159,7 @@ p {
|
||||
|
||||
button {
|
||||
padding: 10px 20px;
|
||||
background-color: #00c286;
|
||||
|
||||
color: #fff;
|
||||
border: none;
|
||||
border-radius: 5px;
|
||||
@@ -138,9 +167,20 @@ button {
|
||||
margin-top: 20px;
|
||||
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); /* 按钮添加阴影效果 */
|
||||
}
|
||||
|
||||
.btn-success{
|
||||
background-color: #00c286;
|
||||
}
|
||||
.btn-danger{
|
||||
background-color: #F56C6C;
|
||||
}
|
||||
.btn-success:hover{
|
||||
background-color: #00c286;
|
||||
}
|
||||
.btn-danger:hover{
|
||||
background-color: #F56C6C;
|
||||
}
|
||||
button:hover {
|
||||
background-color: #00c286;
|
||||
|
||||
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.3); /* 按钮悬停时的阴影效果 */
|
||||
}
|
||||
.success-box {
|
||||
|
||||
@@ -74,34 +74,62 @@
|
||||
Batch Add content
|
||||
</li>
|
||||
</ul>
|
||||
</div> --> <li
|
||||
v-if="isEditComment&&!isPreview&&activeName=='proofreading'"
|
||||
style="border-radius: 4px;cursor: pointer;
|
||||
height: 26px;margin-left:30px;line-height: 26px;padding: 2px 10px;background-color: #006699 !important; color: #fff; border: 1px solid #006699;position: absolute;left: 0"
|
||||
|
||||
@click="handleClickAI()"
|
||||
>
|
||||
|
||||
</div> -->
|
||||
|
||||
Manuscirpt AI Proofreading
|
||||
</li>
|
||||
|
||||
|
||||
<li
|
||||
style="
|
||||
|
||||
list-style: none;
|
||||
height: 26px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
position: absolute;
|
||||
left: 10px;
|
||||
"
|
||||
|
||||
> <el-button
|
||||
@click="handleUncheck"
|
||||
v-if="!isPreview"
|
||||
style=""
|
||||
plain
|
||||
type="info"
|
||||
>{{ $t('commonTable.Uncheck') }}</el-button
|
||||
>
|
||||
<div @click="handleClickAI()" v-if="isEditComment && !isPreview && activeName == 'proofreading'"
|
||||
style="
|
||||
font-size: 12px;
|
||||
border-radius: 4px;
|
||||
cursor: pointer;
|
||||
|
||||
|
||||
margin-left: 10px;
|
||||
line-height: 26px;
|
||||
padding: 2px 10px;
|
||||
background-color: #006699 !important;
|
||||
color: #fff;
|
||||
border: 1px solid #006699;
|
||||
|
||||
">{{ $t('commonTable.ManuscirptAIProofreading') }}</div>
|
||||
|
||||
</li>
|
||||
</div>
|
||||
|
||||
<div style="padding: 0 0px; float: right">
|
||||
<ul class="operateBox" >
|
||||
|
||||
<ul class="operateBox">
|
||||
<div style="border-right: 1px solid #d8d8d8; padding: 0 20px">
|
||||
<ul class="HTitleBox" style="border: none">
|
||||
<li @click="addContent" style="font-size: 14px; padding: 0; background-color: #fff !important; color: #333">
|
||||
<li @click="addContent" style="font-size: 12px; padding: 0; background-color: #fff !important; color: #333">
|
||||
<i class="el-icon-document" style="margin-right: 2px"> </i>
|
||||
Batch Add content
|
||||
{{ $t('commonTable.BatchAddcontent') }}
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<li style="background-color: #cbccd1 !important; color: #333; border: 1px solid #cbccd1" @click="onAddRow">
|
||||
<li style="background-color: #cbccd1 !important;font-size: 12px; color: #333; border: 1px solid #cbccd1" @click="onAddRow">
|
||||
<i class="el-icon-document-add" style="margin-top: 2px"></i>
|
||||
|
||||
Row
|
||||
{{ $t('commonTable.Row') }}
|
||||
</li>
|
||||
|
||||
<!-- <li style="" @click="onEdit">
|
||||
@@ -110,10 +138,10 @@
|
||||
Edit
|
||||
</li> -->
|
||||
|
||||
<li style="background-color: #fc625d !important" @click="onDelete">
|
||||
<li style="background-color: #fc625d !important;font-size: 12px;" @click="onDelete">
|
||||
<i class="el-icon-delete" style="margin-top: 2px"></i>
|
||||
|
||||
Delete
|
||||
{{ $t('commonTable.delete') }}
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
@@ -137,21 +165,23 @@
|
||||
position: relative;
|
||||
"
|
||||
>
|
||||
<!-- <div v-if="selectedIds.length > 0" class="selected-to-here">
|
||||
Selected to here: {{ selectedIds[selectedIds.length - 1] }}
|
||||
</div> -->
|
||||
|
||||
<!-- <common-late-x></common-late-x> -->
|
||||
<template v-for="(item, index) in wordList">
|
||||
<template v-for="(item, index) in wordList" >
|
||||
|
||||
<el-checkbox
|
||||
@change="updateUniqueIds"
|
||||
v-if="!isPreview"
|
||||
v-model="item.checked"
|
||||
|
||||
@change="(e)=>updateUniqueIds(e,item.am_id)"
|
||||
v-if="!isPreview"
|
||||
:value="isChecked(item.am_id)"
|
||||
|
||||
style="position: absolute; left: -20px; width: 8px; height: 8px; margin-top: 8px; z-index: 10"
|
||||
></el-checkbox>
|
||||
|
||||
|
||||
<span
|
||||
@click="handleClickProofreadingList([item.am_id])"
|
||||
v-if="!isPreview&&
|
||||
v-if="
|
||||
!isPreview &&
|
||||
isEditComment &&
|
||||
item.proof_read_num &&
|
||||
item.proof_read_num > 0 &&
|
||||
@@ -175,7 +205,14 @@
|
||||
>
|
||||
<span
|
||||
@click="handleClickProofreadingList([item.am_id])"
|
||||
v-if="!isPreview&&isEditComment && item.proof_read_num == -1 && item.is_proofread == 1 && item.type == 0 && item.content != ''"
|
||||
v-if="
|
||||
!isPreview &&
|
||||
isEditComment &&
|
||||
item.proof_read_num == -1 &&
|
||||
item.is_proofread == 1 &&
|
||||
item.type == 0 &&
|
||||
item.content != ''
|
||||
"
|
||||
style="
|
||||
z-index: 2;
|
||||
background-color: #fff;
|
||||
@@ -192,7 +229,14 @@
|
||||
></span>
|
||||
<span
|
||||
@click="handleClickProofreadingList([item.am_id])"
|
||||
v-if="!isPreview&&isEditComment && item.proof_read_num == 0 && item.is_proofread == 1 && item.type == 0 && item.content != ''"
|
||||
v-if="
|
||||
!isPreview &&
|
||||
isEditComment &&
|
||||
item.proof_read_num == 0 &&
|
||||
item.is_proofread == 1 &&
|
||||
item.type == 0 &&
|
||||
item.content != ''
|
||||
"
|
||||
style="
|
||||
z-index: 2;
|
||||
background-color: #fff;
|
||||
@@ -209,7 +253,7 @@
|
||||
></span>
|
||||
<span
|
||||
@click="handleClickProofreadingList([item.am_id])"
|
||||
v-if="!isPreview&&isEditComment && item.is_proofread == 2 && item.type == 0 && item.content != ''"
|
||||
v-if="!isPreview && isEditComment && item.is_proofread == 2 && item.type == 0 && item.content != ''"
|
||||
style="
|
||||
z-index: 2;
|
||||
background-color: #fff;
|
||||
@@ -449,7 +493,7 @@
|
||||
</div>
|
||||
<div class="pagination-box" style="" v-if="isEditComment && activeName == 'proofreading'">
|
||||
<el-tooltip
|
||||
v-if="totalItems > 0&&totalNumbers>0"
|
||||
v-if="totalItems > 0 && totalNumbers > 0"
|
||||
class="item"
|
||||
effect="dark"
|
||||
:content="`There are ${totalItems} paragraphs with unresolved errors in the Manuscirpt`"
|
||||
@@ -1020,11 +1064,6 @@
|
||||
</el-tabs>
|
||||
</div>
|
||||
|
||||
<!-- <form method="post"> -->
|
||||
|
||||
<!-- </form> -->
|
||||
|
||||
<!-- <textarea class="tinymce-textarea" :id="tinymceId"></textarea> -->
|
||||
|
||||
<div v-if="isMenuVisible" class="context-menu" :style="{ top: `${menuPosition.y}px`, left: `${menuPosition.x}px` }">
|
||||
<ul>
|
||||
@@ -1210,7 +1249,7 @@ b span{
|
||||
border-top:none;mso-border-top-alt:none !important;
|
||||
border-bottom:none !important;
|
||||
mso-border-bottom-alt:none !important;
|
||||
|
||||
|
||||
word-break: keep-all !important;
|
||||
// text-align: justify !important; // 设置两端对齐
|
||||
|
||||
@@ -1292,7 +1331,7 @@ export default {
|
||||
}
|
||||
},
|
||||
comments: {
|
||||
type: Object,
|
||||
type: [Array, Object], // 允许数组或对象
|
||||
|
||||
default() {
|
||||
return {};
|
||||
@@ -1409,7 +1448,7 @@ export default {
|
||||
formLabelWidth: '120px',
|
||||
hasChange: false,
|
||||
hasInit: false,
|
||||
// selectedIds:[],
|
||||
selectedIds:[],
|
||||
tinymceId: this.id || 'vue-tinymce-' + +new Date()
|
||||
};
|
||||
},
|
||||
@@ -1417,9 +1456,12 @@ export default {
|
||||
watch: {
|
||||
contentList: {
|
||||
handler(val) {
|
||||
console.log('val at line 550:', val);
|
||||
if (val) {
|
||||
this.wordList = [...this.contentList];
|
||||
this.wordList = [...this.contentList]
|
||||
this.selectedIds=[]
|
||||
console.log('this.selectedIds at line 1460:', this.selectedIds)
|
||||
this.$forceUpdate()
|
||||
|
||||
if (this.isEditComment && this.activeName == 'proofreading') {
|
||||
this.calcMarkers();
|
||||
}
|
||||
@@ -1433,7 +1475,7 @@ export default {
|
||||
},
|
||||
totalNumbers: {
|
||||
handler(val) {
|
||||
console.log('val at line 550:', val);
|
||||
|
||||
if (val == 0) {
|
||||
this.markers = [];
|
||||
}
|
||||
@@ -1442,7 +1484,7 @@ export default {
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
sortedProofreadingList() {
|
||||
sortedProofreadingList() {
|
||||
const order = [2, 1, 3];
|
||||
const rank = { 2: 0, 1: 1, 3: 2 };
|
||||
|
||||
@@ -1459,9 +1501,10 @@ export default {
|
||||
return Object.assign({}, group, { data: data.slice().sort(cmp) });
|
||||
});
|
||||
},
|
||||
selectedIds() {
|
||||
return this.wordList.filter((item) => item.checked).map((item) => item.am_id);
|
||||
}
|
||||
// selectedIds() {
|
||||
|
||||
// return this.wordList.filter(item => item.checked).map(item => item.am_id);
|
||||
// }
|
||||
},
|
||||
updated() {
|
||||
// 恢复子组件的滚动位置
|
||||
@@ -1518,21 +1561,32 @@ export default {
|
||||
this.editors = {};
|
||||
},
|
||||
methods: {
|
||||
handleClickAI(){
|
||||
this.$api.post('api/Proofread/proofReadByArticle', {
|
||||
article_id:this.$route.query.id
|
||||
}).then(async (res) => {
|
||||
if (res.status == 1 ) {
|
||||
|
||||
this.$message.success(res.msg);
|
||||
}else{
|
||||
this.$message.error(res.msg);
|
||||
}
|
||||
|
||||
|
||||
}).catch((err) => {
|
||||
this.$message.error(err.message);
|
||||
})
|
||||
isChecked(am_id) {
|
||||
|
||||
// 返回一个函数,接收 am_id 并判断是否存在
|
||||
if(this.selectedIds.includes(am_id)){
|
||||
return true
|
||||
}else{
|
||||
return false
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
handleClickAI() {
|
||||
this.$api
|
||||
.post('api/Proofread/proofReadByArticle', {
|
||||
article_id: this.$route.query.id
|
||||
})
|
||||
.then(async (res) => {
|
||||
if (res.status == 1) {
|
||||
this.$message.success(res.msg);
|
||||
} else {
|
||||
this.$message.error(res.msg);
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
this.$message.error(err.message);
|
||||
});
|
||||
},
|
||||
showcurrentItemIndex() {
|
||||
var index = this.markers.findIndex((e) => e.am_id == this.currentSelectProofreadingId);
|
||||
@@ -1598,12 +1652,12 @@ export default {
|
||||
this.wordList[refreshDataIndex].proof_read_num = res.data.am_id_count;
|
||||
}
|
||||
if (res.data.is_proofread) {
|
||||
this.wordList[refreshDataIndex].is_proofread = res.data.is_proofread;
|
||||
}
|
||||
this.wordList[refreshDataIndex].is_proofread = res.data.is_proofread;
|
||||
}
|
||||
|
||||
this.$forceUpdate();
|
||||
}
|
||||
console.log('this.totalNumbers at line 1474:', this.totalNumbers);
|
||||
|
||||
this.$forceUpdate();
|
||||
}
|
||||
});
|
||||
@@ -1646,9 +1700,7 @@ export default {
|
||||
this.markers = out.sort((a, b) => a.top - b.top);
|
||||
if (this.markers.length > 0) {
|
||||
this.totalItems = this.markers.length;
|
||||
console.log('this.totalItems at line 1540:', this.totalItems);
|
||||
// this.currentItem = 1;
|
||||
// await this.getProofreadingList([this.markers[this.currentItem - 1].am_id]);
|
||||
|
||||
}
|
||||
},
|
||||
|
||||
@@ -1774,28 +1826,27 @@ export default {
|
||||
},
|
||||
handleClick(tab, event) {
|
||||
console.log(tab, event);
|
||||
if(this.isEditComment){
|
||||
if (tab.index == 0) {
|
||||
this.activeName == 'proofreading';
|
||||
this.isShowPiZhu = false;
|
||||
this.currentItem = 1;
|
||||
this.initMarkersList();
|
||||
if (this.isEditComment) {
|
||||
if (tab.index == 0) {
|
||||
this.activeName == 'proofreading';
|
||||
this.isShowPiZhu = false;
|
||||
this.currentItem = 1;
|
||||
this.initMarkersList();
|
||||
} else {
|
||||
this.proofreadingList = [];
|
||||
this.markers = [];
|
||||
this.currentSelectProofreadingId = '';
|
||||
this.activeName == 'Comment';
|
||||
this.isShowPiZhu = true;
|
||||
}
|
||||
} else {
|
||||
this.proofreadingList = [];
|
||||
this.markers = [];
|
||||
this.currentSelectProofreadingId = '';
|
||||
this.activeName == 'Comment';
|
||||
this.isShowPiZhu = true;
|
||||
}
|
||||
}else{
|
||||
this.proofreadingList = [];
|
||||
this.markers = [];
|
||||
this.currentSelectProofreadingId = '';
|
||||
this.activeName == 'Comment';
|
||||
this.isShowPiZhu = true;
|
||||
this.getCommentsData();
|
||||
}
|
||||
|
||||
|
||||
this.$nextTick(() => {
|
||||
window.renderMathJax();
|
||||
@@ -1873,9 +1924,21 @@ export default {
|
||||
addContent() {
|
||||
if (this.currentId) {
|
||||
this.$emit('addContent', this.currentId);
|
||||
} else {
|
||||
|
||||
} else if (this.selectedIds && this.selectedIds.length > 0) {
|
||||
if (this.selectedIds.length == 1) {
|
||||
this.$emit('addContent', this.selectedIds[0]);
|
||||
|
||||
} else {
|
||||
this.$message.warning(this.$t('commonTable.selectOne'));
|
||||
return;
|
||||
}
|
||||
|
||||
}else{
|
||||
this.$message.warning('Please select content');
|
||||
return;
|
||||
}
|
||||
|
||||
},
|
||||
cacheSelection() {
|
||||
const selection = window.getSelection();
|
||||
@@ -1965,22 +2028,54 @@ export default {
|
||||
this.cachedMainId = null;
|
||||
this.cachedType = null;
|
||||
},
|
||||
updateUniqueIds() {
|
||||
updateUniqueIds(e,am_id) {
|
||||
|
||||
this.currentId = null;
|
||||
this.currentData = {};
|
||||
|
||||
|
||||
console.log('this.selectedIds at line 917:', this.selectedIds);
|
||||
// this.uniqueIds = [...new Set(this.wordList.filter((item) => item.checked).map((item) => item.am_id))];
|
||||
// console.log('this.uniqueIds at line 839:', this.selectedIds);
|
||||
this.$forceUpdate();
|
||||
if (e ) {
|
||||
// 数组:不存在则添加
|
||||
if (!this.selectedIds.includes(am_id)) {
|
||||
this.selectedIds.push(am_id);
|
||||
}
|
||||
} else if (!e ) {
|
||||
// 数组:存在则删除
|
||||
const index = this.selectedIds.indexOf(am_id);
|
||||
if (index > -1) {
|
||||
this.selectedIds.splice(index, 1);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
this.$forceUpdate();
|
||||
},
|
||||
handleUncheck() {
|
||||
this.currentId = null;
|
||||
this.currentData = {};
|
||||
this.selectedIds = [];
|
||||
this.$forceUpdate()
|
||||
},
|
||||
onEdit() {
|
||||
this.currentData = this.currentData;
|
||||
this.$emit('onEdit', this.currentId);
|
||||
},
|
||||
onAddRow() {
|
||||
this.currentData = this.currentData;
|
||||
this.$emit('onAddRow', this.currentId);
|
||||
if (this.currentId) {
|
||||
this.$emit('onAddRow', this.currentId);
|
||||
|
||||
} else if (this.selectedIds && this.selectedIds.length > 0) {
|
||||
if (this.selectedIds.length == 1) {
|
||||
this.$emit('onAddRow', this.selectedIds[0]);
|
||||
} else {
|
||||
this.$message.warning(this.$t('commonTable.selectOne'));
|
||||
return;
|
||||
}
|
||||
|
||||
}else{
|
||||
this.$message.warning('Please select content');
|
||||
return;
|
||||
}
|
||||
},
|
||||
onDelete() {
|
||||
// console.log('this.uniqueIds.length at line 866:', this.selectedIds.length);
|
||||
@@ -1989,8 +2084,11 @@ export default {
|
||||
this.$forceUpdate();
|
||||
}
|
||||
|
||||
if (this.currentId) {
|
||||
else if (this.currentId) {
|
||||
this.$emit('onDelete', this.currentId);
|
||||
}else{
|
||||
this.$message.warning('Please select content');
|
||||
return;
|
||||
}
|
||||
},
|
||||
|
||||
@@ -2134,20 +2232,18 @@ export default {
|
||||
});
|
||||
},
|
||||
refreshCurrentData(am_id, newData, type) {
|
||||
console.log('newData at line 2106:', newData)
|
||||
console.log('newData at line 2106:', newData);
|
||||
var refreshData = { ...this.wordList.find((e) => e.am_id == am_id) };
|
||||
var refreshDataIndex = this.wordList.findIndex((e) => e.am_id == am_id);
|
||||
if (refreshData.type == 0) {
|
||||
this.$nextTick(() => {
|
||||
|
||||
|
||||
if (newData.am_id_count || newData.am_id_count == 0) {
|
||||
this.wordList[refreshDataIndex].proof_read_num = newData.am_id_count;
|
||||
}
|
||||
if (newData.sum_count || newData.sum_count == 0) {
|
||||
this.totalNumbers = newData.sum_count;
|
||||
|
||||
}if (type != 'delete') {
|
||||
}
|
||||
if (type != 'delete') {
|
||||
this.wordList[refreshDataIndex].content = newData.content;
|
||||
this.wordList[refreshDataIndex].text = newData.content;
|
||||
}
|
||||
@@ -2434,7 +2530,7 @@ export default {
|
||||
image_advtab: false, // 禁用图片高级选项卡(防止自动调整大小)
|
||||
plugins: 'forecolor code paste table image resize ',
|
||||
content_style: `${tableStyle + this.wordStyle}
|
||||
|
||||
|
||||
`,
|
||||
entity_encoding: 'raw', // 不编码 > 等字符
|
||||
menubar: false,
|
||||
@@ -2540,7 +2636,7 @@ export default {
|
||||
item.checked = false;
|
||||
});
|
||||
if (!this.isPreview) {
|
||||
if (this.isEditComment&&this.activeName=='proofreading') {
|
||||
if (this.isEditComment && this.activeName == 'proofreading') {
|
||||
if (type == 'text') {
|
||||
this.getProofreadingList([id]);
|
||||
this.getPList(id);
|
||||
@@ -2630,35 +2726,31 @@ export default {
|
||||
await this.goToComment(data.am_id, fn);
|
||||
},
|
||||
divOnScroll() {
|
||||
|
||||
|
||||
if (!this.isPreview) {
|
||||
const sc = this.$refs.scrollDiv; // ★ 用 scrollDiv
|
||||
|
||||
|
||||
var rail = null;
|
||||
|
||||
if(this.isEditComment){
|
||||
rail = this.$refs.rail;
|
||||
|
||||
if (this.isEditComment) {
|
||||
rail = this.$refs.rail;
|
||||
}
|
||||
|
||||
|
||||
if(this.isEditComment){
|
||||
if (!sc || !rail) return;
|
||||
}else{
|
||||
rail=null
|
||||
|
||||
if (this.isEditComment) {
|
||||
if (!sc || !rail) return;
|
||||
} else {
|
||||
rail = null;
|
||||
if (!sc) return;
|
||||
}
|
||||
console.log('sc at line 2618:', sc)
|
||||
|
||||
const contentH = sc.scrollHeight,
|
||||
viewH = sc.clientHeight;
|
||||
const scrollRange = Math.max(1, contentH - viewH);
|
||||
if(rail&&this.isEditComment){
|
||||
const railH = rail.clientHeight;
|
||||
this.viewportHeight = Math.max(6, railH * (viewH / contentH));
|
||||
const vpRange = Math.max(1, railH - this.viewportHeight);
|
||||
this.viewportTop = Math.round(this.mapRange(sc.scrollTop, 0, scrollRange, 0, vpRange));
|
||||
if (rail && this.isEditComment) {
|
||||
const railH = rail.clientHeight;
|
||||
this.viewportHeight = Math.max(6, railH * (viewH / contentH));
|
||||
const vpRange = Math.max(1, railH - this.viewportHeight);
|
||||
this.viewportTop = Math.round(this.mapRange(sc.scrollTop, 0, scrollRange, 0, vpRange));
|
||||
}
|
||||
|
||||
|
||||
this.isMenuVisible = false;
|
||||
this.currentId = null;
|
||||
@@ -2906,7 +2998,7 @@ export default {
|
||||
placeholders.forEach(({ ph, rawHit, ann }) => {
|
||||
const color = this.getRandomLightColor ? this.getRandomLightColor() : 'rgba(255,240,200,.8)';
|
||||
const badge = ann.idx + 1;
|
||||
const span = `<span
|
||||
const span = `<span
|
||||
class="remarkbg"
|
||||
style="background-color:${color};
|
||||
position:relative;
|
||||
@@ -2989,7 +3081,7 @@ export default {
|
||||
placeholders.forEach(({ ph, rawHit, ann }) => {
|
||||
const color = this.getRandomLightColor ? this.getRandomLightColor() : 'rgba(255,240,200,.8)';
|
||||
const badge = ann.idx + 1;
|
||||
const span = `<span
|
||||
const span = `<span
|
||||
class="remarkbg"
|
||||
style="background-color:${color};
|
||||
position:relative;
|
||||
@@ -3064,13 +3156,11 @@ export default {
|
||||
});
|
||||
},
|
||||
getCommentsData() {
|
||||
|
||||
|
||||
if (!this.isPreview) {
|
||||
this.clearHighlight();
|
||||
const divs = document.querySelectorAll('.pMain');
|
||||
const visibleDivs = [];
|
||||
|
||||
|
||||
divs.forEach((div) => {
|
||||
const rect = div.getBoundingClientRect();
|
||||
// 检查 div 是否部分可见(只要它的任何一部分在视口内)
|
||||
@@ -3091,7 +3181,7 @@ export default {
|
||||
});
|
||||
this.commentList = [];
|
||||
this.visibleDivs = [...visibleDivs];
|
||||
console.log('this.visibleDivs at line 3055:', this.visibleDivs)
|
||||
|
||||
|
||||
this.visibleDivs.forEach((e) => {
|
||||
this.commentList.push({
|
||||
@@ -3110,7 +3200,7 @@ export default {
|
||||
this.isEditComment = true;
|
||||
this.isShowPiZhu = false;
|
||||
this.activeName = 'proofreading';
|
||||
this.rightW = 610;
|
||||
this.rightW = 510;
|
||||
} else {
|
||||
this.isEditComment = false;
|
||||
this.isShowPiZhu = true;
|
||||
@@ -3126,7 +3216,7 @@ export default {
|
||||
this.isUserEditComment = false;
|
||||
this.isShowPiZhu = false;
|
||||
this.activeName = 'proofreading';
|
||||
this.rightW = 610;
|
||||
this.rightW = 510;
|
||||
}
|
||||
if (this.isEditComment) {
|
||||
this.$nextTick(() => requestAnimationFrame(this.initMarkersList));
|
||||
@@ -4064,7 +4154,7 @@ export default {
|
||||
display: flex;
|
||||
}
|
||||
.operateBox li {
|
||||
min-width: 55px;
|
||||
min-width: 50px;
|
||||
display: flex;
|
||||
/* flex-direction: column; */
|
||||
justify-content: space-between;
|
||||
|
||||
@@ -18,9 +18,9 @@
|
||||
<!-- <img src="../../assets/img/icon_5.png" alt="" class="icon_img"> -->
|
||||
Final Decision
|
||||
</h2>
|
||||
In this column, the manuscripts that currently need your comments are displayed. You can click
|
||||
<!-- In this column, the manuscripts that currently need your comments are displayed. You can click
|
||||
detail to review
|
||||
or change your comments.
|
||||
or change your comments. -->
|
||||
</div>
|
||||
<ul class="ta1_uli ta1_ulicad">
|
||||
<li v-for="(item,index) in tableData1">
|
||||
@@ -51,7 +51,68 @@
|
||||
</ul>
|
||||
</el-col>
|
||||
|
||||
|
||||
<el-col :span="24" v-if="tableData2!=''">
|
||||
<div style="background-color: #ccc;height: 2px;width: 100%;margin:20px 0 35px 0;"></div>
|
||||
<!-- <el-card class="box-card"> -->
|
||||
<div class="ma_title" style="margin-bottom: 5px;">
|
||||
<h2>
|
||||
<!-- <img src="../../assets/img/icon_1.png" alt="" class="icon_img"> -->
|
||||
Invitation for Final Decision
|
||||
</h2>
|
||||
This list will show you the manuscript that the editor invited you to Final Decision. You can click on
|
||||
the details to
|
||||
check the content and then decide whether to Final Decision the manuscript. In addtion, you can also
|
||||
refuse to Final Decision
|
||||
the manuscript.
|
||||
</div>
|
||||
<ul class="ta1_uli ta1_ulicad">
|
||||
<li v-for="(item,index) in tableData2">
|
||||
<div>
|
||||
<!-- a_id=6348&r_id=1 -->
|
||||
<router-link :to="{path:'/edit_per_text_yq',query:{a_id:item.article_id,r_id:item.id}}">
|
||||
<h3><span
|
||||
style="margin-right: 6px;color: #006699;">{{index+1}}.</span>{{item.title}}
|
||||
</h3>
|
||||
<el-button type="primary" plain style="float: right;">Detail</el-button>
|
||||
</router-link>
|
||||
</div>
|
||||
<h4>
|
||||
<span>
|
||||
<font style="color: #006699;">Journal : </font>{{item.journal_name}}.
|
||||
</span>
|
||||
<span>
|
||||
<font style="color: #006699;">Type : </font>{{item.article_type_name}}
|
||||
|
||||
</span>
|
||||
<span style="margin-left: 20px;">
|
||||
<font style="color: #006699;">Invitation Time : </font> {{item.ctime}}
|
||||
</span><br>
|
||||
<span v-if="item.abstrart!=''" style="max-width: 1000px;">
|
||||
<font style="color: #006699;">Abstract : </font>{{item.abstrart | ellipsis}}
|
||||
</span>
|
||||
</h4>
|
||||
|
||||
<div style="margin-top: 10px;">
|
||||
<el-button
|
||||
type="success"
|
||||
size="mini"
|
||||
@click="saveNow(item)"
|
||||
|
||||
>I agree to conduct the final review
|
||||
</el-button>
|
||||
<el-button
|
||||
type="danger"
|
||||
size="mini"
|
||||
@click="saveRef(item)"
|
||||
|
||||
>I decline to conduct the final review
|
||||
</el-button>
|
||||
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
<!-- </el-card> -->
|
||||
</el-col>
|
||||
|
||||
<!-- <el-col :span="24">
|
||||
<div style="background-color: #ccc;height: 2px;width: 100%;margin: 30px 0 5px 0;"></div>
|
||||
@@ -142,6 +203,63 @@
|
||||
this.getData();
|
||||
},
|
||||
methods: {
|
||||
saveNow(data) {
|
||||
// 二次确认
|
||||
this.$confirm('Are you sure you want to agree?', 'Tips', {
|
||||
type: 'warning'
|
||||
})
|
||||
.then(() => {
|
||||
this.$api
|
||||
.post('api/Finalreview/review', {
|
||||
article_id: data.article_id,
|
||||
record_id: data.id,
|
||||
reviewer_id: localStorage.getItem('U_id'),
|
||||
state: 0
|
||||
})
|
||||
.then((res) => {
|
||||
if (res.status == 1) {
|
||||
this.$message.success('Review now successfully!');
|
||||
this.$router.push('/edit_per_text?Art_id=' + data.id);
|
||||
} else {
|
||||
this.$message.error(res.msg);
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
this.$message.error(err);
|
||||
});
|
||||
})
|
||||
.catch(() => {});
|
||||
},
|
||||
|
||||
// 拒绝
|
||||
saveRef(data) {
|
||||
// 二次确认
|
||||
this.$confirm('Are you sure you want to refuse?', 'Tips', {
|
||||
type: 'warning'
|
||||
})
|
||||
.then(() => {
|
||||
this.$api
|
||||
.post('api/Finalreview/review', {
|
||||
article_id: data.article_id,
|
||||
record_id: data.id,
|
||||
reviewer_id: localStorage.getItem('U_id'),
|
||||
state: 4
|
||||
})
|
||||
.then((res) => {
|
||||
if (res.status == 1) {
|
||||
this.loading = true;
|
||||
this.getTable();
|
||||
// this.$router.push('/edit_per_text?Art_id=' + this.record_id);
|
||||
} else {
|
||||
this.$message.error(res.msg);
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
this.$message.error(err);
|
||||
});
|
||||
})
|
||||
.catch(() => {});
|
||||
},
|
||||
// 获取数据
|
||||
getData() {
|
||||
this.$api
|
||||
@@ -166,7 +284,29 @@
|
||||
this.$message.error(err);
|
||||
});
|
||||
|
||||
|
||||
this.$api
|
||||
.post('api/Finalreview/lists', {...this.query,state:5})
|
||||
.then(res => {
|
||||
if (res.status == 1) {
|
||||
for (let i = 0; i < res.data.lists.length; i++) {
|
||||
let date = new Date(parseInt(res.data.lists[i].invited_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();
|
||||
res.data.lists[i].ctime = Y + M + D;
|
||||
}
|
||||
this.tableData2 = res.data.lists;
|
||||
|
||||
} else {
|
||||
// this.$message.error(res.msg);
|
||||
this.tableData2 =[]
|
||||
}
|
||||
})
|
||||
.catch(err => {
|
||||
this.$message.error(err);
|
||||
this.tableData2=[]
|
||||
});
|
||||
|
||||
|
||||
},
|
||||
|
||||
@@ -69,14 +69,14 @@
|
||||
size="mini"
|
||||
@click="saveNow(scope.$index, scope.row)"
|
||||
v-if="scope.row.state == 5"
|
||||
>Accept for final decision
|
||||
>I agree to conduct the final review
|
||||
</el-button>
|
||||
<el-button
|
||||
type="danger"
|
||||
size="mini"
|
||||
@click="saveRef(scope.$index, scope.row)"
|
||||
v-if="scope.row.state == 5"
|
||||
>Decline final review
|
||||
>I decline to conduct the final review
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
@@ -297,7 +297,7 @@ this.getDate(data.id)
|
||||
// 获取数据
|
||||
getTable() {
|
||||
this.$api
|
||||
.post('api/Finalreview/lists', this.query)
|
||||
.post('api/Finalreview/lists', {...this.query,state:'1,2,3'})
|
||||
.then((res) => {
|
||||
if (res.status == 1) {
|
||||
this.loading = false;
|
||||
|
||||
@@ -42,9 +42,9 @@
|
||||
</el-col>
|
||||
</el-row>
|
||||
<div style="text-align: center;margin-top: 12px;">
|
||||
<el-button type="success" @click="saveNow()" style="margin-right: 20px;width: 250px;">Accept for final decision
|
||||
<el-button type="success" @click="saveNow()" style="margin-right: 20px;width: 250px;">I agree to conduct the final review
|
||||
</el-button>
|
||||
<el-button type="danger" @click="saveRef()" style="width: 250px;">Decline final review</el-button>
|
||||
<el-button type="danger" @click="saveRef()" style="width: 250px;">I decline to conduct the final review</el-button>
|
||||
</div>
|
||||
</el-card>
|
||||
<el-card class="box-card" style="font-size: 15px;line-height: 24px;" v-if="finalState==0">
|
||||
|
||||
@@ -90,7 +90,7 @@ this.$router.push({
|
||||
state:this.state
|
||||
})
|
||||
.then((res) => {
|
||||
console.log('res at line 191:', res);
|
||||
|
||||
if (res.code == 0) {
|
||||
this.orderList = res.data.list;
|
||||
|
||||
|
||||
@@ -1,14 +1,12 @@
|
||||
<template>
|
||||
<div>
|
||||
<div class="crumbs">
|
||||
<el-breadcrumb separator="/">
|
||||
<el-breadcrumb-item>
|
||||
<i class="el-icon-collection"></i> <span class="top_dao"> Review History</span>
|
||||
</el-breadcrumb-item>
|
||||
</el-breadcrumb>
|
||||
</div>
|
||||
<div class="container_l">
|
||||
<!-- <div v-for="item in dynamicTags"
|
||||
<div>
|
||||
<div class="crumbs">
|
||||
<el-breadcrumb separator="/">
|
||||
<el-breadcrumb-item> <i class="el-icon-collection"></i> <span class="top_dao"> Review History</span> </el-breadcrumb-item>
|
||||
</el-breadcrumb>
|
||||
</div>
|
||||
<div class="container_l">
|
||||
<!-- <div v-for="item in dynamicTags"
|
||||
style="background-color: #f0f9eb;border-radius: 5px;border:1px solid #e1f3d8;color: #67c23a;font-size: 14px;padding: 8px 15px;margin: 0 0 20px 0;">
|
||||
<el-button type="success" icon="el-icon-close" circle @click='handleClose'
|
||||
style="float: right;margin: 17px 5px 0 0;"></el-button>
|
||||
@@ -16,126 +14,303 @@
|
||||
<p style="margin: 5px 0;">{{item.title}}</p>
|
||||
<p>{{item.content}}</p>
|
||||
</div> -->
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="24">
|
||||
<el-card class="box-card" v-loading="loading" element-loading-text="Loading..."
|
||||
element-loading-spinner="el-icon-loading" element-loading-background="rgba(0, 0, 0, 0.8)">
|
||||
<el-table :data="tableData3" border class="table" ref="multipleTable"
|
||||
header-cell-class-name="table-header" empty-text="New messages (0)">
|
||||
<el-table-column prop="article_title" label="Article Title"></el-table-column>
|
||||
<el-table-column prop="journal_title" label="Journal"></el-table-column>
|
||||
<el-table-column prop="ctime" label="Reviewed time" width="140"></el-table-column>
|
||||
<el-table-column label="Article Status" width="130" align="center">
|
||||
<template slot-scope="scope">
|
||||
<b v-if="scope.row.astate == 0">Received</b>
|
||||
<b v-if="scope.row.astate == 1">With editor</b>
|
||||
<b v-if="scope.row.astate == 2">Under review</b>
|
||||
<b v-if="scope.row.astate == 3">Reject</b>
|
||||
<b v-if="scope.row.astate == 4">Revision</b>
|
||||
<b v-if="scope.row.astate == 5">Accept</b>
|
||||
<b v-if="scope.row.astate == 8">Final Decision</b>
|
||||
<b v-if="scope.row.astate == 6">Pre-accept</b>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="State" align="center" width="120">
|
||||
<template slot-scope="scope">
|
||||
<span style="font-size: 16px;"v-html="revstate(scope.row)"></span>
|
||||
|
||||
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- <el-table-column label="Recommendation" width="160" align="center">
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="24">
|
||||
<el-card
|
||||
class="box-card"
|
||||
v-loading="loading"
|
||||
element-loading-text="Loading..."
|
||||
element-loading-spinner="el-icon-loading"
|
||||
element-loading-background="rgba(0, 0, 0, 0.8)"
|
||||
>
|
||||
<el-table
|
||||
:data="tableData3"
|
||||
border
|
||||
class="table"
|
||||
ref="multipleTable"
|
||||
header-cell-class-name="table-header"
|
||||
empty-text="New messages (0)"
|
||||
>
|
||||
<el-table-column prop="article_title" label="Article Title"></el-table-column>
|
||||
<el-table-column prop="journal_title" label="Journal" width="300"></el-table-column>
|
||||
<el-table-column prop="ctime" label="Invited time" width="130"></el-table-column>
|
||||
<el-table-column label="Article Status" width="130" align="center">
|
||||
<template slot-scope="scope">
|
||||
<b v-if="scope.row.astate == 0">Received</b>
|
||||
<b v-if="scope.row.astate == 1">With editor</b>
|
||||
<b v-if="scope.row.astate == 2">Under review</b>
|
||||
<b v-if="scope.row.astate == 3">Reject</b>
|
||||
<b v-if="scope.row.astate == 4">Revision</b>
|
||||
<b v-if="scope.row.astate == 5">Accept</b>
|
||||
<b v-if="scope.row.astate == 8">Final Decision</b>
|
||||
<b v-if="scope.row.astate == 6">Pre-accept</b>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="Review decision" align="center" width="420">
|
||||
<template slot="header" slot-scope="scope">
|
||||
<p>Review decision</p>
|
||||
<p style="height: 1px; background-color: #ddd; margin: 4px 0"></p>
|
||||
<p class="review_decision_header"><span> </span><span>Status</span><span>Time</span></p>
|
||||
</template>
|
||||
<template slot-scope="scope">
|
||||
<!-- <span style="font-size: 16px;"v-html="revstate(scope.row)"></span> -->
|
||||
|
||||
<div class="fixCard reviewer_decision" style="position: relative" v-if="scope.row.recommend">
|
||||
<div class="overflow-x-auto">
|
||||
<table class="review_table">
|
||||
<tbody>
|
||||
<!-- 遍历评审轮次:1st + 重复轮次 -->
|
||||
<tr>
|
||||
<td>1<sup>st</sup> review</td>
|
||||
<!-- 遍历每个评审者的1st评审结果 -->
|
||||
<template v-for="(iken, reviewerIndex) in [scope.row]">
|
||||
<td style="cursor: pointer">
|
||||
<span style="display: none; margin-left: 4px; margin-right: 8px">
|
||||
<font
|
||||
v-if="iken.recommend == 1 || iken.recommend == 2"
|
||||
style="
|
||||
width: 12px;
|
||||
height: 12px;
|
||||
display: block;
|
||||
border-radius: 10px;
|
||||
background-color: #67c23a;
|
||||
"
|
||||
>
|
||||
</font>
|
||||
<font
|
||||
v-if="iken.recommend == 3 || iken.recommend == 4"
|
||||
style="
|
||||
width: 12px;
|
||||
height: 12px;
|
||||
display: block;
|
||||
border-radius: 10px;
|
||||
background-color: #f56c6c;
|
||||
"
|
||||
>
|
||||
</font>
|
||||
</span>
|
||||
<span v-if="iken.recommend == 1" style="color: #006699">Minor</span>
|
||||
<span v-else-if="iken.recommend == 2" style="color: #006699">Major</span>
|
||||
<span v-else-if="iken.recommend == 3" style="color: #f56c6c"
|
||||
>reject and resubmission</span
|
||||
>
|
||||
<span v-else-if="iken.recommend == 4" style="color: #f56c6c">Reject</span>
|
||||
<span v-else style="color: #888">No reply</span>
|
||||
</td>
|
||||
|
||||
<td>
|
||||
<p style="line-height: 20px; color: #888" v-if="iken.ctime > 0">
|
||||
{{ iken.ctime | formatDatehms }}
|
||||
</p>
|
||||
</td>
|
||||
</template>
|
||||
</tr>
|
||||
<!-- 遍历重复评审轮次(2nd、3rd...) -->
|
||||
<template v-for="(round, index1) in maxRepeatReviewCount([scope.row])">
|
||||
<tr>
|
||||
<td>{{ index1 + 2 }}<sup>nd</sup> review</td>
|
||||
<!-- 遍历每个评审者在该轮次的结果 -->
|
||||
<template v-for="(iken, reviewerIndex) in [scope.row]">
|
||||
<td style="">
|
||||
<span
|
||||
style="cursor: pointer"
|
||||
v-if="Array.isArray(iken.repeat) && iken.repeat[index1]"
|
||||
>
|
||||
<span style="display: none; margin-left: 4px; margin-right: 8px">
|
||||
<font
|
||||
v-if="iken.repeat[index1].recommend == 1"
|
||||
style="
|
||||
width: 12px;
|
||||
height: 12px;
|
||||
display: block;
|
||||
border-radius: 10px;
|
||||
background-color: #67c23a;
|
||||
"
|
||||
>
|
||||
</font>
|
||||
<font
|
||||
v-if="iken.repeat[index1].recommend == 2"
|
||||
style="
|
||||
width: 12px;
|
||||
height: 12px;
|
||||
display: block;
|
||||
border-radius: 10px;
|
||||
background-color: #f56c6c;
|
||||
"
|
||||
>
|
||||
</font>
|
||||
<font
|
||||
v-if="iken.repeat[index1].recommend == 3"
|
||||
style="
|
||||
width: 12px;
|
||||
height: 12px;
|
||||
display: block;
|
||||
border-radius: 10px;
|
||||
background-color: #006699;
|
||||
"
|
||||
>
|
||||
</font>
|
||||
</span>
|
||||
<span
|
||||
v-if="iken.repeat[index1].recommend == 1"
|
||||
style="color: #67c23a"
|
||||
>Accept</span
|
||||
>
|
||||
<span
|
||||
v-else-if="iken.repeat[index1].recommend == 2"
|
||||
style="color: #f56c6c"
|
||||
>Reject</span
|
||||
>
|
||||
<span
|
||||
v-else-if="iken.repeat[index1].recommend == 3"
|
||||
style="color: #006699"
|
||||
>Revision</span
|
||||
>
|
||||
<span v-else style="color: #888">No reply</span>
|
||||
</span>
|
||||
<span v-else>-</span>
|
||||
</td>
|
||||
<td>
|
||||
<p
|
||||
style="line-height: 20px; color: #888"
|
||||
v-if="iken.repeat[index1].ctime > 0"
|
||||
>
|
||||
{{ iken.repeat[index1].ctime | formatDatehms }}
|
||||
</p>
|
||||
</td>
|
||||
</template>
|
||||
</tr>
|
||||
</template>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div v-else>/</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- <el-table-column label="Recommendation" width="160" align="center">
|
||||
<template slot-scope="scope">
|
||||
<b v-if="scope.row.recommend == 1||scope.row.recommend == 2">Accept</b>
|
||||
<b v-if="scope.row.recommend == 3||scope.row.recommend == 4">Reject</b>
|
||||
</template>
|
||||
</el-table-column> -->
|
||||
<el-table-column label=" " width="230">
|
||||
<template slot-scope="scope">
|
||||
<router-link
|
||||
:to="{path:'/perhistory_commen',query:{Art_id:scope.row.article_id,Rev_id:scope.row.art_rev_id}}"
|
||||
v-if="(scope.row.astate==3||scope.row.astate==5)&&(scope.row.journal_id==1||scope.row.journal_id==9||scope.row.article_id>1598)">
|
||||
<el-button type="primary" plain style="margin-right: 10px;">All Comments
|
||||
</el-button>
|
||||
</router-link>
|
||||
<el-button type="warning" plain @click="cerFicte(scope.$index, scope.row)"
|
||||
v-if="scope.row.state==1||scope.row.state==2||scope.row.state==3">Certificate
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<div class="pagination">
|
||||
<el-pagination layout="total, prev, pager, next" :current-page="TaBle3.pageIndex"
|
||||
:page-size="TaBle3.pageSize" :total="link_Tota3" @current-change="handlePageChange3">
|
||||
</el-pagination>
|
||||
</div>
|
||||
</el-card>
|
||||
<el-table-column label=" " width="130">
|
||||
<template slot-scope="scope">
|
||||
<router-link
|
||||
:to="{
|
||||
path: '/perhistory_commen',
|
||||
query: { Art_id: scope.row.article_id, Rev_id: scope.row.art_rev_id }
|
||||
}"
|
||||
v-if="
|
||||
(scope.row.astate == 3 || scope.row.astate == 5) &&
|
||||
(scope.row.journal_id == 1 || scope.row.journal_id == 9 || scope.row.article_id > 1598)
|
||||
"
|
||||
>
|
||||
<el-button type="primary" plain style="margin-right: 10px">All Comments </el-button>
|
||||
</router-link>
|
||||
<el-button
|
||||
type="warning"
|
||||
plain
|
||||
@click="cerFicte(scope.$index, scope.row)"
|
||||
v-if="scope.row.state == 1 || scope.row.state == 2 || scope.row.state == 3"
|
||||
>Certificate
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<div class="pagination">
|
||||
<el-pagination
|
||||
layout="total, prev, pager, next"
|
||||
:current-page="TaBle3.pageIndex"
|
||||
:page-size="TaBle3.pageSize"
|
||||
:total="link_Tota3"
|
||||
@current-change="handlePageChange3"
|
||||
>
|
||||
</el-pagination>
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
<!-- 证书弹出框 -->
|
||||
<el-dialog :visible.sync="cerVisible" width="600px" :close-on-click-modal="false">
|
||||
<el-image class="table-td-thumb rev_digol" :src="this.IMG_Url"></el-image>
|
||||
</el-dialog>
|
||||
<!-- 证书弹出框 -->
|
||||
<el-dialog :visible.sync="cerVisible" width="600px" :close-on-click-modal="false">
|
||||
<el-image class="table-td-thumb rev_digol" :src="this.IMG_Url"></el-image>
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog :visible.sync="feilVisible" width="600px" :close-on-click-modal="false">
|
||||
<h2 style="text-align: center;">No certificate</h2>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="feilVisible=false">OK</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
</div>
|
||||
<el-dialog :visible.sync="feilVisible" width="600px" :close-on-click-modal="false">
|
||||
<h2 style="text-align: center">No certificate</h2>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="feilVisible = false">OK</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
loading: false,
|
||||
query: {
|
||||
user_id: localStorage.getItem('U_id')
|
||||
},
|
||||
tableData3: [],
|
||||
TaBle3: {
|
||||
user_id: localStorage.getItem('U_id'),
|
||||
pageIndex: 1,
|
||||
pageSize: 10
|
||||
},
|
||||
link_Tota3: 0,
|
||||
IMG_Url: '',
|
||||
cerVisible: false,
|
||||
feilVisible: false,
|
||||
dynamicTags: [{
|
||||
label: 'Submission System 2.0',
|
||||
title: 'Update Notifications',
|
||||
content: "The reviewers can check all reviewers ' comments when the manuscripts get final review."
|
||||
}],
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
loading: false,
|
||||
query: {
|
||||
user_id: localStorage.getItem('U_id')
|
||||
},
|
||||
tableData3: [],
|
||||
TaBle3: {
|
||||
user_id: localStorage.getItem('U_id'),
|
||||
pageIndex: 1,
|
||||
pageSize: 10
|
||||
},
|
||||
link_Tota3: 0,
|
||||
IMG_Url: '',
|
||||
cerVisible: false,
|
||||
feilVisible: false,
|
||||
dynamicTags: [
|
||||
{
|
||||
label: 'Submission System 2.0',
|
||||
title: 'Update Notifications',
|
||||
content: "The reviewers can check all reviewers ' comments when the manuscripts get final review."
|
||||
}
|
||||
]
|
||||
};
|
||||
},
|
||||
mounted() {},
|
||||
created() {
|
||||
this.loading = true;
|
||||
this.getTable();
|
||||
},
|
||||
methods: {
|
||||
maxRepeatReviewCount(list) {
|
||||
if (!list || !Array.isArray(list)) return null; // 边界处理:无数据返回null
|
||||
|
||||
},
|
||||
created() {
|
||||
this.loading = true;
|
||||
this.getTable();
|
||||
},
|
||||
methods: {
|
||||
revstate(row, column, cellValue, index) {
|
||||
// 遍历所有评审者,找到repeat数组长度最大的那条数据
|
||||
const maxItem = list.reduce((maxItem, currentItem) => {
|
||||
// 计算当前项的repeat长度,非数组则视为0
|
||||
const currentLen = Array.isArray(currentItem.repeat) ? currentItem.repeat.length : 0;
|
||||
// 计算当前最大项的repeat长度,非数组则视为0
|
||||
const maxLen = Array.isArray(maxItem.repeat) ? maxItem.repeat.length : 0;
|
||||
|
||||
// 如果当前项长度更大,则更新最大项
|
||||
return currentLen > maxLen ? currentItem : maxItem;
|
||||
}, {}); // 初始值设为一个空对象
|
||||
// console.log('maxItem at line 2142:', maxItem.repeat.length)
|
||||
return maxItem && maxItem.repeat ? maxItem.repeat.length : 0;
|
||||
},
|
||||
revstate(row, column, cellValue, index) {
|
||||
let frag = '';
|
||||
if (row.state == 0) {
|
||||
frag = 'With reviewer';
|
||||
} else if (row.state == 1) {
|
||||
// 大修
|
||||
frag = 'Major revision';
|
||||
|
||||
|
||||
// frag = 'Revision';
|
||||
} else if (row.state == 2) {
|
||||
frag = 'Reject';
|
||||
} else if (row.state == 3) {
|
||||
//小修
|
||||
// frag = 'Accept';
|
||||
// frag = 'Accept';
|
||||
frag = 'Minor revision';
|
||||
} else if (row.state == 4) {
|
||||
frag = '<text style="color:#aaa">invalid</text>';
|
||||
@@ -145,110 +320,157 @@
|
||||
|
||||
return frag;
|
||||
},
|
||||
// 获取数据
|
||||
getTable() {
|
||||
this.$api
|
||||
.post('api/Reviewer/getReviewerDetail1', this.query)
|
||||
.then(res => {
|
||||
if (res.code == 0) {
|
||||
this.getData();
|
||||
} else {
|
||||
this.$message.error(res.msg);
|
||||
}
|
||||
})
|
||||
.catch(err => {
|
||||
this.$message.error(err);
|
||||
});
|
||||
},
|
||||
// 获取数据
|
||||
getTable() {
|
||||
this.$api
|
||||
.post('api/Reviewer/getReviewerDetail1', this.query)
|
||||
.then((res) => {
|
||||
if (res.code == 0) {
|
||||
this.getData();
|
||||
} else {
|
||||
this.$message.error(res.msg);
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
this.$message.error(err);
|
||||
});
|
||||
},
|
||||
|
||||
getData() {
|
||||
this.$api
|
||||
.post('api/Reviewer/getReviewerListHistory', this.TaBle3)
|
||||
.then(res => {
|
||||
this.loading = false
|
||||
if (res.code == 0) {
|
||||
if (res.data.lists != '') {
|
||||
for (let i = 0; i < res.data.lists.length; i++) {
|
||||
if (res.data.lists[i].recommenttime == null) {
|
||||
res.data.lists[i].ctime = ''
|
||||
} else {
|
||||
let date = new Date(parseInt(res.data.lists[i].recommenttime) * 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();
|
||||
res.data.lists[i].ctime = Y + M + D;
|
||||
}
|
||||
}
|
||||
}
|
||||
this.tableData3 = res.data.lists;
|
||||
this.link_Tota3 = res.data.count || 0;
|
||||
} else {
|
||||
this.$message.error(res.msg);
|
||||
}
|
||||
})
|
||||
.catch(err => {
|
||||
this.loading = false
|
||||
this.$message.error(err);
|
||||
});
|
||||
},
|
||||
getData() {
|
||||
this.$api
|
||||
.post('api/Reviewer/getReviewerListHistory', this.TaBle3)
|
||||
.then((res) => {
|
||||
this.loading = false;
|
||||
if (res.code == 0) {
|
||||
if (res.data.lists != '') {
|
||||
for (let i = 0; i < res.data.lists.length; i++) {
|
||||
if (res.data.lists[i].recommenttime == null) {
|
||||
res.data.lists[i].ctime = '';
|
||||
} else {
|
||||
let date = new Date(parseInt(res.data.lists[i].recommenttime) * 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();
|
||||
res.data.lists[i].ctime = Y + M + D;
|
||||
}
|
||||
}
|
||||
}
|
||||
this.tableData3 = res.data.lists;
|
||||
this.link_Tota3 = res.data.count || 0;
|
||||
} else {
|
||||
this.$message.error(res.msg);
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
this.loading = false;
|
||||
this.$message.error(err);
|
||||
});
|
||||
},
|
||||
|
||||
// 分页导航
|
||||
handlePageChange3(val) {
|
||||
this.loading = true;
|
||||
this.$set(this.TaBle3, 'pageIndex', val);
|
||||
this.getData();
|
||||
},
|
||||
// 分页导航
|
||||
handlePageChange3(val) {
|
||||
this.loading = true;
|
||||
this.$set(this.TaBle3, 'pageIndex', val);
|
||||
this.getData();
|
||||
},
|
||||
|
||||
// 证书弹出层
|
||||
cerFicte(index, row) {
|
||||
this.$api
|
||||
.post('api/Reviewer/getZSimg', {
|
||||
'art_rev_id': row.art_rev_id
|
||||
})
|
||||
.then(res => {
|
||||
if (res.code == 0) {
|
||||
this.IMG_Url = this.Common.mediaUrl + res.data.icon
|
||||
this.cerVisible = true;
|
||||
} else {
|
||||
this.$message.error(res.msg);
|
||||
this.feilVisible = true;
|
||||
}
|
||||
})
|
||||
.catch(err => {
|
||||
this.$message.error(err);
|
||||
});
|
||||
// 证书弹出层
|
||||
cerFicte(index, row) {
|
||||
this.$api
|
||||
.post('api/Reviewer/getZSimg', {
|
||||
art_rev_id: row.art_rev_id
|
||||
})
|
||||
.then((res) => {
|
||||
if (res.code == 0) {
|
||||
this.IMG_Url = this.Common.mediaUrl + res.data.icon;
|
||||
this.cerVisible = true;
|
||||
} else {
|
||||
this.$message.error(res.msg);
|
||||
this.feilVisible = true;
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
this.$message.error(err);
|
||||
});
|
||||
},
|
||||
|
||||
},
|
||||
|
||||
// 关闭标签
|
||||
handleClose(tag) {
|
||||
// this.dynamicTags.splice(this.dynamicTags.indexOf(tag), 1);
|
||||
this.dynamicTags = []
|
||||
},
|
||||
},
|
||||
filters: {
|
||||
|
||||
},
|
||||
watch: {
|
||||
|
||||
}
|
||||
};
|
||||
// 关闭标签
|
||||
handleClose(tag) {
|
||||
// this.dynamicTags.splice(this.dynamicTags.indexOf(tag), 1);
|
||||
this.dynamicTags = [];
|
||||
}
|
||||
},
|
||||
filters: {},
|
||||
watch: {}
|
||||
};
|
||||
</script>
|
||||
<style scoped>
|
||||
.review_table {
|
||||
width: 100% !important;
|
||||
background-color: #fff !important;
|
||||
/* margin-top: 10px; */
|
||||
border-collapse: collapse !important; /* 合并表格边框 */
|
||||
}
|
||||
|
||||
<style>
|
||||
.table {
|
||||
width: 100%;
|
||||
font-size: 14px;
|
||||
}
|
||||
.review_table th,
|
||||
td {
|
||||
padding: 4px !important;
|
||||
min-width: 70px !important;
|
||||
/* border-top: 1px solid #ddd !important;
|
||||
border-bottom: 1px solid #ddd !important; */
|
||||
color: #333 !important;
|
||||
text-align: left !important;
|
||||
height: 18px !important;
|
||||
}
|
||||
|
||||
.rev_digol .el-image__placeholder {
|
||||
background-image: url(../../assets/img/loading.gif);
|
||||
background-repeat: no-repeat;
|
||||
background-position: center center;
|
||||
background-size: 440px 300px;
|
||||
width: 560px;
|
||||
height: 400px;
|
||||
background-color: #fff;
|
||||
}
|
||||
.review_table th {
|
||||
font-size: 12px !important;
|
||||
background-color: #f0f0f0 !important;
|
||||
}
|
||||
.review_table td {
|
||||
font-size: 12px;
|
||||
/* background-color: #f0f0f0; */
|
||||
}
|
||||
.review_table th:first-child,
|
||||
.review_table td:first-child {
|
||||
width: 110px !important;
|
||||
|
||||
word-wrap: break-word !important;
|
||||
|
||||
word-break: break-all !important;
|
||||
}
|
||||
|
||||
.overflow-x-auto {
|
||||
overflow-x: auto;
|
||||
}
|
||||
</style>
|
||||
<style>
|
||||
.table {
|
||||
width: 100%;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.rev_digol .el-image__placeholder {
|
||||
background-image: url(../../assets/img/loading.gif);
|
||||
background-repeat: no-repeat;
|
||||
background-position: center center;
|
||||
background-size: 440px 300px;
|
||||
width: 560px;
|
||||
height: 400px;
|
||||
background-color: #fff;
|
||||
}
|
||||
.review_decision_header {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
.review_decision_header span {
|
||||
width: 30%;
|
||||
text-align: left;
|
||||
}
|
||||
.review_decision_header span:nth-child(1) {
|
||||
width: 120px;
|
||||
/* text-align: center; */
|
||||
display: flex;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -4,7 +4,8 @@
|
||||
<h2>
|
||||
Communication
|
||||
</h2>
|
||||
<div v-for="(item, index) in talkMsgs" class="kuang_communtion_conmt">
|
||||
<div :style="{'max-height': height+'px'}" style="overflow: auto;">
|
||||
<div v-for="(item, index) in talkMsgs" class="kuang_communtion_conmt">
|
||||
<div v-if="item.user_id == msgform.user_id" class="talk_aued">
|
||||
<p>
|
||||
Author :
|
||||
@@ -24,6 +25,8 @@
|
||||
<b>{{formatDate(item.ad_ctime)}}</b>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="kuang_communtion_input">
|
||||
<p v-if="talkMsgs"></p>
|
||||
@@ -51,6 +54,10 @@
|
||||
type: Object,
|
||||
required: true
|
||||
},
|
||||
height: {
|
||||
type: Number,
|
||||
|
||||
},
|
||||
// loading: {
|
||||
// type: Boolean,
|
||||
// required: true
|
||||
|
||||
@@ -1,386 +1,573 @@
|
||||
<template>
|
||||
<div>
|
||||
<div class="crumbs">
|
||||
<el-breadcrumb separator="/">
|
||||
<el-breadcrumb-item>
|
||||
<i class="el-icon-user"></i> Young Scientist Apply list
|
||||
</el-breadcrumb-item>
|
||||
</el-breadcrumb>
|
||||
</div>
|
||||
<div>
|
||||
<div class="crumbs">
|
||||
<el-breadcrumb separator="/">
|
||||
<el-breadcrumb-item> <i class="el-icon-user"></i> Young Scientist Apply list </el-breadcrumb-item>
|
||||
</el-breadcrumb>
|
||||
</div>
|
||||
|
||||
<div class="container" style="min-width: 1000px;">
|
||||
<el-table :data="tableData" border stripe class="table" ref="multipleTable"
|
||||
header-cell-class-name="table-header">
|
||||
<el-table-column label="No." align="center" width="50">
|
||||
<template slot-scope="scope">
|
||||
{{scope.$index+1}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="Base Information" width="320px">
|
||||
<template slot-scope="scope">
|
||||
<p class="tab_tie_col">
|
||||
<span>Apply Journal: </span>{{scope.row.title}}
|
||||
</p>
|
||||
<p class="tab_tie_col">
|
||||
<span>Realname: </span><b style="font-size: 15px;letter-spacing: -0.5px;">{{scope.row.realname}}</b>
|
||||
</p>
|
||||
<p class="tab_tie_col">
|
||||
<span>Title: </span>{{scope.row.technical}}
|
||||
</p>
|
||||
<p class="tab_tie_col">
|
||||
<span>Email: </span>{{scope.row.email}}
|
||||
</p>
|
||||
<p class="tab_tie_col" v-if="scope.row.phone!=''">
|
||||
<span>Phone: </span>{{scope.row.phone}}
|
||||
</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>
|
||||
<p class="tab_tie_col">
|
||||
<span>Apply Time: </span>{{formatDate(scope.row.ap_time)}}
|
||||
</p>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="Other Information">
|
||||
<template slot-scope="scope">
|
||||
<p class="tab_tie_col" v-if="scope.row.cvs.length>0">
|
||||
<span>CV.: </span>
|
||||
<img src="../../assets/img/icon_0.png" alt=""
|
||||
style="vertical-align: middle;margin-left: 10px;">
|
||||
<span style="margin-left: 20px;color: #888;font-size: 13px;">
|
||||
<i class="el-icon-paperclip"></i>
|
||||
{{formatDate(scope.row.cvs[scope.row.cvs.length-1].ctime)}}
|
||||
</span>
|
||||
<a :href="mediaUrl+'reviewer/'+scope.row.cvs[scope.row.cvs.length-1].cv" target="_blank" class="txt_pdf">
|
||||
<b class="el-icon-download" style="color: #006699;font-weight: bold;"></b>
|
||||
</a>
|
||||
</p>
|
||||
<p class="tab_tie_col">
|
||||
<span>Field: </span>{{scope.row.field}}
|
||||
</p>
|
||||
<p class="tab_tie_col" v-if="scope.row.company!=''">
|
||||
<span>Affiliation: </span>{{scope.row.company}}
|
||||
</p>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="Remarks" width="300">
|
||||
<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 align="center" width="120">
|
||||
<template slot-scope="scope">
|
||||
<p style="margin-bottom: 10px;">
|
||||
<el-button type="primary" plain icon="el-icon-user" @click="handleDtail(scope.row)">
|
||||
Detail
|
||||
</el-button>
|
||||
</p>
|
||||
<p style="margin-bottom: 10px;">
|
||||
<el-button type="success" plain icon="el-icon-check" @click="agreeApply(scope.row)">
|
||||
Agree
|
||||
</el-button>
|
||||
</p>
|
||||
<el-button type="danger" plain icon="el-icon-close" @click="deleteApply(scope.row)">
|
||||
Refuse
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
<div class="container" style="min-width: 1000px; padding: 0px">
|
||||
<el-table :data="tableData" border stripe class="table" ref="multipleTable" header-cell-class-name="table-header">
|
||||
<el-table-column label="No." align="center" width="50">
|
||||
<template slot-scope="scope">
|
||||
{{ scope.$index + 1 }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="Base Information" width="320px">
|
||||
<template slot-scope="scope">
|
||||
<p class="tab_tie_col"><span>Apply Journal: </span>{{ scope.row.title }}</p>
|
||||
<p class="tab_tie_col">
|
||||
<span>Realname: </span><b style="font-size: 13px; letter-spacing: -0.5px">{{ scope.row.realname }}</b>
|
||||
</p>
|
||||
<p class="tab_tie_col"><span>Title: </span>{{ scope.row.technical }}</p>
|
||||
<p class="tab_tie_col"><span>Email: </span>{{ scope.row.email }}</p>
|
||||
<p class="tab_tie_col" v-if="scope.row.phone != ''"><span>Phone: </span>{{ scope.row.phone }}</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>
|
||||
<p class="tab_tie_col"><span>Apply Time: </span>{{ formatDate(scope.row.ap_time) }}</p>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="Other Information">
|
||||
<template slot-scope="scope">
|
||||
<p class="tab_tie_col" v-if="scope.row.cvs.length > 0">
|
||||
<span>CV.: </span>
|
||||
<img src="../../assets/img/icon_0.png" alt="" style="vertical-align: middle; margin-left: 10px" />
|
||||
<span style="margin-left: 20px; color: #888; font-size: 13px">
|
||||
<i class="el-icon-paperclip"></i>
|
||||
{{ formatDate(scope.row.cvs[scope.row.cvs.length - 1].ctime) }}
|
||||
</span>
|
||||
<a :href="mediaUrl + 'reviewer/' + scope.row.cvs[scope.row.cvs.length - 1].cv" target="_blank" class="txt_pdf">
|
||||
<b class="el-icon-download" style="color: #006699; font-weight: bold"></b>
|
||||
</a>
|
||||
</p>
|
||||
<p class="tab_tie_col"><span>Field: </span>{{ scope.row.field }}</p>
|
||||
<p class="tab_tie_col" v-if="scope.row.company != ''"><span>Affiliation: </span>{{ scope.row.company }}</p>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="Remarks" width="240">
|
||||
<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 align="center" width="240">
|
||||
<template slot-scope="scope">
|
||||
<div class="operation_box">
|
||||
<el-button type="primary" plain icon="el-icon-user" @click="handleDtail(scope.row)"> Detail </el-button>
|
||||
<el-button type="success" plain icon="el-icon-check" @click="agreeApply(scope.row)"> Agree </el-button>
|
||||
|
||||
<!-- 同意弹出框 -->
|
||||
<el-dialog title="Agree User" :visible.sync="agreeVisible" width="500px" :close-on-click-modal="false">
|
||||
<el-form ref="agree_Form" :model="agreeForm" :rules="rules" label-width="140px">
|
||||
<el-form-item label="Realname :">
|
||||
{{agreeForm.realname}}
|
||||
</el-form-item>
|
||||
<el-form-item label="Email :">
|
||||
{{agreeForm.email}}
|
||||
</el-form-item>
|
||||
<el-form-item label="Apply Journal :">
|
||||
{{agreeForm.title}}
|
||||
</el-form-item>
|
||||
<el-form-item label="Term of office :" prop="year">
|
||||
<el-select v-model="agreeForm.year" placeholder="Please select a year">
|
||||
<el-option v-for="item in list_year" :label="item.title" :key="item.id" :value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="agreeVisible = false">Cancel</el-button>
|
||||
<el-button type="primary" @click="saveAgreee()">OK</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
<el-button type="danger" plain icon="el-icon-close" @click="deleteApply(scope.row)"> Refuse </el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
|
||||
<!-- 同意弹出框 -->
|
||||
<el-dialog title="Agree User" :visible.sync="agreeVisible" width="700px" :close-on-click-modal="false" class="agree_form_box">
|
||||
<el-form ref="agree_Form" :model="agreeForm" :rules="rules" label-width="140px">
|
||||
<el-form-item label="Account :" style="margin-bottom: 2px !important">
|
||||
<span>{{ agreeForm.account }}</span>
|
||||
</el-form-item>
|
||||
<el-form-item label="Email :" style="margin-bottom: 2px !important">
|
||||
{{ agreeForm.email }}
|
||||
</el-form-item>
|
||||
<el-form-item label="Apply Journal :" style="margin-bottom: 10px !important">
|
||||
{{ agreeForm.title }}
|
||||
</el-form-item>
|
||||
<el-form-item label="Real name :" prop="realname">
|
||||
<el-input type="text" placeholder="" v-model="agreeForm.realname"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="Phone :">
|
||||
<el-input type="text" placeholder="" v-model="agreeForm.phone"> </el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="Title :" prop="technical">
|
||||
<el-select v-model="agreeForm.technical" filterable placeholder=" " value-key="groupID">
|
||||
<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="agreeForm.country" filterable placeholder=" " value-key="groupID">
|
||||
<el-option
|
||||
v-for="item in df_country"
|
||||
:label="item.en_name + ' (' + item.zh_name + ')'"
|
||||
:key="item.en_name"
|
||||
:value="item.en_name"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="Website :" prop="website">
|
||||
<el-input type="text" placeholder="eg:http://..." v-model="agreeForm.website"> </el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="Field :" prop="field">
|
||||
<el-input v-model="agreeForm.field" type="textarea" autosize></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="Introduction :">
|
||||
<el-input v-model="agreeForm.introduction" type="textarea" autosize> </el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="Affiliation :" prop="company">
|
||||
<el-input v-model="agreeForm.company"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="CV :">
|
||||
<p class="tab_tie_col" v-if="agreeForm.cvs && agreeForm.cvs.length > 0">
|
||||
<img src="../../assets/img/icon_0.png" alt="" style="vertical-align: middle; margin-left: 10px" />
|
||||
<span style="margin-left: 20px; color: #888; font-size: 13px">
|
||||
<i class="el-icon-paperclip"></i>
|
||||
{{ formatDate(agreeForm.cvs[agreeForm.cvs.length - 1].ctime) }}
|
||||
</span>
|
||||
<a :href="mediaUrl + 'reviewer/' + agreeForm.cvs[agreeForm.cvs.length - 1].cv" target="_blank" class="txt_pdf">
|
||||
<b class="el-icon-download" style="color: #006699; font-weight: bold"></b>
|
||||
</a>
|
||||
</p>
|
||||
</el-form-item>
|
||||
<el-form-item label="Term of office :" prop="year">
|
||||
<el-select v-model="agreeForm.year" placeholder="Please select a year">
|
||||
<el-option v-for="item in list_year" :label="item.title" :key="item.id" :value="item.id"> </el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="agreeVisible = false">Cancel</el-button>
|
||||
<el-button type="primary" @click="saveAgreee()">OK</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
|
||||
|
||||
<!-- 标记弹出框 -->
|
||||
<el-dialog title="Remarks" :visible.sync="remarkBox" width="550px" :close-on-click-modal="false">
|
||||
<el-form ref="remark" :model="remarkMes" label-width="130px">
|
||||
<el-form-item label="Realname :">
|
||||
{{remarkMes.realname}}
|
||||
</el-form-item>
|
||||
<el-form-item label="Email :">
|
||||
{{remarkMes.email}}
|
||||
</el-form-item>
|
||||
<el-form-item label="Apply Journal :">
|
||||
{{remarkMes.title}}
|
||||
</el-form-item>
|
||||
<el-form-item label="Content :">
|
||||
<el-input type="textarea" rows="5" v-model="remarkMes.remark"></el-input>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="remarkBox = false">Cancel</el-button>
|
||||
<el-button type="primary" @click="saveRemark">Save</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
|
||||
</div>
|
||||
<!-- 标记弹出框 -->
|
||||
<el-dialog title="Remarks" :visible.sync="remarkBox" width="550px" :close-on-click-modal="false">
|
||||
<el-form ref="remark" :model="remarkMes" label-width="130px">
|
||||
<el-form-item label="Realname :">
|
||||
{{ remarkMes.realname }}
|
||||
</el-form-item>
|
||||
<el-form-item label="Email :">
|
||||
{{ remarkMes.email }}
|
||||
</el-form-item>
|
||||
<el-form-item label="Apply Journal :">
|
||||
{{ remarkMes.title }}
|
||||
</el-form-item>
|
||||
<el-form-item label="Content :">
|
||||
<el-input type="textarea" rows="5" v-model="remarkMes.remark"></el-input>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="remarkBox = false">Cancel</el-button>
|
||||
<el-button type="primary" @click="saveRemark">Save</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
mediaUrl: this.Common.mediaUrl,
|
||||
tableData: [],
|
||||
agreeVisible: false,
|
||||
agreeForm: {},
|
||||
remarkMes: {
|
||||
remark: ''
|
||||
},
|
||||
remarkBox: false,
|
||||
list_year: [{
|
||||
title: '1 Year',
|
||||
id: 1
|
||||
}, {
|
||||
title: '2 Years',
|
||||
id: 2
|
||||
}, {
|
||||
title: '3 Years',
|
||||
id: 3
|
||||
}],
|
||||
rules: {
|
||||
year: [{
|
||||
required: true,
|
||||
message: 'Please select year',
|
||||
trigger: 'blur'
|
||||
}],
|
||||
}
|
||||
};
|
||||
},
|
||||
created() {
|
||||
this.getDate();
|
||||
},
|
||||
methods: {
|
||||
// 获取青年科学家申请列表数据
|
||||
getDate() {
|
||||
this.$api
|
||||
.post('api/User/getYboardApplys', {
|
||||
editor_id: localStorage.getItem('U_id')
|
||||
})
|
||||
.then(res => {
|
||||
if (res.code == 0) {
|
||||
this.tableData = res.data.applys;
|
||||
for (var i = 0; i < this.tableData.length; i++) {
|
||||
this.getScoreData(i, this.tableData[i].score)
|
||||
}
|
||||
} else {
|
||||
this.$message.error(res.msg);
|
||||
}
|
||||
import commonCv from '../common/cv.vue';
|
||||
export default {
|
||||
components: {
|
||||
commonCv
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
df_country: [],
|
||||
df_technical: [
|
||||
{
|
||||
label: 'Professor'
|
||||
},
|
||||
{
|
||||
label: 'Associate Professor'
|
||||
},
|
||||
{
|
||||
label: 'Assistant Professor'
|
||||
},
|
||||
// {
|
||||
// label: 'Ph.D.',
|
||||
// },
|
||||
{
|
||||
label: 'Researcher'
|
||||
},
|
||||
{
|
||||
label: 'Associate research fellow'
|
||||
},
|
||||
{
|
||||
label: 'Assistant research fellow'
|
||||
},
|
||||
{
|
||||
label: 'Engineer'
|
||||
},
|
||||
{
|
||||
label: 'Senior engineer'
|
||||
},
|
||||
{
|
||||
label: 'Associate Researcher'
|
||||
},
|
||||
{
|
||||
label: 'Lecturer'
|
||||
},
|
||||
{
|
||||
label: 'Associate Chief Physician'
|
||||
},
|
||||
{
|
||||
label: 'Assistant Researcher'
|
||||
},
|
||||
{
|
||||
label: 'Physician'
|
||||
},
|
||||
{
|
||||
label: 'Chief Physician'
|
||||
},
|
||||
{
|
||||
label: 'Senior Lecturer'
|
||||
},
|
||||
{
|
||||
label: 'Research Fellow'
|
||||
},
|
||||
{
|
||||
label: 'Senior Investigator'
|
||||
}
|
||||
],
|
||||
mediaUrl: this.Common.mediaUrl,
|
||||
tableData: [],
|
||||
agreeVisible: false,
|
||||
agreeForm: {},
|
||||
remarkMes: {
|
||||
remark: ''
|
||||
},
|
||||
remarkBox: false,
|
||||
list_year: [
|
||||
{
|
||||
title: '1 Year',
|
||||
id: 1
|
||||
},
|
||||
{
|
||||
title: '2 Years',
|
||||
id: 2
|
||||
},
|
||||
{
|
||||
title: '3 Years',
|
||||
id: 3
|
||||
}
|
||||
],
|
||||
rules: {
|
||||
year: [
|
||||
{
|
||||
required: true,
|
||||
message: 'Please select year',
|
||||
trigger: 'blur'
|
||||
}
|
||||
],
|
||||
phone: [
|
||||
{
|
||||
required: true,
|
||||
message: 'Please enter phone',
|
||||
trigger: 'blur'
|
||||
},
|
||||
{
|
||||
validator: function (rule, value, callback) {
|
||||
if (/^1[34578]\d{9}$/.test(value) == false) {
|
||||
callback(new Error('Please enter the correct phone format'));
|
||||
} else {
|
||||
callback();
|
||||
}
|
||||
},
|
||||
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'
|
||||
}
|
||||
],
|
||||
company: [
|
||||
{
|
||||
required: true,
|
||||
message: 'Please input affiliation',
|
||||
trigger: 'blur'
|
||||
}
|
||||
],
|
||||
realname: [
|
||||
{
|
||||
required: true,
|
||||
message: 'Please input real name',
|
||||
trigger: 'blur'
|
||||
}
|
||||
]
|
||||
}
|
||||
};
|
||||
},
|
||||
created() {
|
||||
this.getDate();
|
||||
this.getCountry();
|
||||
},
|
||||
methods: {
|
||||
getCountry() {
|
||||
this.$api
|
||||
.post('api/Reviewer/getCountrys')
|
||||
.then((res) => {
|
||||
this.df_country = res.countrys;
|
||||
})
|
||||
.catch((err) => {
|
||||
this.$message.error(err);
|
||||
});
|
||||
},
|
||||
// 获取青年科学家申请列表数据
|
||||
getDate() {
|
||||
this.$api
|
||||
.post('api/User/getYboardApplys', {
|
||||
editor_id: localStorage.getItem('U_id')
|
||||
})
|
||||
.then((res) => {
|
||||
if (res.code == 0) {
|
||||
this.tableData = res.data.applys;
|
||||
for (var i = 0; i < this.tableData.length; i++) {
|
||||
this.getScoreData(i, this.tableData[i].score);
|
||||
}
|
||||
} else {
|
||||
this.$message.error(res.msg);
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
console.log(err);
|
||||
});
|
||||
},
|
||||
|
||||
})
|
||||
.catch(err => {
|
||||
console.log(err);
|
||||
});
|
||||
},
|
||||
// 评分
|
||||
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);
|
||||
}
|
||||
},
|
||||
|
||||
// 同意
|
||||
agreeApply(e) {
|
||||
this.agreeForm = {};
|
||||
console.log('e at line 405:', e);
|
||||
|
||||
// 评分
|
||||
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)
|
||||
}
|
||||
},
|
||||
this.agreeVisible = true;
|
||||
this.agreeForm = e;
|
||||
this.$refs.agree_Form.clearValidate();
|
||||
},
|
||||
|
||||
// 同意
|
||||
agreeApply(e) {
|
||||
this.agreeForm = e
|
||||
this.agreeVisible = true
|
||||
},
|
||||
// 提交同意
|
||||
saveAgreee() {
|
||||
var data = {
|
||||
ap_yboard_id: this.agreeForm.ap_yboard_id,
|
||||
year: this.agreeForm.year,
|
||||
realname: this.agreeForm.realname,
|
||||
phone: this.agreeForm.phone,
|
||||
technical: this.agreeForm.technical,
|
||||
country: this.agreeForm.country,
|
||||
website: this.agreeForm.website,
|
||||
field: this.agreeForm.field,
|
||||
introduction: this.agreeForm.introduction,
|
||||
company: this.agreeForm.company
|
||||
};
|
||||
console.log('data at line 419:', data);
|
||||
|
||||
// 提交同意
|
||||
saveAgreee() {
|
||||
this.$refs.agree_Form.validate((valid) => {
|
||||
if (valid) {
|
||||
this.$api
|
||||
.post('api/User/agreeYboardApply', this.agreeForm)
|
||||
.then(res => {
|
||||
if (res.code == 0) {
|
||||
this.$message.success('Add succeeded!');
|
||||
this.agreeVisible = false
|
||||
this.getDate();
|
||||
} else {
|
||||
this.$message.error(res.msg);
|
||||
}
|
||||
})
|
||||
.catch(err => {
|
||||
console.log(err);
|
||||
});
|
||||
} else {
|
||||
this.$message.error('Please complete the information!!');
|
||||
}
|
||||
});
|
||||
},
|
||||
this.$refs.agree_Form.validate((valid) => {
|
||||
if (valid) {
|
||||
this.$api
|
||||
.post('api/User/agreeYboardApplyNew', {
|
||||
...data
|
||||
})
|
||||
|
||||
// 拒绝
|
||||
deleteApply(e) {
|
||||
// 二次确认删除
|
||||
this.$confirm('Are you sure you want to refuse the apply?', 'Tip', {
|
||||
type: 'warning'
|
||||
})
|
||||
.then(() => {
|
||||
this.$api
|
||||
.post('api/User/refuseYboardApply', e)
|
||||
.then(res => {
|
||||
if (res.code == 0) {
|
||||
this.$message.success('Delete succeeded!');
|
||||
this.getDate();
|
||||
} else {
|
||||
this.$message.error(res.msg);
|
||||
}
|
||||
})
|
||||
.catch(err => {
|
||||
console.log(err);
|
||||
});
|
||||
})
|
||||
.catch(() => {});
|
||||
},
|
||||
.then((res) => {
|
||||
if (res.code == 0) {
|
||||
this.$message.success('Add succeeded!');
|
||||
this.agreeVisible = false;
|
||||
this.getDate();
|
||||
} else {
|
||||
this.$message.error(res.msg);
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
console.log(err);
|
||||
});
|
||||
} else {
|
||||
this.$message.error('Please complete the information!!');
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
// 拒绝
|
||||
deleteApply(e) {
|
||||
// 二次确认删除
|
||||
this.$confirm('Are you sure you want to refuse the apply?', 'Tip', {
|
||||
type: 'warning'
|
||||
})
|
||||
.then(() => {
|
||||
this.$api
|
||||
.post('api/User/refuseYboardApply', e)
|
||||
.then((res) => {
|
||||
if (res.code == 0) {
|
||||
this.$message.success('Delete succeeded!');
|
||||
this.getDate();
|
||||
} else {
|
||||
this.$message.error(res.msg);
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
console.log(err);
|
||||
});
|
||||
})
|
||||
.catch(() => {});
|
||||
},
|
||||
|
||||
// 标记弹出框
|
||||
BoxRemark(e) {
|
||||
this.remarkBox = true;
|
||||
this.remarkMes.realname = e.realname;
|
||||
this.remarkMes.user_id = e.user_id;
|
||||
this.remarkMes.email = e.email;
|
||||
this.remarkMes.title = e.title;
|
||||
this.remarkMes.remark = e.remark;
|
||||
},
|
||||
// 标记弹出框
|
||||
BoxRemark(e) {
|
||||
this.remarkBox = true;
|
||||
this.remarkMes.realname = e.realname;
|
||||
this.remarkMes.user_id = e.user_id;
|
||||
this.remarkMes.email = e.email;
|
||||
this.remarkMes.title = e.title;
|
||||
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.getDate();
|
||||
} else {
|
||||
this.$message.error(res.msg);
|
||||
}
|
||||
});
|
||||
},
|
||||
// 修改标记
|
||||
saveRemark() {
|
||||
this.$api.post('api/User/editRemarkForUser', this.remarkMes).then((res) => {
|
||||
if (res.code == 0) {
|
||||
this.$message.success('Success');
|
||||
this.remarkBox = false;
|
||||
this.getDate();
|
||||
} else {
|
||||
this.$message.error(res.msg);
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
// 详情
|
||||
handleDtail(e) {
|
||||
let routerJump = this.$router.resolve({
|
||||
path: '/partyRole',
|
||||
query: {
|
||||
id: e.user_id
|
||||
}
|
||||
});
|
||||
window.open(routerJump.href, '_blank');
|
||||
},
|
||||
|
||||
// 详情
|
||||
handleDtail(e) {
|
||||
let routerJump = this.$router.resolve({
|
||||
path: '/partyRole',
|
||||
query: {
|
||||
id: e.user_id
|
||||
}
|
||||
});
|
||||
window.open(routerJump.href, '_blank');
|
||||
|
||||
},
|
||||
|
||||
// 时间格式
|
||||
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;
|
||||
},
|
||||
|
||||
}
|
||||
};
|
||||
// 时间格式
|
||||
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>
|
||||
.table {
|
||||
width: 100%;
|
||||
font-size: 14px;
|
||||
}
|
||||
.table {
|
||||
width: 100%;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.red {
|
||||
color: #ff0000;
|
||||
}
|
||||
.red {
|
||||
color: #ff0000;
|
||||
}
|
||||
|
||||
.tab_tie_col {
|
||||
margin-bottom: 5px;
|
||||
color: #333;
|
||||
word-wrap: break-word;
|
||||
word-break: normal;
|
||||
}
|
||||
.tab_tie_col {
|
||||
margin-bottom: 2px;
|
||||
color: #333;
|
||||
word-wrap: break-word;
|
||||
word-break: normal;
|
||||
}
|
||||
|
||||
.tab_tie_col>span {
|
||||
color: #888;
|
||||
margin: 0 5px 0 0;
|
||||
font-size: 13px;
|
||||
}
|
||||
.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 {
|
||||
width: 14px;
|
||||
margin-right: 4px;
|
||||
vertical-align: text-top;
|
||||
}
|
||||
|
||||
.starSty:nth-last-child(1) {
|
||||
margin-right: 0;
|
||||
}
|
||||
.starSty:nth-last-child(1) {
|
||||
margin-right: 0;
|
||||
}
|
||||
::v-deep .agree_form_box .el-form-item {
|
||||
margin-bottom: 20px !important;
|
||||
}
|
||||
::v-deep .agree_form_box .el-form-item .el-select {
|
||||
width: 100% !important;
|
||||
}
|
||||
::v-deep .agree_form_box .el-dialog__body {
|
||||
padding: 10px 20px 10px !important;
|
||||
}
|
||||
::v-deep .operation_box .el-button--small {
|
||||
padding: 5px 5px !important;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -585,7 +585,7 @@
|
||||
.then(res => {
|
||||
if (res.code == 0) {
|
||||
this.$message.success('Deleted successfully');
|
||||
this.getDate()();
|
||||
this.getDate();
|
||||
} else {
|
||||
this.$message.error(res.msg);
|
||||
}
|
||||
|
||||
48
src/main.js
48
src/main.js
@@ -57,7 +57,7 @@ Vue.use(VueQuillEditor)
|
||||
|
||||
async function loadJournalType() {
|
||||
const localData = localStorage.getItem('journalType'); // 尝试从 localStorage 获取数据
|
||||
// 如果 localStorage 中没有数据,则调用 API 获取并存储
|
||||
|
||||
if (!localData) {
|
||||
try {
|
||||
await api
|
||||
@@ -83,30 +83,42 @@ async function loadJournalType() {
|
||||
|
||||
|
||||
} catch (error) {
|
||||
console.error('Failed to fetch journal types:', error);
|
||||
|
||||
}
|
||||
} else {
|
||||
console.log('Journal types loaded from localStorage:', JSON.parse(localData));
|
||||
|
||||
}
|
||||
}
|
||||
async function loadJournalList() {
|
||||
|
||||
return await api
|
||||
.post('api/Article/getJournal', {})
|
||||
.then((res) => {
|
||||
store.commit('setJournalList', res); // 提交 mutation 更新 journalList
|
||||
console.log('journalList at line 100:, 提交 mutation 更新 journalList')
|
||||
|
||||
})
|
||||
|
||||
async function loadJournalList() {
|
||||
try {
|
||||
const localData = store.state.journalList;
|
||||
console.log('localData at line 93:', localData);
|
||||
|
||||
|
||||
if (localData && Array.isArray(localData) && localData.length > 0) {
|
||||
return localData;
|
||||
}
|
||||
|
||||
|
||||
|
||||
const res = await api.post('api/Article/getJournal', {});
|
||||
|
||||
|
||||
|
||||
if (res ) {
|
||||
const journalList = res;
|
||||
store.commit('setJournalList', journalList);
|
||||
return journalList;
|
||||
} else {
|
||||
return [];
|
||||
|
||||
}
|
||||
|
||||
} catch (error) {
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
// 启动应用时调用一次函数来加载 journalType 数据
|
||||
|
||||
|
||||
|
||||
// 时间过滤器
|
||||
// 定义时间过滤器(不含时分秒)
|
||||
@@ -209,7 +221,7 @@ router.beforeEach(async(to, from, next) => {
|
||||
]);
|
||||
} catch (err) {
|
||||
// 仅打印错误,不阻断路由
|
||||
console.error('接口请求失败,但继续路由跳转', err);
|
||||
|
||||
}
|
||||
|
||||
// 无论接口成功/失败,都执行原有跳转逻辑
|
||||
|
||||
@@ -761,13 +761,15 @@ export default new Router({
|
||||
meta: {
|
||||
title: 'Final decision'
|
||||
}
|
||||
}, {
|
||||
},
|
||||
{
|
||||
path: '/edithistory', //编委历史列表
|
||||
component: () => import('../components/page/edit_history'),
|
||||
meta: {
|
||||
title: 'Accepted manuscript'
|
||||
}
|
||||
}, {
|
||||
},
|
||||
{
|
||||
path: '/edit_text_jx', //编委文章详情-进行
|
||||
component: () => import('../components/page/edit_text_jx'),
|
||||
meta: {
|
||||
@@ -1055,6 +1057,14 @@ export default new Router({
|
||||
hideSidebar: true
|
||||
}
|
||||
},
|
||||
{
|
||||
path: '/OnlineProofreading', //用户端预收录-引用编辑
|
||||
component: () => import('../components/page/OnlineProofreading'),
|
||||
meta: {
|
||||
title: 'Online Proofreading',
|
||||
hideSidebar: true
|
||||
}
|
||||
},
|
||||
{
|
||||
path: '/LateX', //用户端预收录-引用编辑
|
||||
component: () => import('../components/page/components/table/LateX.vue'),
|
||||
|
||||
@@ -60,6 +60,7 @@ module.exports = {
|
||||
assetsDir: 'static',
|
||||
productionSourceMap: false,
|
||||
devServer: {
|
||||
|
||||
// public: 'http://192.168.110.159:8080/', // 你自己本地的ip地址:端口号
|
||||
port: '8080',
|
||||
open: true,
|
||||
|
||||
Reference in New Issue
Block a user