This commit is contained in:
2026-01-04 14:51:40 +08:00
parent f688274667
commit 9e337cb164
10 changed files with 511 additions and 43 deletions

View File

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

View File

@@ -2,12 +2,12 @@
//记得切换 //记得切换
//正式 //正式
// const mediaUrl = '/public/'; const mediaUrl = '/public/';
// const baseUrl = '/'; const baseUrl = '/';
const mediaUrl = 'https://submission.tmrjournals.com/public/'; // const mediaUrl = 'https://submission.tmrjournals.com/public/';
// const mediaUrl = 'http://zmzm.tougao.dev.com/public/'; // // const mediaUrl = 'http://zmzm.tougao.dev.com/public/';
const baseUrl = '/api' // const baseUrl = '/api'
// const mediaUrl = 'http://tougaotest.tmrjournals.com/public/'; // const mediaUrl = 'http://tougaotest.tmrjournals.com/public/';
// // const mediaUrl = 'http://zmzm.tougao.dev.com/public/'; // // const mediaUrl = 'http://zmzm.tougao.dev.com/public/';

View File

@@ -102,6 +102,7 @@ const en = {
article: 'Articles for', article: 'Articles for',
articleNum: 'Articles', articleNum: 'Articles',
info: 'The following data is', info: 'The following data is',
Fee: 'Fee',
wos: 'Wos', wos: 'Wos',
all: 'All references', all: 'All references',
factor: 'Factor', factor: 'Factor',
@@ -114,6 +115,21 @@ const en = {
level: 'Level', level: 'Level',
editorinchief: 'Editor In Chief', editorinchief: 'Editor In Chief',
journal_topic: 'Research areas', journal_topic: 'Research areas',
// 1. 录入弹窗 (image_e6d8fa.png)
feeDialogTitle: 'Adjustment of Article Processing Charge (APC)',
feeWarningTitle: 'Financial Configuration Alert',
feeWarningDesc: 'Modifying the APC is a critical update. The new rate will be applied prospectively to all new submissions upon confirmation.',
feeLabel: 'New APC Amount (USD)',
placeholder: 'Enter amount',
confirmUpdate: 'Update Standard',
cancel: 'Cancel',
// 2. 二次确认弹窗 (image_e6d449.png)
doubleConfirmTitle: 'Final Regulatory Confirmation',
doubleConfirmContent: 'Are you sure you want to authorize this rate change? This adjustment will immediately synchronize with the billing system and impact all future financial settlements.',
// 3. 反馈
updateSuccess: 'The journal APC standard has been successfully updated.'
}, },

View File

@@ -100,6 +100,7 @@ const zh = {
citeNum: '引用数量', citeNum: '引用数量',
articleNum: '文章数量', articleNum: '文章数量',
ArticleInfo: '文章信息', website: '网站', ArticleInfo: '文章信息', website: '网站',
Fee: '费用',
email: '邮箱', email: '邮箱',
abbr: '缩写', abbr: '缩写',
edit: '编辑', edit: '编辑',
@@ -112,6 +113,16 @@ const zh = {
all: '全部引用', all: '全部引用',
factor: '影响因子', factor: '影响因子',
Sameperiod: '同期', Sameperiod: '同期',
feeDialogTitle: '期刊稿件处理费APC调整',
feeWarningTitle: '核心财务参数修改提示',
feeWarningDesc: 'APC金额属于期刊核心计费参数。一旦更新系统将立即启用新标准并应用于所有新投递的稿件。',
feeLabel: '新计费标准 (USD)',
placeholder: '请输入金额',
confirmUpdate: '更新标准',
cancel: '取消',
doubleConfirmTitle: '最终操作确认',
doubleConfirmContent: '确定要授权此项金额变更吗?此操作具有法律效力上的即时性,将直接影响后续所有财务结算流程。',
updateSuccess: '期刊计费标准已成功更新。'
}, },
paperArticleCount: { paperArticleCount: {
Periodroll: '期卷', Periodroll: '期卷',

View File

@@ -46,10 +46,15 @@
<div class="item"> <div class="item">
<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>
</div> </div>
<!-- <div class="item">
<span class="title">{{ $t('JournalCitationAnalysis.Fee') }} :</span><span>{{ scope.row.fee }}</span > <el-button @click="openEditDialog(scope.row)" plain type="primary" size="mini" style="position: relative;top: 2px;vertical-align: text-bottom; padding: 2px 4px; margin-left: 10px;"><i class="el-icon-edit" style="margin-right: 4px"></i> {{ $t('articleListEditor.edit') }}</el-button>
</div> -->
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
@@ -295,6 +300,41 @@
> >
<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
: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>
<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> </div>
</template> </template>
@@ -322,6 +362,9 @@ export default {
}, },
data() { data() {
return { return {
feeDialogVisible: false, // 控制录入弹窗
tempFee: 0, // 录入的临时金额
activeJournalId: null, // 当前修改的期刊ID
mediaUrl: this.Common.mediaUrl, mediaUrl: this.Common.mediaUrl,
baseUrl: this.Common.baseUrl, baseUrl: this.Common.baseUrl,
activeNames: [], activeNames: [],
@@ -444,6 +487,48 @@ export default {
await this.getDate(); await this.getDate();
}, },
methods: { methods: {
// 点击页面上的 Edit 按钮触发
openEditDialog(row) {
this.activeJournalId = row.id;
this.tempFee = row.fee; // 初始值为当前金额
this.feeDialogVisible = true;
},
// 点击录入弹窗的“确认更新”触发
async validateAndConfirm() {
if (this.tempFee === undefined || this.tempFee === null) {
this.$message.error(this.$t('JournalCitationAnalysis.placeholder'));
return;
}
// 弹出您截图中的 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) { async handleAvatarSuccess2(res, file) {
if (res.code == 0) { if (res.code == 0) {
this.detailForm.editor_qrcode = res.upurl; this.detailForm.editor_qrcode = res.upurl;

View File

@@ -559,7 +559,7 @@
ref="uploadFile" ref="uploadFile"
class="upload-demo up_newstyle" class="upload-demo up_newstyle"
:action="upload_articleCopyright" :action="upload_articleCopyright"
accept=".pdf,.rar,.zip" accept=".pdf, .zip"
name="figurecopyright" name="figurecopyright"
:before-upload="beforeupload_articleCopyright" :before-upload="beforeupload_articleCopyright"
:on-error="uperr_coverLetter" :on-error="uperr_coverLetter"

View File

@@ -506,7 +506,7 @@
ref="uploadFile" ref="uploadFile"
class="upload-demo up_newstyle" class="upload-demo up_newstyle"
:action="upload_articleCopyright" :action="upload_articleCopyright"
accept=".pdf,.rar,.zip" accept=".pdf, .zip"
name="figurecopyright" name="figurecopyright"
:before-upload="beforeupload_articleCopyright" :before-upload="beforeupload_articleCopyright"
:on-error="uperr_coverLetter" :on-error="uperr_coverLetter"

View File

@@ -550,10 +550,19 @@
</el-col> </el-col>
</el-row> </el-row>
<el-row :gutter="24" v-if="form.is_figure_copyright == 1"> <el-row :gutter="24">
<el-col :span="24"> <el-col :span="24">
<el-button type="text" style="position: absolute; top: -2px; right: 14px" @click="reOpenDialog">
<i class="el-icon-edit"></i> Upload
</el-button>
<h4>Figure Copyright Declaration :</h4> <h4>Figure Copyright Declaration :</h4>
<p class="fi_new"> <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>
</div>
<p class="fi_new" v-if="fileL_articleCopyright.length > 0" style="margin-top: 10px;">
<a v-for="item in fileL_articleCopyright" :href="mediaUrl + item.file_url"> <a v-for="item in fileL_articleCopyright" :href="mediaUrl + item.file_url">
<img src="../../assets/img/icon_0.png" /> <img src="../../assets/img/icon_0.png" />
<span> <span>
@@ -563,6 +572,17 @@
<i class="el-icon-download download"></i> <i class="el-icon-download download"></i>
</a> </a>
</p> </p>
<FigureCopyright
:article_id="form.articleId"
:visible.sync="copyrightDialogVisible"
v-model="is_figure_copyright"
:upload-action="upload_articleCopyright"
:file-list="newfilearticleCopyrightList"
@on-success="upSuccess_articleCopyright"
@on-remove="removefilearticleCopyright"
@on-preview="dowloadFile"
/>
<br clear="both" /> <br clear="both" />
</el-col> </el-col>
</el-row> </el-row>
@@ -659,7 +679,6 @@
>( {{ iken.rated }} )</span >( {{ iken.rated }} )</span
> >
<span <span
style="color: #888; float: right; margin-right: 20px" style="color: #888; float: right; margin-right: 20px"
@click="handleClick(iken, 'detail')" @click="handleClick(iken, 'detail')"
>Detail</span >Detail</span
@@ -964,7 +983,7 @@
<p style="line-height: 20px"> <p style="line-height: 20px">
Manuscript submission : Manuscript submission :
<b>{{ form.username }}</b> <b>{{ form.username }}</b>
<span style="margin: 0 5px;color: #409EFF ;">({{ form.user_email }})</span> <span style="margin: 0 5px; color: #409eff">({{ form.user_email }})</span>
submitted to submitted to
<b>{{ journal_me }}</b> <b>{{ journal_me }}</b>
</p> </p>
@@ -1009,9 +1028,9 @@
<el-button type="" @click="FinalDecisionVisible = false">Cancel</el-button> <el-button type="" @click="FinalDecisionVisible = false">Cancel</el-button>
</span> </span>
</el-dialog> </el-dialog>
<!-- 审稿详情 start--> <!-- 审稿详情 start-->
<reviewerDetail ref="reviewerDetail" v-if="reviewerVisible" :reviewerDetail="reviewerDetail" destroy-on-close></reviewerDetail> <reviewerDetail ref="reviewerDetail" v-if="reviewerVisible" :reviewerDetail="reviewerDetail" destroy-on-close></reviewerDetail>
<!-- 审稿详情 end--> <!-- 审稿详情 end-->
<el-dialog title="Edit H Index" :visible.sync="HEditVisible" width="400px" :close-on-click-modal="false"> <el-dialog title="Edit H Index" :visible.sync="HEditVisible" width="400px" :close-on-click-modal="false">
<div style="margin: 0 0 20px 10px; font-weight: bold">{{ HIxForm.realname }}</div> <div style="margin: 0 0 20px 10px; font-weight: bold">{{ HIxForm.realname }}</div>
<div style="margin: 0 0 20px 10px">Email :{{ HIxForm.email }}</div> <div style="margin: 0 0 20px 10px">Email :{{ HIxForm.email }}</div>
@@ -1026,8 +1045,8 @@
</span> </span>
</el-dialog> </el-dialog>
<el-dialog title="Change Status" :visible.sync="editVisible" width="550px" v-loading="loading1" :close-on-click-modal="false"> <el-dialog title="Change Status" :visible.sync="editVisible" width="750px" v-loading="loading1" :close-on-click-modal="false">
<el-form ref="editform" :model="editform" label-width="170px"> <el-form ref="editform" :model="editform" label-width="220px">
<el-form-item label=""> <el-form-item label="">
<span slot="label"> <span slot="label">
<i style="color: #f56c6c">*</i> <i style="color: #f56c6c">*</i>
@@ -1043,9 +1062,27 @@
></el-option> ></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="Comments for authors :" v-show="editform.state == 4"> <el-form-item label="Comments for authors :" v-show="editform.state == 4">
<el-input type="textarea" rows="3" v-model="editform.proposal_content" placeholder="" resize="4"> </el-input> <el-input type="textarea" rows="3" v-model="editform.proposal_content" placeholder="" resize="4"> </el-input>
</el-form-item> </el-form-item>
<!-- <el-form-item label="Figure Copyright Declaration:" v-show="editform.state == 4">
<div class="copyright-declaration-wrapper">
<el-radio-group v-model="editform.is_figure_copyright">
<el-radio label="2"> I confirm that all figures in this manuscript are original. </el-radio>
<el-radio label="1"> I confirm that all figures are used with proper permission. </el-radio>
<el-input
v-if="editform.is_figure_copyright == '1'"
type="textarea"
rows="3"
v-model="editform.is_figure_copyright_content"
placeholder=""
resize="4"
>
</el-input>
</el-radio-group>
</div>
</el-form-item> -->
<el-form-item label="Transfer :" v-show="editform.state == 3 && form.transList.length == 0"> <el-form-item label="Transfer :" v-show="editform.state == 3 && form.transList.length == 0">
<el-select v-model="editform.trsjournal" placeholder="Please select"> <el-select v-model="editform.trsjournal" placeholder="Please select">
<el-option :key="0" label="No Transfer" :value="0"></el-option> <el-option :key="0" label="No Transfer" :value="0"></el-option>
@@ -1240,7 +1277,6 @@
</el-collapse> </el-collapse>
<div style="line-height: 20px" v-if="isShowAI"> <div style="line-height: 20px" v-if="isShowAI">
<p style="overflow: hidden; margin-bottom: 8px"> <p style="overflow: hidden; margin-bottom: 8px">
<span style="float: left">{{ <span style="float: left">{{
currentArticleData.ai_review.is_finish == 2 currentArticleData.ai_review.is_finish == 2
@@ -1328,7 +1364,6 @@
</div> </div>
</div> </div>
<span slot="footer" class="dialog-footer"> <span slot="footer" class="dialog-footer">
<el-button type="" @click="isShowAI = false">Close</el-button> <el-button type="" @click="isShowAI = false">Close</el-button>
</span> </span>
</el-dialog> </el-dialog>
@@ -1338,13 +1373,16 @@
<script> <script>
import timetalk from './time_talk'; import timetalk from './time_talk';
import reviewerDetail from '../../components/page/components/articleDetail/reviewerdetail.vue'; import reviewerDetail from '../../components/page/components/articleDetail/reviewerdetail.vue';
import FigureCopyright from '../../components/page/components/articleDetail/FigureCopyright.vue';
export default { export default {
components: { components: {
timetalk, timetalk,
reviewerDetail reviewerDetail,
FigureCopyright
}, },
data() { data() {
return { return {
copyrightDialogVisible: false, // 控制弹窗开关
reviewerDetail: {}, reviewerDetail: {},
corresList: [], corresList: [],
finalDecisionData: {}, finalDecisionData: {},
@@ -1384,6 +1422,7 @@ export default {
totalpageFileList: [], totalpageFileList: [],
supplementaryFileList: [], supplementaryFileList: [],
fileL_articleCopyright: [], fileL_articleCopyright: [],
newfilearticleCopyrightList: [],
manuscirptFileList: [], manuscirptFileList: [],
responseFileList: [], responseFileList: [],
authorList_name: '', authorList_name: '',
@@ -1649,7 +1688,9 @@ export default {
finalList: [], finalList: [],
reviewList: [], reviewList: [],
underReview: ['1'], underReview: ['1'],
finalDecision: ['1'] finalDecision: ['1'],
is_figure_copyright: '',
figurecopyright_file: ''
}; };
}, },
async created() { async created() {
@@ -1670,6 +1711,10 @@ export default {
manuscirptUrl: function () { manuscirptUrl: function () {
return this.baseUrl + this.form.manuscirpt; return this.baseUrl + this.form.manuscirpt;
}, },
//图片版权
upload_articleCopyright: function () {
return this.baseUrl + 'api/Article/up_file/type/figurecopyright';
},
upload_coverLetter: function () { upload_coverLetter: function () {
return this.baseUrl + 'api/Article/up_file/type/coverLetter'; return this.baseUrl + 'api/Article/up_file/type/coverLetter';
}, },
@@ -1721,6 +1766,39 @@ export default {
} }
}, },
methods: { methods: {
reOpenDialog() {
// 强制先关闭,确保状态发生位移
this.copyrightDialogVisible = false;
this.$nextTick(() => {
this.copyrightDialogVisible = true;
});
},
// 下载文件
dowloadFile(file) {
let filePath = '/public/' + file.url;
let fileName = file.name;
// 获取heads中的filename文件名
let downloadElement = document.createElement('a');
// 创建下载的链接
downloadElement.href = filePath; // 下载后文件名
downloadElement.download = fileName;
downloadElement.target = '_blank';
document.body.appendChild(downloadElement);
// 点击下载
downloadElement.click();
// 下载完成移除元素
document.body.removeChild(downloadElement);
},
removefilearticleCopyright(file, fileList) {
this.figurecopyright_file = '';
this.newfilearticleCopyrightList = [];
},
//图片版权
upSuccess_articleCopyright(res, file) {
this.initFileList();
console.log(this.form);
},
crateRevision(item) { crateRevision(item) {
// 二次询问 // 二次询问
this.$confirm('Do you want to send a review invitation?', 'Tip', { this.$confirm('Do you want to send a review invitation?', 'Tip', {
@@ -1847,28 +1925,26 @@ export default {
}, },
// 算平均分 // 算平均分
avegeCount(arry) { avegeCount(arry) {
// 1. 计算有有效评分的数量 // 1. 计算有有效评分的数量
var ratedLength = arry.map(item => item.rated).filter(rated => rated && rated > 0).length; var ratedLength = arry.map((item) => item.rated).filter((rated) => rated && rated > 0).length;
let all = 0;
// 2. 累加总分
for (let i = 0; i < arry.length; i++) {
all += Number(arry[i].rated || 0); // 加上 || 0 防止出现 undefined 导致计算失败
}
// 3. 核心判断逻辑 let all = 0;
// 如果没有评分的人(ratedLength 为 0),或者总分就是 0直接返回 "-" // 2. 累加总分
// 否则计算平均分并保留一位小数 for (let i = 0; i < arry.length; i++) {
let str = (ratedLength > 0 && all > 0) all += Number(arry[i].rated || 0); // 加上 || 0 防止出现 undefined 导致计算失败
? (all / ratedLength).toFixed(1) }
: "-";
return str; // 3. 核心判断逻辑
}, // 如果没有评分的人(ratedLength 为 0),或者总分就是 0直接返回 "-"
// 否则计算平均分并保留一位小数
let str = ratedLength > 0 && all > 0 ? (all / ratedLength).toFixed(1) : '-';
return str;
},
// 算终审分 // 算终审分
finalCount(arry) { finalCount(arry) {
var ratedLength = arry.map(item => item.rated).filter(rated => rated&&rated>0).length; var ratedLength = arry.map((item) => item.rated).filter((rated) => rated && rated > 0).length;
let str = 0; let str = 0;
let all = 0; let all = 0;
let sgr = 0; let sgr = 0;
@@ -1927,7 +2003,6 @@ export default {
return maxItem && maxItem.repeat ? maxItem.repeat.length : 0; return maxItem && maxItem.repeat ? maxItem.repeat.length : 0;
}, },
handleClick(item, type, repeatItem) { handleClick(item, type, repeatItem) {
this.reviewerDetail = item; this.reviewerDetail = item;
this.reviewerVisible = true; this.reviewerVisible = true;
this.$nextTick(() => { this.$nextTick(() => {
@@ -2346,6 +2421,11 @@ export default {
this.form.username = res.article.account; this.form.username = res.article.account;
this.form.user_email = res.article.user_email; this.form.user_email = res.article.user_email;
this.form.is_figure_copyright = res.article.is_figure_copyright; this.form.is_figure_copyright = res.article.is_figure_copyright;
this.is_figure_copyright =
res.article.is_figure_copyright == 1 || res.article.is_figure_copyright == 2
? res.article.is_figure_copyright.toString()
: '';
this.form.title = res.article.title; this.form.title = res.article.title;
this.form.journal = res.article.journal_id; this.form.journal = res.article.journal_id;
this.form.journalname = res.article.journalname; this.form.journalname = res.article.journalname;
@@ -2531,6 +2611,17 @@ export default {
this.totalpageFileList = res.totalpage; this.totalpageFileList = res.totalpage;
this.supplementaryFileList = res.supplementary; this.supplementaryFileList = res.supplementary;
this.fileL_articleCopyright = res.figurecopyright ? res.figurecopyright : []; this.fileL_articleCopyright = res.figurecopyright ? res.figurecopyright : [];
if (this.fileL_articleCopyright.length > 0) {
var figurecopyright_file = fileL_articleCopyright[this.fileL_articleCopyright.length - 1];
this.figurecopyright_file = figurecopyright_file.file_url;
this.newfilearticleCopyrightList = [
{
name: 'Figure Copyright Declaration File',
url: this.figurecopyright_file
}
];
this.$forceUpdate();
}
}) })
.catch((err) => { .catch((err) => {
console.log(err); console.log(err);
@@ -3124,4 +3215,40 @@ td {
.scoringRulesItem { .scoringRulesItem {
margin-top: 10px; margin-top: 10px;
} }
.copyright-declaration-wrapper {
background-color: #f8f9fb;
padding: 6px 6px;
border-radius: 8px;
border: 1px solid #e4e7ed;
margin-top: 10px;
}
.copyright-declaration-wrapper :deep(.el-radio-group) {
display: flex !important;
flex-direction: column !important;
align-items: flex-start !important;
gap: 10px;
}
.copyright-declaration-wrapper :deep(.el-radio) {
height: auto;
white-space: normal;
line-height: 1.2;
display: flex;
align-items: flex-start;
}
.copyright-declaration-wrapper :deep(.el-radio__input) {
margin-top: 3px;
}
.copyright-declaration-wrapper :deep(.el-radio:hover) {
color: #333;
}
.copyright-declaration-wrapper :deep(.el-radio.is-checked .el-radio__label) {
font-weight: 500;
}
</style> </style>

View File

@@ -240,6 +240,27 @@
(.rar,.zip)</div> (.rar,.zip)</div>
</el-upload> </el-upload>
</p> </p>
<!-- <br clear="both">
<h4>Figure Copyright Declaration :</h4>
<p>
<el-form-item label="Please select the copyright status of your figures:">
<el-radio-group :value="value" @input="$emit('input', $event)" style="display: flex; flex-direction: column; gap: 15px">
<el-radio label="2">I confirm that all figures in this manuscript are original.</el-radio>
<el-radio label="1">I confirm that all figures in this manuscript used with proper permission.</el-radio>
</el-radio-group>
</el-form-item>
<el-upload class="upload-demo" :action="upload_figurecopyright" accept=".pdf, .zip"
name="figurecopyright" :before-upload="beforeupload_figurecopyright"
:on-error="uperr_coverLetter" :on-success="upSuccess_figurecopyright" :limit="1"
:on-exceed="alertlimit" :on-remove="removefilearticleCopyright" >
<div class="el-upload__text" style="padding:8px 5px;" >
<em>Click Upload</em>
</div>
<div class="el-upload__tip" slot="tip" style="color: #888; left: 80px; font-size: 13px">
Upload the copyright permission letters or license documents figures. (file format:
.pdf, .zip)<br />
</div></el-upload>
</p> -->
<br clear="both"> <br clear="both">
<h4><b style="margin-right:5px;color: red;">*</b>Response to reviewers :</h4> <h4><b style="margin-right:5px;color: red;">*</b>Response to reviewers :</h4>
<p> <p>
@@ -461,6 +482,18 @@
<i class="el-icon-download download"></i> <i class="el-icon-download download"></i>
</a> </a>
</p> </p>
<br clear="both" v-if="fileL_articleCopyright.length>0">
<h4 v-if="fileL_articleCopyright.length>0">Figure Copyright Declaration: </h4>
<p>
<a v-for="item in fileL_articleCopyright" :href="mediaUrl + item.file_url">
<img src="../../assets/img/icon_0.png">
<span>
<font>Uploader : </font>{{item.username}}
<i><i class="el-icon-time"></i>{{formatDate(item.ctime)}}</i>
</span>
<i class="el-icon-download download"></i>
</a>
</p>
<br clear="both"> <br clear="both">
</div> </div>
<common-word-html :articleId="articleId" style="box-sizing: border-box" <common-word-html :articleId="articleId" style="box-sizing: border-box"
@@ -491,6 +524,7 @@
}, },
fileMesForm: { fileMesForm: {
manuscirpt: '', manuscirpt: '',
// figurecopyright: '',
picturesAndTables: '', picturesAndTables: '',
responseFile: '', responseFile: '',
supplementary:'', // supplementary:'', //
@@ -510,6 +544,7 @@
coverLetterFileList: [], coverLetterFileList: [],
picturesAndTablesFileList: [], picturesAndTablesFileList: [],
totalpageFileList: [], totalpageFileList: [],
fileL_articleCopyright: [],
manuscirptFileList: [], manuscirptFileList: [],
supplementaryFileList:[], supplementaryFileList:[],
fileL_supplementary:[], fileL_supplementary:[],
@@ -530,6 +565,9 @@
upload_coverLetter: function() { upload_coverLetter: function() {
return this.baseUrl + 'api/Article/up_file/type/coverLetter'; return this.baseUrl + 'api/Article/up_file/type/coverLetter';
}, },
upload_figurecopyright: function () {
return this.baseUrl + '/api/Article/up_file/type/figurecopyright';
},
upload_picturesAndTables: function() { upload_picturesAndTables: function() {
return this.baseUrl + 'api/Article/up_file/type/picturesAndTables'; return this.baseUrl + 'api/Article/up_file/type/picturesAndTables';
}, },
@@ -604,6 +642,7 @@
this.coverLetterFileList = res.coverLetter; this.coverLetterFileList = res.coverLetter;
this.picturesAndTablesFileList = res.picturesAndTables; this.picturesAndTablesFileList = res.picturesAndTables;
this.manuscirptFileList = res.manuscirpt; this.manuscirptFileList = res.manuscirpt;
this.fileL_articleCopyright = res.figurecopyright&&res.figurecopyright.length>0?res.figurecopyright:[];
this.totalpageFileList = res.totalpage; this.totalpageFileList = res.totalpage;
this.supplementaryFileList = res.supplementary; this.supplementaryFileList = res.supplementary;
}) })
@@ -711,7 +750,18 @@
this.$message.error('service error: ' + res.msg); this.$message.error('service error: ' + res.msg);
} }
}, },
upSuccess_figurecopyright(res, file) {
if (res.code == 0) {
this.fileMesForm.figurecopyright = 'figurecopyright/' + res.upurl;
this.fileL_figurecopyright = [{}];
this.fileL_figurecopyright[0].name = 'Figure Copyright Declaration File';
this.fileL_figurecopyright[0].url = 'figurecopyright/' + res.upurl;
} else {
this.$message.error('service error: ' + res.msg);
}
console.log(this.form);
},
removefilesupplementary() { removefilesupplementary() {
this.fileMesForm.supplementary = ''; this.fileMesForm.supplementary = '';
this.fileL_supplementary = []; this.fileL_supplementary = [];
@@ -727,6 +777,11 @@
// } // }
// }); // });
}, },
removefilearticleCopyright() {
this.fileMesForm.figurecopyright = '';
this.fileL_figurecopyright = [];
},
// 上传文件 // 上传文件
addWordTablesList(tables) { addWordTablesList(tables) {
@@ -762,8 +817,9 @@
.then((res) => {that. addWordTablesList(that.wordTables);}); .then((res) => {that. addWordTablesList(that.wordTables);});
}, },
async onSubmit() { async onSubmit() {
console.log(this.fileMesForm)
var that=this; var that=this;
//验证文件 //验证文件
if (this.fileMesForm.manuscirpt == undefined || this.fileMesForm.manuscirpt == '') { if (this.fileMesForm.manuscirpt == undefined || this.fileMesForm.manuscirpt == '') {
this.$message.error( this.$message.error(
@@ -775,6 +831,7 @@
'Required information is not allowed to be empty.'); 'Required information is not allowed to be empty.');
return false; return false;
} }
this.loading = true; this.loading = true;
await this.$api await this.$api
.post('api/Article/RepairBack', this.fileMesForm) .post('api/Article/RepairBack', this.fileMesForm)
@@ -811,6 +868,8 @@
//检验上传文件的格式 //检验上传文件的格式
beforeupload_coverLetter(file) {}, beforeupload_coverLetter(file) {},
beforeupload_picturesAndTables(file) {}, beforeupload_picturesAndTables(file) {},
beforeupload_figurecopyright(file) {},
beforeupload_manuscirpt(file) { beforeupload_manuscirpt(file) {
let flieArr = file.name.split(".") let flieArr = file.name.split(".")
let fileSuffix = flieArr[flieArr.length - 1]; let fileSuffix = flieArr[flieArr.length - 1];
@@ -1133,10 +1192,11 @@ that.wordTables=wordTables
.art_author_btn>h4 { .art_author_btn>h4 {
float: left; float: left;
width: 180px; width: 190px;
padding: 8px 20px 0 0; padding: 8px 15px 0 0;
letter-spacing: -0.5px; letter-spacing: -0.5px;
text-align: right; text-align: right;
font-size: 13px;
} }
.art_author_btn>p { .art_author_btn>p {

View File

@@ -0,0 +1,169 @@
<template>
<el-dialog
title="Figure Copyright Declaration"
width="650px"
:visible="visible"
:close-on-click-modal="false"
append-to-body
@close="handleClose"
>
<div style="color: #333; line-height: 24px">
<el-form label-position="top">
<!-- <el-form-item label="Please select the copyright status of your figures:">
<el-radio-group :value="value" @input="$emit('input', $event)" style="display: flex; flex-direction: column; gap: 15px">
<el-radio label="2">I confirm that all figures in this manuscript are original.</el-radio>
<el-radio label="1">I confirm that all figures in this manuscript used with proper permission.</el-radio>
</el-radio-group>
</el-form-item> -->
<transition name="el-fade-in">
<el-form-item v-if="value == '1'" style="">
<div style="position: relative; top: 4px; margin-left: 14px">
<el-upload
ref="uploadFile"
class="upload-demo up_newstyle"
:action="uploadAction"
accept=".pdf, .zip"
name="figurecopyright"
:file-list="fileList"
:on-success="handleSuccess"
:on-remove="handleRemove"
:on-error="handleError"
:on-exceed="handleExceed"
:on-preview="handlePreview"
:limit="1"
>
<div class="el-upload__text" @click="clearUploadedCopyrightFile">
<em>Upload</em>
</div>
<div class="el-upload__tip" slot="tip" style="color: #888; left: 80px; font-size: 13px">
Upload the copyright permission letters or license documents figures. (file format: .pdf, .zip)<br />
</div>
</el-upload>
</div>
</el-form-item>
</transition>
</el-form>
</div>
<div slot="footer" class="dialog-footer">
<el-button type="" @click="handleClose">Cancel</el-button> <el-button type="primary" @click="handleSave">Save</el-button>
</div>
</el-dialog>
</template>
<script>
export default {
name: 'FigureCopyrightDialog',
props: {
value: { type: [String, Number], default: '' }, // 对应 form.is_figure_copyright
article_id: { type: [String, Number], default: '' }, // 对应 form.article_id
visible: { type: Boolean, default: false },
uploadAction: { type: String, required: true }, // 上传接口
fileList: { type: Array, default: () => [] } // 文件列表
},
computed: {},
methods: {
handleSave() {
console.log(this.fileList);
if(this.value==1){
if (this.fileList.length == 0) {
this.$message.warning('Please upload the copyright permission letters or license documents figures.');
return;
}
}
const loading = this.$loading({
lock: true,
text: 'Loading...',
background: 'rgba(0, 0, 0, 0.7)'
});
var data={
article_id: this.article_id,
figure_copyright: this.value,
user_id: localStorage.getItem('U_id'),
type: 'figurecopyright',
url: this.value==1?this.fileList[0].url:'',
// is_figure_copyright: this.value
}
var this_ = this;
this.$api
.post('api/Article/addFigureCopyrightForEditor',data)
.then(async (res) => {
loading.close();
if (res.status == 1) {
this.$message.success('success');this.$emit('update:visible', false);this_.$emit('on-success');this.dialogVisible = false;
}else{
this.$message.error(res.msg);
}
}).catch(() => {
loading.close();
})
},
handleClose() {
this.$emit('update:visible', false);
},
clearUploadedCopyrightFile() {
this.$refs['uploadFile'].clearFiles();
},
handleSuccess(res, file, fileList) {
if (res.code == 0) {
if (res.code == 0) {
this.fileList = [{}];
this.fileList[0].name = 'Figure Copyright Declaration File';
this.fileList[0].url = 'figurecopyright/' + res.upurl;
} else {
this.$message.error('service error: ' + res.msg);
this.fileList = [];
}
console.log(this.form);
// this.onStaging(5);
} else {
this.$message.error('service error: ' + res.msg);
}
// this.$emit('on-success', { res, file, fileList });
},
handleRemove(file, fileList) {
this.$emit('on-remove', { file, fileList });
},
handleError(err) {
this.$message.error('Upload failed');
},
handleExceed() {
this.$message.warning('Only 1 file is allowed');
},
handlePreview(file) {
this.$emit('on-preview', file);
}
}
};
</script>
<style scoped>
::v-deep .up_newstyle {
margin-left: 10px;
}
::v-deep .up_newstyle .el-upload--text {
background-color: #006699;
border: 1px solid #006699;
padding: 0 7px;
/* margin-left: 10px; */
}
::v-deep .up_newstyle .el-upload__text em {
color: #fff !important;
font-size: 12px;
}
</style>