This commit is contained in:
2025-11-06 09:47:40 +08:00
parent 0a0e484349
commit a4eaf0d5cb
8 changed files with 735 additions and 282 deletions

View File

@@ -19,8 +19,8 @@ const service = axios.create({
// baseURL: 'https://submission.tmrjournals.com/', //正式 记得切换
// baseURL: 'http://www.tougao.com/', //测试本地 记得切换
// baseURL: 'http://192.168.110.110/tougao/public/index.php/',
// baseURL: '/api', //本地
baseURL: '/', //正式
baseURL: '/api', //本地
// baseURL: '/', //正式
});

View File

@@ -0,0 +1,208 @@
<template>
<div>
<!-- 个人简历弹出框 -->
<p style="margin: 0 0 25px 28px; font-size: 18px">CV. List</p>
<p style="color: #aaa; margin: 0 0 30px 28px" v-if="cvitaTable.length == 0">No data</p>
<div v-for="(item, index) in cvitaTable" style="margin: 0 0 0 30px">
{{ index + 1 }}.
<img src="../../assets/img/icon_0.png" alt="" class="icon_img" style="vertical-align: middle; margin-left: 10px" />
<span style="margin-left: 20px; color: #888; font-size: 13px">
<i class="el-icon-paperclip"></i>
{{ formatDate(item.ctime) }}
</span>
<a :href="mediaUrl + 'reviewer/' + item.cv" target="_blank" class="txt_pdf">
<i class="el-icon-download"></i>
</a>
<i
class="el-icon-delete"
@click="deletCVita(item)"
style="color: #f12424; cursor: pointer; font-weight: bold; margin: 0 0 0 15px"
></i>
</div>
<p style="width: 90%; background-color: #d7d7d7; height: 1px; margin: 10px auto 30px auto"></p>
<p style="margin: 0 0 25px 28px">If you want to update your resume, please upload it.</p>
<el-form :model="cvitaForm" :rules="rules" ref="cvita_Form" label-width="70px">
<el-form-item label="CV. :">
<el-upload
class="upload-demo"
:action="baseUrl + 'api/Ucenter/up_cv_file'"
:on-success="handleFileSuccess1"
name="reviewerCV"
type="reviewerCV"
:on-error="handleFileError"
:on-preview="handlePreview"
:on-remove="handleRemove"
:before-remove="beforeRemove"
:on-change="handleChange1"
accept=".pdf"
:on-exceed="handleExceed"
ref="uploadRef1"
>
<el-button type="text" style="font-weight: bolder">
<b class="el-icon-lx-top" style="font-weight: bolder"></b>upload
</el-button>
</el-upload>
<span style="font-size: 12px; color: #aaa"> Only pdf files can be uploaded(.pdf) </span>
</el-form-item>
</el-form>
</div>
</template>
<script>
import Schart from 'vue-schart';
import bus from '../common/bus';
export default {
name: 'dashboard',
data() {
return {
user_id: '',
baseUrl: this.Common.baseUrl,
mediaUrl: this.Common.mediaUrl,
cvitaTable1: [],
cvitaForm: {},
fileL_pdf1: []
};
},
created: function () {},
components: {
Schart,
'el-image-viewer': () => import('element-ui/packages/image/src/image-viewer')
},
computed: {},
methods: {
init() {
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();
},
// 获取简历列表
getCVitaData() {
this.$api
.post('api/Ucenter/getUserInfo', {
user_id: this.user_id
})
.then((res) => {
if (res.code == 0) {
this.cvitaTable1 = res.data.cvs;
this.$emit('cvitaTable', this.cvitaTable1);
} else {
this.$message.error(res.msg);
}
})
.catch((err) => {
this.$message.error(err);
});
},
// 删除简历
deletCVita(e) {
// 二次确认删除
this.$confirm('Are you sure you want to delete the CV.?', 'Tip', {
type: 'warning'
})
.then(() => {
this.$api
.post('api/Ucenter/delUserCv', e)
.then((res) => {
if (res.code == 0) {
this.$message.success('Delete successful!');
this.getCVitaData();
} else {
this.$message.error(res.msg);
}
})
.catch((err) => {
this.$message.error(err);
});
})
.catch(() => {});
},
// 星级弹出层
// 上传文件
handleChange1(file, fileList) {
if (fileList.length > 0) {
this.fileL_pdf1 = [fileList[fileList.length - 1]];
}
},
handleFileSuccess1(res, file) {
this.$refs.uploadRef1.clearFiles();
if (res.code == 0) {
this.cvitaForm.cv = res.upurl;
this.$api
.post('api/Ucenter/addUserCv', this.cvitaForm)
.then((res) => {
if (res.code == 0) {
this.$message.success('Upload succeeded!');
this.getCVitaData();
} else {
this.$message.error(res.msg);
}
})
.catch((err) => {
this.$message.error(err);
});
} else {
this.$message.error(res.msg);
}
},
beforeRemove(file, fileList) {
return this.$confirm(`Remove ${file.name}`);
},
handleFileError(res, file) {},
handleRemove(file, fileList) {},
handlePreview(file) {
window.open(file.url);
},
handleExceed(files, fileList) {
this.$message.warning('The current limit is 1 file. Please delete the current file first');
},
// 时间格式
formatDate(timestamp) {
var date = new Date(timestamp * 1000); //时间戳为10位需*1000时间戳为13位的话不需乘1000
var Y = date.getFullYear() + '-';
var M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';
var D = date.getDate() < 10 ? '0' + date.getDate() : date.getDate();
var h = date.getHours() < 10 ? '0' + date.getHours() : date.getHours();
var m = date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes();
var s = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds();
return Y + M + D;
},
formatYear(timestamp) {
var date = new Date(timestamp * 1000); //时间戳为10位需*1000时间戳为13位的话不需乘1000
var Y = date.getFullYear() + ' . ';
var M = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1;
return Y + M;
}
}
};
</script>
<style scoped>
.el-image-viewer__wrapper {
z-index: 5000 !important;
padding: 50px 0;
}
.el-image-viewer__wrapper .el-icon-circle-close {
color: #fff !important;
}
.txt_pdf {
margin: 0 0 20px 10px;
display: inline-block;
color: #333;
}
.txt_pdf > i {
color: #66a9f0;
font-weight: bold;
margin-left: 10px;
}
</style>

View File

@@ -998,7 +998,11 @@
:value="item.journal_id"
></el-option>
</el-select>
</el-form-item>
<!-- <el-form-item label=" " label-width="0px">
<commonCv ref="commoncv" @cvitaTable="getCVitaData"></commonCv>
</el-form-item> -->
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="youthVisible = false">Cancel</el-button>
@@ -1027,12 +1031,14 @@
</template>
<script>
import commonCv from '../common/cv.vue';
import Schart from 'vue-schart';
import bus from '../common/bus';
export default {
name: 'dashboard',
data() {
return {
applyCvitaTable: [],
user_id: localStorage.getItem('U_id'),
username: localStorage.getItem('U_name'),
userrole: localStorage.getItem('U_status'),
@@ -1343,11 +1349,15 @@ export default {
},
components: {
commonCv,
Schart,
'el-image-viewer': () => import('element-ui/packages/image/src/image-viewer')
},
computed: {},
methods: {
getCVitaData(data){
this.applyCvitaTable = data;
},
handleDeleteMajor(v) {
this.$confirm('Are you sure you want to delete this Field ?', 'Tip', {
type: 'warning'
@@ -2102,6 +2112,12 @@ export default {
// 青年科学家弹出框
youthPoint() {
// this.youthForm.journal_id = '';
// this.youthVisible = true;
// this.$nextTick(()=>{
// this.$refs.commoncv.init();
// })
// 判断
this.$api
.post('api/Ucenter/checkApply', {
@@ -2111,7 +2127,12 @@ export default {
.then((res) => {
if (res.code == 0) {
this.youthForm.journal_id = '';
this.youthVisible = true;
// this.$nextTick(()=>{
// this.$refs.commoncv.init();
// })
} else {
// 提示完善信息
this.tipVisible = true;
@@ -2150,7 +2171,7 @@ export default {
this.$message.error(err);
});
} else {
this.$message.error('error submit!!');
this.$message.error('Please select a journal!');
return false;
}
});

File diff suppressed because it is too large Load Diff

View File

@@ -266,9 +266,9 @@
<b v-if="item.indexs_show==0" style="color: #aaa;">Null</b>
<i class="el-icon-edit" @click="HIndexEdit(item)" v-if="form.state==1" style="margin-left: 10px;color: #006699;cursor: pointer;"></i>
</p> -->
<p v-if="item.address"><font>Address : </font>{{ item.address }}</p>
<p v-if="item.company"><font>Affiliation : </font>{{ item.company }}</p>
<p v-if="item.department"><font>Department : </font>{{ item.department }}</p>
<p v-if="item.address&&isShowAuthorInfo"><font>Address : </font>{{ item.address }}</p>
<div v-if="item.company" style="display: flex;align-items: flex-start;"><font style="display: inline-block;width: 70px;color:#777 ;">Affiliation : </font><p v-html="getAllCompany(item.company)" style="width: calc(100% - 70px);"></p></div>
<p v-if="item.department&&isShowAuthorInfo"><font>Department : </font>{{ item.department }}</p>
<p v-if="item.title"><font>Title : </font>{{ item.title }}</p>
<p v-if="item.country"><font>Country : </font>{{ item.country }}</p>
</div>
@@ -486,6 +486,7 @@
<template v-for="(_, index1) in maxRepeatReviewCount()">
<th>{{ index1 + 2 }}<sup>nd</sup> review</th>
</template>
<!-- <th>final state</th> -->
</tr>
</thead>
<tbody>
@@ -504,18 +505,7 @@
<td @click="handleClick(iken)" style="cursor: pointer">
<span style="display: inline-block; margin-left: 4px; margin-right: 8px">
<font
v-if="iken.state == 0"
style="
width: 12px;
height: 12px;
display: block;
border-radius: 10px;
background-color: #ccc;
"
>
</font>
<font
v-if="iken.state == 1 || iken.state == 3"
v-if="iken.recommend == 1 || iken.recommend == 2"
style="
width: 12px;
height: 12px;
@@ -526,7 +516,7 @@
>
</font>
<font
v-if="iken.state == 2"
v-if="iken.recommend == 3|| iken.recommend == 4"
style="
width: 12px;
height: 12px;
@@ -537,7 +527,11 @@
>
</font>
</span>
<span>{{ mystate(iken.state) }}</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</span>
<span v-else-if="iken.recommend == 4">Reject</span>
</td>
<!-- 关键按最大重复次数遍历而非仅遍历当前iken.repeat -->
<template v-for="(_1, index1) in maxRepeatReviewCount()">
@@ -595,6 +589,44 @@
</span>
</td>
</template>
<!-- <td @click="handleClick(iken)" style="cursor: pointer">
<span style="display: inline-block; margin-left: 4px; margin-right: 8px">
<font
v-if="iken.state == 0"
style="
width: 12px;
height: 12px;
display: block;
border-radius: 10px;
background-color: #ccc;
"
>
</font>
<font
v-if="iken.state == 1 || iken.state == 3"
style="
width: 12px;
height: 12px;
display: block;
border-radius: 10px;
background-color: #67c23a;
"
>
</font>
<font
v-if="iken.state == 2"
style="
width: 12px;
height: 12px;
display: block;
border-radius: 10px;
background-color: #f56c6c;
"
>
</font>
</span>
<span>{{ mystate(iken.state) }}</span>
</td> -->
</tr>
</tbody>
@@ -1048,6 +1080,7 @@ export default {
},
data() {
return {
isShowAuthorInfo: false,
activeFinalComment: [],
isShowAI: false,
currentArticleData: {},
@@ -1343,6 +1376,8 @@ export default {
};
},
async created() {
await this.initarticle();
await this.getAi();
this.initFileList();
@@ -1411,6 +1446,15 @@ export default {
}
},
methods: {
getAllCompany(company) {
let str = '';
var list=company.split('/');
for (let i = 0; i < list.length; i++) {
str +=`${i+1}. `+ list[i] + '<br/>';
}
return str;
},
// 算平均分
avegeCount(arry) {
let str = 0;
@@ -1870,6 +1914,22 @@ export default {
})
.then((res) => {
const dynamicTimestamp = res.article.ctime;
const dynamicDate = new Date(dynamicTimestamp * 1000);
const targetDate = new Date(2025, 10, 3);
dynamicDate.setHours(0, 0, 0, 0);
targetDate.setHours(0, 0, 0, 0);
// 2025-11-03 ---上线了自动解析word 识别作者功能 去掉了 address和department字段
const isDynamicDateAfterTarget = dynamicDate > targetDate;
if (!isDynamicDateAfterTarget) {
// 判断日期是否小于等于 2025-11-03
this.isShowAuthorInfo = true;
}else{
this.isShowAuthorInfo = false;
}
this.initMajor();
this.form.username = res.article.account;
this.form.title = res.article.title;

View File

@@ -665,6 +665,7 @@
<template v-for="(_, index1) in maxRepeatReviewCount(item)">
<th>{{ index1 + 2 }}<sup>nd</sup> review</th>
</template>
<!-- <th>final state</th> -->
</tr>
</thead>
<tbody>
@@ -673,20 +674,10 @@
<td>Reviewer {{ reviewerIndex + 1 }}</td>
<!-- 1st review原逻辑不变 -->
<td>
<span style="display: inline-block; margin-left: 4px; margin-right: 8px">
<span style="display: inline-block; margin-left: 4px; margin-right: 8px" v-if="iken.question">
<font
v-if="iken.state == 0"
style="
width: 12px;
height: 12px;
display: block;
border-radius: 10px;
background-color: #ccc;
"
>
</font>
<font
v-if="iken.state == 1 || iken.state == 3"
v-if="iken.question.recommend == 1 || iken.question.recommend == 2"
style="
width: 12px;
height: 12px;
@@ -697,7 +688,7 @@
>
</font>
<font
v-if="iken.state == 2"
v-if="iken.question.recommend == 3|| iken.question.recommend == 4"
style="
width: 12px;
height: 12px;
@@ -708,7 +699,11 @@
>
</font>
</span>
<span>{{ mystate(iken.state) }}</span>
<span v-if="iken.question.recommend == 1">Minor</span>
<span v-else-if="iken.question.recommend == 2">Major</span>
<span v-else-if="iken.question.recommend == 3">Reject</span>
<span v-else-if="iken.question.recommend == 4">Reject</span>
</td>
<!-- 关键按最大重复次数遍历而非仅遍历当前iken.repeat -->
<template v-for="(_1, index1) in maxRepeatReviewCount(item)">
@@ -762,6 +757,45 @@
</span>
</td>
</template>
<!-- <td>
<span style="display: inline-block; margin-left: 4px; margin-right: 8px">
<font
v-if="iken.state == 0"
style="
width: 12px;
height: 12px;
display: block;
border-radius: 10px;
background-color: #ccc;
"
>
</font>
<font
v-if="iken.state == 1 || iken.state == 3"
style="
width: 12px;
height: 12px;
display: block;
border-radius: 10px;
background-color: #67c23a;
"
>
</font>
<font
v-if="iken.state == 2"
style="
width: 12px;
height: 12px;
display: block;
border-radius: 10px;
background-color: #f56c6c;
"
>
</font>
</span>
<span>{{ mystate(iken.state) }}</span>
</td> -->
</tr>
</tbody>
</table>
@@ -2743,7 +2777,7 @@ export default {
})
.then(async (res) => {
console.log('res at line 2219:', res);
this.Total = res.data.total;
this.tableData = res.data.lists;
for (let i = 0; i < this.tableData.length; i++) {
@@ -2751,11 +2785,10 @@ export default {
await this.$api
.post('api/Finalreview/getReviewRecord', { article_id: this.tableData[i].article_id })
.then((res) => {
console.log('res at line 2356:', res);
if (res.status == 1) {
this.$set(this.tableData[i], 'reviewScore', res.data.article_review);
console.log('.reviewScore at line 2358:', this.tableData[i].reviewScore);
}
}
})
.catch((error) => {
console.error('API call failed:', error);

View File

@@ -45,7 +45,6 @@
<b v-if="scope.row.article_state == 4">Revision</b>
<b v-if="scope.row.article_state == 5">Accept</b>
<b v-if="scope.row.article_state == 8">Final Decision</b>
<b v-if="scope.row.astate == 6">Pre-accept</b>
</template>
</el-table-column>

View File

@@ -44,12 +44,12 @@
</template>
</el-table-column>
<el-table-column label="Recommendation" width="160" align="center">
<!-- <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> -->
<el-table-column label=" " width="230">
<template slot-scope="scope">
<router-link