提交 9e2f8d3a authored 作者: 王鹏飞's avatar 王鹏飞

chore: update

上级 41b4d3b8
projectId=6800242743894343680 HOST='0.0.0.0'
PORT='2048'
baseURL=https://project-api.ezijing.com VITE_PROJECT_ID=6800242743894343680
VITE_API_BASE_URL=https://project-api.ezijing.com
loginURL=https://login.ezijing.com/auth VITE_LOGIN_URL=https://login.ezijing.com/auth
\ No newline at end of file \ No newline at end of file
# Created by .ignore support plugin (hsz.mobi) # Nuxt dev/build outputs
### Node template .output
# Logs
/logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# Runtime data
pids
*.pid
*.seed
*.pid.lock
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov
# Coverage directory used by tools like istanbul
coverage
# nyc test coverage
.nyc_output
# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
.grunt
# Bower dependency directory (https://bower.io/)
bower_components
# node-waf configuration
.lock-wscript
# Compiled binary addons (https://nodejs.org/api/addons.html)
build/Release
# Dependency directories
node_modules/
jspm_packages/
# TypeScript v1 declaration files
typings/
# Optional npm cache directory
.npm
# Optional eslint cache
.eslintcache
# Optional REPL history
.node_repl_history
# Output of 'npm pack'
*.tgz
# Yarn Integrity file
.yarn-integrity
# dotenv environment variables file
# .env
# parcel-bundler cache (https://parceljs.org/)
.cache
# next.js build output
.next
# nuxt.js build output
.nuxt .nuxt
.nitro
# Nuxt generate .cache
dist dist
# vuepress build output # Node dependencies
.vuepress/dist node_modules
# Serverless directories
.serverless
# IDE / Editor
.idea
# Service worker # Logs
sw.* logs
*.log
# macOS # Misc
.DS_Store .DS_Store
.fleet
.idea
# Vim swap files # Local env files
*.swp .env
.env.*
!.env.example
shamefully-hoist=true
strict-peer-dependencies=false
# new-node-ezijing # Nuxt 3 Minimal Starter
## Build Setup Look at the [Nuxt 3 documentation](https://nuxt.com/docs/getting-started/introduction) to learn more.
## Setup
Make sure to install the dependencies:
```bash
# npm
npm install
# pnpm
pnpm install
# yarn
yarn install
```
## Development Server
Start the development server on `http://localhost:3000`:
```bash ```bash
# install dependencies # npm
$ npm install npm run dev
# serve with hot reload at localhost:3000 # pnpm
$ npm run dev pnpm run dev
# build for production and launch server # yarn
$ npm run build yarn dev
$ npm run start ```
## Production
Build the application for production:
```bash
# npm
npm run build
# generate static project # pnpm
$ npm run generate pnpm run build
# yarn
yarn build
``` ```
For detailed explanation on how things work, check out [Nuxt.js docs](https://nuxtjs.org). Locally preview production build:
```bash
# npm
npm run preview
# pnpm
pnpm run preview
# yarn
yarn preview
```
Check out the [deployment documentation](https://nuxt.com/docs/getting-started/deployment) for more information.
import httpRequest from '@/utils/httpRequest' import httpRequest from '@/utils/httpRequest'
const projectId = process.env.projectId const projectId = import.meta.env.VITE_PROJECT_ID
/** /**
* 获取用户信息 * 获取用户信息
...@@ -63,54 +63,38 @@ export function getApplicationStatus() { ...@@ -63,54 +63,38 @@ export function getApplicationStatus() {
* 获取支付二维码 * 获取支付二维码
*/ */
export function getOrder(params) { export function getOrder(params) {
return httpRequest.get( return httpRequest.get(`/api/enrollment/v1.0/application-materials/payment-records/request/${projectId}/APPLICATION_FEE`, { params })
`/api/enrollment/v1.0/application-materials/payment-records/request/${projectId}/APPLICATION_FEE`,
{ params }
)
} }
/** /**
* 检查支付状态 * 检查支付状态
*/ */
export function checkPay(id, params) { export function checkPay(id, params) {
return httpRequest.get( return httpRequest.get(`/api/enrollment/v1.0/application-materials/payment-records/check-status/${projectId}/APPLICATION_FEE/${id}`, { params })
`/api/enrollment/v1.0/application-materials/payment-records/check-status/${projectId}/APPLICATION_FEE/${id}`,
{ params }
)
} }
/** /**
* 写推荐信 * 写推荐信
*/ */
export function addLetter(userId, letterId, data) { export function addLetter(userId, letterId, data) {
return httpRequest.post( return httpRequest.post(`/api/enrollment/v1.0/application-materials/reco-letters/submit/${projectId}/${userId}/${letterId}/put`, data, {
`/api/enrollment/v1.0/application-materials/reco-letters/submit/${projectId}/${userId}/${letterId}/put`, headers: { 'Content-Type': 'application/json' }
data, })
{
headers: { 'Content-Type': 'application/json' }
}
)
} }
/** /**
* 更换推荐人 * 更换推荐人
*/ */
export function updateProvider(letterId, data) { export function updateProvider(letterId, data) {
return httpRequest.post( return httpRequest.post(`/api/enrollment/v1.0/application-materials/reco-letters/change-provider/${projectId}/${letterId}/put`, data, {
`/api/enrollment/v1.0/application-materials/reco-letters/change-provider/${projectId}/${letterId}/put`, headers: { 'Content-Type': 'application/json' }
data, })
{
headers: { 'Content-Type': 'application/json' }
}
)
} }
/** /**
* 再次邀请 * 再次邀请
*/ */
export function sendToProvider(letterId) { export function sendToProvider(letterId) {
return httpRequest.get( return httpRequest.get(`/api/enrollment/v1.0/application-materials/reco-letters/send-invitation-to-provider/${projectId}/${letterId}`)
`/api/enrollment/v1.0/application-materials/reco-letters/send-invitation-to-provider/${projectId}/${letterId}`
)
} }
/** /**
* 退出登录 * 退出登录
...@@ -123,10 +107,7 @@ export function logout() { ...@@ -123,10 +107,7 @@ export function logout() {
* 更改附件状态 * 更改附件状态
*/ */
export function changeFileStatus(userId, recordId, status) { export function changeFileStatus(userId, recordId, status) {
return httpRequest.get( return httpRequest.get(`/api/enrollment/v1.0/application-materials/attachments/change-status/${projectId}/${userId}/${recordId}`, { params: { status } })
`/api/enrollment/v1.0/application-materials/attachments/change-status/${projectId}/${userId}/${recordId}`,
{ params: { status } }
)
} }
/** /**
......
<!DOCTYPE html>
<html {{ HTML_ATTRS }}>
<head>
<meta name="baidu-site-verification" content="code-DUTex50XOJ" />
{{ HEAD }}
</head>
<body {{ BODY_ATTRS }}>
{{ APP }}
<script>
var _hmt = _hmt || []
;(function() {
var hm = document.createElement('script')
hm.src = 'https://hm.baidu.com/hm.js?d07ebd7fc0b0319273df23497cf520d2'
var s = document.getElementsByTagName('script')[0]
s.parentNode.insertBefore(hm, s)
})()
</script>
</body>
</html>
import { Message } from 'element-ui' import { ElMessage } from 'element-plus'
export const roadMapList = [ export const roadMapList = [
{ {
project_name: '项目名称:', project_name: '项目名称:',
...@@ -41,7 +41,7 @@ export const roadMapList = [ ...@@ -41,7 +41,7 @@ export const roadMapList = [
tenant: '', tenant: '',
name: '国际大一(1+3)即将推出', name: '国际大一(1+3)即将推出',
onClick() { onClick() {
Message('即将推出') ElMessage('即将推出')
} }
} }
], ],
...@@ -166,7 +166,7 @@ export const homeMapList = [ ...@@ -166,7 +166,7 @@ export const homeMapList = [
name: '高管培训-数字创新管理', name: '高管培训-数字创新管理',
onClick() { onClick() {
Message('敬请期待') ElMessage('敬请期待')
} }
}, },
{ {
......
import fs from 'node:fs'
import path from 'node:path'
import axios from 'axios'
const __dirname = path.resolve()
const domain = 'ezijing.com'
const outputPath = './https'
// 生成文件夹
function genOutputDir() {
if (fs.existsSync(outputPath)) {
console.log('The path exists.')
} else {
fs.mkdir(outputPath, { recursive: true }, err => {
if (err) throw err
})
}
}
function downloadCertFile() {
genOutputDir()
axios.get(`https://ssl.godzyx.com/${domain}/${domain}.key?get=allow`, { responseType: 'stream' }).then(response => {
response.data.pipe(fs.createWriteStream(path.join(__dirname, `${outputPath}/${domain}.key`)))
})
axios.get(`https://ssl.godzyx.com/${domain}/${domain}.pem?get=allow`, { responseType: 'stream' }).then(response => {
response.data.pipe(fs.createWriteStream(path.join(__dirname, `${outputPath}/${domain}.pem`)))
})
}
downloadCertFile()
...@@ -29,7 +29,7 @@ export default { ...@@ -29,7 +29,7 @@ export default {
}, },
async fetch() { async fetch() {
const params = { const params = {
project_id: process.env.projectId, project_id: import.meta.env.VITE_PROJECT_ID,
type_tag: 'article_news_hot', type_tag: 'article_news_hot',
is_recommend: 1, is_recommend: 1,
page: 1, page: 1,
......
...@@ -35,8 +35,8 @@ ...@@ -35,8 +35,8 @@
</div> </div>
<div class="head-nav-content max-width-content"> <div class="head-nav-content max-width-content">
<ul :class="{ 'nav-item-box': true, isEn: isEn }" @mouseleave="navLeave"> <ul :class="{ 'nav-item-box': true, isEn: isEn }" @mouseleave="navLeave">
<template v-for="(item, index) in navData"> <template v-for="(item, index) in navData" :key="index">
<li :key="index"> <li>
<div :class="getNameActive(item)"> <div :class="getNameActive(item)">
<template v-if="!item.path"> <template v-if="!item.path">
<template v-if="item.click"> <template v-if="item.click">
...@@ -51,10 +51,9 @@ ...@@ -51,10 +51,9 @@
<div class="child-item" v-if="item.childern"> <div class="child-item" v-if="item.childern">
<div class="one-level"> <div class="one-level">
<template v-for="(level2Item, level2Index) in item.childern"> <template v-for="(level2Item, level2Index) in item.childern" :key="level2Index + 'level2'">
<div <div
:class="$route.path === level2Item.path || level2Item.isShow ? 'li active' : 'li'" :class="$route.path === level2Item.path || level2Item.isShow ? 'li active' : 'li'"
:key="level2Index + 'level2'"
@mouseenter="levelShow(level2Item)" @mouseenter="levelShow(level2Item)"
@mouseleave="levelShow(level2Item, 'out')"> @mouseleave="levelShow(level2Item, 'out')">
<div @click="goPage(level2Item.path, level2Item.pathType)" class="name" :class="isEn === true ? 'name1' : ''" v-html="level2Item.name"></div> <div @click="goPage(level2Item.path, level2Item.pathType)" class="name" :class="isEn === true ? 'name1' : ''" v-html="level2Item.name"></div>
...@@ -533,10 +532,10 @@ export default { ...@@ -533,10 +532,10 @@ export default {
return this.$store.state.user || {} return this.$store.state.user || {}
}, },
loginURL() { loginURL() {
return process.client ? `${process.env.loginURL}/login/index?redirect_uri=${encodeURIComponent(location.origin + this.$route.fullPath)}` : '' return process.client ? `${import.meta.env.VITE_LOGIN_URL}/login/index?redirect_uri=${encodeURIComponent(location.origin + this.$route.fullPath)}` : ''
}, },
registerURL() { registerURL() {
return process.client ? `${process.env.loginURL}/register?redirect_uri=${encodeURIComponent(location.origin + this.$route.fullPath)}` : '' return process.client ? `${import.meta.env.VITE_LOGIN_URL}/register?redirect_uri=${encodeURIComponent(location.origin + this.$route.fullPath)}` : ''
} }
} }
} }
......
...@@ -31,12 +31,10 @@ export default { ...@@ -31,12 +31,10 @@ export default {
props: { baseUrl: String, default: '/about/news', params: Object }, props: { baseUrl: String, default: '/about/news', params: Object },
components: { AppCard, AppLink }, components: { AppCard, AppLink },
async fetch() { async fetch() {
const params = this.params || { project_id: process.env.projectId, type_tag: 'article_news_hot', page: 1, limit: 4 } const params = this.params || { project_id: import.meta.env.VITE_PROJECT_ID, type_tag: 'article_news_hot', page: 1, limit: 4 }
await this.$axios await this.$axios.get('/api/cms/api/v1/articles', { params, headers: { 'Content-Type': 'application/json' } }).then(res => {
.get('/api/cms/api/v1/articles', { params, headers: { 'Content-Type': 'application/json' } }) this.data = res.data.data || []
.then(res => { })
this.data = res.data.data || []
})
}, },
data() { data() {
return { return {
......
...@@ -33,7 +33,7 @@ export default { ...@@ -33,7 +33,7 @@ export default {
}, },
async fetch() { async fetch() {
const params = { const params = {
project_id: process.env.projectId, project_id: import.meta.env.VITE_PROJECT_ID,
type_tag: 'article_alumni' type_tag: 'article_alumni'
} }
this.listData = await this.$axios.get('/api/cms/api/v1/articles', { params }).then(res => { this.listData = await this.$axios.get('/api/cms/api/v1/articles', { params }).then(res => {
......
...@@ -12,10 +12,8 @@ ...@@ -12,10 +12,8 @@
</template> </template>
</swiper-slide> </swiper-slide>
</swiper> </swiper>
<template v-if="!isMobile"> <div class="prev-button"></div>
<div class="prev-button"></div> <div class="next-button"></div>
<div class="next-button"></div>
</template>
</div> </div>
</template> </template>
<script> <script>
...@@ -39,13 +37,8 @@ export default { ...@@ -39,13 +37,8 @@ export default {
} }
}, },
async fetch() { async fetch() {
const params = { project_id: process.env.projectId, type_tag: 'ad_banner' } const params = { project_id: import.meta.env.VITE_PROJECT_ID, type_tag: 'ad_banner' }
this.listData = await this.$axios.get('/api/cms/api/v1/advertisements', { params }).then(res => res.data.data) this.listData = await this.$axios.get('/api/cms/api/v1/advertisements', { params }).then(res => res.data.data)
},
computed: {
isMobile() {
return this.$store.state.isMobile
}
} }
} }
</script> </script>
......
...@@ -60,7 +60,7 @@ export default { ...@@ -60,7 +60,7 @@ export default {
}, },
async fetch() { async fetch() {
const params = { const params = {
// project_id: process.env.projectId, // project_id: import.meta.env.VITE_PROJECT_ID,
project_id: '6800242743894343680', project_id: '6800242743894343680',
type_tag: 'img_text_school' type_tag: 'img_text_school'
} }
......
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
<div class="main_content"> <div class="main_content">
<div class="time"> <div class="time">
<div class="date">{{ formatDate(item.start_time) }}</div> <div class="date">{{ formatDate(item.start_time) }}</div>
<div class="year ">{{ formatYear(item.start_time) }}</div> <div class="year">{{ formatYear(item.start_time) }}</div>
</div> </div>
<div class="content_right"> <div class="content_right">
<div class="tit">{{ item.title }}</div> <div class="tit">{{ item.title }}</div>
...@@ -60,7 +60,7 @@ export default { ...@@ -60,7 +60,7 @@ export default {
}, },
async fetch() { async fetch() {
const params = { const params = {
project_id: process.env.projectId, project_id: import.meta.env.VITE_PROJECT_ID,
type_tag: 'article_publish_class', type_tag: 'article_publish_class',
page: 1, page: 1,
limit: 5 limit: 5
......
...@@ -9,25 +9,23 @@ ...@@ -9,25 +9,23 @@
<div class="news-content"> <div class="news-content">
<div class="left-content"> <div class="left-content">
<div class="list"> <div class="list">
<div v-swiper:mySwiper="swiperOption" ref="mySwiper" class="swiper-no-swiping"> <swiper v-bind="swiperOption" class="swiper-no-swiping">
<div class="swiper-wrapper"> <SwiperSlide class="swiper-slide" v-for="(item, index) in activityList" :key="index">
<div class="swiper-slide" v-for="(item, index) in activityList" :key="index"> <div class="li">
<div class="li"> <div class="time-block">
<div class="time-block"> <div class="m-time">{{ formatMD(item.abstract) }}</div>
<div class="m-time">{{ formatMD(item.abstract) }}</div> <div class="t-time">{{ formatYY(item.abstract) }}</div>
<div class="t-time">{{ formatYY(item.abstract) }}</div>
</div>
<div class="txt">{{ item.title }}</div>
</div> </div>
<div class="txt">{{ item.title }}</div>
</div> </div>
</div> </SwiperSlide>
</div> </swiper>
</div> </div>
</div> </div>
<div class="right-content"> <div class="right-content">
<ul> <ul>
<template v-for="(item, index) in listData"> <template v-for="(item, index) in listData" :key="index">
<app-link :key="index" :data="item" :to="`/about/news/${item.id}`"> <app-link :data="item" :to="`/about/news/${item.id}`">
<li> <li>
<div class="time-block"> <div class="time-block">
<div class="m-time"> <div class="m-time">
...@@ -74,7 +72,7 @@ export default { ...@@ -74,7 +72,7 @@ export default {
}, },
async fetch() { async fetch() {
const params = { const params = {
project_id: process.env.projectId, project_id: import.meta.env.VITE_PROJECT_ID,
type_tag: 'article_news', type_tag: 'article_news',
page: 1, page: 1,
limit: 3 limit: 3
...@@ -97,7 +95,7 @@ export default { ...@@ -97,7 +95,7 @@ export default {
}, },
getActivity() { getActivity() {
const params = { const params = {
project_id: process.env.projectId, project_id: import.meta.env.VITE_PROJECT_ID,
type_tag: 'www_activity' type_tag: 'www_activity'
} }
this.$axios.get('/api/cms/api/v1/articles', { params }).then(res => { this.$axios.get('/api/cms/api/v1/articles', { params }).then(res => {
...@@ -128,12 +126,10 @@ export default { ...@@ -128,12 +126,10 @@ export default {
} }
.list { .list {
overflow: hidden; overflow: hidden;
::v-deep { :deep(.swiper-container) {
.swiper-container { height: 100%;
height: 100%;
// transform: translateY(-2px);
}
} }
.swiper-slide-active { .swiper-slide-active {
.li { .li {
border-bottom: 1px solid #999999; border-bottom: 1px solid #999999;
......
...@@ -44,7 +44,7 @@ export default { ...@@ -44,7 +44,7 @@ export default {
}, },
async fetch() { async fetch() {
const params = { const params = {
project_id: process.env.projectId, project_id: import.meta.env.VITE_PROJECT_ID,
type_tag: 'service_case' type_tag: 'service_case'
} }
this.listData = await this.$axios.get('/api/cms/api/v1/articles', { params }).then(res => { this.listData = await this.$axios.get('/api/cms/api/v1/articles', { params }).then(res => {
......
...@@ -8,19 +8,13 @@ ...@@ -8,19 +8,13 @@
@mousemove="handleMouseEnter" @mousemove="handleMouseEnter"
@click="handleClick" @click="handleClick"
ref="target" ref="target"
:style="{ cursor: mouseCursor }" :style="{ cursor: mouseCursor }">
>
<div v-swiper:mySwiper="swiperOption" ref="mySwiper"> <div v-swiper:mySwiper="swiperOption" ref="mySwiper">
<div class="swiper-wrapper"> <div class="swiper-wrapper">
<div class="swiper-slide" v-for="(item, index) in list" :key="index"> <div class="swiper-slide" v-for="(item, index) in list" :key="index">
<div class="item-media"> <div class="item-media">
<img :src="item.poster" /> <img :src="item.poster" />
<div <div class="video-play" @click.stop="open(item)" @mouseenter.stop="handleVideoMouseEnter" @mousemove.stop="handleVideoMouseEnter"></div>
class="video-play"
@click.stop="open(item)"
@mouseenter.stop="handleVideoMouseEnter"
@mousemove.stop="handleVideoMouseEnter"
></div>
</div> </div>
<div class="item-text"> <div class="item-text">
<div class="item-text-tit">{{ item.title }}</div> <div class="item-text-tit">{{ item.title }}</div>
...@@ -37,12 +31,7 @@ ...@@ -37,12 +31,7 @@
<div class="swiper-slide" v-for="(item, index) in list" :key="index"> <div class="swiper-slide" v-for="(item, index) in list" :key="index">
<div class="item-media"> <div class="item-media">
<img :src="item.poster" /> <img :src="item.poster" />
<div <div class="video-play" @click.stop="open(item)" @mouseenter.stop="handleVideoMouseEnter" @mousemove.stop="handleVideoMouseEnter"></div>
class="video-play"
@click.stop="open(item)"
@mouseenter.stop="handleVideoMouseEnter"
@mousemove.stop="handleVideoMouseEnter"
></div>
</div> </div>
<div class="item-text"> <div class="item-text">
<div class="item-text-tit">{{ item.title }}</div> <div class="item-text-tit">{{ item.title }}</div>
...@@ -63,8 +52,7 @@ ...@@ -63,8 +52,7 @@
x5-playsinline="" x5-playsinline=""
playsinline playsinline
webkit-playsinline="true" webkit-playsinline="true"
ref="video" ref="video"></video>
></video>
<div class="overlay" v-if="isShow === true" @click="close"></div> <div class="overlay" v-if="isShow === true" @click="close"></div>
</div> </div>
</template> </template>
...@@ -120,8 +108,7 @@ export default { ...@@ -120,8 +108,7 @@ export default {
const target = this.$refs.target.getBoundingClientRect() const target = this.$refs.target.getBoundingClientRect()
if (e.clientX - target.left < (target.right - target.left) / 2) { if (e.clientX - target.left < (target.right - target.left) / 2) {
if (this.showIndex > 0) { if (this.showIndex > 0) {
this.mouseCursor = this.mouseCursor = 'url(https://www.harvard.edu/wp-content/themes/core/assets/img/theme/featured-stories/arrow-left-dark.svg) 30 30, e-resize'
'url(https://www.harvard.edu/wp-content/themes/core/assets/img/theme/featured-stories/arrow-left-dark.svg) 30 30, e-resize'
this.showType = 'left' this.showType = 'left'
} else { } else {
this.mouseCursor = 'default' this.mouseCursor = 'default'
...@@ -129,8 +116,7 @@ export default { ...@@ -129,8 +116,7 @@ export default {
} }
} else { } else {
if (this.showIndex < this.list.length - 1) { if (this.showIndex < this.list.length - 1) {
this.mouseCursor = this.mouseCursor = 'url(https://www.harvard.edu/wp-content/themes/core/assets/img/theme/featured-stories/arrow-right-dark.svg) 30 30, e-resize'
'url(https://www.harvard.edu/wp-content/themes/core/assets/img/theme/featured-stories/arrow-right-dark.svg) 30 30, e-resize'
this.showType = 'right' this.showType = 'right'
} else { } else {
this.mouseCursor = 'default' this.mouseCursor = 'default'
...@@ -482,501 +468,3 @@ export default { ...@@ -482,501 +468,3 @@ export default {
} }
} }
</style> </style>
<template>
<div class="video-wrapper" :class="className">
<div
v-if="!isMobile"
class="content"
@mouseenter="handleMouseEnter"
@mouseleave="showType = ''"
@mousemove="handleMouseEnter"
@click="handleClick"
ref="target"
:style="{ cursor: mouseCursor }"
>
<!-- <ul class="video-list">
<li class="video-item" v-for="(item, index) in list" :key="index">
<div class="video-poster">
<img :src="item.poster" />
<div class="video-play" @click="open(item)" @mouseenter.stop="handleVideoMouseEnter" @mousemove.stop="handleVideoMouseEnter" v-if="isMobile || index === 0"></div>
</div>
<div class="video-content">
<div class="video-title">{{ item.title }}</div>
<div class="video-desc">{{ item.desc }}</div>
</div>
</li>
</ul> -->
<div v-swiper:mySwiper="swiperOption" ref="mySwiper">
<div class="swiper-wrapper">
<div class="swiper-slide" v-for="(item, index) in list" :key="index">
<div class="item-media">
<img :src="item.poster" />
<div
class="video-play"
@click.stop="open(item)"
@mouseenter.stop="handleVideoMouseEnter"
@mousemove.stop="handleVideoMouseEnter"
></div>
</div>
<div class="item-text">
<div class="item-text-tit">{{ item.title }}</div>
<div class="item-text-desc">{{ item.desc }}</div>
</div>
</div>
</div>
<div class="swiper-pagination swiper-pagination-bullets"></div>
</div>
<!-- <div v-if="showType === 'left' && showIndex > 0" class="video-btn video-prev" @click="handlePrev"></div>
<div v-if="showType === 'right' && showIndex < list.length - 1" class="video-btn video-next" @click="handleNext"></div> -->
</div>
<div v-else>
<div v-swiper:mySwiper="swiperOption" ref="mySwiper">
<div class="swiper-wrapper">
<div class="swiper-slide" v-for="(item, index) in list" :key="index">
<div class="item-media">
<img :src="item.poster" />
<div
class="video-play"
@click.stop="open(item)"
@mouseenter.stop="handleVideoMouseEnter"
@mousemove.stop="handleVideoMouseEnter"
></div>
</div>
<div class="item-text">
<div class="item-text-tit">{{ item.title }}</div>
<div class="item-text-desc">{{ item.desc }}</div>
</div>
</div>
</div>
<div class="swiper-pagination swiper-pagination-bullets"></div>
</div>
</div>
<video
v-if="isShow === true"
class="video"
:src="playVideo.src"
controls="controls"
preload="auto"
autoplay="autoplay"
x5-playsinline=""
playsinline
webkit-playsinline="true"
ref="video"
></video>
<div class="overlay" v-if="isShow === true" @click="close"></div>
</div>
</template>
<script>
export default {
data() {
return {
isShow: false,
list: [
{
title: '玛丽伍德大学校长致词',
desc: 'Address from the President of Marywood University',
src: 'https://webapp-pub.ezijing.com/project/marywood-plus/video2.mp4',
poster: 'https://webapp-pub.ezijing.com/project/marywood-plus/video_poster1.png'
},
{
title: '玛丽伍德大学介绍',
desc: 'The Introduction of Marywood University',
src: 'https://webapp-pub.ezijing.com/project/marywood/marywood.mp4',
poster: 'https://webapp-pub.ezijing.com/project/marywood-plus/video_poster.png'
}
],
// 当前播放的视频
playVideo: {},
showType: '',
showIndex: 0,
mouseCursor: 'pointer',
swiperOption: {
speed: 400,
autoplay: false,
delay: 3000,
loop: false,
height: 500,
slidesPerView: 'auto',
centeredSlides: true
}
}
},
computed: {
isMobile() {
return this.$store.state.isMobile
},
className() {
return {
'is-h5': this.isMobile,
'is-pc': !this.isMobile
}
}
},
methods: {
handleMouseEnter(e) {
const target = this.$refs.target.getBoundingClientRect()
if (e.clientX - target.left < (target.right - target.left) / 2) {
if (this.showIndex > 0) {
this.mouseCursor =
'url(https://www.harvard.edu/wp-content/themes/core/assets/img/theme/featured-stories/arrow-left-dark.svg) 30 30, e-resize'
this.showType = 'left'
} else {
this.mouseCursor = 'default'
this.showType = ''
}
} else {
if (this.showIndex < this.list.length - 1) {
this.mouseCursor =
'url(https://www.harvard.edu/wp-content/themes/core/assets/img/theme/featured-stories/arrow-right-dark.svg) 30 30, e-resize'
this.showType = 'right'
} else {
this.mouseCursor = 'default'
this.showType = ''
}
}
},
handleVideoMouseEnter() {},
handleClick() {
console.log(this.showIndex)
if (this.showType === 'left') {
this.handlePrev()
} else if (this.showType === 'right') {
this.handleNext()
}
},
handlePrev() {
// 末尾的视频放到前面
// const deleteVideo = this.list.splice(this.list.length - 1, 1)
// this.list.unshift(deleteVideo[0])
this.showIndex--
if (this.showIndex <= 0) {
this.mouseCursor = 'default'
this.showType = ''
this.showIndex = 0
}
this.$refs.mySwiper.swiper.slideTo(this.showIndex)
},
handleNext() {
// 第一个视频放到最后
// const deleteVideo = this.list.splice(0, 1)
// this.list = this.list.concat(deleteVideo)
this.showIndex++
if (this.showIndex >= this.list.length - 1) {
this.mouseCursor = 'default'
this.showType = ''
this.showIndex = this.list.length - 1
}
this.$refs.mySwiper.swiper.slideTo(this.showIndex)
},
open(item) {
this.playVideo = item
this.isShow = true
this.$nextTick(() => {
this.$refs.video.play()
})
document.getElementsByTagName('body')[0].style.height = '100%'
document.getElementsByTagName('body')[0].style.overflow = 'hidden'
},
close() {
this.isShow = false
document.getElementsByTagName('body')[0].style.height = ''
document.getElementsByTagName('body')[0].style.overflow = ''
}
}
}
</script>
<style lang="scss" scoped>
.is-pc {
margin-top: 56px;
.video-wrapper {
background: url(https://webapp-pub.ezijing.com/project/marywood-plus/video_bg.png) no-repeat center center;
background-size: cover;
}
.content {
max-width: 1200px;
margin: 0 auto;
position: relative;
padding: 65px 0;
}
.video-list {
display: flex;
flex-wrap: nowrap;
height: 680px;
}
.video-item {
display: flex;
align-items: center;
position: relative;
}
.video-item + .video-item {
opacity: 0.4;
}
.video-poster {
position: relative;
width: 550px;
height: 550px;
&::after {
content: '';
position: absolute;
left: 0;
right: 0;
bottom: 0;
top: 0;
background: rgba(0, 0, 0, 0.3);
z-index: 1;
}
}
.video-play {
position: absolute;
top: 50%;
left: 50%;
width: 79px;
height: 79px;
background: url(https://webapp-pub.ezijing.com/project/marywood-plus/icon_play.png) no-repeat center center;
background-size: contain;
transform: translate(-50%, -50%);
cursor: pointer;
z-index: 2;
}
.video-content {
width: 490px;
padding: 20px;
box-sizing: border-box;
}
.video-title {
font-size: 40px;
font-weight: 400;
color: #ffffff;
}
.video-desc {
font-size: 20px;
font-weight: 400;
line-height: 28px;
color: #ffffff;
}
.video-btn {
position: absolute;
left: -40px;
top: 50%;
width: 79px;
height: 79px;
background: url(https://webapp-pub.ezijing.com/project/marywood-plus/icon_play-big-l.png) no-repeat center center;
background-size: contain;
transform: translateY(-50%);
cursor: pointer;
z-index: 10;
}
.video-next {
left: unset;
right: -40px;
background: url(https://webapp-pub.ezijing.com/project/marywood-plus/icon_next.png) no-repeat center center;
}
.overlay {
position: fixed;
left: 0;
top: 0;
right: 0;
bottom: 0;
z-index: 1999;
background: rgba(0, 0, 0, 0.5);
}
.video {
width: 80%;
position: fixed;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
z-index: 10000;
}
.swiper-container {
height: 550px;
// .swiper-wrapper{
// }
.swiper-slide {
width: 1080px !important;
position: relative;
display: flex;
align-items: center;
// margin-left:50px;
.item-media {
width: 550px;
height: 550px;
position: relative;
img {
width: 100%;
height: 100%;
}
.video-play {
position: absolute;
top: 50%;
left: 50%;
width: 79px;
height: 79px;
background: url(https://webapp-pub.ezijing.com/project/marywood-plus/icon_play.png) no-repeat center center;
background-size: contain;
transform: translate(-50%, -50%);
cursor: pointer;
z-index: 2200;
}
}
.item-text {
flex: 1;
color: #fff;
padding: 0 40px;
.item-text-tit {
font-size: 36px;
line-height: 60px;
}
.item-text-desc {
font-size: 20px;
}
}
&:after {
content: '';
display: block;
width: 100%;
height: 100%;
position: absolute;
top: 0;
left: 0;
// background: rgba(0, 0, 0, 0.6);
}
&.swiper-slide-active:after {
display: none;
}
}
}
}
.is-h5 {
.overlay {
position: fixed;
left: 0;
top: 0;
right: 0;
bottom: 0;
z-index: 1999;
background: rgba(0, 0, 0, 0.5);
}
.video-list {
display: flex;
padding: 0 0.3rem;
overflow-x: auto;
}
.video-item {
width: 3.25rem;
}
.video-item + .video-item {
margin-left: 0.1rem;
}
.video-poster {
position: relative;
width: 3.25rem;
height: 2.04rem;
img {
width: 100%;
height: 100%;
object-fit: cover;
}
&::after {
content: '';
position: absolute;
left: 0;
right: 0;
bottom: 0;
top: 0;
background: rgba(0, 0, 0, 0.3);
z-index: 1;
}
}
.video-play {
position: absolute;
top: 50%;
left: 50%;
width: 0.39rem;
height: 0.39rem;
background: url(https://webapp-pub.ezijing.com/project/marywood-plus/icon_play.png) no-repeat center center;
background-size: contain;
transform: translate(-50%, -50%);
cursor: pointer;
z-index: 2;
}
.video-content {
padding: 0.1rem 0;
}
.video-title {
text-align: center;
font-size: 0.12rem;
color: #484848;
}
.video-desc {
text-align: center;
font-size: 0.12rem;
color: #484848;
}
.video {
width: 100%;
position: fixed;
top: 50%;
transform: translateY(-50%);
z-index: 10000;
}
.swiper-container {
// height: 4.5rem;
// .swiper-wrapper{
// }
.swiper-slide {
width: 3.2rem;
position: relative;
padding: 0 0.1rem;
.item-media {
width: 3rem;
position: relative;
img {
width: 100%;
height: 3rem;
}
.video-play {
position: absolute;
top: 50%;
left: 50%;
width: 79px;
height: 79px;
background: url(https://webapp-pub.ezijing.com/project/marywood-plus/icon_play.png) no-repeat center center;
background-size: contain;
transform: translate(-50%, -50%);
cursor: pointer;
z-index: 2200;
}
&:after {
content: '';
display: block;
width: 100%;
height: 100%;
position: absolute;
top: 0;
left: 0;
background: rgba(0, 0, 0, 0.7);
}
}
.item-text {
flex: 1;
color: #454545;
padding: 0.1rem 0.2rem 0;
.item-text-tit {
font-size: 0.22rem;
line-height: 0.5rem;
}
.item-text-desc {
font-size: 0.16rem;
}
}
&.swiper-slide-active .item-media:after {
display: none;
}
}
}
}
</style>
<template> <template>
<div class="right_bar"> <div class="right_bar">
<ul class="tab_btns"> <ul class="tab_btns">
<li <li :class="{ enroll: true, active: tabBtnActive && tabBtnTarget === 'enroll' }" @mouseenter="handleMsOver('enroll')" @mouseleave="handleMsOut">
:class="{ enroll: true, active: tabBtnActive && tabBtnTarget === 'enroll' }"
@mouseenter="handleMsOver('enroll')"
@mouseleave="handleMsOut">
<p>{{ $t('aside.apply') }}</p> <p>{{ $t('aside.apply') }}</p>
</li> </li>
<li <li :class="{ wx: true, active: tabBtnActive && tabBtnTarget === 'wx' }" @mouseenter="handleMsOver('wx')" @mouseleave="handleMsOut">
:class="{ wx: true, active: tabBtnActive && tabBtnTarget === 'wx' }"
@mouseenter="handleMsOver('wx')"
@mouseleave="handleMsOut">
<p>{{ $t('aside.follow') }}</p> <p>{{ $t('aside.follow') }}</p>
</li> </li>
</ul> </ul>
<transition <transition name="custom-classes-transition" enter-active-class="animated tada" leave-active-class="animated bounceOutRight">
name="custom-classes-transition" <div id="show-enroll" v-show="tabBtnActive" class="tab_cont" @mouseenter="handleMsOver('')" @mouseleave="handleMsOut">
enter-active-class="animated tada"
leave-active-class="animated bounceOutRight">
<div
id="show-enroll"
v-show="tabBtnActive"
class="tab_cont"
@mouseenter="handleMsOver('')"
@mouseleave="handleMsOut">
<div class="enroll_cont" id="show-enroll-content" v-show="tabBtnTarget === 'enroll'"> <div class="enroll_cont" id="show-enroll-content" v-show="tabBtnTarget === 'enroll'">
<h5>{{ $t('aside.apply') }}</h5> <h5>{{ $t('aside.apply') }}</h5>
<div class="p"> <div class="p">
...@@ -41,9 +27,7 @@ ...@@ -41,9 +27,7 @@
<div class="p"> <div class="p">
<el-input v-model="sendCode" :placeholder="$t('aside.code')"> <el-input v-model="sendCode" :placeholder="$t('aside.code')">
<template #append> <template #append>
<el-button class="btn" :disabled="isBtnDisabled" id="checkedCode" @click="getSendCode">{{ <el-button class="btn" :disabled="isBtnDisabled" id="checkedCode" @click="getSendCode">{{ $t('aside.codeBtn') }}</el-button>
$t('aside.codeBtn')
}}</el-button>
</template> </template>
</el-input> </el-input>
</div> </div>
...@@ -322,12 +306,12 @@ export default { ...@@ -322,12 +306,12 @@ export default {
.p { .p {
margin-bottom: 15px; margin-bottom: 15px;
position: relative; position: relative;
::v-deep(.el-input__inner) { :deep(.el-input__inner) {
border: 1px solid #ccc; border: 1px solid #ccc;
line-height: 44px; line-height: 44px;
height: 44px; height: 44px;
} }
::v-deep(.el-select) { :deep(.el-select) {
width: 100%; width: 100%;
} }
select { select {
......
...@@ -3,20 +3,18 @@ ...@@ -3,20 +3,18 @@
<div class="content-mian"> <div class="content-mian">
<div class="enroll-box"> <div class="enroll-box">
<div class="left-content"> <div class="left-content">
<div class="tit">马上申请<br>加入未来管理者项目</div> <div class="tit">马上申请<br />加入未来管理者项目</div>
<div class="tips">温馨提示:仅本科及以上学历可报名</div> <div class="tips">温馨提示:仅本科及以上学历可报名</div>
</div> </div>
<div class="right-content"> <div class="right-content">
<div class="li"> <div class="li">
<el-select v-model="form.years" placeholder="请选择工作年限"> <el-select v-model="form.years" placeholder="请选择工作年限">
<el-option v-for="item in yearsOptions" :key="item.value" :label="item.label" :value="item.value"> <el-option v-for="item in yearsOptions" :key="item.value" :label="item.label" :value="item.value"> </el-option>
</el-option>
</el-select> </el-select>
</div> </div>
<div class="li"> <div class="li">
<el-select v-model="form.degree" placeholder="请选择学历/学位"> <el-select v-model="form.degree" placeholder="请选择学历/学位">
<el-option v-for="item in degreeOptions" :key="item.value" :label="item.label" :value="item.value"> <el-option v-for="item in degreeOptions" :key="item.value" :label="item.label" :value="item.value"> </el-option>
</el-option>
</el-select> </el-select>
</div> </div>
<div class="li"> <div class="li">
...@@ -84,14 +82,13 @@ export default { ...@@ -84,14 +82,13 @@ export default {
name: '', name: '',
phone: '', phone: '',
// channel: 19960, // channel: 19960,
project_id: process.env.projectId project_id: import.meta.env.VITE_PROJECT_ID
}, },
value: '' value: ''
} }
}, },
mounted() {}, mounted() {},
methods: { methods: {}
}
} }
</script> </script>
...@@ -136,10 +133,8 @@ export default { ...@@ -136,10 +133,8 @@ export default {
box-sizing: border-box; box-sizing: border-box;
padding: 30px 56px 56px 64px; padding: 30px 56px 56px 64px;
margin-right: 56px; margin-right: 56px;
::v-deep { :deep(.el-select) {
.el-select { width: 100%;
width: 100%;
}
} }
.li { .li {
margin-bottom: 20px; margin-bottom: 20px;
...@@ -154,13 +149,13 @@ export default { ...@@ -154,13 +149,13 @@ export default {
text-align: center; text-align: center;
cursor: pointer; cursor: pointer;
} }
.tips{ .tips {
color:#a9a9a9; color: #a9a9a9;
line-height:30px; line-height: 30px;
text-align:center; text-align: center;
} }
} }
} }
} }
} }
</style> </style>
\ No newline at end of file
import zhCN from '@/langs/zh-CN'
import enUS from '@/langs/en-US'
export default defineI18nConfig(() => ({
legacy: false,
locale: 'zh-CN',
warnHtmlMessage: false,
messages: { 'zh-CN': zhCN, 'en-US': enUS }
}))
<template> <template>
<div class="is-pc"> <div class="is-pc">
<Head class="heads" /> <Header />
<Nuxt /> <slot />
<Foot /> <Foot />
<RightAside /> <RightAside />
</div> </div>
...@@ -9,21 +9,6 @@ ...@@ -9,21 +9,6 @@
<script> <script>
export default { export default {
mounted() { mounted() {
pushHistory()
window.addEventListener(
'popstate',
function(e) {
window.location.reload()
},
false
)
function pushHistory() {
var state = {
title: 'title',
url: ''
}
window.history.pushState(state, 'title', '')
}
if (this.$route.query.channel_num) { if (this.$route.query.channel_num) {
localStorage.setItem('channel_num', this.$route.query.channel_num) localStorage.setItem('channel_num', this.$route.query.channel_num)
} }
...@@ -32,8 +17,7 @@ export default { ...@@ -32,8 +17,7 @@ export default {
</script> </script>
<style> <style>
html { html {
font-family: 'Source Sans Pro', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, font-family: 'Source Sans Pro', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
sans-serif;
font-size: 16px; font-size: 16px;
word-spacing: 1px; word-spacing: 1px;
-ms-text-size-adjust: 100%; -ms-text-size-adjust: 100%;
......
import path from 'path'
import fs from 'fs'
export default {
env: process.env,
server: { port: 2048, host: '0.0.0.0' },
...(process.env.NODE_ENV === 'development' && {
server: {
host: 'dev.ezijing.com',
https: {
key: fs.readFileSync(path.resolve(__dirname, 'dev.ezijing.com.key')),
cert: fs.readFileSync(path.resolve(__dirname, 'dev.ezijing.com.pem'))
}
}
}),
// Global page headers: https://go.nuxtjs.dev/config-head
head: {
title: '紫荆教育-在线学位,国际留学,数字经济产业学院',
htmlAttrs: {
lang: 'en'
},
meta: [
{ charset: 'utf-8' },
{ name: 'viewport', id: 'viewport', content: 'initial-scale=-1,maximum-scale=1,shrink-to-fit=no' },
{
hid: 'keywords',
name: 'keywords',
content:
'工商管理硕士,MBA硕士,免联考MBA,国际MBA,通用MBA,在职MBA,在线MBA,MBA,美国MBA,金融硕士,金融硕士,心理学硕士,应用心理学硕士,在职心理学硕士,国际金融硕士,在职金融硕士,在线心理学硕士,在职金融硕士,国际金融硕士,美国金融硕士,在职应用心理学硕士,金融硕士学位,美国心理学硕士,在职工商管理硕士,酒店管理硕士,在职酒店管理硕士,理财规划师,企业理财顾问师,投资理财顾问,金融理财师,理财培训,企业融资,国家理财规划师,财富管理,资产管理,个人财富管理,证券投资,信托投资,私人财富风险管理顾问'
},
{
hid: 'description',
name: 'description',
content:
'紫荆教育全称是清控紫荆(北京)教育科技股份有限公司,是2015年以清华大学五道口金融学院相关知识产权创设而成。提供国际在线学位教育、国际留学、数字经济产业学院整体解决方案等产品服务,为各行各业培养和输送高质量的国际化和产业化人才'
}
],
link: [
{
rel: 'icon',
type: 'image/x-icon',
href: 'https://zws-imgs-pub.ezijing.com/static/public/f56441ae1441902080226712d4d650aa.ico'
}
]
},
// Global CSS: https://go.nuxtjs.dev/config-css
css: ['assets/theme/index.css', 'assets/css/base.css'],
// Plugins to run before rendering page: https://go.nuxtjs.dev/config-plugins
plugins: [
'@/plugins/i18n',
'@/plugins/axios',
'@/plugins/element-ui',
{
// 引入一个插件,这里的 ssr 表示使用服务端渲染
src: 'plugins/vue-swiper.js'
}
],
// Auto import components: https://go.nuxtjs.dev/config-components
components: true,
// Modules for dev and build (recommended): https://go.nuxtjs.dev/config-modules
buildModules: [],
// Modules: https://go.nuxtjs.dev/config-modules
modules: ['cookie-universal-nuxt'],
// Build Configuration: https://go.nuxtjs.dev/config-build
build: {
transpile: [/^element-ui/]
},
router: {
middleware: ['device', 'i18n', 'route']
}
// proxy: {
// '/api': {
// target: 'https://project-api.ezijing.com/api',
// selfHandleResponse: false,
// secure: false,
// changeOrigin: true,
// followRedirects: true,
// logLevel: 'info',
// headers: {
// 'Referer': 'https://project-api.ezijing.com/api'
// },
// pathRewrite: {
// '^/api': '/'
// }
// }
// }
}
// https://nuxt.com/docs/api/configuration/nuxt-config
export default defineNuxtConfig({
devtools: { enabled: false },
devServer: {
port: 3000,
host: 'dev.ezijing.com',
https: { key: './https/ezijing.com.key', cert: './https/ezijing.com.pem' }
},
app: {
head: {
title: '紫荆教育-在线学位,国际留学,数字经济产业学院',
meta: [
{ charset: 'utf-8' },
{ name: 'viewport', id: 'viewport', content: 'initial-scale=-1,maximum-scale=1,shrink-to-fit=no' },
{
hid: 'keywords',
name: 'keywords',
content:
'工商管理硕士,MBA硕士,免联考MBA,国际MBA,通用MBA,在职MBA,在线MBA,MBA,美国MBA,金融硕士,金融硕士,心理学硕士,应用心理学硕士,在职心理学硕士,国际金融硕士,在职金融硕士,在线心理学硕士,在职金融硕士,国际金融硕士,美国金融硕士,在职应用心理学硕士,金融硕士学位,美国心理学硕士,在职工商管理硕士,酒店管理硕士,在职酒店管理硕士,理财规划师,企业理财顾问师,投资理财顾问,金融理财师,理财培训,企业融资,国家理财规划师,财富管理,资产管理,个人财富管理,证券投资,信托投资,私人财富风险管理顾问'
},
{
hid: 'description',
name: 'description',
content:
'紫荆教育全称是清控紫荆(北京)教育科技股份有限公司,是2015年以清华大学五道口金融学院相关知识产权创设而成。提供国际在线学位教育、国际留学、数字经济产业学院整体解决方案等产品服务,为各行各业培养和输送高质量的国际化和产业化人才'
}
],
link: [
{
rel: 'icon',
type: 'image/x-icon',
href: 'https://zws-imgs-pub.ezijing.com/static/public/f56441ae1441902080226712d4d650aa.ico'
}
]
}
},
modules: ['@nuxtjs/i18n', 'nuxt-swiper'],
i18n: { vueI18n: './i18n.config.ts' },
css: ['assets/theme/index.css', 'assets/css/base.css']
// router: {
// middleware: ['device', 'i18n', 'route']
// }
})
This source diff could not be displayed because it is too large. You can view the blob instead.
{ {
"name": "new-node-ezijing", "name": "nuxt-app",
"version": "1.0.0",
"private": true, "private": true,
"scripts": { "scripts": {
"dev": "nuxt --open --dotenv .env.dev", "build": "nuxi build",
"build": "nuxt build", "dev": "nuxi dev -o",
"build:test": "nuxt build --dotenv .env.test", "generate": "nuxi generate",
"start": "nuxt start", "preview": "nuxi preview",
"generate": "nuxt generate" "postinstall": "nuxi prepare",
}, "cert": "node ./cert.js"
"dependencies": {
"axios": "^0.21.4",
"cookie-universal-nuxt": "^2.2.2",
"core-js": "^3.9.1",
"element-ui": "^2.15.13",
"nuxt": "^2.17.1",
"qs": "^6.11.0",
"swiper": "^5.4.5",
"vue-awesome-swiper": "^4.1.1",
"vue-i18n": "^8.28.2"
}, },
"devDependencies": { "devDependencies": {
"sass": "^1.32.11", "@nuxt/devtools": "latest",
"sass-loader": "^10.1.1" "@nuxtjs/i18n": "^8.0.0-beta.13",
"@types/node": "^18.17.0",
"nuxt": "^3.6.5"
},
"dependencies": {
"axios": "^1.4.0",
"cookie-universal": "^2.2.2",
"element-plus": "^2.3.8",
"nuxt-swiper": "^1.2.0",
"qs": "^6.11.2",
"sass": "^1.64.1"
} }
} }
...@@ -229,12 +229,10 @@ export default { ...@@ -229,12 +229,10 @@ export default {
font-weight: 400; font-weight: 400;
line-height: 40px; line-height: 40px;
color: #333333; color: #333333;
::v-deep { :deep(span) {
span { color: rgba(170, 25, 65, 1);
color: rgba(170, 25, 65, 1); font-size: 28px;
font-size: 28px; font-weight: bold;
font-weight: bold;
}
} }
&.tab-con2 { &.tab-con2 {
&::after { &::after {
......
...@@ -25,7 +25,7 @@ export default { ...@@ -25,7 +25,7 @@ export default {
return { return {
remote: { remote: {
httpRequest: getArticleList, httpRequest: getArticleList,
params: { project_id: process.env.projectId, type_tag: 'article_publish_class' } params: { project_id: import.meta.env.VITE_PROJECT_ID, type_tag: 'article_publish_class' }
}, },
to(item) { to(item) {
return { name: 'about-lesson-id', params: { id: item.id } } return { name: 'about-lesson-id', params: { id: item.id } }
......
...@@ -25,7 +25,7 @@ export default { ...@@ -25,7 +25,7 @@ export default {
return { return {
remote: { remote: {
httpRequest: getArticleList, httpRequest: getArticleList,
params: { project_id: process.env.projectId, type_tag: 'img_text_school' } params: { project_id: import.meta.env.VITE_PROJECT_ID, type_tag: 'img_text_school' }
}, },
to(item) { to(item) {
return { name: 'about-message-id', params: { id: item.id } } return { name: 'about-message-id', params: { id: item.id } }
......
...@@ -25,7 +25,7 @@ export default { ...@@ -25,7 +25,7 @@ export default {
return { return {
remote: { remote: {
httpRequest: getArticleList, httpRequest: getArticleList,
params: { project_id: process.env.projectId, type_tag: 'article_news' } params: { project_id: import.meta.env.VITE_PROJECT_ID, type_tag: 'article_news' }
}, },
to(item) { to(item) {
return { name: 'about-news-id', params: { id: item.id } } return { name: 'about-news-id', params: { id: item.id } }
......
...@@ -20,7 +20,7 @@ export default { ...@@ -20,7 +20,7 @@ export default {
remote: { remote: {
httpRequest: getArticleList, httpRequest: getArticleList,
params: { params: {
project_id: process.env.projectId, project_id: import.meta.env.VITE_PROJECT_ID,
type_tag: 'article_alumni' type_tag: 'article_alumni'
} }
}, },
......
...@@ -28,7 +28,7 @@ export default { ...@@ -28,7 +28,7 @@ export default {
return { return {
remote: { remote: {
httpRequest: getArticleList, httpRequest: getArticleList,
params: { project_id: process.env.projectId, type_tag: 'service_case' } params: { project_id: import.meta.env.VITE_PROJECT_ID, type_tag: 'service_case' }
}, },
to(item) { to(item) {
return { name: 'services-college-case-id', params: { id: item.id } } return { name: 'services-college-case-id', params: { id: item.id } }
......
...@@ -20,8 +20,7 @@ ...@@ -20,8 +20,7 @@
$cookies.get('lang') == 'en-US' $cookies.get('lang') == 'en-US'
? 'https://webapp-pub.ezijing.com/www/pc/services/professional/1_en.png' ? 'https://webapp-pub.ezijing.com/www/pc/services/professional/1_en.png'
: 'https://webapp-pub.ezijing.com/www/pc/services/professional/1.png' : 'https://webapp-pub.ezijing.com/www/pc/services/professional/1.png'
" " />
/>
</div> </div>
</section> </section>
<section class="section section-3"> <section class="section section-3">
...@@ -63,8 +62,7 @@ ...@@ -63,8 +62,7 @@
$cookies.get('lang') == 'en-US' $cookies.get('lang') == 'en-US'
? 'https://webapp-pub.ezijing.com/www/pc/services/professional/tab_1_1_en.png' ? 'https://webapp-pub.ezijing.com/www/pc/services/professional/tab_1_1_en.png'
: 'https://webapp-pub.ezijing.com/www/pc/services/professional/tab_1_1.png' : 'https://webapp-pub.ezijing.com/www/pc/services/professional/tab_1_1.png'
" " />
/>
</div> </div>
</div> </div>
<!-- </el-tab-pane> --> <!-- </el-tab-pane> -->
...@@ -72,10 +70,7 @@ ...@@ -72,10 +70,7 @@
<el-tab-pane> <el-tab-pane>
<template #label> <template #label>
<img src="https://webapp-pub.ezijing.com/www/pc/services/professional/icon_2.png" class="icon" /> <img src="https://webapp-pub.ezijing.com/www/pc/services/professional/icon_2.png" class="icon" />
<img <img src="https://webapp-pub.ezijing.com/www/pc/services/professional/icon_2_hover.png" class="active-icon" />
src="https://webapp-pub.ezijing.com/www/pc/services/professional/icon_2_hover.png"
class="active-icon"
/>
<p>{{ $t('degital.base_profession.tit1') }}</p> <p>{{ $t('degital.base_profession.tit1') }}</p>
</template> </template>
<div class="topic"> <div class="topic">
...@@ -97,8 +92,7 @@ ...@@ -97,8 +92,7 @@
$cookies.get('lang') == 'en-US' $cookies.get('lang') == 'en-US'
? 'https://webapp-pub.ezijing.com/www/pc/services/professional/base/tab_1_1_en.png' ? 'https://webapp-pub.ezijing.com/www/pc/services/professional/base/tab_1_1_en.png'
: 'https://webapp-pub.ezijing.com/www/pc/services/professional/base/tab_1_1.png' : 'https://webapp-pub.ezijing.com/www/pc/services/professional/base/tab_1_1.png'
" " />
/>
</div> </div>
</div> </div>
<div class="tab-section"> <div class="tab-section">
...@@ -112,8 +106,7 @@ ...@@ -112,8 +106,7 @@
$cookies.get('lang') == 'en-US' $cookies.get('lang') == 'en-US'
? 'https://webapp-pub.ezijing.com/www/pc/services/professional/base/tab_2_1_en.png' ? 'https://webapp-pub.ezijing.com/www/pc/services/professional/base/tab_2_1_en.png'
: 'https://webapp-pub.ezijing.com/www/pc/services/professional/base/tab_2_1.png' : 'https://webapp-pub.ezijing.com/www/pc/services/professional/base/tab_2_1.png'
" " />
/>
</div> </div>
</div> </div>
<div class="tab-section"> <div class="tab-section">
...@@ -122,10 +115,7 @@ ...@@ -122,10 +115,7 @@
</h3> </h3>
<div class="topic"> <div class="topic">
<img <img src="https://webapp-pub.ezijing.com/www/pc/services/professional/base/tab_3_1.png" class="topic-bg" />
src="https://webapp-pub.ezijing.com/www/pc/services/professional/base/tab_3_1.png"
class="topic-bg"
/>
<div class="topic-cover"> <div class="topic-cover">
<div class="cover_tit"> <div class="cover_tit">
{{ $t('degital.base_profession.tit1_d4_tit1') }} {{ $t('degital.base_profession.tit1_d4_tit1') }}
...@@ -143,10 +133,7 @@ ...@@ -143,10 +133,7 @@
<el-tab-pane> <el-tab-pane>
<template #label> <template #label>
<img src="https://webapp-pub.ezijing.com/www/pc/services/professional/icon_3.png" class="icon" /> <img src="https://webapp-pub.ezijing.com/www/pc/services/professional/icon_3.png" class="icon" />
<img <img src="https://webapp-pub.ezijing.com/www/pc/services/professional/icon_3_hover.png" class="active-icon" />
src="https://webapp-pub.ezijing.com/www/pc/services/professional/icon_3_hover.png"
class="active-icon"
/>
<p>{{ $t('degital.apply.tit1') }}</p> <p>{{ $t('degital.apply.tit1') }}</p>
</template> </template>
...@@ -159,8 +146,7 @@ ...@@ -159,8 +146,7 @@
? 'https://webapp-pub.oss-cn-beijing.aliyuncs.com/www/pc/services/professional/img3_1_1_en.png' ? 'https://webapp-pub.oss-cn-beijing.aliyuncs.com/www/pc/services/professional/img3_1_1_en.png'
: 'https://webapp-pub.oss-cn-beijing.aliyuncs.com/www/pc/services/professional/img3_1_1.png' : 'https://webapp-pub.oss-cn-beijing.aliyuncs.com/www/pc/services/professional/img3_1_1.png'
" "
alt="" alt="" />
/>
<p> <p>
{{ $t('degital.apply.tit1_d1') }} {{ $t('degital.apply.tit1_d1') }}
</p> </p>
...@@ -357,7 +343,7 @@ export default { ...@@ -357,7 +343,7 @@ export default {
margin-top: 92px; margin-top: 92px;
} }
} }
::v-deep .my-tabs { :deep(.my-tabs) {
.el-tabs__active-bar, .el-tabs__active-bar,
.el-tabs__nav-wrap::after { .el-tabs__nav-wrap::after {
display: none; display: none;
...@@ -406,7 +392,7 @@ export default { ...@@ -406,7 +392,7 @@ export default {
} }
} }
} }
::v-deep .my-tabs2 { :deep(.my-tabs2) {
.el-tabs__active-bar, .el-tabs__active-bar,
.el-tabs__nav-wrap::after { .el-tabs__nav-wrap::after {
display: none; display: none;
......
# PLUGINS
**This directory is not required, you can delete it if you don't want to use it.**
This directory contains Javascript plugins that you want to run before mounting the root Vue.js application.
More information about the usage of this directory in [the documentation](https://nuxtjs.org/guide/plugins).
import httpRequest from '@/utils/httpRequest' import httpRequest from '@/utils/httpRequest'
export default function({ redirect }, inject) { export default defineNuxtPlugin(() => {
inject('axios', httpRequest) return { provide: { axios: httpRequest } }
} })
import Cookie from 'cookie-universal'
export default defineNuxtPlugin(() => {
return { provide: { cookies: Cookie() } }
})
import Vue from 'vue'
import Element from 'element-ui'
import locale from 'element-ui/lib/locale/lang/en'
Vue.use(Element, { locale })
import ElementPlus from 'element-plus'
export default defineNuxtPlugin(nuxtApp => {
nuxtApp.vueApp.use(ElementPlus)
})
import Vue from 'vue'
import VueI18n from 'vue-i18n'
import zhCN from '@/langs/zh-CN'
import enUS from '@/langs/en-US'
Vue.use(VueI18n)
export default ({ app, store }) => {
app.i18n = new VueI18n({
locale: store.state.locale,
fallbackLocale: 'zh-CN',
messages: { 'zh-CN': zhCN, 'en-US': enUS }
})
}
export default defineNuxtPlugin(() => {
return {
provide: {
store: { state: {}, dispatch() {} }
}
}
})
import Vue from 'vue'
import VueAwesomeSwiper from 'vue-awesome-swiper'
import 'swiper/swiper.scss'
Vue.use(VueAwesomeSwiper)
\ No newline at end of file
{
"extends": "../.nuxt/tsconfig.server.json"
}
# STATIC
**This directory is not required, you can delete it if you don't want to use it.**
This directory contains your static files.
Each file inside this directory is mapped to `/`.
Thus you'd want to delete this README.md before deploying to production.
Example: `/static/robots.txt` is mapped as `/robots.txt`.
More information about the usage of this directory in [the documentation](https://nuxtjs.org/guide/assets#static).
{
// https://nuxt.com/docs/guide/concepts/typescript
"extends": "./.nuxt/tsconfig.json"
}
import axios from 'axios' import axios from 'axios'
import qs from 'qs' import qs from 'qs'
import { Message } from 'element-ui' import { ElMessage } from 'element-plus'
const httpRequest = axios.create({ const httpRequest = axios.create({
baseURL: process.env.baseURL, baseURL: import.meta.env.VITE_API_BASE_URL,
timeout: 60000, timeout: 60000,
withCredentials: true, withCredentials: true,
headers: { headers: {
'Content-Type': 'application/x-www-form-urlencoded' 'Content-Type': 'application/x-www-form-urlencoded'
} }
}) })
// 请求拦截 // 请求拦截
httpRequest.interceptors.request.use( httpRequest.interceptors.request.use(
function(config) { function (config) {
if (config.url.includes('/api/cms')) { if (config.url.includes('/api/cms')) {
const defaultParams = { const defaultParams = {
timestamp: parseInt(Date.now() / 1000), timestamp: parseInt(Date.now() / 1000),
nonce: Math.random() nonce: Math.random().toString(36).slice(-8)
.toString(36)
.slice(-8)
} }
// 接口请求参数 // 接口请求参数
let params = config.params || config.data let params = config.params || config.data
...@@ -51,35 +50,35 @@ httpRequest.interceptors.request.use( ...@@ -51,35 +50,35 @@ httpRequest.interceptors.request.use(
} }
return config return config
}, },
function(error) { function (error) {
return Promise.reject(error) return Promise.reject(error)
} }
) )
// 响应拦截 // 响应拦截
httpRequest.interceptors.response.use( httpRequest.interceptors.response.use(
function(response) { function (response) {
const { data } = response const { data } = response
// zws // zws
if (parseInt(data.code)) { if (parseInt(data.code)) {
return Promise.reject(data) return Promise.reject(data)
} }
if (parseInt(data.error) && data.message === '需要登录才能调用接口') { if (parseInt(data.error) && data.message === '需要登录才能调用接口') {
location.href = `${process.env.loginURL}/login/index?redirect_uri=${encodeURIComponent(location.href)}` location.href = `${import.meta.env.VITE_LOGIN_URL}/login/index?redirect_uri=${encodeURIComponent(location.href)}`
return Promise.reject(data) return Promise.reject(data)
} }
// enrollment // enrollment
if (parseInt(data.error)) { if (parseInt(data.error)) {
Message.error(data.message) ElMessage.error(data.message)
return Promise.reject(data) return Promise.reject(data)
} }
return data return data
}, },
function(error) { function (error) {
if (error.response) { if (error.response) {
const { message } = error.response.data const { message } = error.response.data
Message.error(message || error.response.data) ElMessage.error(message || error.response.data)
return Promise.reject(error.response) return Promise.reject(error.response)
} else { } else {
console.log(error) console.log(error)
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论