This commit is contained in:
2025-11-24 09:18:02 +08:00
parent 0e20c3344b
commit b0d3e9aa33
6 changed files with 467 additions and 339 deletions

View File

@@ -403,23 +403,27 @@ const en = {
pendingPayment: { pendingPayment: {
title: 'Title', title: 'Title',
journal: 'Journal', journal: 'Journal',
Paymentamount: 'Payment Amount', Paymentamount: 'Payment amount',
Paymentstatus: 'Payment Status',
subtotal: 'Subtotal', subtotal: 'Subtotal',
payment: 'Online Payment', payment: 'Online Payment',
payDetail: 'Payment Details', payDetail: 'Payment Details',
total: 'Total price', total: 'Original price',
youhui: 'Discount', youhui: 'Final price',
discountprice: 'Discount price', discountprice: 'Final price after discount',
youhuiremark: 'Discount description', youhuiremark: 'Discount description',
submitOrder: 'Submit Order', submitOrder: 'Make a payment',
state0: 'Obligation', state0: 'Pending payment',
state1: 'Payment successful', state1: 'Payment successfully',
state2: 'Cancelled', state2: 'Cancelled',
paymentmethod: 'Payment Method', paymentmethod: 'Payment method',
Disbursements: 'Disbursements', Disbursements: 'Payment amount',
Confirmorderinformation: 'Confirm order information', Confirmorderinformation: 'Confirm order information',
orderDetail: 'Order information', orderDetail: 'Order information',
pendingpayment: 'Pending payment',
Paymentsuccessfully: 'Payment successfully',
Paymentstatus: 'Payment status',
time: 'Payment time',
}, },
PreAccept: { PreAccept: {
successInfo: 'Congratulations! Your manuscript has entered into <b>Pre-accept</b> status. Now please check and complete the necessary information of your manuscript for final publication.', successInfo: 'Congratulations! Your manuscript has entered into <b>Pre-accept</b> status. Now please check and complete the necessary information of your manuscript for final publication.',

View File

@@ -399,18 +399,22 @@ const zh = {
subtotal: '小计', subtotal: '小计',
payment: '在线缴费', payment: '在线缴费',
payDetail: '付款详情', payDetail: '付款详情',
total: '价', total: '价',
youhui: '优惠', youhui: '折扣价',
discountprice: '折扣价', discountprice: '折扣价',
youhuiremark: '优惠说明', youhuiremark: '折扣说明',
submitOrder: '提交订单', submitOrder: '付款',
state0: '待付款', state0: '待付款',
state1: '已缴费', state1: '已缴费',
state2: '已取消', state2: '已取消',
paymentmethod: '付款方式', paymentmethod: '付款方式',
Disbursements: '已付款', Disbursements: '支付金额',
Confirmorderinformation: '确认订单信息', Confirmorderinformation: '确认订单信息',
orderDetail: '订单信息', orderDetail: '订单信息',
pendingpayment: '待付款',
Paymentsuccessfully: '已付款',
Paymentstatus: '缴费状态',
time: '缴费时间',
}, },
PreAccept: { PreAccept: {
successInfo: 'Congratulations! Your manuscript has entered into <b>Pre-accept</b> status. Now please check and complete the necessary information of your manuscript for final publication.', successInfo: 'Congratulations! Your manuscript has entered into <b>Pre-accept</b> status. Now please check and complete the necessary information of your manuscript for final publication.',

View File

@@ -8,15 +8,15 @@
color: #67c23a; color: #67c23a;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: space-between; /* justify-content: space-between; */
" "
> >
<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
>. Please review and complete the necessary information of your manuscript. Kindly note that an article processing charge is >. Please review and complete the necessary information of your manuscript.
required for final publication.</span {{ isFree ? '' : 'Kindly note that an article processing charge is required for final publication.' }}</span
> >
</p> </p>
@@ -60,49 +60,74 @@
<!-- 文章引用 --> <!-- 文章引用 -->
<div class="con"> <div class="con">
<h4 class="con-title">{{ this.$t('PreAccept.step1') }}</h4> <h4 class="con-title">{{ this.$t('PreAccept.step1') }}</h4>
<div style="padding: 20px; box-sizing: border-box" v-loading="tableData.length==0">
<p style="color: #505050; font-size: 14px; box-sizing: border-box; margin-bottom: 20px" v-if="tableData.length>0&&tableData[0].state==0">
<i class="el-icon-warning" style="color: #517fd5; margin-right: 8px"></i> How to apply for a discount? 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/"
target="_blank"
>https://www.tmrjournals.com/tmr/free-application/</a
>.
</p>
<el-card class="box-card" style="width: 100%"
><el-table :data="tableData" style="width: 100%" align="center">
<el-table-column prop="fee" label="Price">
<template slot-scope="scope"> {{ scope.row.fee }} USD </template>
</el-table-column>
<el-table-column prop="name" label="Discounts">
<template slot-scope="scope"> 0 USD </template>
</el-table-column>
<el-table-column prop="address" label="Tax">
<template slot-scope="scope"> 0 USD </template>
</el-table-column>
<el-table-column prop="fee" label="Total Price">
<template slot-scope="scope"> {{ scope.row.fee }} USD </template>
</el-table-column>
<el-table-column prop="" label="Current Status">
<template slot-scope="scope">
<span v-if="scope.row.state==1" style='color:#67c23a'><b>Completed</b></span>
<span v-if="scope.row.state==0" style='color:#f56c6c'><b>Incomplete</b></span>
<div style="padding: 20px; box-sizing: border-box" v-loading="tableData.length == 0">
</template> <div v-if="tableData.length > 0">
</el-table-column> <div v-if="isFree" style="display: flex; align-items: center">
</el-table> <svg
<p style="text-align: right; margin: 20px 0 0" v-if="tableData.length>0&&tableData[0].state==0"> style="margin-right: 10px"
<span t="1763705729388"
@click="goOrderConfirmation(articleInfo)" class="icon"
style="color: rgb(81, 127, 213); cursor: pointer; text-decoration: underline" viewBox="0 0 1024 1024"
>Click here</span version="1.1"
xmlns="http://www.w3.org/2000/svg"
p-id="6912"
width="20"
height="20"
> >
to go to the payment page. <path
</p></el-card d="M383.2 512H320v-64h127.2l16-16-130.4-129.6 45.6-45.6 130.4 130.4 249.6-249.6C688 91.2 604 64 512.8 64c-247.2 0-448 200.8-448 448 0 90.4 27.2 174.4 73.6 245.6L383.2 512zM115.2 872l45.6 45.6 63.2-63.2C301.6 920 403.2 960 512.8 960c247.2 0 448-200.8 448-448 0-110.4-40-211.2-106.4-289.6l58.4-58.4-45.6-45.6M704 640H545.6v193.6h-64V640h-44l108-108V576H704v64z m0-128H565.6l64-64H704v64z"
> p-id="6913"
fill="#67c23a"
></path>
</svg>
The article processing charges for your manuscript have been waived.
</div>
<div v-else>
<p
style="color: #505050; font-size: 14px; box-sizing: border-box; margin-bottom: 20px"
v-if="tableData.length > 0 && tableData[0].is_buy == 0"
>
<i class="el-icon-warning" style="color: #517fd5; margin-right: 8px"></i> How to apply for a discount?
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/"
target="_blank"
>https://www.tmrjournals.com/tmr/free-application/</a
>.
</p>
<el-card class="box-card" style="width: 100%"
><el-table :data="tableData" style="width: 100%" align="center">
<el-table-column prop="fee" :label="$t('pendingPayment.total')">
<template slot-scope="scope"> {{ scope.row.original_price }} USD </template>
</el-table-column>
<el-table-column prop="name" :label="$t('pendingPayment.discountprice')">
<template slot-scope="scope"> {{ scope.row.fee }} USD </template>
</el-table-column>
<el-table-column prop="" :label="$t('pendingPayment.Paymentstatus')">
<template slot-scope="scope">
<span v-if="scope.row.is_buy == 1" style="color: #67c23a"
><b>{{ $t('pendingPayment.Paymentsuccessfully') }}</b></span
>
<span v-if="scope.row.is_buy == 0" style="color: #f56c6c"
><b>{{ $t('pendingPayment.pendingpayment') }}</b></span
>
</template>
</el-table-column>
</el-table>
<p style="text-align: right; margin: 20px 0 0" v-if="tableData.length > 0 && tableData[0].is_buy == 0">
<span
@click="goOrderConfirmation(articleInfo)"
style="color: rgb(81, 127, 213); cursor: pointer; text-decoration: underline"
>Click here</span
>
to access the payment page.
</p></el-card
>
</div>
</div>
<!-- <p style="text-align: right;">Click here to request an invoice.</p> --> <!-- <p style="text-align: right;">Click here to request an invoice.</p> -->
</div> </div>
@@ -125,9 +150,10 @@
<div class="con"> <div class="con">
<h4 class="con-title" style="overflow: hidden"> <h4 class="con-title" style="overflow: hidden">
{{ this.$t('PreAccept.step3') }} {{ this.$t('PreAccept.step3') }}
<b> <span v-if="Ainfo.refer_state.state" style="float: right" class="el-icon-check pass status"> Complete</span> <b>
<span v-else class="el-icon-pie-chart notPass status" style="float: right"> Pending</span></b> <span v-if="Ainfo.refer_state.state" style="float: right" class="el-icon-check pass status"> Complete</span>
<span v-else class="el-icon-pie-chart notPass status" style="float: right"> Pending</span></b
>
</h4> </h4>
<p style="color: #505050; font-size: 14px; padding: 20px; box-sizing: border-box"> <p style="color: #505050; font-size: 14px; padding: 20px; box-sizing: border-box">
<i class="el-icon-warning" style="color: #517fd5; margin-right: 8px"></i> A total of <i class="el-icon-warning" style="color: #517fd5; margin-right: 8px"></i> A total of
@@ -147,7 +173,7 @@
<span class="el-icon-info help"></span> <span class="el-icon-info help"></span>
<div> <div>
<h4>Any questions/Help</h4> <h4>Any questions/Help</h4>
<p class="mt20">If you experience any problems, please contact us by {{ journalInfo.email }}</p> <p class="mt20">Should you encounter any issues, please feel free to contact us at {{ journalInfo.email }}</p>
</div> </div>
</div> </div>
</div> </div>
@@ -159,6 +185,7 @@ import OrderConfirmation from '../page/components/pendingPayment/OrderConfirmati
export default { export default {
data() { data() {
return { return {
isFree: false,
tableData: [], tableData: [],
articleInfo: {}, articleInfo: {},
journalInfo: {}, journalInfo: {},
@@ -201,13 +228,13 @@ export default {
this.getInfoStatu(); this.getInfoStatu();
this.hideAlert(); this.hideAlert();
this.getDetail(); this.getDetail();
this.getPreacceptPayment(); // this.getPreacceptPayment();
}, },
activated() { activated() {
this.getInfoStatu(); this.getInfoStatu();
this.hideAlert(); this.hideAlert();
this.getDetail(); this.getDetail();
this.getPreacceptPayment(); // this.getPreacceptPayment();
}, },
components: { components: {
OrderConfirmation OrderConfirmation
@@ -220,8 +247,7 @@ export default {
this.$router.push({ this.$router.push({
path: '/OrderConfirmation', path: '/OrderConfirmation',
query: { query: {
id: this.$route.query.id, id: this.$route.query.id
} }
}); });
}, },
@@ -231,27 +257,47 @@ export default {
article_id: this.$route.query.id article_id: this.$route.query.id
}) })
.then((res) => { .then((res) => {
if (res.code == 0) { if (res.code == 0) {
this.tableData = [{ ...res.data }]; this.tableData = [{ ...res.data }];
} }
}); });
}, },
getDetail() { getDetail() {
const loading = this.$loading({
lock: true,
text: 'Loading...',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
});
this.$api this.$api
.post(this.urlList.detail, { .post(this.urlList.detail, {
article_id: this.$route.query.id article_id: this.$route.query.id
}) })
.then((res) => { .then((res) => {
loading.close();
if (res.code == 0) { if (res.code == 0) {
this.articleInfo = res.data.article_detail; this.articleInfo = res.data.article_detail;
this.journalInfo = res.data.journal_detail; this.journalInfo = res.data.journal_detail;
this.tableData = [
{
original_price: this.journalInfo.fee ? this.journalInfo.fee : 0,
fee: this.journalInfo.fee ? this.articleInfo.fee : 0,
is_buy: this.articleInfo.is_buy
}
];
if (this.tableData[0].is_buy == 1 && Number(this.tableData[0].fee) == 0) {
this.isFree = true;
} else {
this.isFree = false;
}
if (this.articleInfo.is_buy == 1 || (this.articleInfo.is_buy == 0 && this.journalInfo.fee == '0.00')) { if (this.articleInfo.is_buy == 1 || (this.articleInfo.is_buy == 0 && this.journalInfo.fee == '0.00')) {
this.active = 1; this.active = 1;
} }
} }
})
.catch((err) => {
loading.close();
}); });
}, },
handleClickStep(e) { handleClickStep(e) {
@@ -270,10 +316,15 @@ export default {
}, },
// 跳转到图表编辑页面 // 跳转到图表编辑页面
goGenerateCharts(id) { goGenerateCharts(id) {
window.open(this.$router.resolve({ path: '/GenerateCharts', window.open(
query: { this.$router.resolve({
id: id path: '/GenerateCharts',
} }).href, '_blank'); query: {
id: id
}
}).href,
'_blank'
);
// this.$router.push({ // this.$router.push({
// path: 'GenerateCharts', // path: 'GenerateCharts',
// query: { // query: {

View File

@@ -1,48 +1,26 @@
<template> <template>
<div> <div>
<div class="tab_post"> <div class="tab_post">
<div style="margin-bottom: 10px">
<p
v-if="feeStatus == 0"
style="
color: #f56c6c;
background: #fef0f0;
border-color: #fbc4c4;
font-size: 14px;
padding: 10px;
box-sizing: border-box;
margin: 0;
"
>
<i class="el-icon-warning" style="color: #f56c6c; margin-right: 10px"></i>Manuscript unpaid
</p>
<p
v-if="feeStatus == 1"
style="
color: #67c23a;
margin: 0;
background: #f0f9eb;
border-color: #c2e7b0;
color: #67c23a;
font-weight: bold;
font-size: 12px;
padding: 10px;
box-sizing: border-box;
"
>
<i class="el-icon-warning" style="color: #67c23a; margin-right: 10px"></i>Paid already
</p>
</div>
<div style="margin-bottom: 10px"></div>
<div v-for="(item, index) in tabsList" @click="jumpTab(index, item)" :class="tabName == item.refName ? 'P_style' : ''"> <div v-for="(item, index) in tabsList" @click="jumpTab(index, item)" :class="tabName == item.refName ? 'P_style' : ''">
<h5> <h5>
<span>{{ index + 1 }}</span> <span>{{ index + 1 }}</span>
{{ item.name }} {{ item.name }}
</h5> </h5>
<p v-if="index != 1">{{ item.rongCont }}</p> <p v-if="index == 0">
<p v-else> <span style="color: #f56c6c; font-weight: 700" v-if="feeStatus == 0">
<i class="el-icon-warning" style="margin-right: 10px"></i>Manuscript unpaid
</span>
<span v-else-if="feeStatus == 1" style="font-weight: 700">
<i class="el-icon-warning" style="color: #67c23a; margin-right: 10px"></i>Paid already
</span>
<span v-else-if="feeStatus == 2" style="font-weight: 700">
<i class="el-icon-warning" style="color: #67c23a; margin-right: 10px"></i>No payment required
</span>
</p>
<p v-if="index == 1">{{ item.rongCont }}</p>
<p v-if="index == 2">
<el-button type="primary" plain @click="htmlContet()" style="width: auto; font-weight: bold; margin-top: 10px"> <el-button type="primary" plain @click="htmlContet()" style="width: auto; font-weight: bold; margin-top: 10px">
<i class="el-icon-document-copy" style="font-weight: bold; font-size: 14px"></i> <i class="el-icon-document-copy" style="font-weight: bold; font-size: 14px"></i>
Text Proofread Text Proofread
@@ -57,12 +35,12 @@
Push To Accept Push To Accept
</el-button> </el-button>
</div> </div>
<div style="margin: 20px 0 0 0"> <!-- <div style="margin: 20px 0 0 0">
<el-button type="text" @click="pushToProduce(detailMes)" style="font-size: 13px"> <el-button type="text" @click="pushToProduce(detailMes)" style="font-size: 13px">
<i class="el-icon-finished"></i> <i class="el-icon-finished"></i>
Begin to Production Begin to Production
</el-button> </el-button>
</div> </div> -->
<!-- 作者联系 --> <!-- 作者联系 -->
<div class="contactAuthor"> <div class="contactAuthor">
<h4>Contact author</h4> <h4>Contact author</h4>
@@ -96,8 +74,72 @@
<!-- 参考文献 --> <!-- 参考文献 -->
<div :ref="tabsList[0].refName" class="scroll-item"> <div :ref="tabsList[0].refName" class="scroll-item">
<div class="bor_style_onli"> <div class="bor_style_onli" style="height: auto;max-height: 700px;">
<h4>{{ tabsList[0].name }}</h4> <h4>{{ tabsList[0].name }}</h4>
<div style="" class="payment_info_box">
<div class="payment_info" style="width: 100%"
><el-table :data="tableData" style="width: 100%" align="center">
<el-table-column prop="fee" :label="$t('pendingPayment.total')" width="150px">
<template slot-scope="scope"> {{ scope.row.original_price }} USD </template>
</el-table-column>
<el-table-column :label="$t('pendingPayment.discountprice')" width="200px">
<template slot-scope="scope"> {{ scope.row.fee }} USD <span style="cursor: pointer;color:#006699;margin-left: 10px;" v-if="feeStatus == 0" @click="handleEditFee"><i class="el-icon-edit"></i> Edit</span></template>
</el-table-column>
<!-- <el-table-column prop="name" :label="$t('pendingPayment.Paymentamount')">
<template slot-scope="scope">
</template>
</el-table-column> -->
<el-table-column :label="$t('pendingPayment.youhuiremark')">
<template slot-scope="scope">
<p > <span class="remark">{{ article_pay_info.fee_remark }}</span>
</p>
</template>
</el-table-column>
<el-table-column prop="" :label="$t('pendingPayment.Paymentstatus')">
<template slot-scope="scope">
<span v-if="feeStatus == 0" style="color: #f56c6c"
><b>Manuscript unpaid</b></span
>
<span v-if="feeStatus == 1" style="color: #67c23a"
><b>Paid already</b></span
>
<span v-if="feeStatus == 2" style="color: #67c23a"
><b>No payment required</b></span
>
</template>
</el-table-column>
<el-table-column prop="" :label="$t('pendingPayment.Paymentamount')" v-if="feeStatus == 1">
<template slot-scope="scope">
<p v-if="article_pay_info.paystation_fee"> <span class="price">{{ formatAmount(Number(article_pay_info.paystation_fee / 100)) }}</span>
{{ article_pay_info.paystation_currency }}</p>
</template>
</el-table-column>
<el-table-column prop="" :label="$t('pendingPayment.time')" v-if="feeStatus == 1">
<template slot-scope="scope">
<p><span style="color: #888">{{ article_pay_info.paystation_time ? article_pay_info.paystation_time : 'unknown' }}</span>
</p>
</template>
</el-table-column>
</el-table>
</div
>
</div>
</div>
</div>
<div :ref="tabsList[1].refName" class="scroll-item">
<div class="bor_style_onli">
<h4>{{ tabsList[1].name }}</h4>
<div class="liter_ture" v-if="0 == 2"> <div class="liter_ture" v-if="0 == 2">
<div class="chanSelLef"> <div class="chanSelLef">
<!-- 1 --> <!-- 1 -->
@@ -390,6 +432,24 @@
<timetalk :talkMsgs="talkMsgs" :msgform="msgform" @talksave="talksave"></timetalk> <timetalk :talkMsgs="talkMsgs" :msgform="msgform" @talksave="talksave"></timetalk>
</div> </div>
</el-dialog> </el-dialog>
<el-dialog :title="`Edit`" :visible.sync="finalFeeVisible" width="600px" :close-on-click-modal="false">
<el-form ref="finalFee" :rules="rules" :model="finalFeeData" label-width="180px">
<el-form-item :label="$t('pendingPayment.discountprice')" prop="fee" clearable>
<!-- <commonRemarkList :list="remark.contentList" @load="(e) => (this.remark.contentList = e)"></commonRemarkList> -->
<el-input v-model="finalFeeData.fee"> <span slot="suffix" >USD</span></el-input>
</el-form-item>
<el-form-item :label="$t('pendingPayment.youhuiremark')" prop="fee_remark">
<!-- <commonRemarkList :list="remark.contentList" @load="(e) => (this.remark.contentList = e)"></commonRemarkList> -->
<el-input type="textarea" rows="5" v-model="finalFeeData.fee_remark"></el-input>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="finalFeeVisible = false">Cancel</el-button>
<el-button type="primary" @click="saveFinalFee">Save</el-button>
</span>
</el-dialog>
</div> </div>
</template> </template>
@@ -405,9 +465,16 @@ export default {
props: ['type'], props: ['type'],
data() { data() {
return { return {
finalFeeData:{
},
article_pay_info: {},
feeStatus: null, feeStatus: null,
isShowCommit: false, isShowCommit: false,
tableData: [],
talkMsgs: [], talkMsgs: [],
finalFeeVisible: false,
FeeVisible: false,
communVisible: false, communVisible: false,
msgform: { msgform: {
username: localStorage.getItem('U_name'), username: localStorage.getItem('U_name'),
@@ -444,8 +511,13 @@ export default {
// rongCont: 'Please upload the article file.' // rongCont: 'Please upload the article file.'
// }, // },
{ {
name: 'Reference Conversion', name: 'Article Processing Charge',
refName: 'setOneRef', refName: 'setOneRef',
rongCont: ''
},
{
name: 'Reference Conversion',
refName: 'setTwoRef',
rongCont: 'Revise, check and complete the references of the manuscript.' rongCont: 'Revise, check and complete the references of the manuscript.'
}, },
// { // {
@@ -455,7 +527,7 @@ export default {
// }, // },
{ {
name: 'Text Proofread', name: 'Text Proofread',
refName: 'setTwoRef', refName: 'setThreeRef',
rongCont: 'HTML layout.' rongCont: 'HTML layout.'
} }
// { // {
@@ -681,166 +753,22 @@ export default {
deAuthorYul: {}, deAuthorYul: {},
deMesYul: {}, deMesYul: {},
rules: { rules: {
title: [ fee: [{
{ required: true,
required: true, message: 'Please enter the final price after discount',
message: 'Please enter title', trigger: 'blur'
trigger: 'blur' }],
} fee_remark: [{
], required: true,
npp: [ message: 'Please enter the discount description',
{ trigger: 'blur'
required: true, }],
message: 'Please enter page',
trigger: 'blur'
}
],
journal_stage_id: [
{
required: true,
message: 'Please select stage',
trigger: 'blur'
}
],
type: [
{
required: true,
message: 'Please select type',
trigger: 'blur'
}
],
icon: [
{
required: true,
message: 'Please select picture',
trigger: 'blur'
}
],
abbr: [
{
required: true,
message: 'Please enter abbr',
trigger: 'blur'
}
],
tradition_tag: [
{
required: true,
message: 'Please enter tradition tag',
trigger: 'blur'
}
],
tradition: [
{
required: true,
message: 'Please enter tradition',
trigger: 'blur'
}
],
pubDate: [
{
required: true,
message: 'Please select pubDate',
trigger: 'blur'
}
],
doi: [
{
required: true,
message: 'Please enter doi',
trigger: 'blur'
}
],
abstract: [
{
required: true,
message: 'Please enter abstract',
trigger: 'blur'
}
],
keywords: [
{
required: true,
message: 'Please enter keywords',
trigger: 'blur'
}
],
fund: [
{
required: true,
message: 'Please enter Fund',
trigger: 'blur'
}
],
acknowledgment: [
{
required: true,
message: 'Please enter acknowledgment',
trigger: 'blur'
}
],
abbreviation: [
{
required: true,
message: 'Please enter abbreviation',
trigger: 'blur'
}
],
author_contribution: [
{
required: true,
message: 'Please enter author contribution',
trigger: 'blur'
}
],
pub_date: [
{
required: true,
message: 'Please enter date',
trigger: 'blur'
}
],
first_name: [
{
required: true,
message: 'Please enter author name',
trigger: 'blur'
}
],
last_name: [
{
required: true,
message: 'Please enter author name',
trigger: 'blur'
}
],
email: [
{
required: true,
message: 'Please enter contact author email',
trigger: 'blur'
}
],
author_country: [
{
required: true,
message: 'Please select a country',
trigger: 'blur'
}
],
organ_name: [
{
required: true,
message: 'Please enter mechanism',
trigger: 'blur'
}
]
} }
}; };
}, },
created() { created() {
this.opMedical = this.$commonJS.opMedicalList(); this.opMedical = this.$commonJS.opMedicalList();
this.getDetail(); this.getPreacceptPayment();
this.getHight(); this.getHight();
window.addEventListener('resize', this.getHight); window.addEventListener('resize', this.getHight);
// this.getData(); // this.getData();
@@ -851,9 +779,64 @@ export default {
// this.getWorldPdf(); // this.getWorldPdf();
}, },
activated() { activated() {
this.getDetail(); this.getPreacceptPayment();
}, },
methods: { methods: {
saveFinalFee(){
this.$refs.finalFee.validate((valid) => {
if (valid) {
const integerRegex = /^-?\d+$/;
if (!integerRegex.test(this.finalFeeData.fee)) {
this.$message.error('Please enter a valid integer for the final price after discount');
return false;
}
const load = this.$loading({
lock: true,
text: 'Loading...',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
});
this.$api
.post('api/Order/changePrice', {
article_id: this.$route.query.id,
editor_id: localStorage.getItem('U_id'),
fee: Number(this.finalFeeData.fee).toFixed(2),
fee_remark: this.finalFeeData.fee_remark,
})
.then((res) => { load.close()
if(res.code==0){
this.finalFeeVisible=false
this.getPreacceptPayment()
}else{
this.$message.error(res.msg)
}
})
.catch((err) => {
load.close()
console.log(err);
});
}else{
return false
}
})
},
handleEditFee(){
this.finalFeeVisible = true;
this.finalFeeData={
fee:this.article_pay_info.fee?Number(this.article_pay_info.fee).toFixed(0):0,
fee_remark:this.article_pay_info.fee_remark
}
},
formatAmount(amount) {
return amount.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
},
talksave(val) { talksave(val) {
this.msgform.ad_content = ''; this.msgform.ad_content = '';
this.getTalkList(); this.getTalkList();
@@ -917,7 +900,7 @@ export default {
loading.close(); loading.close();
}); });
}, },
getDetail() { getPreacceptPayment() {
this.isShowCommit = false; this.isShowCommit = false;
this.$api this.$api
.post('api/Preaccept/getPreacceptPayment', { .post('api/Preaccept/getPreacceptPayment', {
@@ -926,6 +909,28 @@ export default {
.then((res) => { .then((res) => {
console.log('res at line 191:', res); console.log('res at line 191:', res);
if (res.code == 0) { if (res.code == 0) {
this.article_pay_info = {
fee: res.data.article.fee,
is_buy: res.data.article.is_buy,
original_price: res.data.journal.fee,
fee_remark: res.data.article.fee_remark,
order: res.data.order,
paystation_fee: res.data.order&&res.data.order.paystation ? res.data.order.paystation.amount : '',
paystation_time: res.data.order&&res.data.order.paystation ? res.data.order.paystation.request_time : '',
paystation_currency: res.data.order&&res.data.order.paystation ? res.data.order.paystation.currency : ''
};
if (this.article_pay_info.is_buy == 1) {
if (this.article_pay_info.fee == 0) {
this.feeStatus = 2;
}else{
this.feeStatus = 1;
}
} else {
this.feeStatus = 0;
}
this.tableData=[{...this.article_pay_info}]
this.feeStatus = res.data.state; this.feeStatus = res.data.state;
this.isShowCommit = res.data.state == 1 ? true : false; this.isShowCommit = res.data.state == 1 ? true : false;
console.log(this.isShowCommit); console.log(this.isShowCommit);
@@ -2126,17 +2131,17 @@ export default {
.catch(() => {}); .catch(() => {});
}, },
pushToProduce(detailMes) { pushToProduce(detailMes) {
if (!this.isShowCommit) { // if (!this.isShowCommit) {
this.$message.error('The manuscript has not been paid, please contact the author promptly for payment'); // this.$message.error('The manuscript has not been paid, please contact the author promptly for payment');
return false; // return false;
} // }
this.$confirm(`Please confirm if you would like to push this article to the production stage?`, 'Prompt', { // this.$confirm(`Please confirm if you would like to push this article to the production stage?`, 'Prompt', {
confirmButtonText: 'Yes', // confirmButtonText: 'Yes',
cancelButtonText: 'Cancle', // cancelButtonText: 'Cancle',
type: 'warning' // type: 'warning'
}) // })
.then(() => { // .then(() => {
const load = this.$loading({ const load = this.$loading({
lock: true, lock: true,
text: 'Loading...', text: 'Loading...',
@@ -2150,13 +2155,13 @@ export default {
.then((res) => { .then((res) => {
if (res.code == 0) { if (res.code == 0) {
load.close(); load.close();
this.$message.success('successed!'); // this.$message.success('successed!');
setTimeout(() => { // setTimeout(() => {
localStorage.setItem('U_point', 2); // localStorage.setItem('U_point', 2);
this.$router.push({ // this.$router.push({
path: 'articleListEditor' // path: 'articleListEditor'
}); // });
}, 1000); // }, 1000);
} else { } else {
load.close(); load.close();
this.$message.error(res.msg); this.$message.error(res.msg);
@@ -2166,8 +2171,8 @@ export default {
load.close(); load.close();
this.$message.error(err); this.$message.error(err);
}); });
}) // })
.catch(() => {}); // .catch(() => {});
}, },
// 点击开始上线显示 // 点击开始上线显示
pushOnline(detailMes) { pushOnline(detailMes) {
@@ -2348,6 +2353,60 @@ export default {
.scroll-item { .scroll-item {
margin: 0 30px 50px 276px; margin: 0 30px 50px 276px;
} }
.payment_info_box {
margin-bottom: 10px;
}
.payment_info_box li {
list-style: none;
margin-top: 2px;
}
.payment_info {
color: #333;
font-size: 14px;
}
.payment_info .label {
color: #333;
}
.payment_info .price {
font-weight: 700;
}
.payment_info .remark {
/* color: #888; */
}
.payment_info .price {
color: #ff5000;
/* color: #888; */
}
.unpaid {
color: #f56c6c;
background: #fef0f0;
border-color: #fbc4c4;
font-size: 14px;
padding: 10px;
box-sizing: border-box;
margin: 0;
}
.paid {
color: #67c23a;
margin: 0;
background: #f0f9eb;
border-color: #c2e7b0;
color: #67c23a;
font-weight: bold;
font-size: 12px;
padding: 10px;
box-sizing: border-box;
}
::v-deep .box-card .el-table th {
background-color: #f0f0f0 !important;
/* border-top: 1px solid #b0b0b0 !important; */
color: #333 !important;
}
::v-deep .box-card .el-table td.el-table__cell,
::v-deep .box-card .el-table th.el-table__cell.is-leaf {
/* border-bottom: 1px solid #b0b0b0 !important; */
}
</style> </style>
<style> <style>
.talkDialog { .talkDialog {
@@ -2381,7 +2440,7 @@ export default {
background-color: #fafafa; background-color: #fafafa;
position: absolute; position: absolute;
left: 25px; left: 25px;
top: 60px; top: 40px;
/* width: 220px; */ /* width: 220px; */
z-index: 50; z-index: 50;
} }

View File

@@ -1,5 +1,5 @@
<template> <template>
<div> <div class="" style="min-width: 1200px;">
<div class="crumbs"> <div class="crumbs">
<el-breadcrumb separator="/"> <el-breadcrumb separator="/">
<el-breadcrumb-item> <el-breadcrumb-item>
@@ -20,10 +20,12 @@
<el-option :key="0" label="All status" :value="0"></el-option> <el-option :key="0" label="All status" :value="0"></el-option>
<el-option :key="1" :label="$t('artstate.state1')" :value="1"></el-option> <el-option :key="1" :label="$t('artstate.state1')" :value="1"></el-option>
<el-option :key="2" :label="$t('artstate.state2')" :value="2"></el-option> <el-option :key="2" :label="$t('artstate.state2')" :value="2"></el-option>
<el-option :key="3" :label="$t('artstate.state3')" :value="3"></el-option>
<el-option :key="4" :label="$t('artstate.state4')" :value="4"></el-option> <el-option :key="4" :label="$t('artstate.state4')" :value="4"></el-option>
<el-option :key="4" :label="$t('artstate.state8')" :value="8"></el-option> <el-option :key="4" :label="$t('artstate.state8')" :value="8"></el-option>
<el-option :key="4" :label="$t('artstate.state6')" :value="6"></el-option>
<el-option :key="5" :label="$t('artstate.state5')" :value="5"></el-option> <el-option :key="5" :label="$t('artstate.state5')" :value="5"></el-option>
<el-option :key="3" :label="$t('artstate.state3')" :value="3"></el-option>
</el-select> </el-select>
<el-input v-model="query.name" placeholder="Title" style="margin:0 10px;width: 190px;"></el-input> <el-input v-model="query.name" placeholder="Title" style="margin:0 10px;width: 190px;"></el-input>
<el-button type="primary" icon="el-icon-search" @click="handleSearch">Search</el-button> <el-button type="primary" icon="el-icon-search" @click="handleSearch">Search</el-button>
@@ -52,10 +54,12 @@
</el-table> --> </el-table> -->
<div shadow="never" v-for="item in tableData" class="mangu_list" :style="item.state,'1' | stateChange"> <div shadow="never" v-for="item in tableData" class="mangu_list" :style="item.state,'1' | stateChange">
<div style="padding: 20px 20px 20px 20px;position: relative;" :style="item.state,'2' | stateChange"> <div style="padding: 20px 10px 10px;position: relative;" :style="item.state,'2' | stateChange">
<p class="man_title" @click="esy_mtps(item.article_id)"> <p class="man_title" >
<el-badge is-dot :hidden="item.editor_act==1?false:true"> <el-badge is-dot :hidden="item.editor_act==1?false:true">
{{item.title}} <span @click="esy_mtps(item.article_id)">{{item.title}}</span> <span @click="esy_deta(item.article_id)" style="font-size: 13px;font-weight: 400;color: #006699;margin-left: 10px;">
<i class="el-icon-paperclip" style="margin-right: 5px;"></i>Manuscript Information
</span>
</el-badge> </el-badge>
</p> </p>
@@ -65,19 +69,22 @@
{{item.accept_sn}} {{item.accept_sn}}
<font style="color: #666b7a;margin-left: 50px;">Type : </font> <font style="color: #666b7a;margin-left: 50px;">Type : </font>
{{item.type | ellipsis}} {{item.type | ellipsis}}
<font style="color: #666b7a;margin-left: 50px;" v-if="item.journalname">Journal : </font>
<b style="font-weight: normal;">{{item.journalname}}</b>
<font style="color: #666b7a;margin-left: 50px;">Update time : </font>
<b style="font-weight: normal;">{{item.ctime}}</b>
</p> </p>
<p class="man_con"> <p class="man_con">
<!-- <span>{{item.type | ellipsis}}</span> --> <!-- <span>{{item.type | ellipsis}}</span> -->
<font style="color: #666b7a;">Journal : </font>
<b style="font-weight: normal;">{{item.journalname}}</b>
</p> </p>
<p v-if="item.state != 6"> <!-- <p >
<font style="color: #666b7a;"> <font style="color: #666b7a;">
<i class="el-icon-time" style="margin: 0 5px 0 0;"></i> <i class="el-icon-time" style="margin: 0 5px 0 0;"></i>
Update Time : Update Time :
</font> </font>
<b style="font-weight: normal;margin: 0 0 0 5px;">{{item.ctime}}</b> <b style="font-weight: normal;margin: 0 0 0 5px;">{{item.ctime}}</b>
</p> </p> -->
<div class="man_state" :style="item.state,'3' | stateChange" > <div class="man_state" :style="item.state,'3' | stateChange" >
<b :style="item.state,'4' | stateChange"> <b :style="item.state,'4' | stateChange">
@@ -85,28 +92,28 @@
</b> </b>
</div> </div>
<div class="man_btn"> <div class="man_btn" style="overflow: hidden;">
<div style="float: right;">
<span @click="esy_mtps(item.article_id)"> <span @click="esy_mtps(item.article_id)">
<i class="el-icon-collection"></i>Manuscript Tracking <i class="el-icon-collection"></i>Manuscript tracking
</span> </span>
<font> | </font> <font> | </font>
<span @click="esy_review(item.article_id)"> <span @click="esy_review(item.article_id)">
<i class="el-icon-document-copy"></i>Reviewer Comments <i class="el-icon-document-copy"></i>Reviewer comments
</span> </span>
<font> | </font>
<span @click="esy_deta(item.article_id)">
<i class="el-icon-paperclip"></i>My Manuscript <span v-if="item.state == 6" style="text-decoration: none;margin-left: 20px;">
</span>
<span v-if="item.state == 6" style="text-decoration: none;">
<font> | </font>
<span @click="goPre_ingested(item.article_id)" class="preButton"> <span @click="goPre_ingested(item.article_id)" class="preButton">
<!-- <el-badge is-dot class="item" > --> <!-- <el-badge is-dot class="item" > -->
<i class="el-icon-edit"></i>Enter Pre-accept Process <i class="el-icon-bank-card"></i>Start the pre-acceptance process and complete your payment
<!-- </el-badge> --> <!-- </el-badge> -->
</span> </span>
</span> </span>
</div>
</div> </div>
<!-- <el-button v-if="item.state == 6&&item.is_buy==0" size="mini" type="primary" style="position: absolute;top: 38%;right: 10px;background: #ff5000 !important;border-color: #ff5000 !important;" @click="goOrderConfirmation(item)">Payment</el-button> --> <!-- <el-button v-if="item.state == 6&&item.is_buy==0" size="mini" type="primary" style="position: absolute;top: 38%;right: 10px;background: #ff5000 !important;border-color: #ff5000 !important;" @click="goOrderConfirmation(item)">Payment</el-button> -->
@@ -163,7 +170,7 @@
</div> </div>
<!-- 文章内容 --> <!-- 文章内容 -->
<el-dialog title="Manuscript Basic Information" :visible.sync="artextVisible" width="800px" :close-on-click-modal="false"> <el-dialog title="Manuscript Information" :visible.sync="artextVisible" width="800px" :close-on-click-modal="false">
<div class="art_state_message"> <div class="art_state_message">
<p> <p>
<font>Title :</font><b>{{artextForm.title}}</b> <font>Title :</font><b>{{artextForm.title}}</b>
@@ -958,6 +965,12 @@ this.$router.push({
.preButton { .preButton {
display: inline-block; display: inline-block;
position: relative; position: relative;
background-color: #67c23a;
color: #fff;
border-radius: 4px;
line-height: 24px;
padding: 0 10px;
cursor: pointer;
} }
/* .preButton:after{content: ''; display: block; width: 6px; height: 6px; background: #ff0000; position: absolute; right: 0; top: -5px; border-radius: 6px;} */ /* .preButton:after{content: ''; display: block; width: 6px; height: 6px; background: #ff0000; position: absolute; right: 0; top: -5px; border-radius: 6px;} */
@@ -1074,9 +1087,10 @@ this.$router.push({
.mangu_list .man_btn { .mangu_list .man_btn {
/* color: #006699; */ /* color: #006699; */
position: absolute; /* position: absolute; */
bottom: 25px; width: 100%;
right: 25px; /* bottom: 15px;
right: 25px; */
font-size: 15px; font-size: 15px;
} }

View File

@@ -18,8 +18,8 @@
id="settlementContainer" id="settlementContainer"
class="trade-container type-of-affix-right-panel-to-bottom bg-white overflow-hidden flex-col rounded-t-16" class="trade-container type-of-affix-right-panel-to-bottom bg-white overflow-hidden flex-col rounded-t-16"
> >
<div class="SettlementHeader"> <div class="SettlementHeader" style="padding: 10px;">
<div class="title1">{{ $t('pendingPayment.payDetail') }}</div> <!-- <div class="title1">{{ $t('pendingPayment.payDetail') }}</div> -->
</div> </div>
<div class="settlementPanelContainer"> <div class="settlementPanelContainer">
<div class="priceWrap"> <div class="priceWrap">
@@ -32,7 +32,7 @@
</div> </div>
</div> </div>
</div> </div>
<!-- <div class="priceLine priceLine_total"> <div class="priceLine priceLine_total" v-if="total != original_price">
<div class="priceTotal_title" style="">{{ $t('pendingPayment.discountprice') }}</div> <div class="priceTotal_title" style="">{{ $t('pendingPayment.discountprice') }}</div>
<div class="priceRight" style="font-weight: 400; color: #7c889c"> <div class="priceRight" style="font-weight: 400; color: #7c889c">
<div class="trade-price-container price"> <div class="trade-price-container price">
@@ -40,16 +40,9 @@
<span class="trade-price-integer priceTotal_num" >{{ formatAmount(total) }}</span> <span class="trade-price-integer priceTotal_num" >{{ formatAmount(total) }}</span>
</div> </div>
</div> </div>
</div> -->
<!-- -->
<div class="priceLine priceLine_total" v-if="fee_remark">
<div class="priceTotal_title" style="font-weight: 400">{{ $t('pendingPayment.youhuiremark') }}</div>
<div class="priceRight" style="font-weight: 400; color: #7c889c">
<div class="trade-price-container price">
<span class="trade-price-symbol priceTotal_unit" style="font-weight: 400; color: #7c889c">{{ fee_remark }}</span>
</div>
</div>
</div> </div>
<!-- -->
<div id="paymentCard" class="trade-container type-of-normal rounded-8 mx-16 bg-gray mt-24 mb-24 pb-20 pt-20" style="margin-top: 20px;"> <div id="paymentCard" class="trade-container type-of-normal rounded-8 mx-16 bg-gray mt-24 mb-24 pb-20 pt-20" style="margin-top: 20px;">
<div class="SettlementOption"> <div class="SettlementOption">
<div class="title"> <div class="title">
@@ -348,27 +341,30 @@ export default {
}); });
}, },
getDetail() { getDetail() {
const loading = this.$loading({
lock: true,
text: 'Loading...',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
});
this.$api this.$api
.post(this.urlList.detail, { .post(this.urlList.detail, {
article_id: this.articleId article_id: this.articleId
}) })
.then((res) => { .then((res) => {
loading.close();
console.log('res at line 191:', res); console.log('res at line 191:', res);
if (res.code == 0) { if (res.code == 0) {
this.articleInfo = res.data.article_detail; this.articleInfo = res.data.article_detail;
this.journalInfo = res.data.journal_detail; this.journalInfo = res.data.journal_detail;
// this.orderItems = [
// {
// ...this.articleInfo,
// fee: this.journalInfo.fee,
// journal: this.journalInfo.title
// }
// ];
this.original_price = this.journalInfo.fee; this.original_price = this.journalInfo.fee;
this.fee_remark = this.articleInfo.fee_remark; this.fee_remark = this.articleInfo.fee_remark;
this.total = this.articleInfo.fee; this.total = this.articleInfo.fee;
} }
}); }).catch((err) => {
loading.close();
})
}, },
formatAmount(amount) { formatAmount(amount) {
return amount.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ','); return amount.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');