This commit is contained in:
2026-01-05 11:31:14 +08:00
parent 9e337cb164
commit 0faef20008
6 changed files with 268 additions and 135 deletions

View File

@@ -12,6 +12,7 @@
" "
> >
<i class="el-icon-success" style="margin-right: 10px"></i> <i class="el-icon-success" style="margin-right: 10px"></i>
<span <span
>Dear {{ user_name }} , Congratulations! You manuscript has been pre-accepted for publication in >Dear {{ user_name }} , Congratulations! You manuscript has been pre-accepted for publication in
<b>{{ journalInfo.title }}</b <b>{{ journalInfo.title }}</b
@@ -81,7 +82,7 @@
fill="#67c23a" fill="#67c23a"
></path> ></path>
</svg> </svg>
The article processing charges for your manuscript have been waived. The article processing charges for your manuscript have been waived, or you have already paid them via bank transfer.
</div> </div>
<div v-else> <div v-else>
<p <p
@@ -92,9 +93,9 @@
Please see our discount policy here: Please see our discount policy here:
<a <a
style="color: rgb(81, 127, 213); cursor: pointer; text-decoration: underline" style="color: rgb(81, 127, 213); cursor: pointer; text-decoration: underline"
href="https://www.tmrjournals.com/tmr/free-application/" :href="journalInfo.apc_url"
target="_blank" target="_blank"
>https://www.tmrjournals.com/tmr/free-application/</a >{{ journalInfo.apc_url }}</a
>. >.
</p> </p>
<el-card class="box-card" style="width: 100%" <el-card class="box-card" style="width: 100%"

View File

@@ -47,7 +47,6 @@
<span class="title">{{ $t('JournalCitationAnalysis.level') }} :</span><span>{{ scope.row.level }}</span> <span class="title">{{ $t('JournalCitationAnalysis.level') }} :</span><span>{{ scope.row.level }}</span>
</div> </div>
<div class="item" v-if="scope.row.journal_topic"> <div class="item" v-if="scope.row.journal_topic">
<span class="title">{{ $t('JournalCitationAnalysis.journal_topic') }} :</span <span class="title">{{ $t('JournalCitationAnalysis.journal_topic') }} :</span
><span>{{ scope.row.journal_topic }}</span> ><span>{{ scope.row.journal_topic }}</span>
@@ -151,8 +150,14 @@
</el-table-column> </el-table-column>
</el-table> </el-table>
</div> </div>
<el-dialog :title="$t('GroupClassification.edit')" :visible.sync="editDialogVisible" width="1000px" :before-close="handleEditClose" :close-on-click-modal="false"> <el-dialog
<el-form ref="detail_form" :model="detailForm" :rules="rules" label-width="180px"> :title="$t('GroupClassification.edit')"
:visible.sync="editDialogVisible"
width="1000px"
:before-close="handleEditClose"
:close-on-click-modal="false"
>
<el-form ref="detail_form" :model="detailForm" :rules="rules" label-width="260px">
<el-form-item label="Journal :"> <el-form-item label="Journal :">
<p style="display: flex; align-items: center; justify-content: space-between"> <p style="display: flex; align-items: center; justify-content: space-between">
<span>{{ detailForm.title }}</span> <span>{{ detailForm.title }}</span>
@@ -201,6 +206,25 @@
<el-input-number v-model="detailForm.fee" :min="0" v-if="source == 'all'"></el-input-number> <el-input-number v-model="detailForm.fee" :min="0" v-if="source == 'all'"></el-input-number>
<span v-else>{{ detailForm.fee }}</span> <span v-else>{{ detailForm.fee }}</span>
</el-form-item> </el-form-item>
<el-form-item label="Article Processing Charge Link :" prop="fee" v-if="detailForm.fee > 0">
<el-input clearable v-model="detailForm.apc_url" :min="0" v-if="source == 'all'"></el-input>
<span v-else>{{ detailForm.apc_url }}</span>
</el-form-item>
<el-form-item label="Article Processing Charge Instruction :" prop="fee" v-if="detailForm.fee > 0">
<quill-editor
v-if="source == 'all'"
v-model="detailForm.apc_content"
ref="myQuillEditor"
:options="editorOption"
@blur="onEditorBlur($event)"
@focus="onEditorFocus($event)"
@ready="onEditorReady($event)"
class="chapter_editor1"
>
</quill-editor>
<span v-else>{{ detailForm.apc_url }}</span>
</el-form-item>
<el-form-item label="Journal publisher :" prop="publish_author"> <el-form-item label="Journal publisher :" prop="publish_author">
<el-input v-model="detailForm.publish_author" placeholder="eg:TMR编辑部"></el-input> <el-input v-model="detailForm.publish_author" placeholder="eg:TMR编辑部"></el-input>
</el-form-item> </el-form-item>
@@ -217,7 +241,12 @@
:on-error="handleAvatarError2" :on-error="handleAvatarError2"
:before-upload="beforeAvatarUpload2" :before-upload="beforeAvatarUpload2"
> >
<img v-if="detailForm.editor_qrcode" :src="mediaUrl + 'journaleditorqrcode/' + detailForm.editor_qrcode" class="avatar" accept=".png,.jpg" /> <img
v-if="detailForm.editor_qrcode"
:src="mediaUrl + 'journaleditorqrcode/' + detailForm.editor_qrcode"
class="avatar"
accept=".png,.jpg"
/>
<i v-else class="el-icon-plus avatar-uploader-icon" style="line-height: 120px"></i> <i v-else class="el-icon-plus avatar-uploader-icon" style="line-height: 120px"></i>
</el-upload> </el-upload>
</div> </div>
@@ -269,7 +298,8 @@
:title="$t('GroupClassification.Journal') + ' : ' + currentJournal.title" :title="$t('GroupClassification.Journal') + ' : ' + currentJournal.title"
:visible.sync="drawer" :visible.sync="drawer"
direction="rtl" direction="rtl"
:before-close="handleClose" :wrapperClosable="false" :before-close="handleClose"
:wrapperClosable="false"
size="90%" size="90%"
> >
<commonclass ref="commonClassRef" :journal="currentJournal" :urlList="urlList"></commonclass> <commonclass ref="commonClassRef" :journal="currentJournal" :urlList="urlList"></commonclass>
@@ -280,7 +310,8 @@
:title="$t('GroupClassification.Journal') + ' : ' + currentJournal.title" :title="$t('GroupClassification.Journal') + ' : ' + currentJournal.title"
:visible.sync="drawerJournalInstallment" :visible.sync="drawerJournalInstallment"
direction="rtl" direction="rtl"
:before-close="handleCloseJournalInstallment" :wrapperClosable="false" :before-close="handleCloseJournalInstallment"
:wrapperClosable="false"
size="90%" size="90%"
> >
<commonJournalInstallment <commonJournalInstallment
@@ -295,16 +326,13 @@
:title="$t('GroupClassification.Journal') + ' : ' + currentJournal.title" :title="$t('GroupClassification.Journal') + ' : ' + currentJournal.title"
:visible.sync="drawerAgreement" :visible.sync="drawerAgreement"
direction="rtl" direction="rtl"
:before-close="handleAgreementClose" :wrapperClosable="false" :before-close="handleAgreementClose"
:wrapperClosable="false"
size="90%" size="90%"
> >
<common-agreement ref="commonAgreementRef" :journal="currentJournal" :urlList="urlList"></common-agreement> <common-agreement ref="commonAgreementRef" :journal="currentJournal" :urlList="urlList"></common-agreement>
</el-drawer> </el-drawer>
<el-dialog <el-dialog :title="$t('JournalCitationAnalysis.feeDialogTitle')" :visible.sync="feeDialogVisible" width="800px">
:title="$t('JournalCitationAnalysis.feeDialogTitle')"
:visible.sync="feeDialogVisible"
width="800px"
>
<el-alert <el-alert
:title="$t('JournalCitationAnalysis.feeWarningTitle')" :title="$t('JournalCitationAnalysis.feeWarningTitle')"
type="warning" type="warning"
@@ -313,7 +341,7 @@
:closable="false" :closable="false"
/> />
<el-form label-position="top" style="margin-top: 20px;"> <el-form label-position="top" style="margin-top: 20px">
<el-form-item :label="$t('JournalCitationAnalysis.feeLabel')" required> <el-form-item :label="$t('JournalCitationAnalysis.feeLabel')" required>
<el-input-number <el-input-number
v-model="tempFee" v-model="tempFee"
@@ -334,11 +362,31 @@
{{ $t('JournalCitationAnalysis.confirmUpdate') }} {{ $t('JournalCitationAnalysis.confirmUpdate') }}
</el-button> </el-button>
</div> </div>
</el-dialog> </el-dialog>
</div> </div>
</template> </template>
<script> <script>
import { quillEditor } from 'vue-quill-editor';
import 'quill/dist/quill.core.css';
import 'quill/dist/quill.snow.css';
import 'quill/dist/quill.bubble.css';
const toolbarOptions = [
// ['underline'], // 加粗,斜体,下划线,删除线
// ['blockquote', 'code-block'], //引用,代码块
// [{ header: 1 }, { header: 2 }], // 几级标题
// [{ list: 'ordered' }, { list: 'bullet' }], // 有序列表,无序列表
// [{ script: 'sub' }, { script: 'super' }], // 下角标,上角标
// [{ indent: '-1' }, { indent: '+1' }], // 缩进
// [{ direction: 'rtl' }], // 文字输入方向
// [{ size: ['small', false, 'large', 'huge'] }], // 字体大小
// [{ header: [1, 2, 3, 4, 5, 6, false] }], // 标题
// [{ color: [] }, { background: [] }], // 颜色选择
// [{ font: ['SimSun', 'SimHei', 'Microsoft-YaHei', 'KaiTi', 'FangSong', 'Arial'] }], // 字体
// [{ align: [] }], // 居中
['link'] // 上传图片、上传视频
];
import OrgTree from '@/components/org-tree'; import OrgTree from '@/components/org-tree';
import commonclass from './class.vue'; import commonclass from './class.vue';
import commonAgreement from './agreement.vue'; import commonAgreement from './agreement.vue';
@@ -351,7 +399,8 @@ export default {
OrgTree, OrgTree,
commonclass, commonclass,
commonAgreement, commonAgreement,
commonJournalInstallment commonJournalInstallment,
quillEditor
}, },
directives: { directives: {
focus: { focus: {
@@ -362,6 +411,20 @@ export default {
}, },
data() { data() {
return { return {
editorOption: {
modules: {
history: {
delay: 1000,
maxStack: 20,
userOnly: false
},
toolbar: {
container: toolbarOptions,
handlers: {}
}
},
placeholder: ''
},
feeDialogVisible: false, // 控制录入弹窗 feeDialogVisible: false, // 控制录入弹窗
tempFee: 0, // 录入的临时金额 tempFee: 0, // 录入的临时金额
activeJournalId: null, // 当前修改的期刊ID activeJournalId: null, // 当前修改的期刊ID
@@ -421,16 +484,20 @@ export default {
trigger: 'blur' trigger: 'blur'
} }
], ],
scope: [{ scope: [
{
required: true, required: true,
message: 'Please input journal introduction (English)', message: 'Please input journal introduction (English)',
trigger: 'blur' trigger: 'blur'
}], }
abstract_chinese: [{ ],
abstract_chinese: [
{
required: true, required: true,
message: 'Please input journal introduction (Chinese)', message: 'Please input journal introduction (Chinese)',
trigger: 'blur' trigger: 'blur'
}], }
],
email: [ email: [
{ {
required: true, required: true,
@@ -487,6 +554,33 @@ export default {
await this.getDate(); await this.getDate();
}, },
methods: { methods: {
// 失去焦点事件
onEditorBlur(quill) {
// console.log('editor blur!', quill)
},
// 获得焦点事件
onEditorFocus(quill) {
//console.log('editor focus!', quill)
},
// 准备富文本编辑器
onEditorReady(quill) {
// 监听粘贴事件
quill.root.addEventListener(
'paste',
(e) => {
// 阻止默认粘贴行为
e.preventDefault();
// 获取粘贴板的纯文本
const text = (e.originalEvent || e).clipboardData.getData('text/plain');
// 获取当前光标位置并插入纯文本
const range = quill.getSelection();
quill.insertText(range.index, text);
},
{ capture: true }
); // 使用捕获模式确保在 Quill 默认处理前执行
},
// 点击页面上的 Edit 按钮触发 // 点击页面上的 Edit 按钮触发
openEditDialog(row) { openEditDialog(row) {
this.activeJournalId = row.id; this.activeJournalId = row.id;
@@ -516,7 +610,6 @@ export default {
// 用户点击了 Confirm Update执行 API 保存 // 用户点击了 Confirm Update执行 API 保存
this.executeSave(); this.executeSave();
} catch (error) { } catch (error) {
// 用户取消了确认 // 用户取消了确认
} }
@@ -532,7 +625,7 @@ export default {
async handleAvatarSuccess2(res, file) { async handleAvatarSuccess2(res, file) {
if (res.code == 0) { if (res.code == 0) {
this.detailForm.editor_qrcode = res.upurl; this.detailForm.editor_qrcode = res.upurl;
this.$forceUpdate() this.$forceUpdate();
} else { } else {
this.$message.error(res.msg); this.$message.error(res.msg);
} }
@@ -573,10 +666,19 @@ export default {
handleEdit() { handleEdit() {
this.$refs.detail_form.validate((valid) => { this.$refs.detail_form.validate((valid) => {
if (valid) { if (valid) {
if(this.detailForm.editor_qrcode==''||!this.detailForm.editor_qrcode){ if (this.detailForm.editor_qrcode == '' || !this.detailForm.editor_qrcode) {
this.$message.error('Please upload WeChat Code!'); this.$message.error('Please upload WeChat Code!');
return false; return false;
} }
if (this.detailForm.fee && this.detailForm.fee > 0 && this.detailForm.apc_url == '') {
this.$message.error('Please input article processing charge link!');
return false;
}
if (this.detailForm.apc_url && this.detailForm.apc_content != '') {
this.detailForm.apc_content = this.detailForm.apc_content.replace(/<(?!(\/?a\b))[^>]+>/gi, '');
}
this.$api this.$api
.post('api/Journal/editJournal', { .post('api/Journal/editJournal', {
...this.detailForm, ...this.detailForm,
@@ -740,11 +842,12 @@ export default {
}); });
}, },
openEditJournal(data) { openEditJournal(data) {
var that = this; var that = this;
this.currentJournal = data; this.currentJournal = data;
this.detailForm = { this.detailForm = {
apc_url: data.apc_url,
apc_content: data.apc_content,
journal_id: data.journal_id, journal_id: data.journal_id,
title: data.title, title: data.title,
level: data.level, level: data.level,
@@ -762,7 +865,7 @@ export default {
areas: data.journal_topic ? data.journal_topic.split(',') : [''] areas: data.journal_topic ? data.journal_topic.split(',') : ['']
}; };
this.editDialogVisible = true; this.editDialogVisible = true;
if(this.$refs.detail_form){ if (this.$refs.detail_form) {
this.$refs.detail_form.resetFields(); this.$refs.detail_form.resetFields();
} }
@@ -1068,6 +1171,17 @@ export default {
}; };
</script> </script>
<style lang="less" scoped> <style lang="less" scoped>
/deep/ .chapter_editor1 .ql-container {
height: 60px !important;
min-height: 60px !important;
}
/deep/ .chapter_editor1 .ql-editor {
height: 60px !important;
min-height: 60px !important;
}
/deep/ .ql-toolbar.ql-snow {
padding: 0px !important;
}
.floating { .floating {
background: rgba(0, 0, 0, 0.7); background: rgba(0, 0, 0, 0.7);
box-shadow: rgba(0, 0, 0, 0.2); box-shadow: rgba(0, 0, 0, 0.2);
@@ -1197,7 +1311,8 @@ export default {
width: 120px; width: 120px;
height: 120px; height: 120px;
display: block; display: block;
}.portrait { }
.portrait {
/* width: 83px; /* width: 83px;
height: 83px; height: 83px;
border-radius: 110px; border-radius: 110px;

View File

@@ -159,7 +159,6 @@
v-model="form.abstrart" v-model="form.abstrart"
:autosize="{ minRows: 1, maxRows: 100 }" :autosize="{ minRows: 1, maxRows: 100 }"
class="full-show-no-scroll" class="full-show-no-scroll"
placeholder="" placeholder=""
/> />
</el-form-item> </el-form-item>
@@ -775,16 +774,32 @@
> >
$ {{ getFee(form.journal) }} $ {{ getFee(form.journal) }}
<div style="color: #8c8d8f" v-if="getFee(form.journal) && getFee(form.journal) != '0.00'"> <div style="color: #8c8d8f" v-if="getFee(form.journal) && getFee(form.journal) != '0.00'">
<i class="el-icon-warning" style="color: #517fd5; margin-right: 4px"></i>The article processing fee
applies to papers submitted and ultimately accepted for publication after January 1, 2025. For <div v-if="check_item.apc_url&&check_item.apc_content" >
authors seeking to apply for fee discounts, please <i class="el-icon-warning" style="color: #517fd5; margin-right: 4px"></i><span class="apc_content" v-html="check_item.apc_content"></span>
</div>
<!-- <div v-if="form.journal == 1">
<i class="el-icon-warning" style="color: #517fd5; margin-right: 4px"></i>The article processing
fee applies to papers submitted and ultimately accepted for publication after January 1, 2025.
For authors seeking to apply for fee discounts, please
<a <a
style="color: rgb(81, 127, 213); cursor: pointer; text-decoration: underline" style="color: rgb(81, 127, 213); cursor: pointer; text-decoration: underline"
href="https://www.tmrjournals.com/apc/" href="https://www.tmrjournals.com/tmr/free-application/"
target="_blank" target="_blank"
>click here</a >click here</a
> >
to view detailed policies. to view detailed policies.
</div> -->
<div v-else>
<i class="el-icon-warning" style="color: #517fd5; margin-right: 4px"></i>For more details about the Article Processing Charge (APC), please visit:
<a
style="color: rgb(81, 127, 213); cursor: pointer; text-decoration: underline"
:href="check_item.apc_url"
target="_blank"
>{{check_item.apc_url}}</a
>
</div>
</div> </div>
</el-form-item> </el-form-item>
@@ -1881,7 +1896,6 @@ export default {
this.form.journal = ''; this.form.journal = '';
this.reviewerof.journal = 1; this.reviewerof.journal = 1;
if (localStorage.getItem('ms_journal_alias')) { if (localStorage.getItem('ms_journal_alias')) {
localStorage.removeItem('ms_journal_alias'); localStorage.removeItem('ms_journal_alias');
} }
@@ -3901,6 +3915,9 @@ export default {
</script> </script>
<style scoped> <style scoped>
/deep/.apc_content a{
color: rgb(81, 127, 213) !important; cursor: pointer !important; text-decoration: underline !important;
}
.formTopics { .formTopics {
width: 100%; width: 100%;
} }
@@ -4041,7 +4058,6 @@ export default {
} }
/* 穿透Element UI的样式强制覆盖所有限制 */ /* 穿透Element UI的样式强制覆盖所有限制 */
.full-show-no-scroll::v-deep .el-textarea { .full-show-no-scroll::v-deep .el-textarea {
overflow: visible !important; overflow: visible !important;
} }

View File

@@ -557,8 +557,8 @@
</el-button> </el-button>
<h4>Figure Copyright Declaration :</h4> <h4>Figure Copyright Declaration :</h4>
<div style="line-height: 22px;padding-left: 10px;margin-top: 2px;color: #333;"> <div style="line-height: 22px;padding-left: 10px;margin-top: 2px;color: #333;">
<p v-if="form.is_figure_copyright == 2">I confirm that all figures in this manuscript are original.</p> <p v-if="form.is_figure_copyright == 2">&nbsp;I confirm that all figures in this manuscript are original.</p>
<p v-if="form.is_figure_copyright == 1">I confirm that all figures in this manuscript used with proper permission.</p> <p v-if="form.is_figure_copyright == 1">&nbsp;I confirm that all figures in this manuscript used with proper permission.</p>
</div> </div>

View File

@@ -17,7 +17,7 @@
</el-form-item> --> </el-form-item> -->
<transition name="el-fade-in"> <transition name="el-fade-in">
<el-form-item v-if="value == '1'" style=""> <el-form-item style="">
<div style="position: relative; top: 4px; margin-left: 14px"> <div style="position: relative; top: 4px; margin-left: 14px">
<el-upload <el-upload

View File

@@ -21,7 +21,8 @@
Manuscript ID: {{ txt_mess.accept_sn }} Manuscript ID: {{ txt_mess.accept_sn }}
</h5> </h5>
<p style="display: inline-block; margin: 0 35px"><b>Type :</b> {{ txt_mess.atype }}</p> <p style="display: inline-block; margin: 0 35px"><b>Type :</b> {{ txt_mess.atype }}</p>
<p style="display: inline-block"><b>Submitted time :</b> {{ txt_mess.ctime | formatDatehms}}</p>
<!-- <p style="display: inline-block"><b>Submitted time :</b> {{ txt_mess.ctime}}</p> -->
<div v-if="this.add_apply == 0"> <div v-if="this.add_apply == 0">
<p><b>Abstract :</b> <br />{{ txt_mess.abstrart }}</p> <p><b>Abstract :</b> <br />{{ txt_mess.abstrart }}</p>
<div class="file_sty" v-for="item in fileList" style="margin-top: 15px"> <div class="file_sty" v-for="item in fileList" style="margin-top: 15px">