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>
<span
>Dear {{ user_name }} , Congratulations! You manuscript has been pre-accepted for publication in
<b>{{ journalInfo.title }}</b
@@ -81,7 +82,7 @@
fill="#67c23a"
></path>
</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 v-else>
<p
@@ -92,9 +93,9 @@
Please see our discount policy here:
<a
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"
>https://www.tmrjournals.com/tmr/free-application/</a
>{{ journalInfo.apc_url }}</a
>.
</p>
<el-card class="box-card" style="width: 100%"

View File

@@ -46,8 +46,7 @@
<div class="item">
<span class="title">{{ $t('JournalCitationAnalysis.level') }} :</span><span>{{ scope.row.level }}</span>
</div>
<div class="item" v-if="scope.row.journal_topic">
<span class="title">{{ $t('JournalCitationAnalysis.journal_topic') }} :</span
><span>{{ scope.row.journal_topic }}</span>
@@ -151,8 +150,14 @@
</el-table-column>
</el-table>
</div>
<el-dialog :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="180px">
<el-dialog
: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 :">
<p style="display: flex; align-items: center; justify-content: space-between">
<span>{{ detailForm.title }}</span>
@@ -201,10 +206,29 @@
<el-input-number v-model="detailForm.fee" :min="0" v-if="source == 'all'"></el-input-number>
<span v-else>{{ detailForm.fee }}</span>
</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-input v-model="detailForm.publish_author" placeholder="eg:TMR编辑部"></el-input>
</el-form-item>
<el-form-item label="WeChat Code :" prop="editor_qrcode">
<div class="portrait WeChatCode">
<el-upload
@@ -217,7 +241,12 @@
:on-error="handleAvatarError2"
: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>
</el-upload>
</div>
@@ -269,7 +298,8 @@
:title="$t('GroupClassification.Journal') + ' : ' + currentJournal.title"
:visible.sync="drawer"
direction="rtl"
:before-close="handleClose" :wrapperClosable="false"
:before-close="handleClose"
:wrapperClosable="false"
size="90%"
>
<commonclass ref="commonClassRef" :journal="currentJournal" :urlList="urlList"></commonclass>
@@ -280,7 +310,8 @@
:title="$t('GroupClassification.Journal') + ' : ' + currentJournal.title"
:visible.sync="drawerJournalInstallment"
direction="rtl"
:before-close="handleCloseJournalInstallment" :wrapperClosable="false"
:before-close="handleCloseJournalInstallment"
:wrapperClosable="false"
size="90%"
>
<commonJournalInstallment
@@ -295,50 +326,67 @@
:title="$t('GroupClassification.Journal') + ' : ' + currentJournal.title"
:visible.sync="drawerAgreement"
direction="rtl"
:before-close="handleAgreementClose" :wrapperClosable="false"
:before-close="handleAgreementClose"
:wrapperClosable="false"
size="90%"
>
<common-agreement ref="commonAgreementRef" :journal="currentJournal" :urlList="urlList"></common-agreement>
</el-drawer>
<el-dialog
:title="$t('JournalCitationAnalysis.feeDialogTitle')"
:visible.sync="feeDialogVisible"
width="800px"
>
<el-alert
:title="$t('JournalCitationAnalysis.feeWarningTitle')"
type="warning"
:description="$t('JournalCitationAnalysis.feeWarningDesc')"
show-icon
:closable="false"
/>
<el-dialog :title="$t('JournalCitationAnalysis.feeDialogTitle')" :visible.sync="feeDialogVisible" width="800px">
<el-alert
:title="$t('JournalCitationAnalysis.feeWarningTitle')"
type="warning"
:description="$t('JournalCitationAnalysis.feeWarningDesc')"
show-icon
:closable="false"
/>
<el-form label-position="top" style="margin-top: 20px;">
<el-form-item :label="$t('JournalCitationAnalysis.feeLabel')" required>
<el-input-number
v-model="tempFee"
:precision="2"
:min="0"
:placeholder="$t('JournalCitationAnalysis.placeholder')"
style="width: 100%"
controls-position="right"
/>
</el-form-item>
</el-form>
<el-form label-position="top" style="margin-top: 20px">
<el-form-item :label="$t('JournalCitationAnalysis.feeLabel')" required>
<el-input-number
v-model="tempFee"
:precision="2"
:min="0"
:placeholder="$t('JournalCitationAnalysis.placeholder')"
style="width: 100%"
controls-position="right"
/>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="feeDialogVisible = false">
{{ $t('JournalCitationAnalysis.cancel') }}
</el-button>
<el-button type="primary" @click="validateAndConfirm">
{{ $t('JournalCitationAnalysis.confirmUpdate') }}
</el-button>
</div>
</el-dialog>
<div slot="footer" class="dialog-footer">
<el-button @click="feeDialogVisible = false">
{{ $t('JournalCitationAnalysis.cancel') }}
</el-button>
<el-button type="primary" @click="validateAndConfirm">
{{ $t('JournalCitationAnalysis.confirmUpdate') }}
</el-button>
</div>
</el-dialog>
</div>
</template>
<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 commonclass from './class.vue';
import commonAgreement from './agreement.vue';
@@ -351,7 +399,8 @@ export default {
OrgTree,
commonclass,
commonAgreement,
commonJournalInstallment
commonJournalInstallment,
quillEditor
},
directives: {
focus: {
@@ -362,9 +411,23 @@ export default {
},
data() {
return {
editorOption: {
modules: {
history: {
delay: 1000,
maxStack: 20,
userOnly: false
},
toolbar: {
container: toolbarOptions,
handlers: {}
}
},
placeholder: ''
},
feeDialogVisible: false, // 控制录入弹窗
tempFee: 0, // 录入的临时金额
activeJournalId: null, // 当前修改的期刊ID
tempFee: 0, // 录入的临时金额
activeJournalId: null, // 当前修改的期刊ID
mediaUrl: this.Common.mediaUrl,
baseUrl: this.Common.baseUrl,
activeNames: [],
@@ -421,16 +484,20 @@ export default {
trigger: 'blur'
}
],
scope: [{
required: true,
message: 'Please input journal introduction (English)',
trigger: 'blur'
}],
abstract_chinese: [{
required: true,
message: 'Please input journal introduction (Chinese)',
trigger: 'blur'
}],
scope: [
{
required: true,
message: 'Please input journal introduction (English)',
trigger: 'blur'
}
],
abstract_chinese: [
{
required: true,
message: 'Please input journal introduction (Chinese)',
trigger: 'blur'
}
],
email: [
{
required: true,
@@ -487,52 +554,78 @@ export default {
await this.getDate();
},
methods: {
// 点击页面上的 Edit 按钮触发
openEditDialog(row) {
this.activeJournalId = row.id;
this.tempFee = row.fee; // 初始值为当前金额
this.feeDialogVisible = true;
},
// 失去焦点事件
onEditorBlur(quill) {
// console.log('editor blur!', quill)
},
// 获得焦点事件
onEditorFocus(quill) {
//console.log('editor focus!', quill)
},
// 准备富文本编辑器
onEditorReady(quill) {
// 监听粘贴事件
quill.root.addEventListener(
'paste',
(e) => {
// 阻止默认粘贴行为
e.preventDefault();
// 点击录入弹窗的“确认更新”触发
async validateAndConfirm() {
if (this.tempFee === undefined || this.tempFee === null) {
this.$message.error(this.$t('JournalCitationAnalysis.placeholder'));
return;
}
// 获取粘贴板的纯文本
const text = (e.originalEvent || e).clipboardData.getData('text/plain');
// 弹出您截图中的 Final Confirmation
try {
await this.$confirm(
this.$t('JournalCitationAnalysis.doubleConfirmContent'),
this.$t('JournalCitationAnalysis.doubleConfirmTitle'),
{
confirmButtonText: this.$t('GroupClassification.submit'),
cancelButtonText: this.$t('JournalCitationAnalysis.cancel'),
type: 'warning',
center: true
}
);
// 获取当前光标位置并插入纯文本
const range = quill.getSelection();
quill.insertText(range.index, text);
},
{ capture: true }
); // 使用捕获模式确保在 Quill 默认处理前执行
},
// 点击页面上的 Edit 按钮触发
openEditDialog(row) {
this.activeJournalId = row.id;
this.tempFee = row.fee; // 初始值为当前金额
this.feeDialogVisible = true;
},
// 用户点击了 Confirm Update执行 API 保存
this.executeSave();
} catch (error) {
// 用户取消了确认
}
},
// 点击录入弹窗的“确认更新”触发
async validateAndConfirm() {
if (this.tempFee === undefined || this.tempFee === null) {
this.$message.error(this.$t('JournalCitationAnalysis.placeholder'));
return;
}
async executeSave() {
// 这里调用您的后端接口
// const res = await api.updateFee(this.activeJournalId, this.tempFee);
this.$message.success(this.$t('JournalCitationAnalysis.updateSuccess'));
this.feeDialogVisible = false;
this.getDate(); // 刷新列表数据
},
// 弹出您截图中的 Final Confirmation
try {
await this.$confirm(
this.$t('JournalCitationAnalysis.doubleConfirmContent'),
this.$t('JournalCitationAnalysis.doubleConfirmTitle'),
{
confirmButtonText: this.$t('GroupClassification.submit'),
cancelButtonText: this.$t('JournalCitationAnalysis.cancel'),
type: 'warning',
center: true
}
);
// 用户点击了 Confirm Update执行 API 保存
this.executeSave();
} catch (error) {
// 用户取消了确认
}
},
async executeSave() {
// 这里调用您的后端接口
// const res = await api.updateFee(this.activeJournalId, this.tempFee);
this.$message.success(this.$t('JournalCitationAnalysis.updateSuccess'));
this.feeDialogVisible = false;
this.getDate(); // 刷新列表数据
},
async handleAvatarSuccess2(res, file) {
if (res.code == 0) {
this.detailForm.editor_qrcode = res.upurl;
this.$forceUpdate()
this.detailForm.editor_qrcode = res.upurl;
this.$forceUpdate();
} else {
this.$message.error(res.msg);
}
@@ -573,9 +666,18 @@ export default {
handleEdit() {
this.$refs.detail_form.validate((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!');
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
.post('api/Journal/editJournal', {
@@ -740,11 +842,12 @@ export default {
});
},
openEditJournal(data) {
var that = this;
this.currentJournal = data;
this.detailForm = {
apc_url: data.apc_url,
apc_content: data.apc_content,
journal_id: data.journal_id,
title: data.title,
level: data.level,
@@ -762,10 +865,10 @@ export default {
areas: data.journal_topic ? data.journal_topic.split(',') : ['']
};
this.editDialogVisible = true;
if(this.$refs.detail_form){
this.$refs.detail_form.resetFields();
if (this.$refs.detail_form) {
this.$refs.detail_form.resetFields();
}
// this.$nextTick(() => {
// that.$refs.commonClassRef.init();
// });
@@ -1068,6 +1171,17 @@ export default {
};
</script>
<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 {
background: rgba(0, 0, 0, 0.7);
box-shadow: rgba(0, 0, 0, 0.2);
@@ -1193,11 +1307,12 @@ export default {
margin-left: -30px;
}
.WeChatCode .avatar {
.WeChatCode .avatar {
width: 120px;
height: 120px;
display: block;
}.portrait {
}
.portrait {
/* width: 83px;
height: 83px;
border-radius: 110px;

View File

@@ -157,9 +157,8 @@
<el-input
type="textarea"
v-model="form.abstrart"
:autosize="{ minRows: 1, maxRows: 100 }"
class="full-show-no-scroll"
:autosize="{ minRows: 1, maxRows: 100 }"
class="full-show-no-scroll"
placeholder=""
/>
</el-form-item>
@@ -775,16 +774,32 @@
>
$ {{ getFee(form.journal) }}
<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
authors seeking to apply for fee discounts, please
<a
style="color: rgb(81, 127, 213); cursor: pointer; text-decoration: underline"
href="https://www.tmrjournals.com/apc/"
target="_blank"
>click here</a
>
to view detailed policies.
<div v-if="check_item.apc_url&&check_item.apc_content" >
<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
style="color: rgb(81, 127, 213); cursor: pointer; text-decoration: underline"
href="https://www.tmrjournals.com/tmr/free-application/"
target="_blank"
>click here</a
>
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>
</el-form-item>
@@ -1881,7 +1896,6 @@ export default {
this.form.journal = '';
this.reviewerof.journal = 1;
if (localStorage.getItem('ms_journal_alias')) {
localStorage.removeItem('ms_journal_alias');
}
@@ -3901,6 +3915,9 @@ export default {
</script>
<style scoped>
/deep/.apc_content a{
color: rgb(81, 127, 213) !important; cursor: pointer !important; text-decoration: underline !important;
}
.formTopics {
width: 100%;
}
@@ -4041,23 +4058,22 @@ export default {
}
/* 穿透Element UI的样式强制覆盖所有限制 */
.full-show-no-scroll::v-deep .el-textarea {
overflow: visible !important;
overflow: visible !important;
}
.full-show-no-scroll::v-deep .el-textarea__inner {
white-space: normal !important; /* 强制换行 */
word-wrap: break-word !important; /* 长文本/长单词换行 */
overflow: visible !important; /* 溢出内容显示,不隐藏 */
max-height: none !important; /* 取消最大高度限制 */
resize: none !important; /* 禁止手动调整大小 */
padding: 12px; /* 可选:调整内边距,避免内容贴边 */
white-space: normal !important; /* 强制换行 */
word-wrap: break-word !important; /* 长文本/长单词换行 */
overflow: visible !important; /* 溢出内容显示,不隐藏 */
max-height: none !important; /* 取消最大高度限制 */
resize: none !important; /* 禁止手动调整大小 */
padding: 12px; /* 可选:调整内边距,避免内容贴边 */
}
/* 隐藏滚动条(即使偶尔出现也看不见) */
.full-show-no-scroll::v-deep ::-webkit-scrollbar {
display: none !important;
display: none !important;
}
::v-deep .el-textarea__inner {
line-height: 1.5 !important;

View File

@@ -557,8 +557,8 @@
</el-button>
<h4>Figure Copyright Declaration :</h4>
<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 == 1">I confirm that all figures in this manuscript used with proper permission.</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">&nbsp;I confirm that all figures in this manuscript used with proper permission.</p>
</div>

View File

@@ -17,7 +17,7 @@
</el-form-item> -->
<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">
<el-upload

View File

@@ -21,7 +21,8 @@
Manuscript ID: {{ txt_mess.accept_sn }}
</h5>
<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">
<p><b>Abstract :</b> <br />{{ txt_mess.abstrart }}</p>
<div class="file_sty" v-for="item in fileList" style="margin-top: 15px">