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

chore: update

上级 2590def1
......@@ -5,56 +5,63 @@ export function getAdvertisementList(params) {
return httpRequest.get('/api/cms/api/v1/advertisements', { params })
}
// 获取新闻列表
export function getNewsList(params) {
return httpRequest.get(`/api/zws/v1/cms/news`, { params })
/**
* 获取文章列表
*/
export function getArticleList(params) {
return httpRequest.get('/api/cms/api/v1/articles', { params })
}
/**
* 获取图文列表
*/
export function getImgTextList(params) {
return httpRequest.get('/api/cms/api/v1/img-text', { params })
}
// 获取新闻详情
export function getNewsDetails(params) {
return httpRequest.get(`/api/zws/v1/cms/new`, { params })
// 提交留咨信息
export function submitApplicationForm(data) {
return httpRequest.post('/api/enrollment/v1.0/applications', data)
}
/**
* 发送验证码
* 获取用户信息
*/
export function sendCode(data) {
return httpRequest.post('/api/usercenter/user/send-code', data, {
headers: { 'Content-Type': 'multipart/form-data' },
})
export function getUser(params = { learning_info: 1 }) {
return httpRequest.get('/api/usercenter/v2/frontend/user/get-user-info', { params })
}
/**
* 检验验证码
* 修改用户信息
*/
export function checkCode(params) {
return httpRequest.get('/api/usercenter/user/check-code', { params })
export function updateUser(data) {
return httpRequest.post('/api/usercenter/user/update-user', data)
}
/**
* 提交留咨信息
* 修改密码
*/
export function postNes(data) {
return httpRequest.post('/api/enrollment/v1.0/applications', data, {
headers: { 'Content-Type': 'multipart/form-data' },
})
export function updatePassword(data) {
return httpRequest.post('/api/usercenter/user/update-pwd', data)
}
/**
* 获取文章列表
* 发送验证码
*/
export function getArticleList(params) {
return httpRequest.get('/api/cms/api/v1/articles', { params })
export function sendCode(data) {
return httpRequest.post('/api/usercenter/user/send-code', data)
}
/**
* 获取图文列表
* 检验验证码
*/
export function getImgTextList(params) {
return httpRequest.get('/api/cms/api/v1/img-text', { params })
export function checkCode(params) {
return httpRequest.get('/api/usercenter/user/check-code', { params })
}
// 提交留咨信息
export function submitApplicationForm(data) {
return httpRequest.post('/api/enrollment/v1.0/applications', data)
/**
* 退出登录
*/
export function logout() {
return httpRequest.get('/api/passport/rest/logout')
}
import httpRequest from '@/utils/httpRequest'
// 使用 composable 获取 projectId
const getProjectId = () => {
const config = useRuntimeConfig()
return config.public.projectId
}
/**
* 获取用户信息
*/
export function getUser(params = { learning_info: 1 }) {
return httpRequest.get('/api/usercenter/v2/frontend/user/get-user-info', { params })
}
/**
* 修改用户信息
*/
export function updateUser(data) {
return httpRequest.post('/api/usercenter/user/update-user', data)
}
/**
* 修改密码
*/
export function updatePassword(data) {
return httpRequest.post('/api/usercenter/user/update-pwd', data)
}
/**
* 发送验证码
*/
export function sendCode(data) {
return httpRequest.post('/api/usercenter/user/send-code', data)
}
/**
* 检验验证码
*/
export function checkCode(params) {
return httpRequest.get('/api/usercenter/user/check-code', { params })
}
/**
* 获取报名信息
*/
export function getApplication(params) {
const projectId = getProjectId()
return httpRequest.get(`/api/enrollment/v1.0/application-materials/${projectId}`, { params })
}
/**
* 获取报名信息
*/
export function updateApplication(data) {
const projectId = getProjectId()
return httpRequest.post(`/api/enrollment/v1.0/application-materials/${projectId}/put`, data, {
headers: { 'Content-Type': 'application/json' },
})
}
/**
* 获取报名审核状态
*/
export function getApplicationStatus() {
const projectId = getProjectId()
return httpRequest.get(`/api/enrollment/v1.0/application-materials/profile/${projectId}`)
}
/**
* 获取支付二维码
*/
export function getOrder(params) {
const projectId = getProjectId()
return httpRequest.get(
`/api/enrollment/v1.0/application-materials/payment-records/request/${projectId}/APPLICATION_FEE`,
{ params }
)
}
/**
* 检查支付状态
*/
export function checkPay(id, params) {
const projectId = getProjectId()
return httpRequest.get(
`/api/enrollment/v1.0/application-materials/payment-records/check-status/${projectId}/APPLICATION_FEE/${id}`,
{ params }
)
}
/**
* 写推荐信
*/
export function addLetter(userId, letterId, data) {
const projectId = getProjectId()
return httpRequest.post(
`/api/enrollment/v1.0/application-materials/reco-letters/submit/${projectId}/${userId}/${letterId}/put`,
data,
{
headers: { 'Content-Type': 'application/json' },
}
)
}
/**
* 更换推荐人
*/
export function updateProvider(letterId, data) {
const projectId = getProjectId()
return httpRequest.post(
`/api/enrollment/v1.0/application-materials/reco-letters/change-provider/${projectId}/${letterId}/put`,
data,
{
headers: { 'Content-Type': 'application/json' },
}
)
}
/**
* 再次邀请
*/
export function sendToProvider(letterId) {
const projectId = getProjectId()
return httpRequest.get(
`/api/enrollment/v1.0/application-materials/reco-letters/send-invitation-to-provider/${projectId}/${letterId}`
)
}
/**
* 退出登录
*/
export function logout() {
return httpRequest.get('/api/passport/rest/logout')
}
/**
* 更改附件状态
*/
export function changeFileStatus(userId, recordId, status) {
const projectId = getProjectId()
return httpRequest.get(
`/api/enrollment/v1.0/application-materials/attachments/change-status/${projectId}/${userId}/${recordId}`,
{ params: { status } }
)
}
/**
* 修改用户信息
*/
export function getOpenId(data) {
return httpRequest.post('/api/usercenter/v1/wechat/get-openid', data)
}
/**
* 签名
*/
export function createSign(data) {
return httpRequest.post('/api/usercenter/v1/sign/sign', data)
}
/**
* 获取签名文档
*/
export function getSignDocument(params) {
return httpRequest.get('/api/usercenter/v1/sign/document', { params })
}
/**
* 提交留咨信息
*/
export function postNes(obj) {
return httpRequest.post('/new-app/v1.0/applications', obj, {
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
})
}
......@@ -7,7 +7,7 @@ const items = [
href: '/#school',
items: [
{
name: 'AI教学基础',
name: 'AI教学基础设施',
href: '/ai',
},
{
......
......@@ -2,10 +2,14 @@
import { Search } from '@element-plus/icons-vue'
import IconPhone from './icons/IconPhone.vue'
import { useStore } from '@/composables/useStore'
const { visibleAppDownloadPopup } = useStore()
const { visibleAppDownloadPopup, user, isLogin, learningLink, fetchUser } = useStore()
const { locale, setLocale } = useI18n()
const runtimeConfig = useRuntimeConfig()
onMounted(() => {
fetchUser()
})
const showDownloadPopup = () => {
visibleAppDownloadPopup.value = true
}
......@@ -18,15 +22,15 @@ const navList = ref([
{
name: 'AI教学基础设施',
items: [
{ name: '人工智能基础:数据分析通识课', href: '/bi' },
{ name: '人工智能应用通识课', href: '/ai' },
{ name: '人工智能基础:数据分析实践通识课', href: '/bi' },
{ name: '人工智能应用实践通识课', href: '/ai' },
{ name: '数字教材', href: '/book' },
{ name: '个性化智能学习平台', href: 'https://saas-learn.ezijing.com/' },
{ name: '紫荆e-SaaS', href: 'https://e-saas.ezijing.com/' },
],
},
{
name: 'AI专业建设',
name: 'AI+专业建设',
items: [
{
name: '新工科',
......@@ -232,8 +236,14 @@ const onDropdownLeave = () => {
<span class="slogan">让每个人都有改变的能力</span>
</div>
<div class="user-section">
<template v-if="isLogin">
<p>欢迎,{{ user.realname || user.nickname || user.username }}</p>
<NuxtLink :to="learningLink" target="_blank" class="login-btn">登录/学习空间</NuxtLink>
</template>
<template v-else>
<a href="javascript:;" class="login-btn" @click="handleLogin">登录/学习空间</a>
<a href="javascript:;" class="register-btn" @click="handleRegister">注册</a>
</template>
<span class="lang-switch" @click="toggleLocale">
{{ locale === 'zh' ? '中文' : 'EN' }} / {{ locale === 'zh' ? 'EN' : '中文' }}
</span>
......@@ -364,6 +374,9 @@ const onDropdownLeave = () => {
display: flex;
align-items: center;
gap: 20px;
p {
color: #fff;
}
}
.login-btn {
......
......@@ -2,7 +2,7 @@
<div class="app-right-aside">
<ul>
<li>
<div class="text hover-text">售前<br />咨询</div>
<div class="text hover-text">报名<br />咨询</div>
<div class="hover">
<div class="enroll_cont">
<h5>{{ t('aside.apply') }}</h5>
......@@ -88,7 +88,7 @@
</template>
<script setup>
import { sendCode, checkCode, postNes } from '@/api/index'
import { sendCode, checkCode, submitApplicationForm } from '@/api/index'
import { useStore } from '@/composables/useStore'
const { visibleAppDownloadPopup } = useStore()
......@@ -247,7 +247,7 @@ const enrollQuery = async () => {
}
try {
const res = await postNes(params)
const res = await submitApplicationForm(params)
if (res && res.status === 200 && res.error === 0) {
return {
type: 'enroll',
......
......@@ -97,7 +97,7 @@
<script setup>
import { ElMessage } from 'element-plus'
import { postNes } from '@/api/index'
import { submitApplicationForm } from '@/api/index'
const props = defineProps({
type: { type: Number, default: 1 },
......@@ -173,7 +173,7 @@ const handleSubmit = () => {
if (params.project_id === '9999') {
params.project_id = '1016'
}
postNes(params)
submitApplicationForm(params)
.then((res) => {
if (res && res.status === 200 && res.error === 0) {
ElMessage.success('报名提交成功')
......
......@@ -41,7 +41,7 @@ const swiperOption = {
}
const data = [
{ web_img_uri: 'https://webapp-pub.ezijing.com/www/pc/next/banner1.jpg' },
{ web_img_uri: 'https://webapp-pub.ezijing.com/www/pc/next/banner2.jpg?v=1' },
{ web_img_uri: 'https://webapp-pub.ezijing.com/www/pc/next/banner2.jpg?v=2' },
{ web_img_uri: 'https://webapp-pub.ezijing.com/www/pc/next/banner3.jpg' },
]
// 使用 useAsyncData 进行服务端渲染
......
<script setup>
import EnterpriseIcons from './enterpriseIcons.vue'
const rows = [
[
const enterpriseList = [
{
name: '教育部',
icon: 1,
......@@ -21,14 +21,10 @@ const rows = [
desc: `根植清华大学,1980 年成立,秉持清华校训,主打学术专著、精品教材与前沿科技读物,聚焦人工智能、智能制造等国家重点领域,兼顾教育教学与专业出版,是综合性、多层次的知名大学出版社,数字化转型与国际合作成果显著。`,
},
{
name: '中国中小企业协会',
icon: 3,
desc: `清控紫荆教育成为中国中小企业协会副会长单位。
中国中小企业协会数字经济人才专业委员会成立!`,
name: '中国电子商会',
icon: 6,
desc: `授予清控紫荆教育元宇宙专委会副理事长单位牌匾,并在此设立中国电子商会元宇宙专委会教培秘书处。双方将整合行业资源与教育优势,携手为数字经济教育革新注入国家级平台力量,推动AIGC产教融合迈向新高度。`,
},
],
[
{
name: '工信部',
icon: 7,
......@@ -38,82 +34,59 @@ const rows = [
2024: 工信部职业技能提升行动-智能数字营销与实战应用)评价组织`,
},
{
name: '中国标准出版社',
icon: 5,
desc: `国家权威标准类专业出版社,核心出版国家标准、行业标准、地方标准及标准配套读物,同步推出标准培训教材、计量与质量相关专著,精准服务标准化工作推进,是国内标准出版领域的核心阵地,助力各行各业规范发展。`,
},
{
name: '中国电子商会',
icon: 6,
desc: `授予清控紫荆教育元宇宙专委会副理事长单位牌匾,并在此设立中国电子商会元宇宙专委会教培秘书处。双方将整合行业资源与教育优势,携手为数字经济教育革新注入国家级平台力量,推动AIGC产教融合迈向新高度。`,
name: '华为',
icon: 9,
desc: `携手华为、新疆轻工职业技术学院共建ICT产业学院!
携手华为、新疆交通职业技术学院共建ICT产业学院!`,
},
],
[
{
name: '中华全国供销合作总社',
icon: 10,
desc: `2025:“数智营销”纳入工种考试系统“商务数据分析 纳入工种考试系统共同开发人社部“商务数据分析师”“营销员”数字教材
desc: `2025:清控紫荆“数智营销实践教学平台”纳入工种考试系统
清控紫荆“商务数据分析实践教学平台”纳入工种考试系统
共同开发人社部“商务数据分析师”“营销师”数字教材
2024:提供新职业职业技能在线课程(商务数据分析师、营销员/营销师`,
2024: 中华全国供销合作总社职业技能(商务数据分析师/营销师)在线课程提供商`,
},
{
name: '中国经济出版社',
icon: 8,
desc: `经济学领域权威出版机构,深耕经济理论、国企改革、经济管理等核心板块,紧扣国家经济发展战略,打造国企改革出版特色品牌,推出众多贴合政策导向与行业需求的精品力作,获评经济学领域最具学术影响力出版社,兼具专业性与实用性。`,
},
{
name: '华为',
icon: 9,
desc: `携手华为、新疆轻工职业技术学院共建ICT产业学院!
携手华为、新疆交通职业技术学院共建ICT产业学院!`,
},
],
[
{
name: '国家新闻出版署',
icon: 13,
desc: `2024:副组长单位参与全国新闻出版标准技术委员会《数字教材平台接口》、《高等教育和职业教育数字出版产品质量要求》数字教材两项行业标准制定`,
},
{
name: '中国金融出版社',
icon: 11,
desc: `1956年成立,直属中国人民银行,国内优质的金融专业出版社,主营金融理论、实务操作、金融教材及法律法规类读物,出版《中国金融》等核心期刊,覆盖金融全领域内容,兼具权威政策解读与大众金融知识普及功能,是金融从业者与学习者的核心读物来源。`,
},
{
name: '百融云创',
icon: 12,
desc: `清控紫荆教育携手百融云创,整合教育资源与产业技术,共探数字化人才高效培养新范式。`,
},
],
[
{
name: '国家广播电视总局',
icon: 16,
desc: `2025:2025-2028人社部“网络主播”行业职业二类国赛广电技术支持单位人社部“网络主播”工种考试系统
desc: `2025:广电主办人社部“网络主播”职业二类国赛技术支持单位
2024:首届网络视听行业职业技能大赛技术支持单位
第二届网络视听行业职业技能大赛技术支持单位`,
},
{
name: '中国科学技术出版社',
icon: 17,
desc: `1956年成立,直属中国科协(暨科学普及出版社),中央级科技出版单位,核心出版科普读物、科技专著、专业工具书及科教教材,覆盖基础科学、工程技术等多领域,同步发力数字融合出版与科普期刊运营,是国内科普出版规模最大、品类最全的权威阵地,助力全民科学素养提升。`,
name: '中国金融出版社',
icon: 11,
desc: `1956年成立,直属中国人民银行,国内优质的金融专业出版社,主营金融理论、实务操作、金融教材及法律法规类读物,出版《中国金融》等核心期刊,覆盖金融全领域内容,兼具权威政策解读与大众金融知识普及功能,是金融从业者与学习者的核心读物来源。`,
},
{
name: '电科北斗',
icon: 15,
desc: `清控紫荆教育与电科北斗签订人才战略合作框架协议,双方将共同探索数字化企业中所需人才,通过定制化培养、招聘服务、实习实训基地共建、引产入校等方式,打造数字人才培训与服务体系。`,
},
],
[
{
name: '全国科学技术名词审定委员会',
icon: 4,
desc: `2022年,清控紫荆教育与全国科学技术名词审定委员会双方就数字经济方向设立科研课题、数字经济领域学术成果发表、数字经济人才培养、国际论坛交流活动等方面进行深入探讨和交流,并举行战略合作签约仪式。`,
name: '国家新闻出版署',
icon: 13,
desc: `2024:副组长单位参与《数字教材平台接口》、《高等教育和职业教育数字出版产品质量要求》两项行业标准制定`,
},
{
name: '西安交通大学出版社',
......@@ -125,8 +98,30 @@ const rows = [
icon: 18,
desc: `清控紫荆教育携手国开在线合作斯蒂文斯理工学院工程管理硕士项目、雪城大学计算机科学、计算机工程、电电气工程、帕克大学工商管理硕士、信息系统与商业数据分析等热门硕士项目。`,
},
],
{
name: '全国科学技术名词审定委员会',
icon: 4,
desc: `2022年,清控紫荆教育与全国科学技术名词审定委员会双方就数字经济方向设立科研课题、数字经济领域学术成果发表、数字经济人才培养、国际论坛交流活动等方面进行深入探讨和交流,并举行战略合作签约仪式。`,
},
{
name: '中国中小企业协会',
icon: 3,
desc: `清控紫荆教育成为中国中小企业协会副会长单位。
中国中小企业协会数字经济人才专业委员会成立!`,
},
{
name: '查看更多+',
},
]
const rows = computed(() => {
const result = []
for (let i = 0; i < enterpriseList.length; i += 3) {
result.push(enterpriseList.slice(i, i + 3))
}
return result
})
</script>
<template>
......@@ -187,7 +182,8 @@ const rows = [
gap: 10px;
transition: all 0.3s;
&:hover {
// 只有当第一行 box 被 hover 时,整列才变宽
&:has(.home-enterprise-box:first-child:hover) {
flex: 2;
}
}
......@@ -197,8 +193,10 @@ const rows = [
flex: 1;
min-height: 160px;
&:hover {
// 只有第一行的 box 有 hover 效果
&:first-child:hover {
z-index: 10;
cursor: pointer;
.home-enterprise-box-inner {
padding: 20px 20px 0;
......
......@@ -68,22 +68,22 @@ const items = ref([
{
name: '人工智能通识应用',
href: 'https://eec.ezijing.com/AI',
items: [{ name: '零基础AI工具课' }, { name: '学ChatGPT等工具职场实操' }, { name: '适配全行业提效职员' }],
// items: [{ name: '零基础AI工具课' }, { name: '学ChatGPT等工具职场实操' }, { name: '适配全行业提效职员' }],
},
{
name: '智能数据分析与实战应用',
href: 'https://eec.ezijing.com/product',
items: [{ name: '数据可视化实操课' }, { name: 'Python/Tableau+真实案例' }, { name: '适配市场/运营/财务岗' }],
// items: [{ name: '数据可视化实操课' }, { name: 'Python/Tableau+真实案例' }, { name: '适配市场/运营/财务岗' }],
},
{
name: '智能数据营销与实战应用',
href: 'https://eec.ezijing.com/',
items: [{ name: 'AI营销升级课' }, { name: '智能画像+平台投放' }, { name: '适配营销/新媒体从业者' }],
// items: [{ name: 'AI营销升级课' }, { name: '智能画像+平台投放' }, { name: '适配营销/新媒体从业者' }],
},
{
name: '私人财富风险管理课程',
href: 'https://prp.ezijing.com/',
items: [{ name: '资产风控课' }, { name: '风险识别+避险策略' }, { name: '适配高净值人群/理财顾问' }],
// items: [{ name: '资产风控课' }, { name: '风险识别+避险策略' }, { name: '适配高净值人群/理财顾问' }],
},
],
moreText: '了解更多职业技能',
......@@ -91,7 +91,7 @@ const items = ref([
},
{
name: '就业服务',
items: [{ name: '1V1定制化' }, { name: '全程辅导' }, { name: '内推面试' }, { name: '内推入职' }],
items: [{ name: '高端1V1' }, { name: '企业内推' }, { name: '企业直签' }],
moreText: '了解更多就业服务',
moreHref: '/job',
},
......@@ -154,7 +154,7 @@ const colList = computed(() => {
</dd>
</dl>
</div>
<div class="box3" v-if="index === 2">
<div class="box3" v-if="index === 2 || index === 3">
<dl v-for="source in item.items" :key="source.name">
<dt>
<a :href="source.href" target="_blank">{{ source.name }}</a>
......@@ -168,7 +168,7 @@ const colList = computed(() => {
</dd>
</dl>
</div>
<div class="box4" v-if="index === 3">
<!-- <div class="box4" v-if="index === 3">
<h4>8步就业辅导体系覆盖求职全流程</h4>
<p>精准解决核心问题,为求职者提供科学、高效的就业支持</p>
<div class="ul-box">
......@@ -185,7 +185,7 @@ const colList = computed(() => {
<li>8. 试用期辅导</li>
</ul>
</div>
</div>
</div> -->
<div class="more">
<a :href="item.moreHref" target="_blank"
>{{ item.moreText }}
......@@ -387,7 +387,7 @@ const colList = computed(() => {
}
.box3 {
margin-top: -20px;
margin-top: 60px;
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 16px 0;
......
......@@ -119,8 +119,8 @@ const rows = [
{
className: 'home-school-box-ai',
btns: [
{ name: '人工智能基础:数据分析通识课', href: '/bi' },
{ name: '人工智能应用通识课', href: '/ai' },
{ name: '人工智能基础:数据分析实践通识课', href: '/bi' },
{ name: '人工智能应用实践通识课', href: '/ai' },
{ name: '数字教材', href: '/book' },
{ name: '个性化智能学习平台', href: 'https://saas-learn.ezijing.com/', tips: '即将上线,敬请期待' },
{ name: '紫荆e-SaaS', href: 'https://e-saas.ezijing.com/' },
......
const store = reactive({
visibleAppDownloadPopup: false,
});
import { getUser } from '~/api'
export const useStore = () => {
return toRefs(store);
const visibleAppDownloadPopup = useState<boolean>('visibleAppDownloadPopup', () => false)
const user = useState<any>('user', () => null)
const isFetchingUser = useState<boolean>('isFetchingUser', () => false)
const isLogin = computed(() => !!user.value)
const fetchUser = async () => {
// 如果已经有用户数据,或者正在抓取中,则直接返回
if (user.value || isFetchingUser.value) return
isFetchingUser.value = true
try {
const res = await getUser()
user.value = res.data
} catch (error) {
user.value = null
} finally {
isFetchingUser.value = false
}
}
const tenantMap: Record<string, string> = {
sofia: 'https://sofia-learning.ezijing.com/',
kelley: 'https://kelley-learning.ezijing.com/',
gm: 'https://gm-learning.ezijing.com/',
seg: 'https://seg-learning.ezijing.com/',
campbellsville: 'https://campbellsville-learning.ezijing.com/',
ciis: 'https://ciis-learning.ezijing.com/',
marywood: 'https://marywood-learning.ezijing.com/',
cuw: 'https://cuw-learning.ezijing.com/',
}
const learningLink = computed(() => {
if (!user.value) return 'javascript:;'
const tenant = user.value?.learning_info[0]?.tenant || 'ezijing'
return tenantMap[tenant] || 'javascript:;'
})
return { visibleAppDownloadPopup, user, isLogin, fetchUser, learningLink }
}
export const useUser = () => {}
......@@ -19,7 +19,7 @@ const tabList = [
<div class="bi-page">
<div class="banner">
<div class="banner-inner">
<h1>人工智能基础:数据分析通识课</h1>
<h1>人工智能基础:数据分析实践通识课</h1>
<span class="line"></span>
<h2>“一体两翼”式设计AI+数据分析能力建设</h2>
<p>
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论