This commit is contained in:
2025-02-12 17:58:57 +08:00
parent d11b02b06b
commit a178d5ffbe
5 changed files with 712 additions and 588 deletions

View File

@@ -56,8 +56,9 @@
></el-option>
</el-select>
</el-form-item>
<el-form-item label="Major :" :required="true" prop="major_a">
<el-select
<el-form-item label="Research areas :" prop="major">
<common-major-list :list="majorValueList" @load="(e)=>this.majorValueList=e"></common-major-list>
<!-- <el-select
v-model="form.major_a"
placeholder="Please select major"
@change="majorChange(1)"
@@ -99,7 +100,7 @@
:label="item.major_title"
:value="item.major_id"
></el-option>
</el-select>
</el-select> -->
</el-form-item>
<el-form-item label="Manuscript Title :" prop="title">
<el-input v-model="form.title" placeholder="Please enter title"></el-input>
@@ -966,6 +967,7 @@
export default {
data() {
return {
majorValueList:[],
baseUrl: this.Common.baseUrl,
usercap: localStorage.getItem('U_role'),
ms_alias: localStorage.getItem('ms_journal_alias'),
@@ -1196,9 +1198,19 @@ export default {
major: [
{
required: true,
message: 'Please select major',
trigger: 'blur'
validator: (rule, value, callback) => {
console.log('value at line 1202:', this.form);
var major=this.majorValueList.map(item => item.selectedValue[item.selectedValue.length - 1]).toString(',')
if (major=='') {
callback(new Error('Please select the Research areas'));
} else {
callback();
}
// 如果你需要在此处使用 this 访问 Vue 实例的数据,使用箭头函数保持上下文
// 其他逻辑
}
}
],
abstrart: [
{
@@ -2599,6 +2611,10 @@ export default {
// 点击进行下一步
onStep(e) {
console.log('this.majorValueList at line 2604:', this.majorValueList)
console.log('this.form at line 2622:', this.form)
this.$refs.articleform.validate((valid) => {
if (valid) {
if (e == 1) {
@@ -2617,7 +2633,13 @@ export default {
}
}
this.form.keyWords = fstr == '' ? '' : fstr.substring(0, fstr.length - 1);
this.form.major=this.majorValueList.map(item => item.selectedValue[item.selectedValue.length - 1]).toString(',')
if(this.form.major==''){
this.$message.error('Please select the Research areas')
return false
}
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;
@@ -2702,8 +2724,15 @@ export default {
fstr += flist[fu].ke.trim() + ',';
}
}
console.log('this.form at line 2707:', this.form)
this.form.keyWords = fstr == '' ? '' : fstr.substring(0, fstr.length - 1);
this.form.major=this.majorValueList.map(item => item.selectedValue[item.selectedValue.length - 1]).toString(',')
if(this.form.major==''){
this.$message.error('Please select the Research areas')
return false
}
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;
@@ -2840,44 +2869,48 @@ export default {
console.log(res.data.base);
// this.form.topics = res.data.base.topics
// 领域
this.$api
.post('api/Major/getMajorForAddArticle', {
journal_id: this.form.journal,
major_id: 1
})
.then((res) => {
this.majors_a = res.data.majors;
});
this.form.major_a = res.data.major.major_id;
this.$api
.post('api/Major/getMajorForAddArticle', {
journal_id: this.form.journal,
major_id: this.form.major_a
})
.then((ref) => {
this.majors_b = ref.data.majors;
this.majors_c = [];
this.form.major_b = '';
this.form.major_c = '';
this.majorChange_panduan();
if (res.data.major.child != undefined) {
this.form.major_b = res.data.major.child.major_id;
this.$api
.post('api/Major/getMajorForAddArticle', {
journal_id: this.form.journal,
major_id: this.form.major_b
})
.then((ref) => {
this.majors_c = ref.data.majors;
this.form.major_c = '';
this.majorChange_panduan();
if (res.data.major.child.child != undefined) {
this.form.major_c = res.data.major.child.child.major_id;
this.majorChange_panduan();
}
});
}
});
this.majorValueList = res.data.majors.map(item => ({
selectedValue: Array.isArray(item.major) ? item.major : (typeof item.major === 'string' ? item.major.split(',').map(Number) : [item.major])
})); console.log('this.majorValueList at line 2853:', this.majorValueList)
// this.$api
// .post('api/Major/getMajorForAddArticle', {
// journal_id: this.form.journal,
// major_id: 1
// })
// .then((res) => {
// this.majors_a = res.data.majors;
// });
// this.form.major_a = res.data.major.major_id;
// this.$api
// .post('api/Major/getMajorForAddArticle', {
// journal_id: this.form.journal,
// major_id: this.form.major_a
// })
// .then((ref) => {
// this.majors_b = ref.data.majors;
// this.majors_c = [];
// this.form.major_b = '';
// this.form.major_c = '';
// this.majorChange_panduan();
// if (res.data.major.child != undefined) {
// this.form.major_b = res.data.major.child.major_id;
// this.$api
// .post('api/Major/getMajorForAddArticle', {
// journal_id: this.form.journal,
// major_id: this.form.major_b
// })
// .then((ref) => {
// this.majors_c = ref.data.majors;
// this.form.major_c = '';
// this.majorChange_panduan();
// if (res.data.major.child.child != undefined) {
// this.form.major_c = res.data.major.child.child.major_id;
// this.majorChange_panduan();
// }
// });
// }
// });
// 关键词
let keyList = res.data.base.keywords.split(',');
this.keywordsList = [];

View File

@@ -57,7 +57,42 @@
<p v-if="form.special_num > 0">
<font>Special Issues :</font><b>{{ form.special_title }}</b>
</p>
<el-collapse class="auth_colla auth_collna_ew" style="margin-bottom: 0;">
<el-collapse-item title="Research areas" name="1" >
<div style="position: relative;height: 30px;">
<common-major
:articleId="editform.articleId"
@load="initMajor()"
style="position: absolute; top: 10px; right: 10px"
></common-major>
</div>
<div style="margin: 12px 20px 30px 0px; line-height: 24px; font-size: 14px; position: relative">
<div>
<!-- 统计数据 -->
<div class="join_link">
<!-- 如果你想投稿 请点击 -->
<p style="" v-for="(v, i) in majorsList">
<span style="color: #006699; font-weight: bold; margin-right: 10px"
>Field {{ i + 1 }}:</span
>{{ v.str
}}<i
class="el-icon-delete-solid"
style="color: #f56c6c !important; margin-left: 10px"
@click="handleDeleteMajor(v)"
></i>
</p>
<!-- 查看已投稿件列表 -->
</div>
</div>
</div>
</el-collapse-item>
</el-collapse>
<el-collapse class="auth_colla auth_collna_ew">
<el-collapse-item :title="authorList_name" name="1">
<div v-for="(item, index) in form.authorList" class="auth_mess">
@@ -108,6 +143,7 @@
</div>
</el-collapse-item>
</el-collapse>
<el-collapse class="auth_colla auth_collna_ew" style="margin-top: -15px">
<el-collapse-item name="2">
<template slot="title">
@@ -126,6 +162,7 @@
</p>
</el-collapse-item>
</el-collapse>
</div>
<div class="art_file_">
@@ -241,12 +278,8 @@
</el-col>
</el-row>
</div>
<common-word-html
:articleId="$route.query.id"
style=" box-sizing: border-box"
></common-word-html>
<common-word-html :articleId="$route.query.id" style="box-sizing: border-box"></common-word-html>
</div>
<!-- 被拒稿件操作 --->
<div class="art_caozuo_" v-if="opname == 'rejectArticles'">
@@ -626,6 +659,7 @@ export default {
ad_content: ''
},
talkMsgs: [],
majorsList: [],
opname: '', // 稿件详细类型
editorJournalList: [], // 编辑期刊列表
resubmitJournal: {
@@ -805,7 +839,7 @@ export default {
});
},
openDrawer(data, url) {
console.log('url at line 799:',data, url)
console.log('url at line 799:', data, url);
this.previewData = {
...data,
previewUrl: url,
@@ -899,7 +933,29 @@ export default {
return { status: status, msg: msg };
},
handleDeleteMajor(v) {
console.log('v at line 925:', v);
this.$confirm('Are you sure you want to delete this Field ?', 'Tip', {
type: 'warning'
})
.then(() => {
this.$api
.post('api/Major/delMajorByArticleIdForEditor', {
mta_id: v.mta_id
})
.then((res) => {
if (res.code == 0) {
this.initMajor();
} else {
this.$message.error(res.msg);
}
})
.catch((err) => {
this.$message.error(err);
});
})
.catch(() => {});
},
//修改文章状态
async saveEdit() {
if (this.form.state == 0) {
@@ -948,7 +1004,16 @@ export default {
this.$router.go(0);
});
},
initMajor() {
this.$api
.post('api/Major/getMajorByArticleId', {
article_id: this.editform.articleId
})
.then((res) => {
console.log('res at line 978:', res);
this.majorsList = res.data.majors;
});
},
//初始化期刊信息
initarticle() {
this.now_year = new Date().getFullYear();
@@ -957,7 +1022,9 @@ export default {
articleId: this.editform.articleId,
human: 'editor'
})
.then((res) => {
this.initMajor();
this.form.username = res.article.account;
this.form.title = res.article.title;
this.form.journal = res.article.journal_id;

View File

@@ -12,33 +12,50 @@
</el-breadcrumb>
</div>
<div class="container_state">
<p style="color: #888;margin: 10px 0 5px 0;">ID : {{artMes.accept_sn}}</p>
<p style="font-size: 16px;font-weight: bolder;letter-spacing: -0.5px;">
<p style="color: #888; margin: 10px 0 5px 0">ID : {{ artMes.accept_sn }}</p>
<p style="font-size: 16px; font-weight: bolder; letter-spacing: -0.5px">
<!-- <span class="art_type">{{ellType(artMes.type)}}</span> -->
{{ artMes.title }}
</p>
<!-- <p style="color: #7f8790;margin: 10px 0 0 0;">Follow the progress of your submission.</p> -->
<div class="tit_head">
Status : <b style="margin: 0 50px 0 0;">{{statetostr(artMes.laststate)}}</b>
Journal : <b>{{artMes.journalname}}</b>
Status : <b style="margin: 0 50px 0 0">{{ statetostr(artMes.laststate) }}</b> Journal : <b>{{ artMes.journalname }}</b>
</div>
<div class="tit_head" v-if="artMes.majors&&artMes.majors.length>0">
<b style="margin: 0 50px 0 0;font-size: 20px;">Research areas</b>
<div style="margin-top: 10px;">
<p style="" v-for="(v, i) in artMes.majors">
<span style="color: #333; margin-right: 10px">Field {{ i + 1 }}:</span>{{ v.str
}}
</p>
</div>
</div>
<el-row :gutter="30">
<el-col :span="15">
<div class="process_new">
<!-- <p style="width: 100%;height: 1px;background-color: #eee;margin: 35px 0 30px 0;"></p> -->
<h2 style="font-size: 18px;margin: 0 0 10px 0;float: left;letter-spacing: -0.8px;">Manuscript
Tracking</h2>
<h2 style="font-size: 18px; margin: 0 0 10px 0; float: left; letter-spacing: -0.8px">Manuscript Tracking</h2>
<!-- <div class="radio" style="float: right;">
<el-radio-group v-model="reverse">
<el-radio-button :label="false">Ascending</el-radio-button>
<el-radio-button :label="true">Descending</el-radio-button>
</el-radio-group>
</div> -->
<br clear="both">
<br clear="both" />
<el-timeline :reverse="reverse" class="author_tree">
<el-timeline-item v-for="(item, index) in prossMsgs" :icon="item.icon" :color="item.color"
size="large" :key="index" :timestamp="formatDate(item.ctime)" placement="top" v-if="item.ftype == 0">
<el-timeline-item
v-for="(item, index) in prossMsgs"
:icon="item.icon"
:color="item.color"
size="large"
:key="index"
:timestamp="formatDate(item.ctime)"
placement="top"
v-if="item.ftype == 0"
>
<el-card>
<p>
<font>{{ statetostr(item.state_to) }}</font>
@@ -63,12 +80,13 @@
:
<router-link
:to="{ path: '/articleProcessRevision', query: { id: artMes.article_id } }"
v-if="item.back==1">
<b style="margin-left: 5px;color: #006699;text-decoration: underline;">Upload
Major Revision</b>
v-if="item.back == 1"
>
<b style="margin-left: 5px; color: #006699; text-decoration: underline"
>Upload Major Revision</b
>
</router-link>
<b style="margin-left: 5px;color: #888;text-decoration: underline;"
v-if="item.back==0">
<b style="margin-left: 5px; color: #888; text-decoration: underline" v-if="item.back == 0">
Upload Major Revision (Completed)
</b>
</font>
@@ -102,25 +120,19 @@
<!-- 对话列表 -->
<div class="kuang_communtion">
<h2>
Communication
</h2>
<h2>Communication</h2>
<div v-for="item in talkMsgs" class="kuang_communtion_conmt">
<div v-if="item.user_id != artMes.user_id" class="talk_aued">
<p>
Editor :
</p>
<p>Editor :</p>
<el-card>
<p style="white-space: pre-wrap;">{{ item.ad_content }}</p>
<p style="white-space: pre-wrap">{{ item.ad_content }}</p>
</el-card>
<b>{{ formatDate(item.ad_ctime) }}</b>
</div>
<div v-if="item.user_id == artMes.user_id" class="talk_aued talk_edit">
<p>
Author :
</p>
<p>Author :</p>
<el-card>
<p style="white-space: pre-wrap;">{{ item.ad_content }}</p>
<p style="white-space: pre-wrap">{{ item.ad_content }}</p>
</el-card>
<b>{{ formatDate(item.ad_ctime) }}</b>
</div>
@@ -129,61 +141,55 @@
<div class="kuang_communtion_input">
<p v-if="talkMsgs"></p>
<span class="text_bor_ghu">
<el-input type="textarea" rows="3" v-model="msgform.ad_content"
placeholder="You can initiate short conversations with the editor." resize="none">
<el-input
type="textarea"
rows="3"
v-model="msgform.ad_content"
placeholder="You can initiate short conversations with the editor."
resize="none"
>
</el-input>
<el-button type="primary" @click="saveMsg">Send</el-button>
</span>
<font style="font-size: 12px;color: #999;padding:12px 5px 0 5px;display: block;">
This column is served as an instant correspondence between the editor and authors,
aiming to acquire a faster
way of communication than E-Mail. If you have any questions, please start the instant
corresponding, and the
editors will reply to you in 24 hours.
<br>
<font style="color: #006699;">Please Attention</font>
<br>
<font style="color: #006699;">1.</font> If you need to send files as attachments, please
send them to
<font style="font-size: 12px; color: #999; padding: 12px 5px 0 5px; display: block">
This column is served as an instant correspondence between the editor and authors, aiming to acquire a
faster way of communication than E-Mail. If you have any questions, please start the instant corresponding,
and the editors will reply to you in 24 hours.
<br />
<font style="color: #006699">Please Attention</font>
<br />
<font style="color: #006699">1.</font> If you need to send files as attachments, please send them to
tmr@tmrjournals.com
<br>
<font style="color: #006699;">2.</font> Please do not upload the primary documents like
the cover letter, the
reply to the reviewer comments,
etc.
<br />
<font style="color: #006699">2.</font> Please do not upload the primary documents like the cover letter, the
reply to the reviewer comments, etc.
</font>
</div>
</div>
<p style="line-height: 20px;color: #999;padding: 0 15px 0 15px;">
We encourage authors to upload a Cover Letter file and make sure the Highlights part in the main
manuscript is
after the abstract and keywords. That will help authors let editors quickly obtain information
and evaluate the
scientific value of their research correctly.
<br>Please remind our editor in the cover letter if you want your manuscript processed quickly.
<br>Please note that manuscripts with at least one of the following characteristics will be
included in the
journal's manuscript fast track:
<br>
<font style="color: #006699;">1.Interest:</font> This manuscript has a novel perspective.
<br>
<font style="color: #006699;">2.Importance:</font> This manuscript belongs to the focus area.
<br>
<font style="color: #006699;">3.Value:</font> This manuscript belongs to the advanced topic and
can attract wide
<p style="line-height: 20px; color: #999; padding: 0 15px 0 15px">
We encourage authors to upload a Cover Letter file and make sure the Highlights part in the main manuscript is after
the abstract and keywords. That will help authors let editors quickly obtain information and evaluate the scientific
value of their research correctly.
<br />Please remind our editor in the cover letter if you want your manuscript processed quickly. <br />Please note
that manuscripts with at least one of the following characteristics will be included in the journal's manuscript
fast track:
<br />
<font style="color: #006699">1.Interest:</font> This manuscript has a novel perspective.
<br />
<font style="color: #006699">2.Importance:</font> This manuscript belongs to the focus area.
<br />
<font style="color: #006699">3.Value:</font> This manuscript belongs to the advanced topic and can attract wide
attention.
</p>
</el-col>
</el-row>
</div>
<el-dialog title="Message" :visible.sync="editVisible" width="40%">
<el-form ref="msgform" :model="msgform" label-width="80px">
<el-form-item label="Message">
<el-input type="textarea" rows="5" v-model="msgform.content" placeholder="Author messages">
</el-input>
<el-input type="textarea" rows="5" v-model="msgform.content" placeholder="Author messages"> </el-input>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
@@ -227,9 +233,7 @@
created: function () {
this.initarticle();
},
computed: {
},
computed: {},
methods: {
//初始化文章信息
initarticle() {
@@ -239,45 +243,45 @@
human: 'author'
})
.then((res) => {
let back_num = 0
let back_num = 0;
// 添加投递稿件条目
res.msg.unshift({
state_to: -1,
ctime: res.article.ctime,
color: '#B5C334',
icon: 'el-icon-collection-tag',
ftype: 0,
ftype: 0
});
for (let i = res.msg.length - 1; i >= 0; i--) {
if (res.msg[i].state_to == 4 && res.msg[i + 1] == undefined && back_num == 0) {
res.msg[i].back = 1;
back_num = 1
back_num = 1;
} else {
res.msg[i].back = 0;
}
if (res.msg[i].state_to == 1) {
res.msg[i].color = '#f75822'
res.msg[i].icon = 'el-icon-document-checked'
res.msg[i].color = '#f75822';
res.msg[i].icon = 'el-icon-document-checked';
}
if (res.msg[i].state_to == 2) {
res.msg[i].color = '#0ebee1'
res.msg[i].icon = 'el-icon-document'
res.msg[i].color = '#0ebee1';
res.msg[i].icon = 'el-icon-document';
}
if (res.msg[i].state_to == 3) {
res.msg[i].color = '#888'
res.msg[i].icon = 'el-icon-close'
res.msg[i].color = '#888';
res.msg[i].icon = 'el-icon-close';
}
if (res.msg[i].state_to == 4) {
res.msg[i].color = '#5a90e1'
res.msg[i].icon = 'el-icon-edit-outline'
res.msg[i].color = '#5a90e1';
res.msg[i].icon = 'el-icon-edit-outline';
}
if (res.msg[i].state_to == 5) {
res.msg[i].color = '#91cc75'
res.msg[i].icon = 'el-icon-check'
res.msg[i].color = '#91cc75';
res.msg[i].icon = 'el-icon-check';
}
if (res.msg[i].state_to == 6) {
res.msg[i].color = '#27727B'
res.msg[i].icon = 'el-icon-star-off'
res.msg[i].color = '#27727B';
res.msg[i].icon = 'el-icon-star-off';
}
}
this.artMes = res.article;
@@ -335,11 +339,10 @@
return false;
}
this.loading = true;
this.$api.post('api/Article/pushArticleDialog', this.msgform)
.then((res) => {
this.$api.post('api/Article/pushArticleDialog', this.msgform).then((res) => {
this.loading = false;
this.$message.success('Sent successfully');
this.initarticle()
this.initarticle();
});
},
@@ -379,7 +382,7 @@
ellType(e) {
let frag = '';
switch (e) {
case "A":
case 'A':
frag = 'Article';
break;
case 'B':
@@ -446,16 +449,12 @@
frag = 'Others';
}
return frag;
},
},
filters: {
}
},
filters: {}
};
</script>
<style>
.top_dao:hover {
text-decoration: underline;
@@ -480,7 +479,7 @@
.tit_head {
border-radius: 5px;
border: 1px solid #EBEEF5;
border: 1px solid #ebeef5;
padding: 20px;
font-size: 15px;
margin: 20px 0 30px 0;
@@ -531,7 +530,7 @@
height: auto;
bottom: 15px;
top: 45px;
border-left: 3px solid #E4E7ED;
border-left: 3px solid #e4e7ed;
/* border-left: 2px solid #66a3c2; */
left: 168px;
}
@@ -569,7 +568,6 @@
line-height: 18px;
text-align: center;
margin: 0 10px 0 0;
}
.art_process_list span {

View File

@@ -49,6 +49,10 @@ export default {
userId: {
type: String,
default: ''
},
articleId: {
type: String,
default: ''
}
},
data() {
@@ -87,10 +91,17 @@ this.coreForm1.majorList = this.fields[i].selectedValue;
}
this.$refs.core_Form1.validate((valid) => {
if (valid) {
this.$api
.post('api/User/addUserMajor', {
user_id: this.userId,
var data={
major_id: this.coreForm1.majorList[this.coreForm1.majorList.length - 1]
}
if(this.userId){
data.user_id = this.userId;
}else{
data.article_id = this.articleId;
}
this.$api
.post(this.userId?'api/User/addUserMajor':'api/Major/addMajorByArticleIdForEditor', {
...data
})
.then((res) => {

View File

@@ -49,8 +49,21 @@ export default {
userId: {
type: String,
default: ''
},
list: {
type: Array,
default: []
}
},
watch: {
list: {
handler(e) {
this.fields=[...this.list]
},
immediate: true
},
},
data() {
return {
rules1:{},
@@ -58,7 +71,7 @@ export default {
coreForm1: {
majorList: []
},
fields: [{}], // 用于存储多个领域的选项数据
fields: [], // 用于存储多个领域的选项数据
options: [] // 用于存储级联选择的选项数据
};
},
@@ -74,7 +87,7 @@ export default {
this.$refs[`cascader${i}`][0].dropDownVisible = false;
this.coreForm1.majorList = this.fields[i].selectedValue;
this.$emit('load',this.fields.map(item => item.selectedValue[item.selectedValue.length - 1]))
this.$emit('load',this.fields)
this.$forceUpdate();
});
@@ -117,6 +130,7 @@ this.coreForm1.majorList = this.fields[i].selectedValue;
this.$nextTick(() => {
// this.fields=[]
this.fields.push({ selectedValue: [] }); // 添加一个新的字段
this.$emit('load',this.fields)
// this.coreVisible1 = true;
});
},
@@ -124,6 +138,7 @@ this.coreForm1.majorList = this.fields[i].selectedValue;
// 删除指定的 Cascader
handleDelete(index) {
this.fields.splice(index, 1); // 删除指定索引的字段
this.$emit('load',this.fields)
},
// 获取 Cascader 配置