提交 f2a7727c authored 作者: haodaking's avatar haodaking

chore: 新增项目站

上级 6a92e440
No preview for this file type
projectId=1018
newProjectId=25634688011239424
newProjectId=37584363305005056
baseURL=https://project-api.ezijing.com
......
projectId=1018
newProjectId=25634688011239424
newProjectId=37584363305005056
baseURL=https://project-api.ezijing.com
......
projectId=1018
newProjectId=25634688011239424
newProjectId=37584363305005056
baseURL=https://project-api2.ezijing.com
......
......@@ -2,23 +2,7 @@
<html {{ HTML_ATTRS }}>
<head>
{{ HEAD }}
<script>
;(function(win, doc) {
function resizeRoot() {
var wWidth =
screen.width > 0
? win.innerWidth >= screen.width || win.innerWidth == 0
? screen.width
: win.innerWidth
: win.innerWidth,
wFsize
wFsize = ((wWidth > 750 ? 750 : wWidth) / 375) * 100
doc.documentElement.style.fontSize = wFsize + 'px'
}
resizeRoot()
win.addEventListener('resize', resizeRoot, false)
})(window, document)
</script>
<link rel="stylesheet" href="https://zws-imgs-pub.oss-cn-beijing.aliyuncs.com/bootstrap.min.css" />
</head>
<body {{ BODY_ATTRS }}>
{{ APP }}
......
# ASSETS
**This directory is not required, you can delete it if you don't want to use it.**
This directory contains your un-compiled assets such as LESS, SASS, or JavaScript.
More information about the usage of this directory in [the documentation](https://nuxtjs.org/guide/assets#webpacked).
差异被折叠。
/*
KISSY CSS Reset
理念:清除和重置是紧密不可分的
特色:1.适应中文 2.基于最新主流浏览器
维护:玉伯(lifesinger@gmail.com), 正淳(ragecarrier@gmail.com)
*/
/* 清除内外边距 */
body, h1, h2, h3, h4, h5, h6, hr, p, blockquote, /* structural elements 结构元素 */
dl, dt, dd, ul, ol, li, /* list elements 列表元素 */
pre, /* text formatting elements 文本格式元素 */
fieldset, lengend, button, input, textarea, /* form elements 表单元素 */
th, td { /* table elements 表格元素 */
margin: 0;
padding: 0;
}
/* 设置默认字体 */
body,
button, input, select, textarea { /* for ie */
font: 16px/1 Tahoma, Helvetica, Arial, "宋体", sans-serif;
/*font: 16px/1 Arial, Helvetica, "Microsoft YaHei"; /* 用 ascii 字符表示,使得在任何编码下都无问题 */
}
h1 { font-size: 18px; /* 18px / 12px = 1.5 */ }
h2 { font-size: 16px; }
h3 { font-size: 14px; }
h4, h5, h6 { font-size: 100%; }
address, cite, dfn, em, var { font-style: normal; } /* 将斜体扶正 */
code, kbd, pre, samp, tt { font-family: "Courier New", Courier, monospace; } /* 统一等宽字体 */
small { font-size: 12px; } /* 小于 12px 的中文很难阅读,让 small 正常化 */
/* 重置列表元素 */
ul, ol { list-style: none; }
/* 重置文本格式元素 */
a { text-decoration: none; color: #3f3b3a;}
a:hover { text-decoration: none; }
abbr[title], acronym[title] { /* 注:1.ie6 不支持 abbr; 2.这里用了属性选择符,ie6 下无效果 */
border-bottom: 1px dotted;
cursor: help;
}
q:before, q:after { content: ''; }
/* 重置表单元素 */
legend { color: #000; } /* for ie6 */
fieldset, img { border: none; } /* img 搭车:让链接里的 img 无边框 */
/* 注:optgroup 无法扶正 */
button, input, select, textarea {
font-size: 100%; /* 使得表单元素在 ie 下能继承字体大小 */
}
/* 重置表格元素 */
table {
border-collapse: collapse;
border-spacing: 0;
}
/* 重置 hr */
hr {
border: none;
height: 1px;
}
/* 让非ie浏览器默认也显示垂直滚动条,防止因滚动条引起的闪烁 */
html { overflow-y: scroll; }
<template>
<div class="app-link">
<span class="app-link">
<!-- 外部链接跳转 -->
<a :href="href" :target="target" v-if="href"><slot /></a>
<!-- 站内跳转 -->
......@@ -7,16 +7,16 @@
<!-- 事件 -->
<div v-else-if="data.onClick" @click="data.onClick"><slot /></div>
<template v-else><slot /></template>
</div>
</span>
</template>
<script>
export default {
name: 'Link',
name: 'AppLink',
props: {
data: { type: Object, default: () => ({}) },
to: [String, Object, Function],
target: { type: String, default: '_blnak' }
target: { type: String, default: '_blank' }
},
computed: {
href() {
......
<template>
<div>
<div class="article-back" @click="$emit('back')">
<div class="el-icon-arrow-left"></div>
<div class="text">返回</div>
</div>
<div class="article-time">{{ formatDate(data.start_time) }}</div>
<h1 class="article-title">{{ data.title }}</h1>
<div class="article-content" v-html="data.content"></div>
</div>
</template>
<script>
export default {
data() {
return {
data: {}
}
},
async fetch() {
this.data = await this.$axios.get(`/api/cms/api/v1/article/${this.$route.params.id}/detail`).then(res => {
return res.data
})
this.$emit('loaded', this.data)
},
methods: {
formatDate(value) {
const date = new Date(value * 1000)
return date.getFullYear() + '/' + (date.getMonth() + 1) + '/' + date.getDate()
}
}
}
</script>
<style lang="scss">
.article-back {
margin-bottom: 20px;
display: flex;
align-items: center;
font-size: 16px;
color: #999;
cursor: pointer;
}
.article-time {
font-size: 16px;
line-height: 100%;
margin: 35px 0 16px;
color: #999999;
}
.article-title {
font-size: 32px;
font-weight: bold;
color: #141414;
border-bottom: 1px solid #e6e6e6;
padding-bottom: 10px;
}
.article-content {
padding-top: 25px;
font-size: 14px;
line-height: 28px;
color: #333;
}
</style>
......@@ -93,6 +93,9 @@ export default {
</script>
<style lang="scss">
.article-list {
overflow: hidden;
}
.article-list-pagination {
padding: 20px;
text-align: center;
......
......@@ -2,9 +2,9 @@
<div class="article-item">
<app-link :data="data" v-bind="$attrs">
<div class="article-item-inner">
<img :src="data.web_img_uri + '?x-oss-process=image/resize,m_fill,h_213,w_320'" class="article-item-pic" />
<img :src="data.web_img_uri" class="article-item-pic" loading="lazy" />
<div class="article-item-content">
<div class="article-item-content__date">{{ formatDate(data.start_time) }}</div>
<!-- <div class="article-item-content__date">{{ formatDate(data.start_time) }}</div> -->
<div class="article-item-content__title">{{ data.title }}</div>
<div class="article-item-content__text">{{ data.abstract }}</div>
</div>
......@@ -14,7 +14,7 @@
</template>
<script>
import AppLink from '@/components/Link'
import AppLink from '@/components/AppLink'
export default {
name: 'ArticleItem',
components: { AppLink },
......@@ -30,54 +30,35 @@ export default {
</script>
<style lang="scss">
.is-pc {
.article-item {
.article-item {
border-bottom: 1px solid #e6e6e6;
padding: 36px 0;
margin: 0 50px;
padding: 20px 0;
cursor: pointer;
}
.article-item-inner {
}
.article-item-inner {
display: flex;
&.set-list{
.article-item-pic{
width: 335px;
object-fit: cover;
height: 130px;
}
.article-item-content__text{
-webkit-line-clamp: 2;
}
}
}
.app-link{
::v-deep{
a{
height: fit-content;
}
}
}
.article-item-pic {
width: 320px;
}
.article-item-pic {
width: 240px;
height: 100%;
// height: fit-content;
// height: 210px;
// object-fit: cover;
}
.article-item-content {
}
.article-item-content {
flex: 1;
overflow: hidden;
margin-left: 30px;
}
.article-item-content__date {
}
.article-item-content__date {
font-size: 16px;
font-weight: 300;
line-height: 100%;
color: #aa1941;
// padding-top: 13px;
}
.article-item-content__title {
font-size: 22px;
}
.article-item-content__title {
font-size: 18px;
font-weight: bold;
line-height: 32px;
color: #141414;
......@@ -87,8 +68,8 @@ export default {
display: -webkit-box;
-webkit-line-clamp: 1;
-webkit-box-orient: vertical;
}
.article-item-content__text {
}
.article-item-content__text {
font-size: 14px;
font-weight: 300;
line-height: 24px;
......@@ -99,43 +80,5 @@ export default {
display: -webkit-box;
-webkit-line-clamp: 4;
-webkit-box-orient: vertical;
}
}
.is-h5 {
.article-list-inner {
display: flex;
}
.article-item {
margin: 0.2rem;
background-color: #fff;
}
.article-item-pic {
display: block;
width: 100%;
// height: fit-content;
// height: 2.99rem;
// object-fit: cover;
}
.article-item-content {
padding: 0.18rem;
}
.article-item-content__date {
font-size: 0.1rem;
color: #aa1941;
line-height: 0.16rem;
}
.article-item-content__title {
margin-top: 0.1rem;
font-size: 0.14rem;
font-weight: 500;
color: #333;
line-height: 0.24rem;
}
.article-item-content__text {
margin-top: 0.2rem;
font-size: 0.1rem;
line-height: 0.2rem;
}
}
</style>
<template>
<div :class="isMobile ? 'is-h5' : 'is-pc'">
<div class="card">
<div class="card-hd">
<div class="card-hd__title">{{ title }}</div>
<div class="card-hd__aside"><slot name="header-aside"></slot></div>
</div>
<div class="card-bd"><slot /></div>
</div>
</div>
</template>
<script>
export default {
props: { title: String },
computed: {
isMobile() {
return this.$store.state.isMobile
}
}
}
</script>
<style lang="scss">
.is-pc{
.card {
// margin: 0.2rem 0.15rem;
}
.card-hd {
display: flex;
align-items: center;
justify-content: space-between;
// margin-bottom: 0.15rem;
}
.card-hd__title {
flex: 1;
border-left: 7px solid #aa1941;
padding-left: 20px;
font-size: 32px;
font-weight: bold;
line-height: 1;
}
.card-hd__aside {
font-size: 16px;
color: #9b9b9b;
cursor: pointer;
}
.card-bd {
}
}
.is-h5{
.card {
margin: 0.2rem 0.15rem;
}
.card-hd {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 0.15rem;
}
.card-hd__title {
flex: 1;
border-left: 0.03rem solid #aa1941;
padding-left: 0.05rem;
font-size: 0.17rem;
font-weight: bold;
line-height: 1;
}
.card-hd__aside {
font-size: 0.1rem;
color: #9b9b9b;
}
.card-bd {
}
}
</style>
<template>
<AppLayout v-bind="$attrs">
<div class="body-title">
<h2 class="container">{{ title }}</h2>
</div>
<div class="body-cont container">
<div class="body-cont-top"></div>
<div class="body-cont-main">
<div class="cl">
<div class="col-xs-12 col-sm-2 col-md-2" style="padding:0;" v-if="menus">
<ul class="content-tabs">
<li :class="getTabsClass(item)" v-for="(item, index) in menus" :key="index">
<AppLink :to="item.path">{{ item.name }}</AppLink>
</li>
</ul>
</div>
<div :class="menus ? 'col-xs-12 col-sm-8 col-md-8' : 'col-xs-12 col-sm-10 col-md-10'"><nuxt /></div>
<div class="col-xs-6 col-sm-2 col-md-2" style="padding:0;">
<div class="entrance">
<a class="first" href="/my">在线报名</a>
<!-- <a target="_blank" class="third" title="暂未开放" href="https://e-kelley.ezijing.com">学员入口</a> -->
</div>
</div>
</div>
</div>
</div>
</AppLayout>
</template>
<script>
import AppLayout from '@/components/layout/Layout'
import AppLink from '@/components/AppLink'
export default {
props: { title: String, menus: Array },
components: { AppLayout, AppLink },
methods: {
getTabsClass(data) {
return this.$route.fullPath === data.path ? 'current' : ''
}
}
}
</script>
# COMPONENTS
**This directory is not required, you can delete it if you don't want to use it.**
The components directory contains your Vue.js Components.
_Nuxt.js doesn't supercharge these components._
<template>
<div class="main-page">
<ul class="main-page-nav">
<li v-for="(item, index) in data.slider" :key="index" :class="{ 'is-active': isAcitve(item) }">
<nuxt-link :to="item.path">{{ item.name }}</nuxt-link>
</li>
</ul>
<div class="main-page-content">
<img v-if="data.banner" :src="data.banner" class="main-page-banner" />
<div class="main-content-html">
<slot></slot>
</div>
</div>
</div>
</template>
<script>
export default {
name: 'appFrame',
props: {
data: { type: Object }
},
methods: {
isAcitve(item) {
return this.$route.fullPath.includes(item.path)
}
}
}
</script>
<style lang="scss">
.is-pc {
.main-page {
width: 1200px;
margin: 0 auto;
padding: 56px 0 100px;
display: flex;
}
.main-page-nav {
width: 160px;
background: #fff;
padding: 35px 0 44px;
margin-right: 40px;
align-self: flex-start;
li {
position: relative;
height: 40px;
font-size: 22px;
line-height: 40px;
text-align: center;
color: #777777;
cursor: pointer;
&.is-active {
color: #aa1941;
&::after {
content: '';
width: 8px;
height: 40px;
background: #aa1941;
position: absolute;
top: 0;
left: 0;
}
}
}
li + li {
margin-top: 60px;
}
}
.main-page-content {
flex: 1;
background-color: #fff;
overflow: hidden;
}
.main-page-banner {
display: block;
height: 320px;
object-fit: cover;
}
}
.is-h5 {
.main-page-nav {
display: flex;
li {
margin-left: 0.3rem;
font-size: 0.14rem;
line-height: 0.38rem;
color: #333;
&.is-active {
border-bottom: 0.02rem solid #aa1941;
}
}
}
.main-page-banner {
display: block;
width: 100%;
// height: 1.2rem;
// object-fit: cover;
}
.main-page-content {
background-color: #fff;
}
}
</style>
<template>
<div class="app-apply-form">
<h2 class="title">报名咨询</h2>
<div class="form">
<div class="form-item">
<input type="text" class="form-input" placeholder="请输入您的姓名" v-model="ruleForm.name" />
</div>
<div class="form-item">
<input type="number" class="form-input" placeholder="请输入您的电话" maxlength="11" v-model="ruleForm.phone" />
</div>
<div class="form-item">
<select class="form-select" placeholder="请选择项目" v-model="ruleForm.project_id" disabled>
<option value="" disabled selected>请选择项目</option>
<option v-for="(item, index) in projectList" :value="item.value" :key="index">{{ item.label }}</option>
</select>
</div>
<div class="form-item">
<input type="text" class="form-input" placeholder="请输入短信验证码" maxlength="4" v-model="phoneCode" />
<input
type="button"
class="form-button"
:disabled="codeButtonDisabled"
:value="buttonText"
@click="onSendCode"
/>
</div>
<div class="form-item">
<input type="button" value="立即预约" class="form-button" @click="onSbumit" />
</div>
</div>
</div>
</template>
<script>
import * as api from '@/api'
export default {
data() {
return {
ruleForm: { name: '', phone: '', project_id: '1018', channel: 19960 },
projectList: [
{ label: '金融工商管理硕士', value: '1000' },
{ label: '酒店及旅游业工商管理硕士', value: '1008' },
{ label: this.$t('aside.project4'), value: '1012' },
{ label: '应用心理学硕士', value: '1006' },
{ label: '教育学硕士', value: '1005' },
{ label: '中国未来金融领袖计划', value: '1007' },
{ label: '1+1 国际硕士', value: '1016' },
{ label: '金融学硕士1+1', value: '1018' }
],
phoneCode: '',
codeButtonDisabled: false,
timer: null,
disabledTime: 60
}
},
computed: {
buttonText() {
return this.codeButtonDisabled ? `${this.disabledTime}秒后重发` : '获取验证码'
}
},
methods: {
onSbumit() {
if (!this.ruleForm.name) {
this.$message.warning('请输入您的姓名')
return
}
if (!this.ruleForm.phone || !/^1[3-9]\d{9}$/.test(this.ruleForm.phone)) {
this.$message.warning('请输入正确的手机号')
return
}
if (!this.phoneCode) {
this.$message.warning('请输入短信验证码')
return
}
this.checkPhoneCode().then(this.handleSubmit)
},
handleSubmit() {
api.submit(this.ruleForm).then(response => {
// this.$notify({ type: 'success', message: response.message })
this.$message('报名成功')
this.$emit('success')
this.ruleForm.name = ''
this.ruleForm.phone = ''
this.phoneCode = ''
})
},
// 校验短信验证码
checkPhoneCode() {
return api.checkCode({ account: this.ruleForm.phone, code: this.phoneCode })
},
onSendCode() {
if (!this.ruleForm.phone || !/^1[3-9]\d{9}$/.test(this.ruleForm.phone)) {
this.$message.warning('请输入正确的手机号')
return
}
this.sendCode()
},
// 发送验证码
sendCode() {
this.setTimer()
api
.sendCode({ account: this.ruleForm.phone })
.then(() => {
this.$message.success({ type: 'success', message: '验证码发送成功,注意查收' })
})
.catch(() => {
this.clearTimer()
})
},
setTimer() {
this.codeButtonDisabled = true
this.disabledTime = 60
this.timer = setInterval(() => {
this.disabledTime--
if (this.disabledTime <= 0) {
this.clearTimer()
}
}, 1000)
},
clearTimer() {
this.codeButtonDisabled = false
this.timer && clearInterval(this.timer)
}
},
destroyed() {
this.clearTimer()
}
}
</script>
<style lang="scss" scoped>
.app-apply-form {
width: 290px;
.title {
padding: 30px 0;
font-size: 20px;
color: #fff;
text-align: center;
}
}
.form-item {
display: flex;
align-items: center;
margin-bottom: 20px;
}
.form-input {
padding: 0 10px;
width: 100%;
height: 38px;
background-color: #fff;
box-sizing: border-box;
border: none;
}
.form-select {
appearance: none;
position: relative;
padding: 0 10px;
width: 100%;
height: 38px;
background: #fff url('https://webapp-pub.ezijing.com/www/h5/images/icon_arrows.png') no-repeat;
background-position: right 0.7em top 50%, 0 0;
background-size: 30px 30px;
box-sizing: border-box;
border: none;
}
.form-button {
padding: 0 10px;
width: 100%;
height: 38px;
font-size: 16px;
color: #aa1941;
background-color: #ffd61b;
box-sizing: border-box;
border: none;
cursor: pointer;
}
.form-input + .form-button {
margin-left: 10px;
}
</style>
<template>
<div class="card">
<div class="card-hd">
<div class="card-hd__title">{{ title }}</div>
<div class="card-hd__aside"><slot name="header-aside"></slot></div>
</div>
<div class="card-bd"><slot /></div>
</div>
</template>
<script>
export default {
props: { title: String }
}
</script>
<style lang="scss">
.card {
margin: 0.2rem 0.15rem;
}
.card-hd {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 0.15rem;
}
.card-hd__title {
flex: 1;
border-left: 0.03rem solid #aa1941;
padding-left: 0.05rem;
font-size: 0.17rem;
font-weight: bold;
line-height: 1;
}
.card-hd__aside {
font-size: 0.1rem;
color: #9b9b9b;
}
.card-bd {
}
</style>
<template>
<nav class="app-menu">
<ul>
<tree-item :item="item" v-for="(item, index) in list" :key="index" class="first"></tree-item>
</ul>
</nav>
</template>
<script>
import TreeItem from './TreeItem'
export default {
components: { TreeItem },
data() {
const _this = this
return {
list: [
{
name: '项目介绍',
children: [
{ name: '项目介绍', path: '/project-intro/introduce' }
// { name: '最近动态', path: '/news/hot' }
]
},
{
name: '学校介绍',
children: [
{ name: '纽约州立大学石溪分校', path: '/school/school3' }
// { name: '师资介绍', path: '/about/teacher' }
]
},
{
name: '学历认证',
path: '/academic/academic'
},
{
name: '报名流程',
children: [
{ name: '报名流程', path: '/enroll/process' },
{ name: '申请条件', path: '/enroll/apply' }
]
},
{
name: '资料下载',
path: '/dataDownload/dataDownload'
},
{
name: '归国政策',
path: '/returnPolicy/returnPolicy'
},
{
name: '常见问题',
path: '/question/question'
},
{
name: '报名申请',
onClick: () => {
window.open('/my/account')
}
}
]
}
},
methods: {
showTips() {
this.$notify({ type: 'primary', message: '暂未开通,尽请期待' })
}
},
computed: {
user() {
return this.$store.state.user || {}
}
}
}
</script>
<style lang="scss">
.app-menu {
// position: fixed;
// left: 0;
// right: 0;
// top: 0.62rem;
// bottom: 0;
padding: 0 0.15rem;
min-height: 100vh;
background-color: #fff;
.first > .cell .cell-title {
font-size: 0.14rem;
font-weight: bold;
}
.first > .tree-item-group {
padding: 0;
}
}
</style>
<template>
<div>
<div class="rigth-aside">
<ul class="right-aside-btns">
<a href="/my">
<li>
<img src="https://zws-imgs-pub.ezijing.com/static/public/d434fa0ffd77892273e63e6d694cff0a.png" />
<p>报名申请</p>
</li>
</a>
<li @click="showApplyForm" style="border-top: 1px solid #999;">
<img src="https://webapp-pub.ezijing.com/project/kelley/h5-icon_service.png" />
<p>我要咨询</p>
</li>
<li @click="showFollow">
<img src="https://zws-imgs-pub.ezijing.com/static/public/5526b83d7526b2742f6eba7151c367db.png" />
<p>关注我们</p>
</li>
</ul>
</div>
<!-- 我要报名 -->
<van-overlay :show="applyFormVisible" @click="hideApplyForm">
<div class="dialog-box" @click.stop>
<apply-form @success="hideApplyForm"></apply-form>
</div>
</van-overlay>
<!-- 关注我们 -->
<van-overlay :show="followVisible" @click="followVisible = false">
<div class="dialog-box" @click.stop>
<h2 class="title">关注我们</h2>
<div class="follow">
<img src="https://webapp-pub.ezijing.com/project/marywood/officialAccount.jpeg" />
<p>扫码关注 了解更多</p>
</div>
</div>
</van-overlay>
</div>
</template>
<script>
import ApplyForm from './ApplyForm'
export default {
components: { ApplyForm },
data() {
return {
applyFormVisible: false,
followVisible: false
}
},
methods: {
// 我要报名
showApplyForm() {
this.applyFormVisible = true
},
hideApplyForm() {
this.applyFormVisible = false
},
// 关注我们
showFollow() {
this.followVisible = true
}
}
}
</script>
<style lang="scss" scoped>
::v-deep .van-overlay {
z-index: 100;
}
.rigth-aside {
position: fixed;
top: 50%;
right: 16px;
z-index: 99;
transform: translateY(-50%);
.right-aside-btns {
box-shadow: 0 2px 4px 0 rgb(0 0 0 / 10%);
li {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
width: 0.5rem;
height: 0.5rem;
font-size: 0.1rem;
color: #999;
background-color: #fff;
cursor: pointer;
img {
width: 0.23rem;
height: 0.23rem;
}
}
li + li {
border-top: 1px solid #999;
}
}
}
.dialog-box {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
margin: 0 auto;
width: 345px;
height: 426px;
background: url('https://webapp-pub.ezijing.com/www/h5/images/dialog_bg.png') no-repeat;
background-size: cover;
.title {
padding: 30px 0;
font-size: 20px;
color: #fff;
text-align: center;
}
}
.follow {
img {
width: 182px;
height: 182px;
}
p {
margin-top: 20px;
font-size: 12px;
color: #fff;
text-align: center;
}
}
</style>
<template>
<div class="app-search">
<div class="hot-search">
<h2 class="hot-search__title">热门搜索</h2>
<ul class="hot-search__list">
<li v-for="(item, index) in hotList" :key="index">
<app-link :data="item">{{ item.name }}</app-link>
</li>
</ul>
</div>
</div>
</template>
<script>
export default {
data() {
return {
hotList: [
{ name: '1+x', href: 'https://x.ezijing.com' },
{ name: '金融', href: 'https://kelley.ezijing.com' },
{ name: 'MBA', href: 'https://sofia.ezijing.com' },
{ name: '心理学', href: 'https://ciis.ezijing.com' },
{ name: '新闻', path: '/about/news' }
]
}
}
}
</script>
<style lang="scss">
.app-search {
padding: 0 0.15rem;
min-height: 100vh;
background-color: #fff;
}
.hot-search {
}
.hot-search__title {
padding: 0.2rem 0;
font-size: 0.12rem;
font-weight: 400;
color: #333;
border-bottom: 1px solid #999;
}
.hot-search__list {
li {
font-size: 0.14rem;
color: #333;
font-weight: 500;
line-height: 0.52rem;
border-bottom: 1px solid #999;
}
a {
display: block;
}
}
</style>
<template>
<nav>
<ul class="app-tab-nav">
<li v-for="(item, index) in list" :key="index" :class="{ 'is-active': item.value === active }">
<nuxt-link :to="item.path">{{ item.name }}</nuxt-link>
</li>
</ul>
</nav>
</template>
<script>
export default {
props: { list: { type: Array, default: () => [] }, active: { type: String } },
data() {
return {}
}
}
</script>
<style lang="scss">
.app-tab-nav {
display: flex;
li {
margin-left: 0.3rem;
font-size: 0.14rem;
line-height: 0.38rem;
color: #333;
&.is-active {
border-bottom: 0.02rem solid #aa1941;
}
}
}
</style>
<template>
<li class="tree-item">
<div class="cell" :class="{ bold: isFolder }" @click="toggle">
<div class="cell-title">
<app-link :data="item">{{ item.name }}</app-link>
</div>
<div class="cell-icon" v-if="isFolder">
<van-icon name="arrow-up" v-if="isOpen" />
<van-icon name="arrow-down" v-else />
</div>
</div>
<ul v-show="isOpen" v-if="isFolder" class="tree-item-group">
<tree-item v-for="(child, index) in item.children" :key="index" :item="child"></tree-item>
</ul>
</li>
</template>
<script>
import TreeItem from './TreeItem'
import AppLink from '@/components/Link'
export default {
name: 'TreeItem',
props: { item: Object },
components: { TreeItem, AppLink },
data: function () {
return {
isOpen: false
}
},
computed: {
isFolder: function () {
return this.item.children && this.item.children.length
}
},
methods: {
toggle: function () {
if (this.isFolder) {
this.isOpen = !this.isOpen
}
}
}
}
</script>
<style lang="scss">
.tree-item {
.cell {
display: flex;
align-items: center;
height: 0.52rem;
border-bottom: 1px solid #999;
}
.cell-title {
flex: 1;
font-size: 0.13rem;
font-weight: 400;
color: #333;
a {
display: block;
line-height: 0.52rem;
}
}
.cell-icon {
font-size: 0.14rem;
}
.tree-item-group {
padding-left: 0.1rem;
}
}
</style>
<template>
<div class="popup" v-show="visible">
<div class="app-apply-form" @touchmove.prevent>
<h2 class="title">报名咨询</h2>
<div class="form">
<div class="form-item">
<input type="text" class="form-input" placeholder="请输入您的姓名" v-model="ruleForm.name" />
</div>
<div class="form-item">
<input
type="number"
class="form-input"
placeholder="请输入您的电话"
maxlength="11"
v-model="ruleForm.phone"
/>
</div>
<div class="form-item">
<select class="form-select" placeholder="请选择项目" v-model="ruleForm.project_id" disabled>
<option value="" disabled selected>请选择项目</option>
<option v-for="(item, index) in projectList" :value="item.value" :key="index">{{ item.label }}</option>
</select>
</div>
<div class="form-item">
<input type="text" class="form-input" placeholder="请输入短信验证码" maxlength="4" v-model="phoneCode" />
<input
type="button"
class="form-button"
:disabled="codeButtonDisabled"
:value="buttonText"
@click="onSendCode"
/>
</div>
<div class="form-item">
<input type="button" value="立即预约" class="form-button" @click="onSbumit" />
</div>
</div>
</div>
<div class="overlay" @click="closePop" @touchmove.prevent></div>
</div>
</template>
<script>
import * as api from '@/api'
export default {
props: {
visible: {
type: Boolean,
default: false
}
},
data() {
return {
ruleForm: { name: '', phone: '', project_id: '1016', channel: 19960 },
projectList: [
{ label: '金融工商管理硕士', value: '1000' },
{ label: '酒店及旅游业工商管理硕士', value: '1008' },
{ label: '工商管理硕士', value: '1012' },
{ label: '应用心理学硕士', value: '1006' },
{ label: '教育学硕士', value: '1005' },
{ label: '中国未来金融领袖计划', value: '1007' },
{ label: '1+1 国际硕士', value: '1016' }
],
phoneCode: '',
codeButtonDisabled: false,
timer: null,
disabledTime: 60
}
},
computed: {
buttonText() {
return this.codeButtonDisabled ? `${this.disabledTime}秒后重发` : '获取验证码'
}
},
mounted() {
console.log(this.ruleForm, '-----')
},
methods: {
closePop() {
document.getElementsByTagName('body')[0].style.height = ''
document.getElementsByTagName('body')[0].style.overflow = ''
this.$emit('update:visible', false)
this.ruleForm.name = ''
this.ruleForm.phone = ''
this.phoneCode = ''
},
onSbumit() {
if (!this.ruleForm.name) {
this.$message('请输入您的姓名')
return
}
if (!this.ruleForm.phone || !/^1[3-9]\d{9}$/.test(this.ruleForm.phone)) {
this.$message('请输入正确的手机号')
return
}
if (!this.phoneCode) {
this.$message('请输入短信验证码')
return
}
this.checkPhoneCode()
},
handleSubmit() {
api
.submit(this.ruleForm)
.then(res => {
this.$message('报名成功')
this.$emit('success')
this.ruleForm.name = ''
this.ruleForm.phone = ''
this.phoneCode = ''
})
.catch(err => {
this.$message.error(err.msg)
})
},
// 校验短信验证码
checkPhoneCode() {
return api
.checkCode({ account: this.ruleForm.phone, code: this.phoneCode })
.then(res => {
if (res.code === 0) {
this.handleSubmit()
}
})
.catch(err => {
this.$message.error(err.msg)
})
},
onSendCode() {
if (!this.ruleForm.phone || !/^1[3-9]\d{9}$/.test(this.ruleForm.phone)) {
this.$message('请输入正确的手机号')
return
}
this.sendCode()
},
// 发送验证码
sendCode() {
this.setTimer()
api
.sendCode({ account: this.ruleForm.phone })
.then(() => {
this.$message({ type: 'success', message: '验证码发送成功,注意查收' })
})
.catch(() => {
this.clearTimer()
})
},
setTimer() {
this.codeButtonDisabled = true
this.disabledTime = 60
this.timer = setInterval(() => {
this.disabledTime--
if (this.disabledTime <= 0) {
this.clearTimer()
}
}, 1000)
},
clearTimer() {
this.codeButtonDisabled = false
this.timer && clearInterval(this.timer)
}
},
destroyed() {
this.clearTimer()
}
}
</script>
<style lang="scss" scoped>
.overlay {
position: fixed;
left: 0;
top: 0;
right: 0;
bottom: 0;
z-index: 1999;
background: rgba(0, 0, 0, 0.5);
}
.app-apply-form {
height: 374px;
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
z-index: 2000;
background: url(https://zws-imgs-pub.ezijing.com/static/public/4ae1f00a05a40fd10866ffe153fa82b0.png);
.title {
padding: 30px 0;
font-size: 20px;
color: #fff;
text-align: center;
}
}
.form-item {
display: flex;
align-items: center;
margin-bottom: 20px;
margin-right: 20px;
margin-left: 10px;
}
.form-input {
padding: 0 10px;
width: 100%;
height: 38px;
background-color: #fff;
box-sizing: border-box;
border: none;
}
.form-select {
appearance: none;
position: relative;
padding: 0 10px;
width: 100%;
height: 38px;
background: #fff url('https://webapp-pub.ezijing.com/www/h5/images/icon_arrows.png') no-repeat;
background-position: right 0.7em top 50%, 0 0;
background-size: 30px 30px;
box-sizing: border-box;
border: none;
}
.form-button {
padding: 0 10px;
width: 100%;
height: 38px;
font-size: 16px;
color: #aa1941;
background-color: #ffd61b;
border: none;
cursor: pointer;
}
.form-input + .form-button {
margin-left: 10px;
}
</style>
差异被折叠。
<template>
<div class="banner-content" @mouseenter="swiperStop" @mouseleave="swiperStart">
<div v-swiper:mySwiper="swiperOption" ref="mySwiper">
<div class="swiper-wrapper">
<div class="swiper-slide" v-for="(item, index) in listData" :key="index">
<template v-if="item.uri">
<a :href="item.uri" target="_black">
<img :src="item.web_img_uri" />
</a>
</template>
<template v-else>
<img :src="item.web_img_uri" />
</template>
</div>
</div>
</div>
<template v-if="!isMobile">
<div class="prev-button"></div>
<div class="next-button"></div>
</template>
</div>
</template>
<script>
export default {
name: 'banner',
data() {
return {
listData: [],
swiperOption: {
speed: 400,
autoplay: true,
delay: 3000,
observer: true,
observerParent: true,
navigation: {
nextEl: '.next-button',
prevEl: '.prev-button'
},
loop: true
}
}
},
async fetch() {
const params = { project_id: process.env.newProjectId, type_tag: 'ad_banner' }
this.listData = await this.$axios.get('/api/cms/api/v1/advertisements', { params }).then(res => res.data.data)
},
computed: {
swiper() {
return this.$refs.mySwiper.swiper
},
isMobile() {
return this.$store.state.isMobile
}
},
mounted() {},
methods: {
swiperStop() {
this.swiper.autoplay.stop()
},
swiperStart() {
this.swiper.autoplay.start()
}
}
}
</script>
<style lang="scss" scoped>
.banner-content {
position: relative;
width: 100%;
.swiper-wrapper {
width: 100%;
display: flex;
.swiper-slide {
width: 100%;
// float: left;
img {
width: 100%;
display: block;
}
}
}
.prev-button {
position: absolute;
top: 50%;
left: 30px;
width: 20px;
height: 35px;
background: url(https://zws-imgs-pub.ezijing.com/static/public/beb733466e5ab0168b459a55d198b084.png);
background-size: 100% 100%;
z-index: 999;
cursor: pointer;
}
.next-button {
position: absolute;
top: 50%;
right: 30px;
width: 20px;
height: 35px;
background: url(https://zws-imgs-pub.ezijing.com/static/public/e97f45b23a3e5ec4913f0069cc714baf.png);
background-size: 100% 100%;
z-index: 999;
cursor: pointer;
}
}
</style>
\ No newline at end of file
<template>
<div :class="isMobile ? 'is-h5' : 'is-pc'">
<div class="banner-content">
<img class="img" src="https://webapp-pub.ezijing.com/project_online_pc/sub_plus/pc-index-banner.png?v=4" />
<div class="banner_navList">
<div class="banner_nav" v-for="(item, index) in navList" :key="index" @click="navClick(item)">
<div class="nav_top">
<img class="nav_img" :src="item.img" v-if="!isMobile" />
<img class="nav_img" :src="item.imgH5" v-else />
</div>
<div class="nav_tit">{{ item.tit }}</div>
</div>
</div>
</div>
</div>
</template>
<script>
export default {
data() {
return {
navList: [
{
img: 'https://webapp-pub.ezijing.com/project/marywood/icon1.png',
imgH5: 'https://webapp-pub.ezijing.com/project/marywood/h5/icon11.png',
tit: '报名申请',
tag: '1'
},
{
img: 'https://webapp-pub.ezijing.com/project/marywood/icon4.png',
imgH5: 'https://webapp-pub.ezijing.com/project/marywood/h5/icon41.png',
tit: '招生简章',
tag: '2'
},
{
img: 'https://webapp-pub.ezijing.com/project/marywood/icon5.png',
imgH5: 'https://webapp-pub.ezijing.com/project/marywood/h5/icon51.png',
tit: '项目介绍',
tag: '3'
},
{
img: 'https://webapp-pub.ezijing.com/project/marywood/icon2.png',
imgH5: 'https://webapp-pub.ezijing.com/project/marywood/h5/icon21.png',
tit: '资料下载',
tag: '4'
},
{
img: 'https://webapp-pub.ezijing.com/project/marywood/icon3.png',
imgH5: 'https://webapp-pub.ezijing.com/project/marywood/h5/icon31.png',
tit: '常见问题',
tag: '5'
}
]
}
},
computed: {
isMobile() {
return this.$store.state.isMobile
}
},
methods: {
navClick(item) {
if (item.tag === '1') {
this.$router.push('/my/account')
} else if (item.tag === '2') {
window.open(
'https://webapp-pub.ezijing.com/project_online_pc/sub_plus/%E7%B4%AB%E8%8D%86%E6%95%99%E8%82%B2-%E7%BA%BD%E7%BA%A6%E5%B7%9E%E7%AB%8B%E5%A4%A7%E5%AD%A6%E7%9F%B3%E6%BA%AA%E5%88%86%E6%A0%A1%E9%87%91%E8%9E%8D%E7%A1%95%E5%A3%AB1%2B1%E6%8B%9B%E7%94%9F%E7%AE%80%E7%AB%A0.pdf'
)
} else if (item.tag === '3') {
this.$router.push('/project-intro/introduce')
} else if (item.tag === '4') {
this.$router.push('/dataDownload/dataDownload')
} else if (item.tag === '5') {
this.$router.push('/question/question')
}
}
}
}
</script>
<style lang="scss" scoped>
.is-pc {
.banner-content {
position: relative;
width: 100%;
.img {
width: 100%;
height: 100%;
z-index: 1000;
}
.banner_navList {
position: absolute;
bottom: -59px;
left: 50%;
transform: translateX(-50%);
display: flex;
align-items: flex-end;
margin: 0;
padding: 0;
.banner_nav {
width: 239px;
height: 144px;
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
background-color: #be0927;
// border-right: 1px solid #e64b77;
padding-right: 0;
opacity: 0.71;
.nav_top {
width: 100%;
height: 87px;
display: flex;
justify-content: center;
align-items: center;
border-right: 0.5px solid rgba(255, 255, 255, 0.30196078431372547);
}
.banner_nav:last-child {
border: none;
}
.nav_tit {
width: 100%;
height: 57px;
font-size: 14px;
line-height: 57px;
text-align: center;
color: #fefffe;
padding-bottom: 15px;
border-right: 1px solid #be0927;
font-size: 20px;
}
&:hover {
height: 160px;
background-color: #aa1941;
border-right: 1px solid #be0927;
opacity: 0.78;
}
&:hover .nav_top {
border-right: none;
}
}
}
}
}
.is-h5 {
.banner-content {
position: relative;
width: 100%;
.img {
width: 100%;
height: 100%;
z-index: 1000;
}
.banner_navList {
padding: 0.43rem 0.33rem 0 0.35rem;
display: flex;
justify-content: space-around;
align-items: center;
.banner_nav {
text-align: center;
.nav_top {
.nav_img {
display: block;
width: 0.45rem;
// height: 100%;
margin-right: 0.2rem;
text-align: center;
}
}
.nav_tit {
// width: 100%;
// height: 0.24rem;
// line-height: 0.24rem;
width: 0.48rem;
margin-top: 0.08rem;
font-size: 0.12rem;
text-align: center;
color: #484848;
}
}
}
}
}
</style>
<template>
<div :class="isMobile ? 'is-h5' : 'is-pc'">
<div class="common-content-box">
<card :title="$t('home.problem.title')">
<template #header-aside
><nuxt-link to="/apply/problem">{{ $t('viewMore') }}</nuxt-link></template
>
<div class="content-mian">
<app-link to="/apply/problem">
<div class="list-box">
<ul>
<li v-for="(item, index) in problem.itemLeft" :key="index">
<div class="icon"></div>
<div class="text">{{ item }}</div>
</li>
</ul>
<ul>
<li v-for="(item, index) in problem.itemRight" :key="index">
<div class="icon"></div>
<div class="text">{{ item }}</div>
</li>
</ul>
</div>
</app-link>
<!-- <div class="msg-box">
<el-input type="textarea" placeholder="请输入内容" v-model="textarea"> </el-input>
<div class="btn">在线留言</div>
</div> -->
</div>
</card>
</div>
</div>
</template>
<script>
import Card from '@/components/Card'
import AppLink from '@/components/Link'
export default {
name: 'commonProblem',
components: {
Card,
AppLink
},
data() {
return {
problem: {
itemLeft: [
'本项目毕业生颁发的学位证书与在美国颁发的证书有何不同?',
'本项目上课形式是怎么样?',
'本项目学制多久?',
'能否顺利毕业拿到证书呢?',
'本项目是在职还是全职?'
],
itemRight: [
'如何申请紫荆-玛丽伍德工商管理硕士(MBA)学位项目?',
'大概流程是什么?',
'需要提交哪些材料?',
'玛丽伍德工商管理硕士(MBA)学位项目的学费是多少?',
'学费可以分期吗?'
]
},
textarea: ''
}
},
computed: {
isMobile() {
return this.$store.state.isMobile
}
}
}
</script>
<style lang="scss" scoped>
.is-pc {
.common-content-box {
width: 1200px;
margin: 0 auto;
padding-top: 77px;
.content-mian {
padding-top: 50px;
.msg-box {
padding-top: 40px;
box-sizing: border-box;
height: 56px;
display: flex;
align-items: center;
justify-content: space-between;
::v-deep {
.el-textarea__inner {
background: none;
resize: none;
}
}
.btn {
width: 136px;
height: 36px;
background: #aa1941;
opacity: 1;
border-radius: 4px;
font-size: 18px;
line-height: 36px;
text-align: center;
color: #ffffff;
margin-left: 57px;
cursor: pointer;
}
}
.list-box {
display: flex;
justify-content: space-between;
ul {
&:nth-child(2) {
margin-left: 8px;
}
li {
display: flex;
align-items: center;
width: 600px;
height: 25px;
margin-bottom: 10px;
cursor: pointer;
&:nth-child(even) {
.text {
background: none;
}
}
.icon {
width: 7px;
height: 7px;
background: #aa1941;
border-radius: 50%;
}
.text {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
font-size: 14px;
line-height: 25px;
color: #666666;
padding-left: 4px;
width: 570px;
background: rgba(153, 153, 153, 0.2);
margin-left: 15px;
}
}
}
}
}
}
}
.is-h5 {
.common-content-box {
.content-mian {
.msg-box {
padding-top: 0.2rem;
box-sizing: border-box;
::v-deep {
.el-textarea__inner {
background: none;
resize: none;
}
}
input {
height: 0.29rem;
border: 0.01rem solid rgba(153, 153, 153, 0.2);
margin-top: 0.05rem;
outline: none;
width: 100%;
background: none;
padding-left: 0.2rem;
box-sizing: border-box;
font-size: 0.1rem;
color: #999999;
}
.btn {
height: 0.24rem;
background: #aa1941;
font-size: 0.12rem;
text-align: center;
color: #ffffff;
margin-top: 0.1rem;
line-height: 0.24rem;
}
}
.list-box {
ul {
li {
display: flex;
align-items: center;
padding: 0.04rem 0 0.04rem 0;
&:nth-child(even) {
.text {
background: none;
}
}
.icon {
width: 0.04rem;
height: 0.04rem;
background: #aa1941;
border-radius: 50%;
}
.text {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
font-size: 0.12rem;
color: #666666;
padding-left: 0.02rem;
width: 100%;
background: rgba(153, 153, 153, 0.2);
margin-left: 0.07rem;
}
}
}
}
}
}
}
</style>
\ No newline at end of file
<template>
<div class="title-content">
<div class="left-title">
<div class="line"></div>
<div class="text">{{ data.name }}</div>
</div>
<div v-if="data.more" class="right-text" @click="$router.push({ path: data.more.path, query: data.more.query ? data.more.query : {} })">
{{ $t('viewMore') }}
</div>
</div>
</template>
<script>
export default {
name: 'mTitle',
props: {
data: {
type: Object
}
},
data() {
return {
}
},
methods: {
goPage(item) {
this.$router.push({
path: '/about/news-detail',
query: {
id: item.id
}
})
}
}
}
</script>
<style lang="scss" scoped>
.title-content{
display: flex;
height: 37px;
.left-title{
display: flex;
align-items: center;
.line{
width: 7px;
height: 37px;
background: #AA1941;
}
.text{
font-size: 32px;
font-weight: bold;
line-height: 34px;
color: #333;
margin-left: 20px;
}
}
.right-text{
margin-left: auto;
font-size: 16px;
color: #9B9B9B;
cursor: pointer;
}
}
</style>
\ No newline at end of file
<template>
<div :class="isMobile ? 'is-h5' : 'is-pc'">
<div class="news-content-box">
<card :title="$t('home.news.title')" v-if="!isMobile">
<template #header-aside
><nuxt-link to="/news/hot">{{ $t('viewMore') }}</nuxt-link></template
>
<div class="content-box" v-if="Object.keys(listData.first).length">
<div class="news-left">
<app-link :data="listData.first" :to="`/news/hot/${listData.first.id}`">
<img :src="listData.first.web_img_uri + '?x-oss-process=image/resize,m_fill,h_520,w_780'" />
<div class="mantle-box">
<div class="tit" v-if="!isMobile">{{ listData.first.title }}</div>
<div class="con-txt">{{ listData.first.abstract }}</div>
</div>
</app-link>
</div>
<ul class="news-right">
<li v-for="(item, index) in listData.list" :key="index">
<app-link :data="item" :to="`/news/hot/${item.id}`">
<div class="time">{{ formatDate(item.start_time) }}</div>
<div class="news-r-title">{{ item.title }}</div>
<div class="del">{{ item.abstract }}</div>
</app-link>
</li>
</ul>
</div>
</card>
<div :title="$t('home.news.title')" v-else>
<div class="banner">
<div class="tit">最新动态</div>
<div class="more">
<nuxt-link to="/news/hot">{{ $t('viewMore') }}</nuxt-link>
</div>
</div>
<div class="content-box" v-if="Object.keys(listData.first).length">
<div class="news-left">
<app-link :data="listData.first" :to="`/news/hot/${listData.first.id}`">
<img :src="listData.first.web_img_uri" />
<div class="mantle-box">
<div class="tit" v-if="!isMobile">{{ listData.first.title }}</div>
<div class="con-txt">{{ listData.first.abstract }}</div>
</div>
</app-link>
</div>
<ul class="news-right">
<li v-for="(item, index) in listData.list" :key="index">
<app-link :data="item" :to="`/news/hot/${item.id}`">
<div class="time">{{ formatDate(item.start_time) }}</div>
<div class="news-r-title">{{ item.title }}</div>
<div class="del">{{ item.abstract }}</div>
</app-link>
</li>
</ul>
</div>
</div>
</div>
</div>
</template>
<script>
import Card from '@/components/Card'
import AppLink from '@/components/Link'
export default {
name: 'news',
components: {
Card,
AppLink
},
async fetch() {
const params = { project_id: process.env.newProjectId, type_tag: 'article_news_hot', page: 1, limit: 4 }
await this.$axios.get('/api/cms/api/v1/articles', { params }).then(res => {
this.data = res.data.data || []
})
},
data() {
return {
data: [],
titleParams: {
name: '最新动态',
more: {
path: '/news/hot'
}
}
}
},
computed: {
listData() {
const [first = {}, ...list] = this.data
return { first, list: list || [] }
},
isMobile() {
return this.$store.state.isMobile
}
},
methods: {
formatDate(value) {
const date = new Date(value * 1000)
console.log(date.getMonth())
return date.getFullYear() + '/' + (date.getMonth() + 1) + '/' + date.getDate()
}
}
}
</script>
<style lang="scss" scoped>
.is-pc {
.news-content-box {
width: 1200px;
margin: 0 auto;
padding-top: 65px;
.content-box {
display: flex;
justify-content: space-between;
padding-top: 26px;
.news-left {
width: 780px;
height: 500px;
position: relative;
img {
width: 100%;
height: 100%;
display: block;
}
.mantle-box {
width: 100%;
position: absolute;
bottom: 0;
left: 0;
background: rgba(0, 0, 0, 0.2);
padding: 30px 37px;
.tit {
font-size: 24px;
font-weight: bold;
line-height: 100%;
color: #ffffff;
width: 696px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.con-txt {
width: 461px;
font-size: 14px;
line-height: 24px;
color: #ffffff;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
overflow: hidden;
margin-top: 10px;
}
}
}
.news-right {
li {
width: 366px;
border-bottom: 1px solid #e3e3e3;
padding-bottom: 19px;
margin-bottom: 30px;
cursor: pointer;
.time {
font-size: 16px;
font-weight: normal;
line-height: 100%;
color: #8e1e22;
}
.news-r-title {
font-size: 22px;
font-weight: bold;
line-height: 30px;
color: #333333;
margin-top: 15px;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
overflow: hidden;
}
.del {
width: 350px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
font-size: 14px;
line-height: 100%;
color: #999999;
margin-top: 15px;
}
}
}
}
}
}
.is-h5 {
.news-content-box {
padding: 0.2rem 0.3rem 0.2rem 0.3rem;
.banner {
display: flex;
justify-content: space-between;
}
.tit {
font-size: 0.14rem;
font-weight: bold;
line-height: 0.28rem;
color: #424242;
}
.more {
padding-top: 0.1rem;
}
.content-box {
// height: 2.18rem;
position: relative;
img {
width: 100%;
height: 100%;
display: block;
}
.news-left {
position: relative;
}
.mantle-box {
width: 100%;
position: absolute;
bottom: 0;
left: 0;
background: rgba(8, 8, 8, 0.45);
padding-bottom: 0.14rem;
.con-txt {
font-size: 0.12rem;
font-weight: bold;
line-height: 0.17rem;
color: #ffffff;
padding: 0.14rem 0.32rem 0 0.19rem;
overflow: hidden;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
}
}
}
.news-right {
li {
margin-top: 0.1rem;
padding: 0.13rem 0.14rem 0.11rem 0.12rem;
background: #fff;
.time {
font-size: 0.1rem;
line-height: 100%;
color: #ab0a3d;
}
.news-r-title {
font-size: 0.14rem;
color: #333333;
margin-top: 0.1rem;
line-height: 0.21rem;
overflow: hidden;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
}
.del {
font-size: 0.11rem;
line-height: 0.2rem;
color: #666666;
overflow: hidden;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
}
}
}
}
}
</style>
<template>
<div :class="isMobile ? 'is-h5' : 'is-pc'">
<template v-if="!isMobile">
<div class="alumni-content max-width">
<card :title="$t('home.course.title')">
<div class="swiper-content" @mouseenter="swiperStop" @mouseleave="swiperStart">
<div v-swiper:mySwiper="swiperOption" ref="mySwiper">
<div class="swiper-wrapper">
<div class="swiper-slide" v-for="(item, index) in listData" :key="index">
<app-link :data="item" :to="`/news/hot/${item.id}`">
<img :src="item.web_img_uri" />
<div class="text">{{ item.title }}</div>
</app-link>
</div>
</div>
</div>
</div>
</card>
</div>
</template>
<template v-else>
<card :title="$t('home.course.title')">
<van-swipe class="my-swipe" :loop="true" :autoplay="5000" :show-indicators="false">
<template v-for="(item, index) in listData">
<van-swipe-item :key="index">
<div class="case">
<app-link :data="item" :to="`/news/hot/${item.id}`">
<img :src="item.web_img_uri" class="case-pic" />
<p class="case-title">{{ item.title }}</p>
</app-link>
</div>
</van-swipe-item>
</template>
</van-swipe>
</card>
</template>
</div>
</template>
<script>
import Card from '@/components/Card'
import AppLink from '@/components/Link'
export default {
name: 'openClass',
components: {
Card,
AppLink
},
data() {
const _this = this
return {
isScale: false,
listData: [],
swiperOption: {
observer: true,
observeParents: true,
speed: 400,
autoplay: true,
delay: 3000,
loop: true,
slidesPerView: 3,
centeredSlides: true,
spaceBetween: 20,
on: {
init() {
_this.swiper.slideNext()
}
}
}
}
},
async fetch() {
const params = { project_id: process.env.newProjectId, type_tag: 'article_publish_class' }
this.listData = await this.$axios.get('/api/cms/api/v1/articles', { params }).then(res => res.data.data)
},
computed: {
swiper() {
return this.$refs.mySwiper.swiper
},
isMobile() {
return this.$store.state.isMobile
}
},
created() {},
mounted() {},
methods: {
swiperStop() {
this.swiper.autoplay.stop()
},
swiperStart() {
this.swiper.autoplay.start()
}
}
}
</script>
<style lang="scss" scoped>
.is-pc {
.max-width {
width: 1200px;
margin: 0 auto;
}
.alumni-content {
padding-top: 89px;
padding-bottom: 50px;
.title-content {
display: flex;
.left-title {
display: flex;
.line {
width: 6px;
height: 34px;
background: #aa1941;
}
.text {
font-size: 34px;
font-weight: bold;
line-height: 34px;
color: #424242;
margin-left: 9px;
}
}
}
.small-tit {
font-size: 24px;
font-weight: bold;
line-height: 34px;
color: #424242;
margin-top: 12px;
}
.swiper-content {
padding-top: 37px;
// width: 100%;
.swiper-slide {
position: relative;
width: 360px;
height: 230px;
margin-top: 10px;
.text {
position: absolute;
bottom: 0;
left: 0;
width: 100%;
height: 40px;
line-height: 40px;
background: rgba(0, 0, 0, 0.5);
padding: 0 20px;
box-sizing: border-box;
font-size: 20px;
color: #fefefe;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
img {
width: 100%;
height: 100%;
}
}
.swiper-slide-active {
width: 438px;
height: 246px;
margin-top: 0;
}
}
}
}
.is-h5 {
.case {
position: relative;
}
.case-pic {
display: block;
width: 100%;
// height: 1.17rem;
// object-fit: cover;
}
.case-title {
position: absolute;
left: 0;
right: 0;
bottom: 0;
height: 0.24rem;
padding: 0 0.1rem;
font-size: 0.1rem;
line-height: 0.24rem;
color: #fff;
background-color: rgba(0, 0, 0, 0.5);
}
}
</style>
<template>
<div :class="isMobile ? 'is-h5' : 'is-pc'">
<div class="presence-content-box">
<card :title="$t('home.presence.title')" class="card-style">
<template #header-aside>
<nuxt-link to="/alumni/sharing">{{ $t('viewMore') }}</nuxt-link>
</template>
</card>
<div class="content-mian">
<van-swipe class="my-swipe" :autoplay="5000" :vertical="true" indicator-color="white">
<template v-for="(item, index) in listData">
<van-swipe-item :key="index">
<app-link :data="item" :to="`/news/hot/${item.id}`">
<img :src="item.web_img_uri" />
</app-link>
</van-swipe-item>
</template>
</van-swipe>
<div class="form-box">
<div class="title-box">
<div class="bt" v-html="$t('home.presence.tips1')"></div>
<div class="tips">{{ $t('home.presence.tips2') }}</div>
</div>
<div class="form">
<div class="li">
<el-select v-model="form.years" :placeholder="$t('home.presence.yearsholder')">
<el-option v-for="item in yearsOptions" :key="item.value" :label="item.label" :value="item.value">
</el-option>
</el-select>
</div>
<div class="li">
<el-select v-model="form.degree" :placeholder="$t('home.presence.degreeholder')">
<el-option v-for="item in degreeOptions" :key="item.value" :label="item.label" :value="item.value">
</el-option>
</el-select>
</div>
<div class="li">
<el-input v-model="form.name" :placeholder="$t('home.presence.nameholder')"></el-input>
</div>
<div class="li">
<el-input v-model="form.phone" :placeholder="$t('home.presence.phoneholder')"></el-input>
</div>
<div class="btn" @click="submit">{{ $t('home.presence.formBtn') }}</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import Card from '@/components/Card'
import AppLink from '@/components/Link'
import { postNes } from '@/api'
export default {
name: 'presence',
components: {
Card,
AppLink
},
data() {
return {
yearsOptions: [
{
value: '0~2',
label: '0-2年'
},
{
value: '3~5',
label: '3-5年'
},
{
value: '5~10',
label: '5-10年'
},
{
value: '10+',
label: '10年及以上'
}
],
degreeOptions: [
{
value: '2',
label: '普通本科'
},
{
value: '3',
label: '本科/学士'
},
{
value: '5',
label: '硕士'
},
{
value: '7',
label: '博士'
}
],
form: {
years: '',
degree: '',
name: '',
phone: '',
project_id: process.env.projectId,
channel: 19960
},
value: '',
titleParams: {
name: this.$t('home.presence.title'),
more: {
path: '/alumni/sharing'
}
},
listData: []
}
},
async fetch() {
const params = { project_id: process.env.newProjectId, type_tag: 'kelley_alumni_share', limit: 1 }
this.listData = await this.$axios.get('/api/cms/api/v1/articles', { params }).then(res => res.data.data)
},
computed: {
swiper() {
return this.$refs.mySwiper.swiper
},
isMobile() {
return this.$store.state.isMobile
}
},
mounted() {},
methods: {
submit() {
const findNull = Object.values(this.form).findIndex(item => {
return item === ''
})
if (findNull !== -1) {
this.$message('请完善信息')
return
} else {
const MOBILE_REG = /^1(3[0-9]|4[01456879]|5[0-35-9]|6[2567]|7[0-8]|8[0-9]|9[0-35-9])\d{8}$/
if (!MOBILE_REG.test(this.form.phone)) {
this.$message('手机号格式错误')
return
}
}
postNes(this.form)
.then(res => {
if (res && res.status === 200) {
this.$message({
type: 'success',
message: '提交成功'
})
} else {
this.$message.error('提交失败')
}
})
.catch(() => {})
},
swiperStop() {
this.swiper.autoplay.stop()
},
swiperStart() {
this.swiper.autoplay.start()
}
}
}
</script>
<style lang="scss" scoped>
.is-pc {
.card-style {
width: 1200px;
margin: 0 auto;
}
.presence-content-box {
padding-top: 80px;
.m-title {
width: 1200px;
margin: 0 auto;
}
.content-mian {
padding-top: 24px;
.my-swipe {
// height: 500px;
img {
width: 100%;
height: 100%;
display: block;
}
}
.form-box {
width: 1200px;
height: 540px;
margin: 80px auto 0;
background: url(https://webapp-pub.ezijing.com/project/kelley/home-ssfc-bg.png);
background-size: 100% 100%;
display: flex;
justify-content: space-between;
.title-box {
width: 592px;
height: 223px;
background: rgba(170, 25, 65, 0.63);
box-shadow: 0px 0px 122px rgba(0, 0, 0, 0.07);
margin-top: 127px;
.bt {
font-size: 48px;
font-weight: bold;
line-height: 58px;
color: #ffffff;
text-align: center;
margin-top: 30px;
}
.tips {
font-size: 14px;
line-height: 100%;
color: #ffffff;
margin-top: 30px;
text-align: center;
}
}
.form {
width: 401px;
height: 382px;
background: #ffffff;
margin-top: 54px;
box-sizing: border-box;
padding: 63px 56px 56px 64px;
margin-right: 116px;
::v-deep {
.el-select {
width: 100%;
}
}
.li {
margin-bottom: 20px;
}
.btn {
font-size: 18px;
line-height: 32px;
color: #ffffff;
width: 281px;
background: #aa1941;
border-radius: 4px;
text-align: center;
cursor: pointer;
}
}
}
}
}
}
.is-h5 {
.card-width {
width: 100%;
margin: 0;
::v-deep {
.card-hd {
margin: 0.2rem 0.15rem;
}
}
}
.presence-content-box {
.my-swipe {
// height: 1.58rem;
img {
width: 100%;
height: 100%;
display: block;
}
}
.form-box {
background: url(https://webapp-pub.ezijing.com/project/kelley-h5/home-presen-bg-new1.png) center;
background-size: cover;
padding-top: 0.18rem;
box-sizing: border-box;
margin-top: 0.27rem;
padding-bottom: 0.05rem;
.title-box {
width: 3.75rem;
height: 1.2rem;
background: rgba(170, 25, 65, 0.63);
box-shadow: 0rem 0rem 1rem rgba(0, 0, 0, 0.07);
.bt {
text-align: center;
font-size: 0.26rem;
// font-weight: bold;
line-height: 0.31rem;
color: #ffffff;
text-align: center;
padding-top: 0.16rem;
}
.tips {
font-size: 0.1rem;
line-height: 0.12rem;
color: #ffffff;
text-align: center;
padding-top: 0.1rem;
}
}
.form {
width: 2.7rem;
background: #ffffff;
margin: 0.2rem auto;
padding: 0.25rem 0.2rem;
box-sizing: border-box;
.li {
margin-bottom: 0.2rem;
}
::v-deep {
.el-select {
width: 100%;
height: 100%;
}
}
.btn {
font-size: 0.12rem;
line-height: 0.26rem;
color: #ffffff;
background: #aa1941;
border-radius: 0.02rem;
text-align: center;
cursor: pointer;
}
}
}
}
}
</style>
差异被折叠。
<template>
<div :class="isMobile ? 'is-h5' : 'is-pc'">
<div class="service-content max-width-center">
<card title="项目简介" v-if="!isMobile">
<div class="desc">
<p>
紫荆教育—纽约州立大学石溪分校金融学硕士1+1项目是清控紫荆教育联合美国多所知名院校推出的国际硕士1+1项目之一。国际硕士1+1项目是针对在读本科生或往届生提供的研究生学历晋升通道。第一个“1”是指大三或大四的本科生在被美国大学硕士项目有条件录取后,第1年在国内就读(已工作人土可以边工作边就读)国内就读课程主要为英语强化课程及部分硕士学分课。由美国大学认可的国内大学或者有实力的教育机构实施录取和教学,一般用时12-15个月。第二个“1”是指在完成第一个“1”的要求之后,获得美国大学的无条件录取,本科毕业当年可直接衔接赴美留学(已工作的人士第二年也需赴美全日制学习),完成剩余学分,毕业后获得美方硕士学位,回国后可向中国(教育部)留学服务中心申请认证为硕士研究生学历。
</p>
<p>
国际硕士1+1项目基于美国大学对中国教育机构或大学的充分认证与授权,使得学生申请过程更加便捷。同其他赴美硕士留学项目相比,节省了国内备考与海外学习时间的同时也节约了可观的留学花费,已经成为越来越多优秀大学生的升硕选择。
</p>
</div>
</card>
<div v-else>
<div class="tit">项目简介</div>
<div class="desc">
<p>
紫荆教育—纽约州立大学石溪分校金融学硕士1+1项目是清控紫荆教育联合美国多所知名院校推出的国际硕士1+1项目之一国际硕士1+1项目是针对在读本科生或往届生提供的研究生学历晋升通道。第一个“1”是指大三或大四的本科生在被美国大学硕士项目有条件录取后,第1年在国内就读(已工作人土可以边工作边就读)国内就读课程主要为英语强化课程及部分硕士学分课。由美国大学认可的国内大学或者有实力的教育机构实施录取和教学,一般用时12-15个月。第二个“1”是指在完成第一个“1”的要求之后,获得美国大学的无条件录取,本科毕业当年可直接衔接赴美留学(已工作的人士第二年也需赴美全日制学习),完成剩余学分,毕业后获得美方硕士学位,回国后可向中国(教育部)留学服务中心申请认证为硕士研究生学历。
</p>
<p>
国际硕士1+1项目基于美国大学对中国教育机构或大学的充分认证与授权,使得学生申请过程更加便捷。同其他赴美硕士留学项目相比,节省了国内备考与海外学习时间的同时也节约了可观的留学花费,已经成为越来越多优秀大学生的升硕选择。
</p>
</div>
</div>
</div>
</div>
</template>
<script>
import Card from '@/components/Card'
import AppLink from '@/components/Link'
export default {
name: 'projectFeatures',
components: {
AppLink,
Card
},
data() {
return {
titleParams: {
name: this.$t('home.project.title')
}
// data: [
// {
// icon: 'https://webapp-pub.ezijing.com/project/marywood/img12.png',
// iconActive: 'https://webapp-pub.ezijing.com/project/marywood/img11.png',
// text: this.$store.state.isMobile ? this.$t('home.project.h5.itemT1') : this.$t('home.project.pc.itemT5')
// },
// {
// icon: 'https://webapp-pub.ezijing.com/project/marywood/img22.png',
// iconActive: 'https://webapp-pub.ezijing.com/project/marywood/img21.png',
// text: this.$store.state.isMobile ? this.$t('home.project.h5.itemT1') : this.$t('home.project.pc.itemT6')
// },
// {
// icon: 'https://webapp-pub.ezijing.com/project/marywood/img32.png',
// iconActive: 'https://webapp-pub.ezijing.com/project/marywood/img31.png',
// text: this.$store.state.isMobile ? this.$t('home.project.h5.itemT1') : this.$t('home.project.pc.itemT7')
// },
// {
// icon: 'https://webapp-pub.ezijing.com/project/marywood/img42.png',
// iconActive: 'https://webapp-pub.ezijing.com/project/marywood/img411.png',
// text: this.$store.state.isMobile ? this.$t('home.project.h5.itemT2') : this.$t('home.project.pc.itemT8')
// },
// {
// icon: 'https://webapp-pub.ezijing.com/project/marywood/img52.png',
// iconActive: 'https://webapp-pub.ezijing.com/project/marywood/img51.png',
// text: this.$store.state.isMobile ? this.$t('home.project.h5.itemT3') : this.$t('home.project.pc.itemT9')
// }
// ]
}
},
computed: {
isMobile() {
return this.$store.state.isMobile
}
},
methods: {
goPage(path) {
if (path === '') {
// this.$message('暂未开通,尽请期待。')
return
}
window.open(path)
}
},
mounted() {
console.log(this.isMobile)
},
computed: {
isMobile() {
return this.$store.state.isMobile
}
}
}
</script>
<style lang="scss" scoped>
.is-pc {
.max-width-center {
width: 1212px;
margin: 0 auto;
padding-top: 168px;
.desc {
text-align: justify;
// white-space: pre-line;
font-size: 20px;
line-height: 30px;
font-weight: 400;
color: #666666;
padding: 28px 30px 0 30px;
p {
// text-indent: 2em;
line-height: 36px;
}
}
}
}
.is-h5 {
.max-width-center {
// margin: 0.39rem auto;
padding: 0.2rem 0.3rem 0.2rem 0.3rem;
}
.tit {
font-size: 0.14rem;
font-weight: bold;
line-height: 0.28rem;
color: #424242;
}
.desc {
text-align: justify;
white-space: pre-line;
font-size: 0.12rem;
font-weight: 400;
line-height: 0.2rem;
color: #666666;
p {
text-indent: 2em;
}
}
}
</style>
<template>
<div>
<img class="info" v-if="isMobile" src="https://webapp-pub.ezijing.com/project/marywood/rzxx-mary.png" />
<div v-else class="info-content-box">
<div class="title">
<div class="line"></div>
<div class="name">认证信息</div>
<div class="line"></div>
</div>
<ul class="content-mian">
<li v-for="(item, index) in data" :key="index">
<div class="logo">
<img :src="item.img" class="img" />
</div>
<img :src="item.text" class="text" />
</li>
</ul>
</div>
</div>
</template>
<script>
export default {
name: 'schoolRanking',
data() {
return {
data: [
{
img: 'https://webapp-pub.ezijing.com/project/marywood/mary_info_i1.png',
text: 'https://webapp-pub.ezijing.com/project/marywood/mary_info_t1.png'
},
{
img: 'https://webapp-pub.ezijing.com/project/marywood/mary_info_i2.png',
text: 'https://webapp-pub.ezijing.com/project/marywood/mary_info_t2.png'
},
{
img: 'https://webapp-pub.ezijing.com/project/marywood/mary_info_i3.png',
text: 'https://webapp-pub.ezijing.com/project/marywood/mary_info_t3.png'
},
{
img: 'https://webapp-pub.ezijing.com/project/marywood/mary_info_i4.png',
text: 'https://webapp-pub.ezijing.com/project/marywood/mary_info_t4.png'
},
{
img: 'https://webapp-pub.ezijing.com/project/marywood/mary_info_i5.png',
text: 'https://webapp-pub.ezijing.com/project/marywood/mary_info_t5.png'
}
]
}
},
computed: {
isMobile() {
return this.$store.state.isMobile
}
}
}
</script>
<style lang="scss" scoped>
.info {
width: 100%;
display: block;
}
.info-content-box {
min-width: 1200px;
padding-bottom: 150px;
margin-top: 100px;
width: 100%;
background: rgb(163, 0, 22);
.title {
width: 996px;
display: flex;
margin: 0 auto;
justify-content: space-between;
align-items: center;
padding: 118px 0 119px;
.line {
width: 369px;
height: 1px;
background: #ffffff;
}
.name {
font-size: 36px;
font-weight: bold;
line-height: 100%;
color: #ffffff;
}
}
.content-mian {
width: 1014px;
margin: 0 auto;
display: flex;
li {
width: 190px;
height: 229px;
background: #fff;
border-radius: 20px;
margin-left: 16px;
&:nth-child(1) {
margin-left: 0;
}
&:nth-child(1) {
.img {
width: 81px;
height: 66px;
}
.text {
width: 148px;
height: 69px;
}
}
&:nth-child(2) {
.img {
width: 152px;
height: 61px;
}
.text {
width: 184px;
height: 69px;
}
}
&:nth-child(3) {
.img {
width: 79px;
height: 82px;
}
.text {
width: 172px;
height: 65px;
}
}
&:nth-child(4) {
.img {
width: 72px;
height: 91px;
}
.text {
width: 166px;
height: 69px;
}
}
&:nth-child(5) {
.img {
width: 84px;
height: 84px;
}
.text {
width: 134px;
height: 67px;
}
}
.logo {
height: 91px;
display: flex;
align-items: center;
justify-content: center;
padding-top: 22px;
margin-bottom: 27px;
.img {
display: block;
}
}
.text {
display: block;
margin: 0 auto;
}
}
}
}
</style>
<template>
<div :class="isMobile ? 'is-h5' : 'is-pc'">
<div class="main-content">
<div class="tit" v-if="isMobile">合作院校</div>
<img class="img1" src="https://webapp-pub.ezijing.com/project/marywood/marwood_senery11.png" />
<div class="title" v-if="!isMobile">
<div class="line1"></div>
<div class="name">合作院校</div>
<div class="line2"></div>
</div>
<img
class="part"
src="https://webapp-pub.ezijing.com/project/marywood/marwood_senery3.png"
@click="$router.push('/school/school3')"
/>
</div>
</div>
</template>
<script>
export default {
computed: {
isMobile() {
return this.$store.state.isMobile
}
}
}
</script>
<style lang="scss" scoped>
.is-pc {
.main-content {
margin-top: 65px;
position: relative;
width: 100%;
.img1 {
width: 100%;
height: 100%;
}
.title {
font-size: 36px;
font-weight: bold;
line-height: 65px;
color: #ffffff;
position: absolute;
top: 108px;
left: 50%;
transform: translateX(-50%);
display: flex;
justify-content: center;
.line1 {
width: 369px;
height: 1px;
border: 1px solid #ffffff;
}
.name {
width: 144px;
margin-top: -25px;
margin-left: 72px;
margin-right: 72px;
}
.line2 {
width: 369px;
height: 1px;
border: 1px solid #ffffff;
}
}
.part {
position: absolute;
bottom: 96px;
left: 50%;
transform: translateX(-50%);
}
}
}
.is-h5 {
.main-content {
position: relative;
padding: 0 0.3rem 0 0.3rem;
.tit {
font-size: 0.14rem;
font-weight: bold;
line-height: 0.28rem;
color: #424242;
}
.img1 {
width: 100%;
height: 100%;
margin-top: 0.01rem;
}
}
.part {
width: 1rem;
height: 0.6rem;
position: absolute;
top: 55%;
left: 50%;
transform: translateX(-50%);
}
}
</style>
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论