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

init

上级 e104f4eb
......@@ -40,4 +40,4 @@ function generateUploadTarget(src, dist) {
})
}
generateUploadTarget('./dist', '/website/prod/vst')
generateUploadTarget('./dist', '/website/prod/vst-saas')
......@@ -15,7 +15,7 @@
"dependencies": {
"@vueuse/core": "^8.2.5",
"axios": "^0.26.1",
"element-plus": "^2.1.8",
"element-plus": "^2.1.10",
"pinia": "^2.0.13",
"swiper": "^8.0.7",
"vue": "^3.2.31",
......
......@@ -10,7 +10,7 @@ specifiers:
ali-oss: ^6.17.1
axios: ^0.26.1
chalk: ^5.0.1
element-plus: ^2.1.8
element-plus: ^2.1.10
eslint: ^8.12.0
eslint-plugin-vue: ^8.6.0
pinia: ^2.0.13
......@@ -26,7 +26,7 @@ specifiers:
dependencies:
'@vueuse/core': 8.2.5_vue@3.2.31
axios: 0.26.1
element-plus: 2.1.8_vue@3.2.31
element-plus: 2.1.10_vue@3.2.31
pinia: 2.0.13_typescript@4.6.3+vue@3.2.31
swiper: 8.0.7
vue: 3.2.31
......@@ -76,8 +76,8 @@ packages:
engines: {node: '>=6.0.0'}
hasBin: true
/@ctrl/tinycolor/3.4.0:
resolution: {integrity: sha512-JZButFdZ1+/xAfpguQHoabIXkcqRRKpMrWKBkpEZZyxfY9C1DpADFB8PEqGSTeFr135SaTRfKqGKx5xSCLI7ZQ==}
/@ctrl/tinycolor/3.4.1:
resolution: {integrity: sha512-ej5oVy6lykXsvieQtqZxCOaLT+xD4+QNarq78cIYISHmZXshCvROLudpQN3lfL8G0NL7plMSSK+zlyvCaIJ4Iw==}
engines: {node: '>=10'}
dev: false
......@@ -169,6 +169,16 @@ packages:
resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==}
dev: true
/@types/lodash-es/4.17.6:
resolution: {integrity: sha512-R+zTeVUKDdfoRxpAryaQNRKk3105Rrgx2CFRClIgRGaqDTdjsm8h6IYA8ir584W3ePzkZfst5xIgDwYrlh9HLg==}
dependencies:
'@types/lodash': 4.14.182
dev: false
/@types/lodash/4.14.182:
resolution: {integrity: sha512-/THyiqyQAP9AfARo4pF+aCGcyiQ94tX/Is2I7HofNRqoYLgN1PBoOWu2/zTA5zMxzP5EFutMtWtGAFRKUe961Q==}
dev: false
/@types/node/17.0.23:
resolution: {integrity: sha512-UxDxWn7dl97rKVeVS61vErvw086aCYhDLyvRQZ5Rk65rZKepaFdm53GeqXaKBuOhED4e9uWq34IC3TdSdJJ2Gw==}
dev: true
......@@ -906,27 +916,28 @@ packages:
resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
dev: true
/element-plus/2.1.8_vue@3.2.31:
resolution: {integrity: sha512-hwFtzw0R5lKMhWf3oVvSU/ucfN8RiY8DRaRWo6LktX4RlWWA2QjKfDXtISBi5Rb303Ny4I0Sgz0CA1Fd4Z2GGg==}
/element-plus/2.1.10_vue@3.2.31:
resolution: {integrity: sha512-sS9OMgP20dlYipmzHlEEgCJU+ID7+03YpRpoJWNQEH736C6ArmDMLnGFe8DUjPvwbUEXRA2d0Eo5d0apFgkSqg==}
peerDependencies:
vue: ^3.2.0
dependencies:
'@ctrl/tinycolor': 3.4.0
'@ctrl/tinycolor': 3.4.1
'@element-plus/icons-vue': 1.1.4_vue@3.2.31
'@floating-ui/dom': 0.4.4
'@popperjs/core': 2.11.5
'@types/lodash': 4.14.182
'@types/lodash-es': 4.17.6
'@vueuse/core': 8.2.5_vue@3.2.31
async-validator: 4.0.7
dayjs: 1.11.0
escape-html: 1.0.3
lodash: 4.17.21
lodash-es: 4.17.21
lodash-unified: 1.0.2_lodash-es@4.17.21+lodash@4.17.21
lodash-unified: 1.0.2_da03a4540fbd16bbaafbb96724306afd
memoize-one: 6.0.0
normalize-wheel-es: 1.1.2
vue: 3.2.31
transitivePeerDependencies:
- '@types/lodash-es'
- '@vue/composition-api'
dev: false
......@@ -1740,13 +1751,14 @@ packages:
resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==}
dev: false
/lodash-unified/1.0.2_lodash-es@4.17.21+lodash@4.17.21:
/lodash-unified/1.0.2_da03a4540fbd16bbaafbb96724306afd:
resolution: {integrity: sha512-OGbEy+1P+UT26CYi4opY4gebD8cWRDxAT6MAObIVQMiqYdxZr1g3QHWCToVsm31x2NkLS4K3+MC2qInaRMa39g==}
peerDependencies:
'@types/lodash-es': '*'
lodash: '*'
lodash-es: '*'
dependencies:
'@types/lodash-es': 4.17.6
lodash: 4.17.21
lodash-es: 4.17.21
dev: false
......
......@@ -78,7 +78,7 @@ textarea:focus {
body {
min-width: 375px;
font-size: 14px;
background-color: #f9f8f8;
background-color: #f5f5f5;
}
@media (min-width: 768px) {
......
......@@ -106,3 +106,79 @@
}
}
}
.process {
dl {
position: relative;
display: flex;
align-items: flex-start;
&::before {
content: '';
position: absolute;
top: 0;
left: 0.21rem;
width: 1px;
height: 100%;
background-color: #aa1941;
}
}
dl + dl {
padding-top: 0.7rem;
}
dt {
position: relative;
z-index: 1;
width: 0.43rem;
height: 0.61rem;
background: url(https://webapp-pub.ezijing.com/project/vst/process_bg.png) no-repeat center;
background-size: contain;
font-size: 0.3rem;
font-weight: 500;
line-height: 0.32rem;
color: #ffffff;
text-align: center;
padding-top: 0.1rem;
box-sizing: border-box;
}
dd {
margin-left: 0.5rem;
flex: 1;
font-size: 0.22rem;
font-weight: 400;
line-height: 0.34rem;
color: #333;
border-bottom: 1px dashed #b9b9b9;
padding-bottom: 0.1rem;
}
}
.my-tabs {
.el-tabs__nav-wrap::after {
display: none;
}
.el-tabs__header {
margin-bottom: 40px;
}
.el-tabs__item {
padding: 0;
min-width: 260px;
height: 85px;
font-size: 24px;
line-height: 85px;
text-align: center;
margin-right: 10px;
background-color: #f7f7f7;
}
.el-tabs__active-bar {
top: 0;
height: 8px;
}
.el-tabs__content {
padding: 40px;
box-shadow: 0px 1px 25px rgba(0, 0, 0, 0.06);
}
.course {
padding: 0;
background-color: transparent;
}
}
@forward 'element-plus/theme-chalk/src/common/var.scss' with (
$colors: (
'primary': (
'base': #aa1941
)
)
);
@use 'element-plus/theme-chalk/src/index.scss' as *;
......@@ -17,13 +17,15 @@ function genClassName(menu: IMenu) {
<template>
<section class="app-container">
<nav class="app-container-nav" v-if="menus?.length">
<ul>
<li v-for="(item, index) in menus" :class="genClassName(item)" :key="index">
<router-link :to="item.path">{{ item.name }}</router-link>
</li>
</ul>
</nav>
<template v-if="false">
<nav class="app-container-nav" v-if="menus?.length">
<ul>
<li v-for="(item, index) in menus" :class="genClassName(item)" :key="index">
<router-link :to="item.path">{{ item.name }}</router-link>
</li>
</ul>
</nav>
</template>
<div class="app-container-main">
<div class="app-container-banner">
<slot name="banner"></slot>
......@@ -44,7 +46,8 @@ function genClassName(menu: IMenu) {
display: flex;
align-items: flex-start;
max-width: 1200px;
margin: 56px auto 72px;
// margin: 56px auto 72px;
margin: 0 auto;
}
.app-container-nav {
min-width: 160px;
......
<script setup lang="ts">
import { computed } from 'vue'
import { useRoute } from 'vue-router'
const route = useRoute()
interface IMenuItem {
name: string
path: string
children?: IMenuItem[]
}
const menuList: IMenuItem[] = [
{
name: '互联网营销师',
path: '/internet',
children: [
{ name: '职业介绍', path: '/internet/index' },
{ name: '课程介绍', path: '/internet/course' },
{ name: '课程大纲', path: '/internet/outline' },
{ name: '申请条件', path: '/internet/apply' }
]
},
{
name: '大数据技术人员',
path: '/bd',
children: [
{ name: '职业介绍', path: '/bd/index' },
{ name: '课程介绍', path: '/bd/course' },
{ name: '课程大纲', path: '/bd/outline' },
{ name: '申请条件', path: '/bd/apply' }
]
},
{
name: '工业机器人系统操作员',
path: '/robot',
children: [
{ name: '职业介绍', path: '/robot/index' },
{ name: '课程介绍', path: '/robot/course' },
{ name: '课程大纲', path: '/robot/outline' },
{ name: '申请条件', path: '/robot/apply' }
]
}
]
const defaultActive = computed(() => {
// 扁平菜单
const flatMenuList: IMenuItem[] = menuList.reduce((result: IMenuItem[], item) => {
result.push(item)
if (item.children) {
result = result.concat(item.children)
}
return result
}, [])
const found = flatMenuList.reverse().find(item => {
return route.path.includes(item.path)
})
return found ? found.path : '/'
})
</script>
<template>
<aside class="app-aside">
<nav class="nav">
<el-menu :default-active="defaultActive" :router="true">
<template v-for="item in menuList" :key="item.path">
<el-sub-menu :index="item.path" v-if="item.children">
<template #title>
{{ item.name }}
</template>
<el-menu-item :index="subitem.path" v-for="subitem in item.children" :key="subitem.path">
{{ subitem.name }}
</el-menu-item>
</el-sub-menu>
<el-menu-item :index="item.path" v-else>
{{ item.name }}
</el-menu-item>
</template>
</el-menu>
</nav>
</aside>
</template>
<style lang="scss">
.app-aside {
width: 210px;
background: #fff;
border-right: 1px solid rgba(0, 0, 0, 0.12);
flex: 0 0 210px;
box-sizing: content-box;
}
.nav {
position: fixed;
width: 210px;
margin: 20px 0;
max-height: calc(100vh - 104px);
overflow-x: hidden;
overflow-y: auto;
.el-menu {
border-right: 0;
// i {
// margin-right: 14px;
// font-size: 24px;
// }
// .el-icon-arrow-down {
// margin-right: 0;
// font-size: 16px;
// }
}
// .el-menu-item {
// display: flex;
// align-items: center;
// margin: 0 16px;
// font-size: 16px;
// border-radius: 8px;
// }
// .el-submenu .el-menu-item {
// min-width: auto;
// padding-left: 58px !important;
// }
// .el-submenu__title {
// display: flex;
// align-items: center;
// margin: 0 16px;
// font-size: 16px;
// border-radius: 8px;
// &:hover {
// background-color: rgba(86, 100, 210, 0.04);
// }
// }
}
</style>
<script lang="ts">
export default { name: 'AppHeader' }
</script>
<script setup lang="ts">
import { ref, watch, computed } from 'vue'
import { useUserStore } from '@/stores/user'
import { useRoute } from 'vue-router'
import AppNav from './Nav.vue'
const route = useRoute()
const user = useUserStore()
const LOGINURL = `${import.meta.env.VITE_LOGIN_URL}?rd=${encodeURIComponent(location.href)}`
// 菜单控制
const menuVisible = ref<boolean>(false)
function toggleMenu() {
menuVisible.value = !menuVisible.value
}
watch(route, () => {
menuVisible.value = false
withDefaults(defineProps<{ hasTitle?: boolean }>(), {
hasTitle: true
})
const classNames = computed(() => {
return {
'has-menu': menuVisible.value
}
})
// 退出登录
function handleLogout() {
user.logout().then(() => {
location.href = '/'
})
const userStore = useUserStore()
const userInfo = userStore.user
const logout = () => {
userStore.logout()
}
</script>
<template>
<header class="app-header" :class="classNames">
<div class="app-header-inner">
<div class="app-header-left">
<div class="logo">
<a href="https://www.ezijing.com/" target="_blank">
<img src="https://zws-imgs-pub.ezijing.com/pc/base/ezijing-logo.svg" />
</a>
<router-link to="/" class="logo">
<h1 class="app-name">数字职业技能培训中心</h1>
</router-link>
</div>
</div>
<div class="app-header-right">
<div class="language">中文</div>
<div class="menu" @click="toggleMenu"></div>
<header class="app-header">
<div class="app-header-left">
<div class="logo">
<router-link to="/"><img src="https://zws-imgs-pub.ezijing.com/pc/base/ezijing-logo-white.svg" /></router-link>
</div>
<div class="app-header-right" v-if="false">
<template v-if="user.isLogin">
你好,{{ user.userName }} <span class="app-header-logout" @click="handleLogout">退出</span>
</div>
<div class="app-header-right">
<el-dropdown v-if="userInfo">
<div class="avatar">
<img :src="userInfo.avatar || 'https://webapp-pub.ezijing.com/website/base/images/avatar.svg'" />
</div>
<template #dropdown>
<el-dropdown-menu>
<div class="app-header-user">
<div class="app-header-user-avatar">
<img :src="userInfo.avatar || 'https://webapp-pub.ezijing.com/website/base/images/avatar.svg'" />
</div>
<div class="app-header-user-main">
<h3>{{ userStore.userName }}</h3>
<p>{{ userInfo.email || userInfo.mobile }}</p>
</div>
<div class="app-header-user-buttons">
<el-button round @click="logout">退出登录</el-button>
</div>
</div>
</el-dropdown-menu>
</template>
<template v-else><a :href="LOGINURL">登录</a></template>
</div>
</el-dropdown>
</div>
<AppNav></AppNav>
</header>
</template>
<style lang="scss">
.app-header {
background: #fff;
box-shadow: 0px 0px 29px rgba(0, 0, 0, 0.1);
border-top: 0.1rem solid #aa1941;
position: sticky;
top: 0;
z-index: 1000;
}
.app-header-inner {
max-width: 1200px;
margin: 0 auto;
padding: 0 20px;
display: flex;
align-items: center;
justify-content: space-between;
padding: 0.22rem 0;
color: #aa1941;
}
.app-header-left {
flex: 1;
height: 64px;
background-color: #aa1941;
color: #fff;
.logo {
display: flex;
align-items: center;
img {
height: 0.5rem;
}
width: 120px;
}
}
.app-header-left {
display: flex;
align-items: center;
.app-name {
margin-left: 0.28rem;
padding: 0 0.2rem;
font-size: 0.26rem;
line-height: 0.26rem;
font-weight: 400;
letter-spacing: 2px;
border-left: 0.02rem solid #aa1941;
margin-left: 20px;
padding: 0 15px;
line-height: 1;
border-left: 2px solid #fff;
}
}
.app-header-right {
display: flex;
color: #666;
.app-header-logout {
background: url('https://webapp-pub.ezijing.com/project/saas/logout.png') no-repeat left center;
background-size: auto 16px;
padding-left: 22px;
margin-left: 40px;
cursor: pointer;
.avatar {
width: 40px;
height: 40px;
border-radius: 50%;
overflow: hidden;
img {
width: 100%;
height: 100%;
object-fit: cover;
border-radius: 50%;
overflow: hidden;
}
&:hover {
background-color: rgba(60, 64, 67, 0.08);
}
}
}
.is-h5 {
.app-header-inner {
padding: 0.32rem 0.3rem;
box-shadow: 0 0 15px rgb(0 0 0 / 14%);
}
.language {
display: none;
.app-header-user {
display: flex;
flex-direction: column;
align-items: center;
text-align: center;
padding: 16px;
}
.app-header-user-avatar {
margin-bottom: 6px;
width: 80px;
height: 80px;
border-radius: 50%;
overflow: hidden;
img {
width: 100%;
height: 100%;
object-fit: cover;
}
.menu {
width: 0.36rem;
height: 0.36rem;
padding: 5px 10px;
background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAABICAMAAABiM0N1AAAAh1BMVEUAAABAQEBgYGBVVVVgYGBmZmZoaGhgYGBgYGBlZWVlZWVjY2NjY2NmZmZkZGRlZWVkZGRmZmZjY2NmZmZlZWVmZmZmZmZlZWVmZmZlZWVmZmZmZmZlZWVlZWVmZmZmZmZlZWVmZmZlZWVlZWVmZmZmZmZmZmZlZWVmZmZmZmZlZWVmZmZmZmZgwHa9AAAALHRSTlMABAgMEBQbICgrMENIS09TVF9kZ2hrbG9zd3t/l5+jp6uvu8PD09fb3+vv86pHCLIAAACcSURBVBgZ7cHHFoJAEATAhkUx5wCsOYE6//99nvum/TxwmCo4107JuIqCaQaWXk3T5CCFqY4gB1PVIJWpziDhbppnDyxdRMWmA+eca6mwjIptFyx7mObVB4mmOoMcTFWDFKY6gqQ30zQ5WDIq4++qWYBzzrmvDeeKSQBLLqZpcpC1qU4ge1M1IKWpLiDhbpr3ACysdntBkcO5f/kAGgG16eBu+akAAAAASUVORK5CYII=')
no-repeat center;
background-size: 0.36rem 0.36rem;
cursor: pointer;
}
.app-header-user-main {
h3 {
color: #202124;
font: 500 16px/22px Helvetica, Arial, sans-serif;
letter-spacing: 0.29px;
margin: 0;
text-align: center;
text-overflow: ellipsis;
overflow: hidden;
}
.has-menu .menu {
background: url('https://webapp-pub.ezijing.com/www/h5/images/icon_close.png') no-repeat center;
background-size: 16px 16px;
p {
color: #5f6368;
font: 400 14px/19px Helvetica, Arial, sans-serif;
letter-spacing: normal;
text-align: center;
text-overflow: ellipsis;
overflow: hidden;
}
}
.app-header-user-buttons {
padding-top: 16px;
}
</style>
<script lang="ts">
export default { name: 'AppLayout' }
</script>
<script setup lang="ts">
import AppHeader from './Header.vue'
import AppAside from './Aside.vue'
import AppMain from './Main.vue'
withDefaults(defineProps<{ sidebar?: boolean; hasTitle?: boolean }>(), {
sidebar: true,
hasTitle: true
})
</script>
<template>
<div class="app-layout">
<AppHeader></AppHeader>
<section class="app-layout-container">
<router-view></router-view>
</section>
<AppFooter></AppFooter>
<app-header :hasTitle="hasTitle"></app-header>
<div class="app-layout-container">
<app-aside v-if="sidebar"></app-aside>
<app-main></app-main>
</div>
</div>
</template>
<script setup lang="ts">
import AppHeader from './Header.vue'
import AppFooter from './Footer.vue'
</script>
<style lang="scss">
.app-layout {
display: flex;
flex-direction: column;
min-height: 100vh;
background-color: #ededed;
}
.app-layout-container {
flex: 1;
display: flex;
}
</style>
<template>
<section class="app-main">
<div class="app-main-inner">
<div class="app-main-container">
<router-view></router-view>
</div>
</div>
</section>
</template>
<style>
.app-main {
position: relative;
flex: 1;
padding: 20px;
overflow: hidden;
}
.app-main-inner {
margin: 0 auto;
}
.app-main-container::after {
content: '';
display: table;
clear: both;
}
.el-form--label-top .el-form-item__label {
padding-bottom: 0;
}
</style>
......@@ -4,8 +4,9 @@ import { createPinia } from 'pinia'
import App from './App.vue'
import router from './router'
// import ElementPlus from 'element-plus'
// import 'element-plus/dist/index.css'
import ElementPlus from 'element-plus'
import '@/assets/css/theme.scss'
import zhCn from 'element-plus/es/locale/lang/zh-cn'
// 公共css
import './assets/css/base.css'
......@@ -24,6 +25,6 @@ modules({ router })
app.use(createPinia())
app.use(router)
// app.use(ElementPlus)
app.use(ElementPlus, { locale: zhCn })
app.mount('#app')
<template>
<div class="course">
<dl>
<dt><img src="https://webapp-pub.ezijing.com/project/vst/icon_zyjs_01.png" /></dt>
<dd>
<h4>职业名称</h4>
<p>大数据工程技术人员</p>
</dd>
</dl>
<dl>
<dt><img src="https://webapp-pub.ezijing.com/project/vst/icon_zyjs_02.png" /></dt>
<dd>
<h4>职业编码</h4>
<p>2-02-10-11</p>
</dd>
</dl>
<dl>
<dt><img src="https://webapp-pub.ezijing.com/project/vst/icon_zyjs_03.png" /></dt>
<dd>
<h4>认证背景</h4>
<p>
2019年4月3日
人社部发布新职业信息,其中包含大数据工程技术人员。大数据产业指以数据生产、采集、存储、加工、分析、服务为主的相关经济活动,包括数据资源建设,大数据软硬件产品的开发、销售和租赁活动,以及相关信息技术服务。当前,智慧医疗、智慧城市、精准扶贫以及其他相关高新技术产业都离不开大数据的支撑,大数据技术在我国得到了较为广泛的应用。
</p>
<p>
根据国家实施大数据战略背景之下,各地政府相继成立了大数据管理机构,促进大数据产业发展,到2021年,全国22个省区,200多个地市相继成立大数据管理部门,产业规模超过8000亿元。与此同时,伴随着5G通信标准的落地,物联网、移动互联网、大数据与传统行业将深度融合,既懂大数据技术又懂其他相关行业技术的复合型人才将在大数据应用领域发挥着越来越多的作用。
</p>
</dd>
</dl>
<dl>
<dt><img src="https://webapp-pub.ezijing.com/project/vst/icon_zyjs_04.png" /></dt>
<dd>
<h4>职业定义</h4>
<p>从事大数据采集、清洗、分析、治理、挖掘等技术研究,并加以利用、管理、维护和服务的工程技术人员。</p>
</dd>
</dl>
<dl>
<dt><img src="https://webapp-pub.ezijing.com/project/vst/icon_zyjs_05.png" /></dt>
<dd>
<h4>职业能力特征</h4>
<p>具有较强的学习能力、计算能力、表达能力及分析、推理和判断能力。</p>
</dd>
</dl>
<dl>
<dt><img src="https://webapp-pub.ezijing.com/project/vst/icon_zyjs_06.png" /></dt>
<dd>
<h4>主要工作内容</h4>
<p>
1.大数据采集(爬虫)、大数据清洗(ETl工程师)、大数据建模(算法工程师)与大数据分析(数据分析员);<br />
2.管理、分析展现及应用等技术(大数据开发工程师);<br />
3.研究、应用大数据平台体系架构、技术和标准;<br />
4.设计、开发、集成、测试大数据软硬件系统; <br />
5.管理、维护并保障大数据系统稳定运行;<br />
6.监控、管理和保障大数据安全; 7.提供大数据的技术咨询和技术服务。
</p>
</dd>
</dl>
</div>
</template>
<script lang="ts" setup>
const list = [
{ desc: '选择待报考认证的项目' },
{ desc: '在考试培训单位报名,参加考前培训' },
{ desc: '完成课程学习后,开具培训课时证明' },
{ desc: '提交培训证明并重新填写报名表' },
{ desc: '等待分配考场' },
{ desc: '考前1-2周打印准考证' },
{ desc: '参加线下试卷考试或机考' },
{ desc: '考试成绩于考试结束后3-4周出成绩。' }
]
</script>
<template>
<div class="process">
<dl v-for="(item, index) in list" :key="index">
<dt>{{ index + 1 }}</dt>
<dd>{{ item.desc }}</dd>
</dl>
</div>
</template>
<template>
<article class="article">
<p>
为贯彻落实党中央、国务院重大决策部署和《“十四五”数字经济发展规划》的有关要求,加强数字经济领域产业人员的能力培训,紫荆教育充分发挥自身优势开展数字经济领域的职业技能培训,探索人才评价的新模式,优化培训方式及培训流程,并为此专门成立了数字职业技能培训中心。
</p>
<p>
数字职业技能培训中心联合院校共同开展多元化人才培养模式,构建“专业培养+技能实训+学历提升的职业培训体系,培养高层次数字化技能型人才。与此同时,紫荆教育与企业进行了深度融合,共同搭建职业技能提升平台,提供线上线下一体化的解决方案,培养高素质的数字经济职业技能人才,助力企业实现人才的数字化转型。
</p>
</article>
</template>
<!-- 职业介绍 -->
<script lang="ts" setup>
import menus from '../menus'
import Job from '../components/Job.vue'
import Project from '../components/Project.vue'
import Process from '../components/Process.vue'
</script>
<template>
<AppContainer :menus="menus">
<AppContainer>
<template #banner><img src="https://webapp-pub.ezijing.com/project/vst/banner_zy.png" /></template>
<template #inner>
<div class="course">
<dl>
<dt><img src="https://webapp-pub.ezijing.com/project/vst/icon_zyjs_01.png" /></dt>
<dd>
<h4>职业名称</h4>
<p>大数据工程技术人员</p>
</dd>
</dl>
<dl>
<dt><img src="https://webapp-pub.ezijing.com/project/vst/icon_zyjs_02.png" /></dt>
<dd>
<h4>职业编码</h4>
<p>2-02-10-11</p>
</dd>
</dl>
<dl>
<dt><img src="https://webapp-pub.ezijing.com/project/vst/icon_zyjs_03.png" /></dt>
<dd>
<h4>认证背景</h4>
<p>
2019年4月3日
人社部发布新职业信息,其中包含大数据工程技术人员。大数据产业指以数据生产、采集、存储、加工、分析、服务为主的相关经济活动,包括数据资源建设,大数据软硬件产品的开发、销售和租赁活动,以及相关信息技术服务。当前,智慧医疗、智慧城市、精准扶贫以及其他相关高新技术产业都离不开大数据的支撑,大数据技术在我国得到了较为广泛的应用。
</p>
<p>
根据国家实施大数据战略背景之下,各地政府相继成立了大数据管理机构,促进大数据产业发展,到2021年,全国22个省区,200多个地市相继成立大数据管理部门,产业规模超过8000亿元。与此同时,伴随着5G通信标准的落地,物联网、移动互联网、大数据与传统行业将深度融合,既懂大数据技术又懂其他相关行业技术的复合型人才将在大数据应用领域发挥着越来越多的作用。
</p>
</dd>
</dl>
<dl>
<dt><img src="https://webapp-pub.ezijing.com/project/vst/icon_zyjs_04.png" /></dt>
<dd>
<h4>职业定义</h4>
<p>从事大数据采集、清洗、分析、治理、挖掘等技术研究,并加以利用、管理、维护和服务的工程技术人员。</p>
</dd>
</dl>
<dl>
<dt><img src="https://webapp-pub.ezijing.com/project/vst/icon_zyjs_05.png" /></dt>
<dd>
<h4>职业能力特征</h4>
<p>具有较强的学习能力、计算能力、表达能力及分析、推理和判断能力。</p>
</dd>
</dl>
<dl>
<dt><img src="https://webapp-pub.ezijing.com/project/vst/icon_zyjs_06.png" /></dt>
<dd>
<h4>主要工作内容</h4>
<p>
1.大数据采集(爬虫)、大数据清洗(ETl工程师)、大数据建模(算法工程师)与大数据分析(数据分析员);<br />
2.管理、分析展现及应用等技术(大数据开发工程师);<br />
3.研究、应用大数据平台体系架构、技术和标准;<br />
4.设计、开发、集成、测试大数据软硬件系统; <br />
5.管理、维护并保障大数据系统稳定运行;<br />
6.监控、管理和保障大数据安全; 7.提供大数据的技术咨询和技术服务。
</p>
</dd>
</dl>
</div>
<el-tabs class="my-tabs">
<el-tab-pane label="职业介绍">
<Job />
</el-tab-pane>
<el-tab-pane label="项目介绍">
<Project />
</el-tab-pane>
<el-tab-pane label="报名流程">
<Process />
</el-tab-pane>
</el-tabs>
</template>
</AppContainer>
</template>
......
......@@ -5,6 +5,6 @@ export const routes: Array<RouteRecordRaw> = [
{
path: '/',
component: AppLayout,
children: [{ path: '', component: () => import('./views/Index.vue') }]
children: [{ path: '', redirect: '/internet/index', component: () => import('./views/Index.vue') }]
}
]
<template>
<div class="course">
<dl>
<dt><img src="https://webapp-pub.ezijing.com/project/vst/icon_zyjs_01.png" /></dt>
<dd>
<h4>职业名称</h4>
<p>互联网营销师</p>
</dd>
</dl>
<dl>
<dt><img src="https://webapp-pub.ezijing.com/project/vst/icon_zyjs_02.png" /></dt>
<dd>
<h4>职业编码</h4>
<p>4-01-02-07</p>
</dd>
</dl>
<dl>
<dt><img src="https://webapp-pub.ezijing.com/project/vst/icon_zyjs_03.png" /></dt>
<dd>
<h4>认证背景</h4>
<p>
2020年人社部发布9个新职业中,互联网营销师到2025年需求将达到约4500万人,人才缺口约在4000万人左右。互联网营销师职业的设立,有利于健全从业人员的素质化教育和行业规范化的建设,进一步满足净化网络商业环境的需求。
</p>
</dd>
</dl>
<dl>
<dt><img src="https://webapp-pub.ezijing.com/project/vst/icon_zyjs_04.png" /></dt>
<dd>
<h4>职业定义</h4>
<p>在数字化信息平台上,运用网络的交互性与传播公信力,对企业产品进行营销推广的人员。</p>
</dd>
</dl>
<dl>
<dt><img src="https://webapp-pub.ezijing.com/project/vst/icon_zyjs_05.png" /></dt>
<dd>
<h4>职业能力特征</h4>
<p>
具有较强的学习、理解、分析、计算及判断能力,具有一定的空间感,色觉正常、语言表达正常,手指、手臂灵活,形体动作协调性好。
</p>
</dd>
</dl>
<dl>
<dt><img src="https://webapp-pub.ezijing.com/project/vst/icon_zyjs_06.png" /></dt>
<dd>
<h4>主要工作内容</h4>
<p>
1、研究数字化平台的用户定位和运营方式<br />2、接受企业委托,对企业资质和产品质量等信息进行审核<br />
3、选定相关产品,设计策划营销方案,制定佣金结算方式<br />
4、搭建数字化营销场景,通过直播或短视频等形式对产品进行多平台营销推广<br />
5、提升自身传播影响力,加强用户群体活跃度,促进产品从关注到购买的转化率<br />6、签订销售订单,结算销售货款<br />
7、负责协调产品的售后服务<br />8、采集分析销售数据,对企业或产品提出优化性建议
</p>
</dd>
</dl>
</div>
</template>
<script lang="ts" setup>
const list = [
{ desc: '选择待报考认证的项目' },
{ desc: '在考试培训单位报名,参加考前培训' },
{ desc: '完成课程学习后,开具培训课时证明' },
{ desc: '提交培训证明并重新填写报名表' },
{ desc: '等待分配考场' },
{ desc: '考前1-2周打印准考证' },
{ desc: '参加线下试卷考试或机考' },
{ desc: '考试成绩于考试结束后3-4周出成绩。' }
]
</script>
<template>
<div class="process">
<dl v-for="(item, index) in list" :key="index">
<dt>{{ index + 1 }}</dt>
<dd>{{ item.desc }}</dd>
</dl>
</div>
</template>
<template>
<article class="article">
<p>
为贯彻落实党中央、国务院重大决策部署和《“十四五”数字经济发展规划》的有关要求,加强数字经济领域产业人员的能力培训,紫荆教育充分发挥自身优势开展数字经济领域的职业技能培训,探索人才评价的新模式,优化培训方式及培训流程,并为此专门成立了数字职业技能培训中心。
</p>
<p>
数字职业技能培训中心联合院校共同开展多元化人才培养模式,构建“专业培养+技能实训+学历提升的职业培训体系,培养高层次数字化技能型人才。与此同时,紫荆教育与企业进行了深度融合,共同搭建职业技能提升平台,提供线上线下一体化的解决方案,培养高素质的数字经济职业技能人才,助力企业实现人才的数字化转型。
</p>
</article>
</template>
<!-- 职业介绍 -->
<script lang="ts" setup>
import menus from '../menus'
import Job from '../components/Job.vue'
import Project from '../components/Project.vue'
import Process from '../components/Process.vue'
</script>
<template>
<AppContainer :menus="menus">
<AppContainer>
<template #banner><img src="https://webapp-pub.ezijing.com/project/vst/banner_zy.png" /></template>
<template #inner>
<div class="course">
<dl>
<dt><img src="https://webapp-pub.ezijing.com/project/vst/icon_zyjs_01.png" /></dt>
<dd>
<h4>职业名称</h4>
<p>互联网营销师</p>
</dd>
</dl>
<dl>
<dt><img src="https://webapp-pub.ezijing.com/project/vst/icon_zyjs_02.png" /></dt>
<dd>
<h4>职业编码</h4>
<p>4-01-02-07</p>
</dd>
</dl>
<dl>
<dt><img src="https://webapp-pub.ezijing.com/project/vst/icon_zyjs_03.png" /></dt>
<dd>
<h4>认证背景</h4>
<p>
2020年人社部发布9个新职业中,互联网营销师到2025年需求将达到约4500万人,人才缺口约在4000万人左右。互联网营销师职业的设立,有利于健全从业人员的素质化教育和行业规范化的建设,进一步满足净化网络商业环境的需求。
</p>
</dd>
</dl>
<dl>
<dt><img src="https://webapp-pub.ezijing.com/project/vst/icon_zyjs_04.png" /></dt>
<dd>
<h4>职业定义</h4>
<p>在数字化信息平台上,运用网络的交互性与传播公信力,对企业产品进行营销推广的人员。</p>
</dd>
</dl>
<dl>
<dt><img src="https://webapp-pub.ezijing.com/project/vst/icon_zyjs_05.png" /></dt>
<dd>
<h4>职业能力特征</h4>
<p>
具有较强的学习、理解、分析、计算及判断能力,具有一定的空间感,色觉正常、语言表达正常,手指、手臂灵活,形体动作协调性好。
</p>
</dd>
</dl>
<dl>
<dt><img src="https://webapp-pub.ezijing.com/project/vst/icon_zyjs_06.png" /></dt>
<dd>
<h4>主要工作内容</h4>
<p>
1、研究数字化平台的用户定位和运营方式<br />2、接受企业委托,对企业资质和产品质量等信息进行审核<br />
3、选定相关产品,设计策划营销方案,制定佣金结算方式<br />
4、搭建数字化营销场景,通过直播或短视频等形式对产品进行多平台营销推广<br />
5、提升自身传播影响力,加强用户群体活跃度,促进产品从关注到购买的转化率<br />6、签订销售订单,结算销售货款<br />
7、负责协调产品的售后服务<br />8、采集分析销售数据,对企业或产品提出优化性建议
</p>
</dd>
</dl>
</div>
<el-tabs class="my-tabs">
<el-tab-pane label="职业介绍">
<Job />
</el-tab-pane>
<el-tab-pane label="项目介绍">
<Project />
</el-tab-pane>
<el-tab-pane label="报名流程">
<Process />
</el-tab-pane>
</el-tabs>
</template>
</AppContainer>
</template>
......
<template>
<div class="course">
<dl>
<dt><img src="https://webapp-pub.ezijing.com/project/vst/icon_zyjs_01.png" /></dt>
<dd>
<h4>职业名称</h4>
<p>工业机器人系统操作员</p>
</dd>
</dl>
<dl>
<dt><img src="https://webapp-pub.ezijing.com/project/vst/icon_zyjs_02.png" /></dt>
<dd>
<h4>职业编码</h4>
<p>6-30-99-00</p>
</dd>
</dl>
<dl>
<dt><img src="https://webapp-pub.ezijing.com/project/vst/icon_zyjs_03.png" /></dt>
<dd>
<h4>认证背景</h4>
<p>
2019年4月3日,工业机器人系统操作员新职业的信息发布,使国家职业分类体系更加科学完善,更好地服务于国民经济信息统计、人力资源开发管理等工作,为国家制定相关产业发展政策、开展就业人口结构变化和劳动力供求状况研究分析、制定人力资源市场政策提供了科学依据。对用人单位和从业人员的影响主要体现在:规范了用人单位关于工业机器人系统操作员的岗位设置、人员招录、员工培训等工作,使从业人员的职业发展规划更加明晰,有利于促进其提升职业能力和素养。
</p>
<p>
新时代的职业选择一直在走向多元化、个性化,工业机器人系统操作员职业岗位的设立,不仅为社会创造更多的就业机会,也能让经济社会发展迸发出更为强大的活力与创造力。
</p>
</dd>
</dl>
<dl>
<dt><img src="https://webapp-pub.ezijing.com/project/vst/icon_zyjs_04.png" /></dt>
<dd>
<h4>职业定义</h4>
<p>
使用示教器、操作面板等人机交互设备及相关机械工具对工业机器人、工业机器人工作站或系统进行装配、编程、调试、工艺参数更改、工装夹具更换及其他辅助作业的人员
</p>
</dd>
</dl>
<dl>
<dt><img src="https://webapp-pub.ezijing.com/project/vst/icon_zyjs_05.png" /></dt>
<dd>
<h4>职业能力特征</h4>
<p>
具有较强的学习、表达、计算、操作和逻辑思维能力,具有一定的空间感、形体知觉,色觉正常,手指、手臂灵活,动作协调性强。
</p>
</dd>
</dl>
<dl>
<dt><img src="https://webapp-pub.ezijing.com/project/vst/icon_zyjs_06.png" /></dt>
<dd>
<h4>主要工作内容</h4>
<p>
1.按照工艺指导文件等相关文件的要求完成作业准备;<br />
2.按照装配图、电气图、工艺文件等相关文件的要求,使用工具、仪器等进行工业机器人工作站或系统装配;<br />
3.使用示教器、计算机、组态软件等相关软硬件工具对工业机器人、可编程逻辑控制器、人机交互界面、电机等设备和视觉、位置等传感器进行程序编制、单元功能调试和生产联调;<br />
4.使用示教器、操作面板等人机交互设备进行生产过程的参数设定与修改、菜单功能的选择与配置、程序的选择与切换;<br />
5.进行工业机器人系统工装夹具等装置的检查、确认、更换与复位;<br />
6.观察工业机器人工作站或系统的状态变化并做相应操作,遇到异常情况执行急停操作等;<br />
7.填写设备装调、操作等记录。
</p>
</dd>
</dl>
</div>
</template>
<script lang="ts" setup>
const list = [
{ desc: '选择待报考认证的项目' },
{ desc: '在考试培训单位报名,参加考前培训' },
{ desc: '完成课程学习后,开具培训课时证明' },
{ desc: '提交培训证明并重新填写报名表' },
{ desc: '等待分配考场' },
{ desc: '考前1-2周打印准考证' },
{ desc: '参加线下试卷考试或机考' },
{ desc: '考试成绩于考试结束后3-4周出成绩。' }
]
</script>
<template>
<div class="process">
<dl v-for="(item, index) in list" :key="index">
<dt>{{ index + 1 }}</dt>
<dd>{{ item.desc }}</dd>
</dl>
</div>
</template>
<template>
<article class="article">
<p>
为贯彻落实党中央、国务院重大决策部署和《“十四五”数字经济发展规划》的有关要求,加强数字经济领域产业人员的能力培训,紫荆教育充分发挥自身优势开展数字经济领域的职业技能培训,探索人才评价的新模式,优化培训方式及培训流程,并为此专门成立了数字职业技能培训中心。
</p>
<p>
数字职业技能培训中心联合院校共同开展多元化人才培养模式,构建“专业培养+技能实训+学历提升的职业培训体系,培养高层次数字化技能型人才。与此同时,紫荆教育与企业进行了深度融合,共同搭建职业技能提升平台,提供线上线下一体化的解决方案,培养高素质的数字经济职业技能人才,助力企业实现人才的数字化转型。
</p>
</article>
</template>
<!-- 职业介绍 -->
<script lang="ts" setup>
import menus from '../menus'
import Job from '../components/Job.vue'
import Project from '../components/Project.vue'
import Process from '../components/Process.vue'
</script>
<template>
<AppContainer :menus="menus">
<AppContainer>
<template #banner><img src="https://webapp-pub.ezijing.com/project/vst/banner_zy.png" /></template>
<template #inner>
<div class="course">
<dl>
<dt><img src="https://webapp-pub.ezijing.com/project/vst/icon_zyjs_01.png" /></dt>
<dd>
<h4>职业名称</h4>
<p>工业机器人系统操作员</p>
</dd>
</dl>
<dl>
<dt><img src="https://webapp-pub.ezijing.com/project/vst/icon_zyjs_02.png" /></dt>
<dd>
<h4>职业编码</h4>
<p>6-30-99-00</p>
</dd>
</dl>
<dl>
<dt><img src="https://webapp-pub.ezijing.com/project/vst/icon_zyjs_03.png" /></dt>
<dd>
<h4>认证背景</h4>
<p>
2019年4月3日,工业机器人系统操作员新职业的信息发布,使国家职业分类体系更加科学完善,更好地服务于国民经济信息统计、人力资源开发管理等工作,为国家制定相关产业发展政策、开展就业人口结构变化和劳动力供求状况研究分析、制定人力资源市场政策提供了科学依据。对用人单位和从业人员的影响主要体现在:规范了用人单位关于工业机器人系统操作员的岗位设置、人员招录、员工培训等工作,使从业人员的职业发展规划更加明晰,有利于促进其提升职业能力和素养。
</p>
<p>
新时代的职业选择一直在走向多元化、个性化,工业机器人系统操作员职业岗位的设立,不仅为社会创造更多的就业机会,也能让经济社会发展迸发出更为强大的活力与创造力。
</p>
</dd>
</dl>
<dl>
<dt><img src="https://webapp-pub.ezijing.com/project/vst/icon_zyjs_04.png" /></dt>
<dd>
<h4>职业定义</h4>
<p>
使用示教器、操作面板等人机交互设备及相关机械工具对工业机器人、工业机器人工作站或系统进行装配、编程、调试、工艺参数更改、工装夹具更换及其他辅助作业的人员
</p>
</dd>
</dl>
<dl>
<dt><img src="https://webapp-pub.ezijing.com/project/vst/icon_zyjs_05.png" /></dt>
<dd>
<h4>职业能力特征</h4>
<p>
具有较强的学习、表达、计算、操作和逻辑思维能力,具有一定的空间感、形体知觉,色觉正常,手指、手臂灵活,动作协调性强。
</p>
</dd>
</dl>
<dl>
<dt><img src="https://webapp-pub.ezijing.com/project/vst/icon_zyjs_06.png" /></dt>
<dd>
<h4>主要工作内容</h4>
<p>
1.按照工艺指导文件等相关文件的要求完成作业准备;<br />
2.按照装配图、电气图、工艺文件等相关文件的要求,使用工具、仪器等进行工业机器人工作站或系统装配;<br />
3.使用示教器、计算机、组态软件等相关软硬件工具对工业机器人、可编程逻辑控制器、人机交互界面、电机等设备和视觉、位置等传感器进行程序编制、单元功能调试和生产联调;<br />
4.使用示教器、操作面板等人机交互设备进行生产过程的参数设定与修改、菜单功能的选择与配置、程序的选择与切换;<br />
5.进行工业机器人系统工装夹具等装置的检查、确认、更换与复位;<br />
6.观察工业机器人工作站或系统的状态变化并做相应操作,遇到异常情况执行急停操作等;<br />
7.填写设备装调、操作等记录。
</p>
</dd>
</dl>
</div>
<el-tabs class="my-tabs">
<el-tab-pane label="职业介绍">
<Job />
</el-tab-pane>
<el-tab-pane label="项目介绍">
<Project />
</el-tab-pane>
<el-tab-pane label="报名流程">
<Process />
</el-tab-pane>
</el-tabs>
</template>
</AppContainer>
</template>
......
......@@ -7,7 +7,7 @@ const router = createRouter({
return { top: 0 }
},
history: createWebHistory(),
routes: [{ path: '/:pathMatch(.*)*', redirect: '/' }]
routes: [{ path: '/:pathMatch(.*)*', redirect: '/internet/index' }]
})
// router.beforeEach((to, from, next) => {
......
......@@ -3,6 +3,7 @@ import type { RouteRecordRaw } from 'vue-router'
export interface UserState {
id: string
avatar: string
email: string
mobile: string
realname: string
nickname: string
......
......@@ -8,7 +8,7 @@ import checker from 'vite-plugin-checker'
export default defineConfig(({ mode }) => {
return {
base: mode === 'prod' ? 'https://webapp-pub.ezijing.com/website/prod/vst/' : '/',
base: mode === 'prod' ? 'https://webapp-pub.ezijing.com/website/prod/vst-saas/' : '/',
plugins: [checker({ eslint: { lintCommand: 'eslint "./src/**/*.{vue,js,jsx,ts,tsx}"' } }), vue()],
server: {
open: true,
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论