tijiao
This commit is contained in:
@@ -2,8 +2,8 @@
|
||||
//记得切换
|
||||
|
||||
//正式
|
||||
const mediaUrl = '/public/';
|
||||
const baseUrl = '/';
|
||||
// const mediaUrl = '/public/';
|
||||
// const baseUrl = '/';
|
||||
|
||||
// const mediaUrl = 'https://submission.tmrjournals.com/public/';
|
||||
// // const mediaUrl = 'http://zmzm.tougao.dev.com/public/';
|
||||
@@ -11,9 +11,9 @@ const baseUrl = '/';
|
||||
|
||||
//本地(正式环境 )
|
||||
|
||||
// const mediaUrl = 'https://submission.tmrjournals.com/public/';
|
||||
const mediaUrl = 'https://submission.tmrjournals.com/public/';
|
||||
|
||||
// const baseUrl = '/api';
|
||||
const baseUrl = '/api';
|
||||
//晓玲
|
||||
|
||||
// const mediaUrl = 'http://zmzm.tougao.dev.com/public/';
|
||||
|
||||
@@ -2,35 +2,36 @@
|
||||
<div class="login-wrap">
|
||||
<div class="ms-login">
|
||||
<div class="ms-title">User Register</div>
|
||||
<el-form class="ms-content" :rules="registerRules" ref="registerForm" :model="registerForm" label-width="0">
|
||||
<el-form class="ms-content" :rules="registerRules" ref="registerForm" :model="registerForm" label-width="140px">
|
||||
<!-- 用户名 -->
|
||||
<el-form-item prop="username">
|
||||
<el-input size="small" v-model="registerForm.username" auto-complete="off" placeholder="username">
|
||||
<el-form-item prop="username" class="form-item" label="English Name :">
|
||||
|
||||
<el-input size="small" v-model="registerForm.username" auto-complete="off" placeholder="">
|
||||
<i slot="prefix" class="el-icon-user"></i>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<!-- 密码 -->
|
||||
<el-form-item prop="password">
|
||||
<el-input size="small" v-model="registerForm.password" auto-complete="off" placeholder="password"
|
||||
<el-form-item prop="password" class="form-item" label="Password :">
|
||||
<el-input size="small" v-model="registerForm.password" auto-complete="off" placeholder=""
|
||||
show-password>
|
||||
<i slot="prefix" class="el-icon-lock"></i>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<!-- 姓名 -->
|
||||
<el-form-item prop="name">
|
||||
<el-input size="small" v-model="registerForm.name" auto-complete="off" placeholder="realname">
|
||||
<el-form-item prop="name" class="form-item" label="Real name :">
|
||||
<el-input size="small" v-model="registerForm.name" auto-complete="off" placeholder="">
|
||||
<i slot="prefix" class="el-icon-edit-outline"></i>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<!-- 手机 -->
|
||||
<el-form-item prop="phone">
|
||||
<el-input size="small" v-model="registerForm.phone" auto-complete="off" placeholder="phone">
|
||||
<el-form-item prop="phone" class="form-item" label="Phone :">
|
||||
<el-input size="small" v-model="registerForm.phone" auto-complete="off" placeholder="">
|
||||
<i slot="prefix" class="el-icon-mobile-phone" />
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<!-- 邮件 -->
|
||||
<el-form-item prop="email">
|
||||
<el-input size="small" v-model="registerForm.email" auto-complete="off" placeholder="email">
|
||||
<el-form-item prop="email" class="form-item" label="Email :">
|
||||
<el-input size="small" v-model="registerForm.email" auto-complete="off" placeholder="">
|
||||
<i slot="prefix" class="el-icon-message"></i>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
@@ -46,24 +47,25 @@
|
||||
</el-input>
|
||||
</el-form-item> -->
|
||||
<!-- 验证码 -->
|
||||
<el-form-item prop="code">
|
||||
<el-form-item prop="code" class="form-item" label="Verification code :">
|
||||
<el-row :span="24">
|
||||
<el-col :span="16">
|
||||
<el-input size="small" v-model="registerForm.code" auto-complete="off"
|
||||
placeholder="captcha">
|
||||
placeholder="">
|
||||
<i slot="prefix" class="el-icon-key" />
|
||||
</el-input>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<div class="login-code">
|
||||
<img :src="image" @click="refreshCode" alt="captcha" class="captchaimg" />
|
||||
<img :src="image" @click="refreshCode" alt="Verification code" class="captchaimg" />
|
||||
</div>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form-item>
|
||||
|
||||
<!-- 隐私政策 -->
|
||||
<el-form-item prop="code">
|
||||
<el-form-item prop="code" class="form-item">
|
||||
<span class="required-field">*</span>
|
||||
<el-row :span="24">
|
||||
<p class="pri_tit">
|
||||
<el-checkbox v-model="registerForm.checked">
|
||||
@@ -90,7 +92,7 @@
|
||||
</el-col>
|
||||
<el-col :span="14"></el-col>
|
||||
<el-col :span="4">
|
||||
<el-link :underline="false" type="primary" href="/" class="rebacklogin">Go login</el-link>
|
||||
<el-link :underline="false" type="primary" href="/" class="rebacklogin">Login</el-link>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
@@ -139,7 +141,7 @@
|
||||
registerRules: {
|
||||
username: [{
|
||||
required: true,
|
||||
message: 'Please enter your username.',
|
||||
message: 'Please enter your English name.',
|
||||
trigger: 'blur'
|
||||
}],
|
||||
password: [{
|
||||
@@ -153,11 +155,11 @@
|
||||
trigger: 'blur'
|
||||
}
|
||||
],
|
||||
// name: [{
|
||||
// required: true,
|
||||
// message: 'Please enter your real name.',
|
||||
// trigger: 'blur'
|
||||
// }],
|
||||
name: [{
|
||||
required: true,
|
||||
message: 'Please enter your real name.',
|
||||
trigger: 'blur'
|
||||
}],
|
||||
// phone: [{
|
||||
// required: true,
|
||||
// message: 'Please enter the correct mobile phone number.',
|
||||
@@ -182,7 +184,7 @@
|
||||
],
|
||||
code: [{
|
||||
required: true,
|
||||
message: 'Captcha code cannot be empty.',
|
||||
message: 'Please enter the verification code.',
|
||||
trigger: 'blur'
|
||||
}]
|
||||
}
|
||||
@@ -267,8 +269,8 @@
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
top: 50%;
|
||||
width: 500px;
|
||||
margin: -290px 0 0 -250px;
|
||||
width: 620px;
|
||||
margin: -290px 0 0 -270px;
|
||||
border-radius: 5px;
|
||||
background: #fff;
|
||||
/* background: rgba(255, 255, 255, 0.3); */
|
||||
@@ -276,7 +278,7 @@
|
||||
}
|
||||
|
||||
.ms-content {
|
||||
padding: 0 30px 30px 30px;
|
||||
padding: 0 20px 20px 20px;
|
||||
}
|
||||
|
||||
.login-btn {
|
||||
@@ -327,4 +329,16 @@
|
||||
line-height: 18px;
|
||||
color: #999;
|
||||
}
|
||||
|
||||
.form-item{
|
||||
position: relative;
|
||||
padding-left: 10px;
|
||||
}
|
||||
.required-field {
|
||||
position: absolute;
|
||||
z-index: 1;
|
||||
left: -14px;
|
||||
top: 0;
|
||||
color: #F56C6C;margin-right: 4px;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div style="">
|
||||
<div style="display: flex; justify-content: space-between">
|
||||
<div style="width: 100%;min-width: 1020px; position: relative">
|
||||
<div style="width: 100%; min-width: 1020px; position: relative">
|
||||
<div class="step_list_new">
|
||||
<el-steps :active="0" align-center>
|
||||
<el-step
|
||||
@@ -20,19 +20,9 @@
|
||||
</el-steps>
|
||||
</div>
|
||||
|
||||
<!-- <div class="step_list" style="width: 960px; position: relative">
|
||||
<div v-for="item in listStep" @click="StepCode(item.index)" :class="show_step == item.index ? 'C_style' : ''">
|
||||
<div>
|
||||
<i :class="item.icon"></i>
|
||||
{{ item.title }}
|
||||
<div class="num">{{ item.index }}</div>
|
||||
</div>
|
||||
<p class="bor_der"></p>
|
||||
</div>
|
||||
<br clear="both" />
|
||||
</div> -->
|
||||
|
||||
<div class="manu_add" style="width: calc(100% - 20px);" v-loading="loading">
|
||||
|
||||
<ProgressBar :progress="uploadPercentage" v-if="isShowProgress" />
|
||||
<div class="manu_add" style="width: calc(100% - 20px)" v-loading="loading">
|
||||
<el-form ref="articleform" :model="form" :rules="rules" label-width="120px">
|
||||
<div class="bag_color" v-if="show_step == 1">
|
||||
<div>
|
||||
@@ -46,10 +36,8 @@
|
||||
/>
|
||||
</el-form-item>
|
||||
|
||||
|
||||
|
||||
<el-form-item label="Type :" prop="type" >
|
||||
<el-select v-model="form.type" style="width: 240px" placeholder="">
|
||||
<el-form-item label="Type :" prop="type">
|
||||
<el-select v-model="form.type" style="width: 240px" placeholder="">
|
||||
<el-option
|
||||
v-for="item in journal_type"
|
||||
:key="item.value"
|
||||
@@ -58,9 +46,32 @@
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="Manuscirpt :" prop="manuscirpt" label-width="120px">
|
||||
<el-upload :on-progress="handleProgress"
|
||||
ref="uploadFileManuscirpt"
|
||||
class="upload-demo up_newstyle"
|
||||
:action="upload_manuscirpt"
|
||||
accept=".docx"
|
||||
name="manuscirpt"
|
||||
:before-upload="beforeupload_manuscirpt"
|
||||
:on-error="uperr_coverLetter"
|
||||
:on-success="upSuccess_manuscirpt"
|
||||
:limit="1"
|
||||
:on-exceed="alertlimit"
|
||||
:on-remove="removefilemanuscirpt"
|
||||
:file-list="fileL_manuscirpt"
|
||||
:on-preview="dowloadFile"
|
||||
>
|
||||
<div class="el-upload__text" @click="removefilemanuscirpt">
|
||||
<em>Upload</em>
|
||||
</div>
|
||||
<div class="el-upload__tip" slot="tip">
|
||||
Only Word and compressed files can be uploaded (file format: .docx).
|
||||
</div>
|
||||
</el-upload>
|
||||
</el-form-item>
|
||||
<el-form-item label="Manuscript Title :" prop="title" label-width="160px">
|
||||
<el-input v-model="form.title" ></el-input>
|
||||
<el-input v-model="form.title"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="Whether ethical approval was obtained ?" prop="approval" label-width="290px">
|
||||
@@ -75,8 +86,7 @@
|
||||
v-if="form.approval == 1"
|
||||
label-width="290px"
|
||||
>
|
||||
|
||||
<el-upload
|
||||
<el-upload
|
||||
ref="uploadFile"
|
||||
class="upload-demo up_newstyle"
|
||||
:action="upload_articleApproval"
|
||||
@@ -94,13 +104,18 @@
|
||||
<div class="el-upload__text" @click="clearUploadedFile">
|
||||
<em>Upload</em>
|
||||
</div>
|
||||
<div class="el-upload__tip" slot="tip" style="line-height: 20px;left: 80px;font-size: 13px;top: -9px;">
|
||||
Only PDF and compressed files can be uploaded.<br/>
|
||||
<span style="color: #8c8d8f;">Please ensure that the file includes the ethics approval number and the institutional approval document.</span>
|
||||
<div
|
||||
class="el-upload__tip"
|
||||
slot="tip"
|
||||
style="line-height: 20px; left: 80px; font-size: 13px; top: -9px"
|
||||
>
|
||||
Only PDF and compressed files can be uploaded.<br />
|
||||
<span style="color: #8c8d8f"
|
||||
>Please ensure that the file includes the ethics approval number and the institutional
|
||||
approval document.</span
|
||||
>
|
||||
</div>
|
||||
</el-upload>
|
||||
|
||||
|
||||
</el-form-item>
|
||||
<el-form-item
|
||||
label="Explain the reason clearly :"
|
||||
@@ -108,20 +123,10 @@
|
||||
v-if="form.approval === 0"
|
||||
label-width="300px"
|
||||
>
|
||||
<el-input
|
||||
type="textarea"
|
||||
rows="2"
|
||||
v-model="form.approval_content"
|
||||
|
||||
></el-input>
|
||||
<el-input type="textarea" rows="2" v-model="form.approval_content"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="Abstract :" prop="abstrart">
|
||||
<el-input
|
||||
type="textarea"
|
||||
rows="5"
|
||||
v-model="form.abstrart"
|
||||
|
||||
></el-input>
|
||||
<el-input type="textarea" rows="5" v-model="form.abstrart"></el-input>
|
||||
</el-form-item>
|
||||
<!-- 话题 -->
|
||||
<!-- <el-form-item label="Topics :" prop="topics">
|
||||
@@ -137,7 +142,6 @@
|
||||
:key="index"
|
||||
:name="index + 1"
|
||||
v-model="item.ke"
|
||||
|
||||
style="width: 150px; margin-right: 15px; margin-bottom: 3px"
|
||||
></el-input>
|
||||
<el-button type="text" @click="addfund">
|
||||
@@ -145,14 +149,9 @@
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
<el-form-item label="Fund :">
|
||||
<el-input
|
||||
v-model="form.fund"
|
||||
>
|
||||
</el-input>
|
||||
<el-input v-model="form.fund"> </el-input>
|
||||
</el-form-item>
|
||||
|
||||
|
||||
|
||||
<div style="text-align: center; margin: 40px 0 0 0">
|
||||
<el-button type="warning" @click="onStagingSave(1)" class="pro_stage">Save as draft </el-button>
|
||||
<el-button type="primary" @click="onStep(1)" class="pro_ceed"
|
||||
@@ -401,30 +400,7 @@
|
||||
<div class="el-upload__tip" slot="tip">Only word files can be uploaded(.doc,.docx)</div>
|
||||
</el-upload>
|
||||
</el-form-item> -->
|
||||
<el-form-item label="Manuscirpt :" prop="manuscirpt" label-width="200px">
|
||||
<el-upload
|
||||
ref="uploadFileManuscirpt"
|
||||
class="upload-demo up_newstyle"
|
||||
:action="upload_manuscirpt"
|
||||
accept=".docx"
|
||||
name="manuscirpt"
|
||||
:before-upload="beforeupload_manuscirpt"
|
||||
:on-error="uperr_coverLetter"
|
||||
:on-success="upSuccess_manuscirpt"
|
||||
:limit="1"
|
||||
:on-exceed="alertlimit"
|
||||
:on-remove="removefilemanuscirpt"
|
||||
:file-list="fileL_manuscirpt"
|
||||
:on-preview="dowloadFile"
|
||||
>
|
||||
<div class="el-upload__text" @click="removefilemanuscirpt">
|
||||
<em>Upload</em>
|
||||
</div>
|
||||
<div class="el-upload__tip" slot="tip">
|
||||
Only Word and compressed files can be uploaded (file format: .docx).
|
||||
</div>
|
||||
</el-upload>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="Supplementary Material :" label-width="200px">
|
||||
<el-upload
|
||||
class="upload-demo up_newstyle"
|
||||
@@ -443,7 +419,18 @@
|
||||
<div class="el-upload__text">
|
||||
<em>Upload</em>
|
||||
</div>
|
||||
<div class="el-upload__tip" slot="tip">Only ZIP files can be uploaded (file formats: .zip).</div>
|
||||
<div
|
||||
class="el-upload__tip"
|
||||
slot="tip"
|
||||
style="line-height: 20px; left: 80px; font-size: 13px; top: -9px"
|
||||
>
|
||||
Only ZIP files can be uploaded (file formats: .zip).
|
||||
|
||||
<br />
|
||||
<span style="color: #888"
|
||||
>Please upload the original, uncropped full-length Western blot images.</span
|
||||
>
|
||||
</div>
|
||||
</el-upload>
|
||||
</el-form-item>
|
||||
<div style="text-align: center; margin: 40px 0 0 0">
|
||||
@@ -517,11 +504,7 @@
|
||||
</el-form-item>
|
||||
<!-- 简介 -->
|
||||
<el-form-item prop="introduction" label="Introduction :">
|
||||
<el-input
|
||||
type="textarea"
|
||||
rows="3"
|
||||
v-model="reviewerForm.introduction"
|
||||
></el-input>
|
||||
<el-input type="textarea" rows="3" v-model="reviewerForm.introduction"></el-input>
|
||||
</el-form-item>
|
||||
<!-- 国家 -->
|
||||
<el-form-item prop="country" label="Country :">
|
||||
@@ -547,12 +530,7 @@
|
||||
</el-form-item>
|
||||
<!-- 领域 -->
|
||||
<el-form-item prop="field" label="Field :">
|
||||
<el-input
|
||||
size="small"
|
||||
v-model="reviewerForm.field"
|
||||
auto-complete="off"
|
||||
|
||||
></el-input>
|
||||
<el-input size="small" v-model="reviewerForm.field" auto-complete="off"></el-input>
|
||||
</el-form-item>
|
||||
<!-- 职称 -->
|
||||
<el-form-item prop="technical" label="Technical :">
|
||||
@@ -566,12 +544,7 @@
|
||||
</el-form-item>
|
||||
<!-- 单位 -->
|
||||
<el-form-item prop="company" label="Affiliation :">
|
||||
<el-input
|
||||
size="small"
|
||||
v-model="reviewerForm.company"
|
||||
auto-complete="off"
|
||||
|
||||
></el-input>
|
||||
<el-input size="small" v-model="reviewerForm.company" auto-complete="off"></el-input>
|
||||
</el-form-item>
|
||||
<!-- 简历 -->
|
||||
<el-form-item label="CV. :">
|
||||
@@ -604,7 +577,6 @@
|
||||
plain
|
||||
icon="el-icon-plus"
|
||||
style="width: 210px"
|
||||
|
||||
>Add Recommended Reviewer</el-button
|
||||
>
|
||||
</p>
|
||||
@@ -623,7 +595,7 @@
|
||||
<el-form
|
||||
ref="tuiJianForm"
|
||||
v-for="(item, index) in tuiJianForm"
|
||||
:rules="rules"
|
||||
:rules="tuiJianRules"
|
||||
label-position="top"
|
||||
label-width="110px"
|
||||
class="tuijian_f"
|
||||
@@ -633,39 +605,23 @@
|
||||
Reviewer <span style="margin: 0 0 0 3px">{{ index + 1 }}</span>
|
||||
</p>
|
||||
<el-form-item label="Realname :" prop="realname">
|
||||
<el-input v-model="item.realname" style="width: 160px"></el-input>
|
||||
<el-input v-model="item.realname" clearable></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="Email :" prop="email">
|
||||
<el-input v-model="item.email" style="width: 160px" :validate-event="false"></el-input>
|
||||
<el-input v-model="item.email" :validate-event="false" clearable></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="Department :" >
|
||||
<el-input v-model="item.department"></el-input>
|
||||
</el-form-item>
|
||||
<!-- <el-form-item label="Country :" prop="country">
|
||||
<el-select
|
||||
v-model="item.country"
|
||||
filterable
|
||||
|
||||
clearable
|
||||
style="width: 180px"
|
||||
>
|
||||
<el-option
|
||||
v-for="it in countrys"
|
||||
:key="it.en_name"
|
||||
:label="it.en_name"
|
||||
:value="it.en_name"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item> -->
|
||||
<el-form-item label="Affiliation :" prop="Affiliation">
|
||||
<el-input v-model="item.Affiliation" style="width: 160px" :validate-event="false"></el-input>
|
||||
<el-form-item label="Department :" prop="department">
|
||||
<el-input v-model="item.department" clearable></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="Affiliation :" prop="affiliation">
|
||||
<el-input v-model="item.affiliation" :validate-event="false" clearable></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="Filed :" prop="major_all">
|
||||
<el-cascader
|
||||
placeholder=""
|
||||
:options="step4MajorList"
|
||||
v-model="item.major_all"
|
||||
:props="default4Params"
|
||||
style="width: 270px"
|
||||
clearable
|
||||
></el-cascader>
|
||||
</el-form-item>
|
||||
@@ -692,35 +648,8 @@
|
||||
investigation in line with our misconduct policy.
|
||||
</p>
|
||||
|
||||
<!-- <h3 style="margin-bottom:16px;margin-top:30px;">Figure Copyright Declaration</h3>
|
||||
<p style="line-height: 25px; margin: 0 10px 0 55px; font-size: 14px">
|
||||
· I confirm that all figures in this manuscript are original<br/>
|
||||
· I confirm that all figures in this manuscript used with proper permission. (upload the copyright permission letters or license documents figures.)
|
||||
|
||||
</p> -->
|
||||
<!-- <div v-if="form.journal != 0">
|
||||
<h3 style="margin-bottom:16px;margin-top:30px;">Article Processing Charge</h3>
|
||||
<div style="line-height: 25px; margin: 0 10px 0 55px; font-size: 14px">
|
||||
|
||||
<div style="font-size: 16px;margin-bottom: 10px;font-weight: 700;">
|
||||
$ {{ getFee(form.journal) }}
|
||||
</div>
|
||||
<div style="color: #8c8d8f;line-height: 20px;" 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>
|
||||
</div>
|
||||
</div> -->
|
||||
|
||||
<div style="margin:30px 0 30px 0px">
|
||||
|
||||
<div style="margin: 30px 0 30px 0px">
|
||||
<el-form-item label-width="180px">
|
||||
<span slot="label">
|
||||
Invitation code
|
||||
@@ -739,14 +668,14 @@
|
||||
</el-popover>
|
||||
:
|
||||
</span>
|
||||
<el-input
|
||||
v-model="form.code"
|
||||
|
||||
style="width: 200px"
|
||||
></el-input>
|
||||
<el-input v-model="form.code" style="width: 200px"></el-input>
|
||||
</el-form-item>
|
||||
</div>
|
||||
<el-form-item label="Article Processing Charge :" v-if="form.journal&&form.journal != 0" label-width="220px">
|
||||
<el-form-item
|
||||
label="Article Processing Charge :"
|
||||
v-if="form.journal && form.journal != 0"
|
||||
label-width="220px"
|
||||
>
|
||||
$ {{ 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
|
||||
@@ -761,47 +690,44 @@
|
||||
to view detailed policies.
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="Figure Copyright Declaration :" label-width="220px" prop="qualification">
|
||||
|
||||
<div style="color: #333" >
|
||||
<el-radio v-model="form.qualification" label="1">I confirm that all figures in this manuscript are original.</el-radio>
|
||||
<el-radio v-model="form.qualification" label="2">I confirm that all figures in this manuscript used with proper permission.</el-radio>
|
||||
|
||||
<el-form-item
|
||||
label=""
|
||||
prop="qualification_file"
|
||||
v-if="form.qualification == 2"
|
||||
label-width="0px"
|
||||
>
|
||||
<div style="position: relative;top: 4px;margin-left: 14px">
|
||||
<el-upload
|
||||
ref="uploadFile"
|
||||
class="upload-demo up_newstyle"
|
||||
:action="upload_articleApproval"
|
||||
accept=".pdf"
|
||||
name="articleApproval"
|
||||
:before-upload="beforeupload_articleApproval"
|
||||
:on-error="uperr_coverLetter"
|
||||
:on-success="upSuccess_articleApproval"
|
||||
:limit="1"
|
||||
:on-exceed="alertlimit"
|
||||
:on-remove="removefilearticleApproval"
|
||||
:file-list="fileL_articleApproval"
|
||||
:on-preview="dowloadFile"
|
||||
>
|
||||
<div class="el-upload__text" @click="clearUploadedFile">
|
||||
<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.<br/>
|
||||
</div>
|
||||
</el-upload>
|
||||
</div>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="Figure Copyright Declaration :" label-width="220px" prop="qualification">
|
||||
<div style="color: #333">
|
||||
<el-radio v-model="form.qualification" label="1"
|
||||
>I confirm that all figures in this manuscript are original.</el-radio
|
||||
>
|
||||
<el-radio v-model="form.qualification" label="2"
|
||||
>I confirm that all figures in this manuscript used with proper permission.</el-radio
|
||||
>
|
||||
|
||||
<el-form-item label="" prop="qualification_file" v-if="form.qualification == 2" label-width="0px">
|
||||
<div style="position: relative; top: 4px; margin-left: 14px">
|
||||
<el-upload
|
||||
ref="uploadFile"
|
||||
class="upload-demo up_newstyle"
|
||||
:action="upload_articleApproval"
|
||||
accept=".pdf"
|
||||
name="articleApproval"
|
||||
:before-upload="beforeupload_articleApproval"
|
||||
:on-error="uperr_coverLetter"
|
||||
:on-success="upSuccess_articleApproval"
|
||||
:limit="1"
|
||||
:on-exceed="alertlimit"
|
||||
:on-remove="removefilearticleApproval"
|
||||
:file-list="fileL_articleApproval"
|
||||
:on-preview="dowloadFile"
|
||||
>
|
||||
<div class="el-upload__text" @click="clearUploadedFile">
|
||||
<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.<br />
|
||||
</div>
|
||||
</el-upload>
|
||||
</div>
|
||||
</el-form-item>
|
||||
</div>
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<el-form-item
|
||||
label="Has artificial intelligence been used in the article ?"
|
||||
prop="approval"
|
||||
@@ -812,17 +738,10 @@
|
||||
<el-radio :label="2">No</el-radio>
|
||||
</el-radio-group>
|
||||
<div v-if="form.is_use_ai == 1">
|
||||
|
||||
<el-input
|
||||
type="textarea"
|
||||
v-model="form.use_ai_explain"
|
||||
:rows="4"
|
||||
></el-input>
|
||||
<el-input type="textarea" v-model="form.use_ai_explain" :rows="4"></el-input>
|
||||
</div>
|
||||
</el-form-item>
|
||||
|
||||
|
||||
|
||||
<div style="margin: 50px 0 30px 30px">
|
||||
<el-checkbox v-model="agreechecked" style="font-weight: bold">I accept </el-checkbox>
|
||||
<el-link @click="licensebox = true" type="primary" style="padding-left: 5px; font-weight: bold">
|
||||
@@ -879,10 +798,10 @@
|
||||
attention.
|
||||
</p>
|
||||
<common-word-html
|
||||
v-show="show_step == 3"
|
||||
|
||||
:articleId="stagingID"
|
||||
imgHeight="120px"
|
||||
v-if="isShowCommonWord && stagingID"
|
||||
v-if="isShowCommonWord&&stagingID"
|
||||
style="margin-top: 10px; box-sizing: border-box; background-color: #fff"
|
||||
></common-word-html>
|
||||
</div>
|
||||
@@ -938,7 +857,6 @@
|
||||
<el-autocomplete
|
||||
class="inline-input"
|
||||
v-model="authMeaIN.email"
|
||||
|
||||
:fetch-suggestions="
|
||||
(queryString, callback) => {
|
||||
chaMateFit(queryString, callback, 1);
|
||||
@@ -960,11 +878,11 @@
|
||||
<span style="color: #f56c6c">*</span>
|
||||
Name :
|
||||
</span>
|
||||
<el-input v-model="authMeaIN.firstname" style="width: 280px; margin-right: 20px"></el-input>
|
||||
<el-input v-model="authMeaIN.lastname" style="width: 280px"> </el-input>
|
||||
<el-input v-model="authMeaIN.firstname" style="width: 280px; margin-right: 20px"></el-input>
|
||||
<el-input v-model="authMeaIN.lastname" style="width: 280px"> </el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="ORCID iD :" label-width="120px" prop="orcid">
|
||||
<el-input v-model="authMeaIN.orcid" style="width: 280px"> </el-input>
|
||||
<el-input v-model="authMeaIN.orcid" style="width: 280px"> </el-input>
|
||||
<a href="https://orcid.org/register" target="_blank" class="orcid_link">Register for an ORCID iD</a>
|
||||
</el-form-item>
|
||||
<el-form-item label="First author :" label-width="180px">
|
||||
@@ -978,7 +896,7 @@
|
||||
<span style="color: #f56c6c">*</span>
|
||||
Title :
|
||||
</span>
|
||||
<el-select v-model="authMeaIN.title" style="width: 280px" @change="chanSelt" placeholder="">
|
||||
<el-select v-model="authMeaIN.title" style="width: 280px" @change="chanSelt" placeholder="">
|
||||
<el-option key="Prof." label="Prof." value="Prof."></el-option>
|
||||
<el-option key="Associate Prof." label="Associate Prof." value="Associate Prof."></el-option>
|
||||
<el-option key="Assistant Prof." label="Assistant Prof." value="Assistant Prof."></el-option>
|
||||
@@ -991,7 +909,6 @@
|
||||
class="inline-input"
|
||||
v-model="authMeaIN.company"
|
||||
:fetch-suggestions="searchCompany"
|
||||
|
||||
:trigger-on-focus="false"
|
||||
@select="selCompany($event, index)"
|
||||
style="width: 100%"
|
||||
@@ -999,21 +916,21 @@
|
||||
</el-autocomplete>
|
||||
</el-form-item>
|
||||
<el-form-item label="Department :" label-width="120px">
|
||||
<el-input v-model="authMeaIN.department" ></el-input>
|
||||
<el-input v-model="authMeaIN.department"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="Address :" label-width="120px">
|
||||
<span slot="label">
|
||||
<span style="color: #f56c6c" v-show="authMeaIN.isReport">*</span>
|
||||
Address :
|
||||
</span>
|
||||
<el-input v-model="authMeaIN.address" ></el-input>
|
||||
<el-input v-model="authMeaIN.address"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label-width="120px">
|
||||
<span slot="label">
|
||||
<span style="color: #f56c6c">*</span>
|
||||
Country :
|
||||
</span>
|
||||
<el-select v-model="authMeaIN.country" filterable style="width: 280px" placeholder="">
|
||||
<el-select v-model="authMeaIN.country" filterable style="width: 280px" placeholder="">
|
||||
<el-option v-for="it in countrys" :key="it.en_name" :label="it.en_name" :value="it.en_name"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
@@ -1028,12 +945,29 @@
|
||||
|
||||
<script>
|
||||
import JournalSelector from '@/components/page/components/article/journal-selector.vue';
|
||||
import ProgressBar from '@/components/page/components/article/progress.vue';
|
||||
export default {
|
||||
components: {
|
||||
JournalSelector
|
||||
JournalSelector,
|
||||
ProgressBar
|
||||
},
|
||||
data() {
|
||||
// 自定义校验:禁止QQ邮箱
|
||||
const validateNotQQEmail = (rule, value, callback) => {
|
||||
// 正则匹配QQ邮箱(以@qq.com结尾,不区分大小写)
|
||||
const qqEmailReg = /@qq\.com$/i;
|
||||
if (value) { // 若有值(必填校验已通过),则检查是否为QQ邮箱
|
||||
if (qqEmailReg.test(value)) {
|
||||
callback(new Error('QQ email is not allowed')); // 不允许QQ邮箱
|
||||
} else {
|
||||
callback(); // 校验通过
|
||||
}
|
||||
} else {
|
||||
callback(); // 空值由必填校验处理,这里不重复判断
|
||||
}
|
||||
};
|
||||
return {
|
||||
isShowProgress: false,
|
||||
hasAIContent: ['1'],
|
||||
isHasAI: '0',
|
||||
majorValueList: [],
|
||||
@@ -1041,7 +975,7 @@ export default {
|
||||
usercap: localStorage.getItem('U_role'),
|
||||
ms_alias: localStorage.getItem('ms_journal_alias'),
|
||||
stagingID: this.$route.query.id,
|
||||
isShowCommonWord: false,
|
||||
isShowCommonWord: true,
|
||||
move_step: 1, //进行步骤
|
||||
show_step: 1, //显示内容
|
||||
items: [],
|
||||
@@ -1122,7 +1056,7 @@ export default {
|
||||
qualification: '',
|
||||
approval_content: '',
|
||||
code: '',
|
||||
is_use_ai: "",
|
||||
is_use_ai: '',
|
||||
use_ai_explain: ''
|
||||
// topics:null
|
||||
},
|
||||
@@ -1143,21 +1077,11 @@ export default {
|
||||
{
|
||||
realname: '',
|
||||
email: '',
|
||||
country: '',
|
||||
department: '',
|
||||
affiliation: '',
|
||||
major_all: ''
|
||||
},
|
||||
{
|
||||
realname: '',
|
||||
email: '',
|
||||
country: '',
|
||||
major_all: ''
|
||||
},
|
||||
{
|
||||
realname: '',
|
||||
email: '',
|
||||
country: '',
|
||||
major_all: ''
|
||||
}
|
||||
|
||||
],
|
||||
countrys: [],
|
||||
fileL_articleApproval: [],
|
||||
@@ -1165,6 +1089,47 @@ export default {
|
||||
fileL_picturesAndTables: [],
|
||||
fileL_manuscirpt: [],
|
||||
fileL_supplementary: [],
|
||||
tuiJianRules: {
|
||||
realname: [
|
||||
{
|
||||
required: true,
|
||||
message: 'Please enter a realname',
|
||||
trigger: 'blur'
|
||||
}
|
||||
],
|
||||
email: [
|
||||
{
|
||||
required: true,
|
||||
message: 'Please enter a email',
|
||||
trigger: 'blur'
|
||||
},
|
||||
{
|
||||
validator: validateNotQQEmail, // 绑定自定义校验
|
||||
trigger: 'blur'
|
||||
}
|
||||
],
|
||||
department: [
|
||||
{
|
||||
required: true,
|
||||
message: 'Please enter a department',
|
||||
trigger: 'blur'
|
||||
}
|
||||
],
|
||||
affiliation: [
|
||||
{
|
||||
required: true,
|
||||
message: 'Please select a affiliation',
|
||||
trigger: 'blur'
|
||||
}
|
||||
],
|
||||
major_all: [
|
||||
{
|
||||
required: true,
|
||||
message: 'Please select a Filed',
|
||||
trigger: 'blur'
|
||||
}
|
||||
]
|
||||
},
|
||||
rules: {
|
||||
journal: [
|
||||
{
|
||||
@@ -1287,7 +1252,7 @@ export default {
|
||||
trigger: 'blur'
|
||||
}
|
||||
],
|
||||
|
||||
|
||||
email: [
|
||||
{
|
||||
required: true,
|
||||
@@ -1357,7 +1322,7 @@ export default {
|
||||
message: 'Please upload ethical approva file',
|
||||
trigger: 'blur'
|
||||
}
|
||||
],
|
||||
]
|
||||
},
|
||||
forWard: false,
|
||||
authorVisible: false,
|
||||
@@ -1416,6 +1381,7 @@ export default {
|
||||
children: 'children'
|
||||
},
|
||||
tables: [],
|
||||
uploadPercentage: 0,
|
||||
wordimgList: [],
|
||||
tablesHtml: [],
|
||||
imagesHtml: []
|
||||
@@ -1475,14 +1441,28 @@ export default {
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
// 提交前校验所有评审人表单
|
||||
async validateAllReviewers() {
|
||||
// 遍历所有表单实例
|
||||
for (const form of this.$refs.tuiJianForm) {
|
||||
// 校验当前表单(返回Promise)
|
||||
const valid = await form.validate().catch(() => false);
|
||||
if (!valid) {
|
||||
// 有表单未通过校验,终止并返回false
|
||||
return false;
|
||||
}
|
||||
}
|
||||
// 所有表单校验通过
|
||||
return true;
|
||||
},
|
||||
handleJournalSelected(journal) {
|
||||
if (journal == '') {
|
||||
this.check_item = {};
|
||||
this.ms_alias = '';
|
||||
this.form.journal = '';
|
||||
this.reviewerof.journal = 1;
|
||||
|
||||
console.log('this.form at line 1386:', this.form)
|
||||
|
||||
console.log('this.form at line 1386:', this.form);
|
||||
if (localStorage.getItem('ms_journal_alias')) {
|
||||
localStorage.removeItem('ms_journal_alias');
|
||||
}
|
||||
@@ -1491,13 +1471,20 @@ export default {
|
||||
this.ch_Jour_all(journal.journal_id);
|
||||
}
|
||||
},
|
||||
onSubmit() {
|
||||
async onSubmit() {
|
||||
if (!this.agreechecked) {
|
||||
this.$message.error(
|
||||
'Dear author, the licenses need to be accecpted before you submit the manuscript. You could find more information in http://creativecommons.org/licenses/by/4.0/'
|
||||
);
|
||||
return false;
|
||||
}
|
||||
// 校验所有评审人表单
|
||||
const valid = await this.validateAllReviewers();
|
||||
if (!valid) {
|
||||
this.$message.error('Please fill in all reviewer information correctly!');
|
||||
return false;
|
||||
}
|
||||
return;
|
||||
this.$refs.articleform.validate((valid) => {
|
||||
if (this.isAbstractTooShort(this.form.abstrart)) {
|
||||
this.$message.error('The abstract should not be less than 200 words!');
|
||||
@@ -1591,9 +1578,8 @@ export default {
|
||||
this.$refs.tuiJianForm[i].validate((vali) => {
|
||||
if (vali) {
|
||||
tuijian_yanzheng += 0;
|
||||
//this.tuiJianForm[i].major = this.tuiJianForm[i].major_all[0]
|
||||
|
||||
this.tuiJianForm[i].major = this.tuiJianForm[i].major_all[this.tuiJianForm[i].major_all.length - 1];
|
||||
//this.tuiJianForm[i].cmajor = this.tuiJianForm[i].major_all[1]
|
||||
} else {
|
||||
tuijian_yanzheng += 1;
|
||||
}
|
||||
@@ -1933,7 +1919,15 @@ export default {
|
||||
|
||||
// 保存修改用户信息
|
||||
saveAuthor(value) {
|
||||
if (value.firstname == '' || value.lastname == '' || value.title == '' || value.Country == '' || value.email == ''||value.company == ''||value.orcid == '') {
|
||||
if (
|
||||
value.firstname == '' ||
|
||||
value.lastname == '' ||
|
||||
value.title == '' ||
|
||||
value.Country == '' ||
|
||||
value.email == '' ||
|
||||
value.company == '' ||
|
||||
value.orcid == ''
|
||||
) {
|
||||
this.$message.error('Please provide complete author information!');
|
||||
return;
|
||||
}
|
||||
@@ -2323,10 +2317,16 @@ export default {
|
||||
this.$message.error('service error:' + res.msg);
|
||||
}
|
||||
},
|
||||
|
||||
// 进度回调:实时获取进度
|
||||
handleProgress(event, file, fileList) {
|
||||
this.isShowProgress=true
|
||||
|
||||
// event.percentage 就是当前进度(百分比,浮点数)
|
||||
this.uploadPercentage = Math.round(event.percent); // 取整数
|
||||
|
||||
|
||||
},
|
||||
addWordTablesList(tables) {
|
||||
console.log('tables at line 2187:', tables);
|
||||
console.log('this.fileMesForm at line 2189:', this.stagingID);
|
||||
var data = {
|
||||
article_id: this.stagingID,
|
||||
|
||||
@@ -2336,21 +2336,23 @@ export default {
|
||||
html_data: ''
|
||||
}))
|
||||
};
|
||||
|
||||
this.$api.post('api/Article/addArticleTable', data).then((res) => {
|
||||
this.isShowCommonWord = true;
|
||||
setTimeout(() => {
|
||||
this.isShowProgress=false;
|
||||
},500)
|
||||
});
|
||||
},
|
||||
upLoadWordTables() {},
|
||||
upSuccess_manuscirpt(res, File) {
|
||||
// console.log('file at line 2174:', file.raw)
|
||||
if (File) {
|
||||
|
||||
var that = this;
|
||||
const reader = new FileReader();
|
||||
reader.onload = function (e) {
|
||||
that.$commonJS.extractWordTablesToArrays(File.raw, function (wordTables) {
|
||||
console.log('tablesHtml at line 61:', wordTables);
|
||||
return;
|
||||
|
||||
that.addWordTablesList(wordTables);
|
||||
});
|
||||
};
|
||||
@@ -2555,7 +2557,7 @@ export default {
|
||||
this.Reviewerof.journal = e;
|
||||
this.checkReviewer();
|
||||
this.form.journal = e;
|
||||
this.$refs.articleform.clearValidate(['journal']);;
|
||||
this.$refs.articleform.clearValidate(['journal']);
|
||||
this.form.major = '';
|
||||
this.form.major_a = '';
|
||||
this.form.major_b = '';
|
||||
@@ -2848,12 +2850,12 @@ export default {
|
||||
}
|
||||
});
|
||||
} else if (e == 2) {
|
||||
this.isShowCommonWord = false;
|
||||
setTimeout(() => {
|
||||
this.isShowCommonWord = true;
|
||||
// that.getWordTablesList();
|
||||
// that.getWordimgList();
|
||||
}, 200);
|
||||
// this.isShowCommonWord = false;
|
||||
// setTimeout(() => {
|
||||
// this.isShowCommonWord = true;
|
||||
// // that.getWordTablesList();
|
||||
// // that.getWordimgList();
|
||||
// }, 200);
|
||||
// for (let i = 0; i < this.form.authorList.length; i++) {
|
||||
// if (this.form.authorList[i].art_aut_id == undefined) {
|
||||
// this.form.authorList[i].art_aut_id = 0
|
||||
@@ -2925,9 +2927,7 @@ export default {
|
||||
.then((res) => {
|
||||
if (res.code == 0) {
|
||||
this.form.manuscirptId = res.data.file_id;
|
||||
console.log('this.form.manuscirpt at line 2652:', this.form.manuscirpt);
|
||||
|
||||
console.log('1111111111111111111111111111');
|
||||
|
||||
setTimeout(() => {
|
||||
// that.getWordTablesList();
|
||||
// that.getWordimgList();
|
||||
@@ -3123,7 +3123,7 @@ export default {
|
||||
padding-bottom: 10px;
|
||||
border-top-left-radius: 10px;
|
||||
border-top-right-radius: 10px;
|
||||
width: calc(100% - 60px);
|
||||
width: calc(100% - 20px);
|
||||
/* margin-bottom: 10px; */
|
||||
margin-top: 20px;
|
||||
}
|
||||
@@ -3501,7 +3501,7 @@ export default {
|
||||
.tuijian_f > .shanchu_tj {
|
||||
position: absolute;
|
||||
right: 0;
|
||||
top: 0;
|
||||
top: 5px;
|
||||
padding: 5px 10px;
|
||||
}
|
||||
|
||||
@@ -3517,7 +3517,46 @@ export default {
|
||||
.tuijian_f .el-form-item > .el-form-item__label:before {
|
||||
content: '' !important;
|
||||
}
|
||||
/* 评审人表单容器 - 网格布局设置 */
|
||||
.tuijian_f {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(4, 1fr); /* 4列平均分布 */
|
||||
gap: 10px; /* 字段间间距 */
|
||||
/* padding:0 10px; */
|
||||
border: 1px solid #eee; /* 可选:加个边框区分每个评审人表单 */
|
||||
border-radius: 4px;
|
||||
margin-bottom: 10px; /* 多个评审人表单之间的间距 */
|
||||
}
|
||||
|
||||
/* 标题和删除按钮样式调整 */
|
||||
.tuijian_f > p {
|
||||
grid-column: 1 / -1; /* 标题占满整行 */
|
||||
margin: 0 0 0px 0;
|
||||
font-weight: 500;
|
||||
padding: 0 6px;
|
||||
}
|
||||
|
||||
.tuijian_f .shanchu_tj {
|
||||
grid-column: 4 / 5; /* 删除按钮放在第4列 */
|
||||
align-self: end; /* 靠下对齐 */
|
||||
justify-self: end; /* 靠右对齐 */
|
||||
}
|
||||
|
||||
/* Filed字段单独占一行 */
|
||||
.tuijian_f .el-form-item:nth-child(6) {
|
||||
/* 因为Filed是第6个表单项(从p开始算第1个) */
|
||||
grid-column: 1 / -1; /* 占满所有列(整行) */
|
||||
}
|
||||
|
||||
/* 调整字段宽度和对齐(可选,根据需要微调) */
|
||||
.tuijian_f .el-form-item {
|
||||
margin-bottom: 0; /* 取消默认margin,用grid的gap控制间距 */
|
||||
}
|
||||
|
||||
.tuijian_f .el-input,
|
||||
.tuijian_f .el-cascader {
|
||||
width: 100% !important; /* 让输入框自适应网格列宽 */
|
||||
}
|
||||
.el-popover {
|
||||
word-break: break-word;
|
||||
text-align: left;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div class="journal-selector relative w-full max-w-md" ref="journalSelector">
|
||||
|
||||
|
||||
|
||||
<!-- 使用el-input作为输入框 -->
|
||||
<div v-if="!selectedJournal">
|
||||
<el-input clearable
|
||||
@@ -185,7 +185,11 @@ export default {
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
|
||||
if(JSON.stringify(this.check_item)!=='{}'){
|
||||
this.selectedJournal = this.check_item;
|
||||
}else{
|
||||
this.selectedJournal = null;
|
||||
}
|
||||
this.getJournalList();
|
||||
document.addEventListener('click', this.handleClickOutside);
|
||||
},
|
||||
|
||||
133
src/components/page/components/article/progress.vue
Normal file
133
src/components/page/components/article/progress.vue
Normal file
@@ -0,0 +1,133 @@
|
||||
<template>
|
||||
<div class="mask-layer">
|
||||
<div class="progress-container">
|
||||
<!-- 1. AI解析文章内容 -->
|
||||
<div class="progress-item">
|
||||
|
||||
<div style="font-size: 24px;color: #fff;">AI 解析中:</div>
|
||||
|
||||
|
||||
<div class="progress-wrap">
|
||||
<div class="progress-bar" :style="{ width: contentProgress + '%' }"></div>
|
||||
<span class="progress-text" :style="Math.round(contentProgress) >96 ? 'color: #fff' : ''">{{ Math.round(contentProgress) }}%</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
props: {
|
||||
progress: {
|
||||
type: Number,
|
||||
default: 0
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
contentProgress: 0,
|
||||
imageProgress: 0,
|
||||
tableProgress: 0,
|
||||
timers: []
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
this.contentProgress = this.progress;
|
||||
// 优化:减小步长 + 缩短间隔,让更新更频繁、变化更细腻
|
||||
this.startProgress('contentProgress', 0.8, 100); // 每次+0.8,100ms更新一次
|
||||
this.startProgress('imageProgress', 1.2, 100); // 每次+1.2,100ms更新一次
|
||||
this.startProgress('tableProgress', 1.0, 100); // 每次+1.0,100ms更新一次
|
||||
},
|
||||
beforeDestroy() {
|
||||
this.timers.forEach(timer => clearInterval(timer));
|
||||
},
|
||||
methods: {
|
||||
close(){
|
||||
this.$emit('close');
|
||||
},
|
||||
startProgress(progressKey, step, interval) {
|
||||
const timer = setInterval(() => {
|
||||
if (this[progressKey] < 100) {
|
||||
// 保留小数点后1位精度,避免整数跳跃感
|
||||
this[progressKey] = Math.min(parseFloat((this[progressKey] + step).toFixed(1)), 100);
|
||||
} else {
|
||||
clearInterval(timer);
|
||||
}
|
||||
}, interval);
|
||||
this.timers.push(timer);
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.mask-layer {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-color: rgba(0, 0, 0, 0.6);
|
||||
z-index: 1000;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.progress-container {
|
||||
width: 60%;
|
||||
padding: 40px;
|
||||
/* background-color: #fff; */
|
||||
border-radius: 8px;
|
||||
/* box-shadow: 0 0 15px rgba(0, 0, 0, 0.2); */
|
||||
}
|
||||
|
||||
.progress-item {
|
||||
margin-bottom: 25px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 15px;
|
||||
}
|
||||
|
||||
.progress-item span:first-child {
|
||||
width: 140px;
|
||||
font-size: 14px;
|
||||
color: #333;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.progress-wrap {
|
||||
flex: 1;
|
||||
height: 20px;
|
||||
background-color: #f0f2f5;
|
||||
border-radius: 8px;
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
/* 核心优化:更柔和的过渡曲线 + 延长过渡时间 */
|
||||
.progress-bar {
|
||||
height: 100%;
|
||||
background-color: #409eff;
|
||||
transition: width 0.4s cubic-bezier(0.34, 1.56, 0.64, 1); /* 缓动曲线更丝滑 */
|
||||
background-image: linear-gradient(90deg, #409eff, #69b1ff); /* 轻微渐变增强质感 */
|
||||
}
|
||||
|
||||
.progress-text {
|
||||
position: absolute;
|
||||
right: 8px;
|
||||
top: 50%;
|
||||
transform: translateY(-50%);
|
||||
font-size: 16px;
|
||||
color: #409eff;
|
||||
font-weight: 500;
|
||||
min-width: 24px;
|
||||
text-align: right;
|
||||
}
|
||||
</style>
|
||||
@@ -41,7 +41,7 @@
|
||||
<el-form class="ms-content" :rules="registerRules" ref="registerForm" :model="registerForm" label-width="0">
|
||||
<!-- 用户名 -->
|
||||
<el-form-item prop="username">
|
||||
<el-input size="small" v-model="registerForm.username" auto-complete="off" placeholder="username">
|
||||
<el-input size="small" v-model="registerForm.username" auto-complete="off" placeholder="user name">
|
||||
<i slot="prefix" class="el-icon-user"></i>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
|
||||
Reference in New Issue
Block a user