Browse Source

update

test
Soleilw 1 year ago
parent
commit
db46f3ee33
41 changed files with 1316 additions and 443 deletions
  1. 69
    0
      src/components/job/card/index.vue
  2. 71
    0
      src/components/job/detail/index.vue
  3. 40
    0
      src/components/job/internship/index.vue
  4. 48
    46
      src/components/job/list/index.vue
  5. 1
    1
      src/components/job/search/index.vue
  6. 77
    0
      src/components/job/swiper/index.vue
  7. 107
    0
      src/components/job/talents/index.vue
  8. 76
    0
      src/components/layout/footer/index.vue
  9. 15
    113
      src/components/layout/index.vue
  10. 14
    15
      src/components/layout/sider/aSider.vue
  11. 0
    79
      src/components/layout/swiper/index.vue
  12. 0
    59
      src/components/layout/tabs/index.vue
  13. 35
    0
      src/hooks/common.d.ts
  14. 0
    0
      src/hooks/index.ts
  15. 50
    0
      src/hooks/useAsRouter.ts
  16. 109
    0
      src/hooks/useCommon.ts
  17. 24
    0
      src/hooks/useMenu.ts
  18. 156
    2
      src/router/dynamic.ts
  19. 33
    0
      src/router/routerList.ts
  20. 3
    21
      src/router/routes.ts
  21. 3
    14
      src/store/mutations.ts
  22. 1
    6
      src/store/state.ts
  23. 1
    3
      src/store/types.ts
  24. 3
    0
      src/style.css
  25. 8
    0
      src/views/about/index.vue
  26. 8
    0
      src/views/expert/index.vue
  27. 2
    7
      src/views/home/index.vue
  28. 0
    76
      src/views/home/swiper/index.vue
  29. 13
    0
      src/views/job/company/index.vue
  30. 73
    0
      src/views/job/download/index.vue
  31. 19
    0
      src/views/job/home/index.vue
  32. 8
    0
      src/views/job/homemake/index.vue
  33. 45
    1
      src/views/job/index.vue
  34. 77
    0
      src/views/job/information/index.vue
  35. 70
    0
      src/views/job/invite-meet/index.vue
  36. 17
    0
      src/views/job/personal/index.vue
  37. 8
    0
      src/views/law-advice/index.vue
  38. 8
    0
      src/views/news/index.vue
  39. 8
    0
      src/views/relationship/index.vue
  40. 8
    0
      src/views/talent-mentor/index.vue
  41. 8
    0
      src/views/train/index.vue

+ 69
- 0
src/components/job/card/index.vue View File

@@ -0,0 +1,69 @@
<template>
<div class="job-box">
<div class="job-title">
<div class="aaaa mt10">
<div>前端工程师</div>
<div>500000-7000元</div>
</div>
<div>
<a-tag>Tag 1</a-tag>
<a-tag>Tag 1</a-tag>
<a-tag>Tag 1</a-tag>
<a-tag>Tag 1</a-tag>
</div>
</div>
<div class="job-company">
<div class="aaaa mt10">
<div>中山市海港城安域有限公司</div>
<div>查看更多</div>
</div>
<div>
小榄镇
</div>
</div>
</div>
</template>

<script>
</script>

<style lang="less" scoped>
.job-box {
display: flex;
flex-direction: column;
justify-content: space-around;
// align-items: center;
width: 100%;
.job-title {
padding: 20px;
background-color: #ffffff;
.aaaa {
display: flex;
justify-content: space-between;
}
}
.job-company {
padding: 20px;
background-color: #cccccc;
.aaaa {
display: flex;
justify-content: space-between;
}
}

}

.mt10 {
margin-bottom: 10px;
}


</style>

+ 71
- 0
src/components/job/detail/index.vue View File

@@ -0,0 +1,71 @@
<template>
<a-modal v-model:visible="visible" @ok="handleOk" :footer="null" title="职位详情">
<!-- justify flex 布局下的水平排列方式:start end center space-around space-between -->
<!-- align flex 布局下的垂直对齐方式:top middle bottom -->
<div style="margin-top: 30px;">
<a-row :gutter="[10,10]" type="flex" justify="space-between">
<a-col span="14">
<a-row :gutter="[10,10]">
<a-col span="24">
<a-row :gutter="[10,10]" type="flex" justify="space-between">
<a-col>
前端工程师
</a-col>
<a-col>
2000-1000000
</a-col>
</a-row>
</a-col>
<a-col span="24">
<a-row :gutter="[10,10]" type="flex">
<a-col span="6">
<a-tag>Tag 1</a-tag>
</a-col>
<a-col span="6">
<a-tag>Tag 1</a-tag>
</a-col>
<a-col span="6">
<a-tag>Tag 1</a-tag>
</a-col>
</a-row>
</a-col>
</a-row>
</a-col>
<a-col span="10">
<div style="height: 100%;display: flex;align-items: center;justify-content: flex-end;">
<a-button>
<StarOutlined />
收藏
</a-button>
<a-button>
投简历
</a-button>
</div>
</a-col>
</a-row>
<div style="margin-top: 30px;">
<div>职位描述:</div>
<!-- <div v-html=""></div> -->
</div>
</div>
</a-modal>
</template>

<script setup lang="ts">
import { ref, computed, onMounted } from 'vue';
import { StarOutlined } from '@ant-design/icons-vue';
let visible = ref(false)
onMounted(() => {

})
</script>

<style scoped lang="less">
:deep(.ant-btn) {
border-radius: 0 !important;
}
</style>

+ 40
- 0
src/components/job/internship/index.vue View File

@@ -0,0 +1,40 @@
<template>
<!-- <div style="display: flex;align-items: center;justify-content: center;padding: 30px;font-size: 36px;">精选职位</div> -->
<a-tabs v-model:activeKey="activeKey">
<a-tab-pane key="1" tab="企业推荐">
<div class="company-box">
<a-row :gutter="[10,10]">
<a-col v-for="(item, index) in companyList">
{{item.name}}
</a-col>
</a-row>
</div>
</a-tab-pane>
<a-tab-pane key="2" tab="见习基地" force-render>
<div class="company-box">
<a-row :gutter="[10,10]">
<a-col v-for="(item, index) in companyList">
{{item.name}}
</a-col>
</a-row>
</div>
</a-tab-pane>
</a-tabs>
</template>

<script setup lang="ts">
import { ref, computed, onMounted } from 'vue';
let companyList = ref<object[]>([{name: '中山海港城'},{name: '中山安域网络有限公司'},{name: '中山按与'},{name: '中山按与'},{name: '中山按与'},{name: '中山按与'},{name: '中山按与'},{name: '中山按与'},{name: '中山按与'},{name: '中山按与'},{name: '中山按与'},{name: '中山按与'},{name: '中山按与'},{name: '中山按与'},{name: '中山按与'},{name: '中山按与'},{name: '中山按与'},{name: '中山按与'},{name: '中山按与'},{name: '中山按与'},{name: '中山按与'},{name: '中山按与'},{name: '中山按与'},{name: '中山按与'},{name: '中山按与'},{name: '中山按与'},{name: '中山按与'},{name: '中山按与'},{name: '中山按与'},{name: '中山按与'},{name: '中山按与'},{name: '中山按与'},{name: '中山按与'},{name: '中山按与'},{name: '中山按与'},{name: '中山按与'},{name: '中山按与'},{name: '中山按与'}])
onMounted(() => {
})
</script>

<style lang="less" scoped>
.company-box {
width: 100%;
padding: 20px;
background-color: #fff;
}
</style>

+ 48
- 46
src/components/job/list/index.vue View File

@@ -1,32 +1,15 @@
<template>
<!-- <div style="display: flex;align-items: center;justify-content: center;padding: 30px;font-size: 36px;">精选职位</div> -->
<a-tabs v-model:activeKey="activeKey">
<!-- <a-tabs v-model:activeKey="activeKey">
<a-tab-pane key="1" tab="最新招聘">
<a-row :gutter="[10,10]">
<a-col span="8" v-for="(item, index) in companyList">
<div class="job-box">
<div class="job-title">
<div class="aaaa mt10">
<div>前端工程师</div>
<div>5000-7000元</div>
</div>
<div>
<a-tag>Tag 1</a-tag>
<a-tag>Tag 1</a-tag>
<a-tag>Tag 1</a-tag>
<a-tag>Tag 1</a-tag>
</div>
</div>
<div class="job-company">
<div class="aaaa mt10">
<div>中山市海港城安域有限公司</div>
<div>查看更多</div>
</div>
<div>
小榄镇
</div>
</div>
</div>
<job-card></job-card>
</a-col>
</a-row>
<a-row :gutter="[10,10]">
<a-col span="12" v-for="(item, index) in companyList">
<job-card></job-card>
</a-col>
</a-row>
<div style="display: flex;align-items: center;justify-content: center;padding: 30px;font-size: 24px;">查看更多</div>
@@ -34,19 +17,52 @@
<a-tab-pane key="2" tab="急招职位" force-render>Content of Tab Pane 2</a-tab-pane>
<a-tab-pane key="3" tab="高薪职位">Content of Tab Pane 3</a-tab-pane>
<a-tab-pane key="3" tab="校园招聘">Content of Tab Pane 3</a-tab-pane>
</a-tabs>
</a-tabs> -->
<!-- <a-row :gutter="[10,10]">
<a-col span="12" v-for="(item, index) in companyList">
<job-card></job-card>
</a-col>
<a-col span="24" >
<a-pagination v-model:current="current" :total="500" style="text-align: center;"/>
</a-col>
</a-row> -->
<!-- 企业显示 -->
<a-tabs v-model:activeKey="activeKey">
<a-tab-pane key="1" tab="推荐人才">
<a-row :gutter="[10,10]">
<a-col span="12" v-for="(item, index) in companyList">
<job-talents></job-talents>
</a-col>
</a-row>
<div style="display: flex;align-items: center;justify-content: center;padding: 30px;font-size: 24px;">查看更多
</div>
<a-row :gutter="[10,10]">
<a-col span="24" v-for="(item, index) in companyList">
<job-talents></job-talents>
</a-col>
<a-col span="24">
<a-pagination v-model:current="current" :total="500" style="text-align: center;" />
</a-col>
</a-row>
</a-tab-pane>
<a-tab-pane key="2" tab="最新简历" force-render>Content of Tab Pane 2</a-tab-pane>
<a-tab-pane key="3" tab="应届毕业生">Content of Tab Pane 3</a-tab-pane>
</a-tabs>
</template>

<script setup lang="ts">
import { ref, computed, onMounted } from 'vue';
let companyList = ref<object[]>([{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{}])
import JobCard from '@/components/job/card/index.vue'
import JobTalents from '@/components/job/talents/index.vue'
let companyList = ref<object[]>([{}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}])
let data1 = ref([])
let data2 = ref([])
let showData = ref(false)
let current = ref(6)
onMounted(() => {
if (companyList.value.length > 9) {
companyList.value = companyList.value.slice(0, 9)
companyList.value = companyList.value.slice(0, 8)
} else {
data1.value = companyList.value;
showData.value = false;
@@ -61,19 +77,21 @@
justify-content: space-around;
// align-items: center;
width: 100%;
.job-title {
padding: 20px;
background-color: #ffffff;

.aaaa {
display: flex;
justify-content: space-between;
}
}
.job-company {
padding: 20px;
background-color: #cccccc;

.aaaa {
display: flex;
justify-content: space-between;
@@ -85,20 +103,4 @@
.mt10 {
margin-bottom: 10px;
}

:slotted(.ant-tabs-nav-wrap) {
width: 100%;
flex: none !important;
justify-content: center !important;
}
:slotted(.ant-tabs-nav) {
background-color: #fff;
}

</style>

+ 1
- 1
src/components/job/search/index.vue View File

@@ -1,5 +1,5 @@
<template>
<a-row :gutter="[10,16]" type="flex" justify="center">
<a-row :gutter="[10,16]" type="flex" justify="center" style="margin-bottom: 30px;">
<a-col span="18">
<a-input v-model:value="value2" placeholder="请输入关键字">
<template #addonBefore>

+ 77
- 0
src/components/job/swiper/index.vue View File

@@ -0,0 +1,77 @@
<template>
<div class="login-content">
<a-image width="100vw" height="41vh"
src="https://mdn.alipayobjects.com/yuyan_qk0oxh/afts/img/V-_oS6r-i7wAAAAAAAAAAAAAFl94AQBr" />
<div class="login-position content-padding-inline">
<a-row type="flex" justify="center">
<a-col span="18">
<a-row type="flex" justify="end">
<a-col span="5">
<div class="login-box">
<a-tabs v-model:activeKey="activeKey">
<a-tab-pane key="1" tab="我要找工作">
<a-row :gutter="[0, 16]">
<a-col span="24">
<a-input v-model:value="value" placeholder="账号" />
</a-col>
<a-col span="24">
<a-input v-model:value="value" placeholder="密码" />
</a-col>
<a-col span="24">
<a-input v-model:value="value" placeholder="验证码" />
</a-col>
<a-col span="24">
<a-button type="primary" block>登录/注册</a-button>
</a-col>
<a-col span="24">
忘记密码?
</a-col>
</a-row>
</a-tab-pane>
<a-tab-pane key="2" tab="我要招聘" force-render>我要招聘</a-tab-pane>
</a-tabs>
</div>
</a-col>
</a-row>
</a-col>
</a-row>
</div>
</div>
</template>

<script setup lang="ts">
import { ref, computed } from 'vue';
</script>

<style lang="less" scoped>
.login-content {
position: relative;
width: 100%;
height: 41vh;

.login-position {
position: absolute;
top: 30px;
left: 0;
right: 0;
bottom: 0;

.login-box {
display: flex;
align-items: center;
justify-content: center;
padding: 20px 30px;
border-radius: 10px;
background-color: aliceblue;
}
}
}

:deep(.ant-tabs-nav-wrap) {
flex: none !important;
}

:deep(.ant-tabs-nav) {
justify-content: center !important;
}
</style>

+ 107
- 0
src/components/job/talents/index.vue View File

@@ -0,0 +1,107 @@
<template>
<div class="talent-box">
<a-list item-layout="vertical">
<a-list-item>
<a-list-item-meta>
<template #title>
人才
</template>
<template #description>
<div>
Text
<a-divider type="vertical" />
<a href="#">Link</a>
<a-divider type="vertical" />
<a href="#">Link</a>
</div>
</template>
<template #avatar>
<a-avatar src="https://zos.alipayobjects.com/rmsportal/ODTLcjxAfvqbxHnVXCYX.png" :size="48" />
</template>
</a-list-item-meta>
<div style="margin-left: 64px;">
1、环境更加
</div>
</a-list-item>
</a-list>

<!-- <a-list item-layout="horizontal" :split="false" position="bottom">
<a-list-item>
<template #actions>
<a-button>
<StarOutlined />
收藏
</a-button>
<a-button>
投简历
</a-button>
</template>
<a-list-item-meta>
<template #title>
人才
</template>
<template #description>
<div>
Text
<a-divider type="vertical" />
<a href="#">Link</a>
<a-divider type="vertical" />
<a href="#">Link</a>
<div>我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我</div>
</div>
</template>
<template #avatar>
<a-avatar src="https://zos.alipayobjects.com/rmsportal/ODTLcjxAfvqbxHnVXCYX.png" :size="48" />
</template>
</a-list-item-meta>
<div style="width: 30%;">
<a-row>
<a-col span="24">
地点:广东省,中山市
</a-col>
<a-col span="24">
期望:环境更加环境更加环境更加环境更
</a-col>
<a-col span="24">
时间:2023-12-19
</a-col>
</a-row>
</div>
</a-list-item>
</a-list> -->
</div>
</template>

<script setup lang="ts">
import { StarOutlined } from '@ant-design/icons-vue';
</script>

<style scoped lang="less">
.talent-box {
background-color: #fff;
}
.applyRouteStyles(@routeName) {
& when (@routeName = company) {
:deep(.ant-list-item-meta) {
flex: none !important;
width: 40% !important;
}
:deep(.ant-list-item-action) {
margin-inline-start: 0 !important;
}
}
}
// :deep(.ant-list-item-meta) {
// flex: none !important;
// width: 40% !important;
// }
// :deep(.ant-list-item-action) {
// margin-inline-start: 0 !important;
// }

</style>

+ 76
- 0
src/components/layout/footer/index.vue View File

@@ -0,0 +1,76 @@
<template>
<a-row type="flex" justify="center">
<a-col span="18">
<a-row gutter="20" type="flex" justify="space-between">
<a-col span="8">
<a-row gutter="20">
<a-col sapn="12">
<div style="display: flex;flex-direction: column;align-items: flex-start;">
<div>关于我们</div>
<div style="display: flex;flex-direction: column;">
<div>关于我们</div>
<div>联系方式</div>
<div>公司地图</div>
<div>关于我们</div>
<div>收费方式</div>
<div>汇款方式</div>
</div>
</div>
</a-col>
<a-col sapn="12">
<div
style="display: flex;flex-direction: column;align-items: flex-start;justify-content: center;">
<div>快速注册</div>
<div style="display: flex;flex-direction: column;">
<div>单位用户注册</div>
<div>个人用户注册</div>
</div>
</div>
</a-col>
</a-row>
<a-row style="margin-top: 30px;">
<a-col sapn="24">
<a-typography-paragraph style="font-size: 12px; text-align: left;"
content="中山求职 招聘 到菊城人才网 本网站实名:中山市菊城人才网" />
<a-typography-paragraph style="font-size: 12px; text-align: left;"
content="邮编:zsjcjob@163.com 传真号码:0760-22236922 0760-22236026" />
<a-typography-paragraph style="font-size: 12px; text-align: left;"
content="Copyright@2002-2024 菊城人才网 All Right Reserved 粤ICP备05092134号" />
</a-col>
</a-row>
</a-col>
<a-col span="4">
<div style="display: flex;flex-direction: column;align-items: flex-start;">
<div>上班时间</div>
<div style="display: flex;flex-direction: column;align-items: flex-start;">
<div>星期一至星期五:8:30-17:30</div>
<div>星期六:9:00-16:00</div>
</div>
</div>
</a-col>
<a-col span="8">
<div
style="display: flex;flex-direction: column;align-items: flex-end;justify-content: space-between;height: 100%;">
<div style="display: flex;flex-direction: column;align-items: flex-start;">
<div>联系电话</div>
<div>0760-22236225、22236226</div>
<div>0760-22236225、22236226</div>
</div>
<div style="display: flex;flex-direction: column;align-items: center;">
<a-image :width="100"
src="https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png" />
<div>官方公众号</div>
</div>
</div>
</a-col>
</a-row>
</a-col>
</a-row>
</template>

<script>
</script>

<style scoped lang="less">
</style>

+ 15
- 113
src/components/layout/index.vue View File

@@ -1,7 +1,7 @@
<template>
<div style="min-height: 100vh;">
<a-layout class="layout" style="width: 100%; display: flex;align-items: center;justify-items: center;">
<a-layout-header style="position: fixed; z-index: 99;background: #000;width: 100%;">
<a-layout-header style="position: fixed; z-index: 99;background: #0a130d;width: 100%;">
<a-row type="flex" justify="center">
<a-col span="18">
<a-row>
@@ -9,28 +9,7 @@
<div class="logo" />
</a-col>
<a-col span="16">
<a-menu theme="dark" mode="horizontal" v-model:selectedKeys="selectedKeys"
:style="{ lineHeight: '64px' }">
<a-menu-item>首页</a-menu-item>
<a-menu-item @click="toRouter">求职招聘</a-menu-item>
<a-sub-menu>
<template #title>关于菊城人才</template>
<a-menu-item-group title="Item 1">
<a-menu-item key="setting:1">Option 1</a-menu-item>
<a-menu-item key="setting:2">Option 2</a-menu-item>
</a-menu-item-group>
<a-menu-item-group title="Item 2">
<a-menu-item key="setting:3">Option 3</a-menu-item>
<a-menu-item key="setting:4">Option 4</a-menu-item>
</a-menu-item-group>
</a-sub-menu>
<a-menu-item key="1">法律咨询</a-menu-item>
<a-menu-item key="2">人才导师</a-menu-item>
<a-menu-item key="3">专家组</a-menu-item>
<a-menu-item key="2">培训列表</a-menu-item>
<a-menu-item key="3">党群关系</a-menu-item>
<a-menu-item key="3">新闻中心</a-menu-item>
</a-menu>
<a-sider></a-sider>
</a-col>
<a-col span="4">
<div
@@ -42,86 +21,13 @@
</a-row>
</a-layout-header>
<!-- <layout-swiper ></layout-swiper> -->
<layout-tabs></layout-tabs>
<!-- <layout-tabs></layout-tabs> -->
<a-layout-content>
<div>
<a-row type="flex" justify="center">
<a-col span="18">
<router-view></router-view>
</a-col>
</a-row>
</div>
<router-view></router-view>
</a-layout-content>
<!-- <a-layout-footer>
<a-row type="flex" justify="center">
<a-col span="18">
<a-row gutter="20" type="flex" justify="space-between">
<a-col span="8">
<a-row gutter="20">
<a-col sapn="12">
<div style="display: flex;flex-direction: column;align-items: flex-start;">
<div>关于我们</div>
<div style="display: flex;flex-direction: column;">
<div>关于我们</div>
<div>联系方式</div>
<div>公司地图</div>
<div>关于我们</div>
<div>收费方式</div>
<div>汇款方式</div>
</div>
</div>
</a-col>
<a-col sapn="12">
<div
style="display: flex;flex-direction: column;align-items: flex-start;justify-content: center;">
<div>快速注册</div>
<div style="display: flex;flex-direction: column;">
<div>单位用户注册</div>
<div>个人用户注册</div>
</div>
</div>
</a-col>
</a-row>
<a-row style="margin-top: 30px;">
<a-col sapn="24">
<a-typography-paragraph style="font-size: 12px; text-align: left;"
content="中山求职 招聘 到菊城人才网 本网站实名:中山市菊城人才网" />
<a-typography-paragraph style="font-size: 12px; text-align: left;"
content="邮编:zsjcjob@163.com 传真号码:0760-22236922 0760-22236026" />
<a-typography-paragraph style="font-size: 12px; text-align: left;"
content="Copyright@2002-2024 菊城人才网 All Right Reserved 粤ICP备05092134号" />
</a-col>
</a-row>
</a-col>
<a-col span="4">
<div style="display: flex;flex-direction: column;align-items: flex-start;">
<div>上班时间</div>
<div style="display: flex;flex-direction: column;align-items: flex-start;">
<div>星期一至星期五:8:30-17:30</div>
<div>星期六:9:00-16:00</div>
</div>
</div>
</a-col>
<a-col span="8">
<div
style="display: flex;flex-direction: column;align-items: flex-end;justify-content: space-between;height: 100%;">
<div style="display: flex;flex-direction: column;align-items: flex-start;">
<div>联系电话</div>
<div>0760-22236225、22236226</div>
<div>0760-22236225、22236226</div>
</div>
<div style="display: flex;flex-direction: column;align-items: center;">
<a-image :width="100"
src="https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png" />
<div>官方公众号</div>
</div>
</div>
</a-col>
</a-row>
</a-col>
</a-row>

</a-layout-footer> -->
<a-layout-footer>
<a-footer></a-footer>
</a-layout-footer>
</a-layout>
</div>

@@ -129,13 +35,10 @@
<script lang="ts" setup>
import { ref, computed } from 'vue';
import { router } from '@/router';
import LayoutSwiper from '@/components/layout/swiper/index.vue'
import LayoutTabs from '@/components/layout/tabs/index.vue'
// import ASider from './sider/aSider.vue';
import AHeader from './header/aHeader.vue';
import ASider from './sider/aSider.vue';
import AFooter from './footer/index.vue';
import { MenuUnfoldOutlined, MenuFoldOutlined, } from '@ant-design/icons-vue';


const toRouter = () => {
router.push('/job')
}
@@ -145,6 +48,7 @@
/* 设置滚动条宽度 */
width: 0px;
}

.logo {
float: left;
width: 120px;
@@ -152,18 +56,16 @@
margin: 16px 34px 16px 0;
background: #000;
}
.ant-layout-content {
width: 100%;
padding-inline: 50px;
// padding-inline: 50px;
overflow-y: auto;
background-color: #f0f0f0 !important;
padding-top: 64px;
padding-bottom: 30px;
div {
padding: 30px 0;
}
}

.ant-layout-footer {
// position: absolute;

+ 14
- 15
src/components/layout/sider/aSider.vue View File

@@ -1,20 +1,14 @@
<template>
<a-menu mode="inline" v-model:openKeys="openSubMenu" @openChange="onOpenChange" inlineCollapsed
v-model:selectedKeys="selectedMenu" style="background: #19be6b; height: '90vh';color: #fff;">
<template v-for="(item,index) in menuList">
<a-menu mode="horizontal" v-model:openKeys="openSubMenu" @openChange="onOpenChange"
v-model:selectedKeys="selectedMenu" style="background: #0a130d; height: '90vh';color: #fff;">
<template v-for="(item,index) in LayoutRoute.children">
<template v-if="!item.children">
<a-menu-item :key="item.path" @click="onMenu(item.path)">
<template #icon>
<component :is="item.meta.icon"></component>
</template>
<span>{{item.meta.title}}</span>
</a-menu-item>
</template>
<template v-else>
<a-sub-menu :key="item.path">
<template #icon>
<component :is="item.meta.icon"></component>
</template>
<template #title>{{item.meta.title}}</template>
<template v-for="(twoItem, twoIndex) in item.children">
<a-sub-menu v-if="twoItem.children" :key="twoItem.path">
@@ -35,17 +29,22 @@
</template>
<script setup lang="ts">
import { ref, onMounted, computed } from 'vue';
import { LayoutRoute } from '@/router/routes';
import { store } from '@/store/index';
import { useMenu } from '@/hooks/useMenu';
let { menuList, onMenu, routerCur, routerArrayCur } = useMenu();
const selectedMenu = computed(() => {
let { onMenu, routerCur, routerArrayCur, routerArrayParentChildCur } = useMenu();
let selectedMenu = computed(() => {
let newSelectedMenu = [routerCur()];
return newSelectedMenu;
})

const openSubMenu = computed(() => {
let newOpenSubMenu = [routerArrayCur()];
return newOpenSubMenu;
let openSubMenu = computed(() => {
// let newOpenSubMenu = [routerArrayCur()];
store.commit('getRouteName', {
routeName: routerCur()
})
// return newOpenSubMenu;
})

const onOpenChange = (openKeys) => {

+ 0
- 79
src/components/layout/swiper/index.vue View File

@@ -1,79 +0,0 @@
<template>
<div class="aaa">
<a-image width="100vw" height="46vh"
src="https://mdn.alipayobjects.com/yuyan_qk0oxh/afts/img/V-_oS6r-i7wAAAAAAAAAAAAAFl94AQBr" style="border-bottom: 1px saddlebrown
solid;"/>
</div>
<div class="content">
<a-row type="flex" justify="center">
<a-col span="18">
<a-row type="flex" justify="end">
<a-col span="5">
<div class="login-box">
<a-tabs v-model:activeKey="activeKey">
<a-tab-pane key="1" tab="我要找工作">
<a-row :gutter="[0, 16]">
<a-col span="24">
<a-input v-model:value="value" placeholder="账号" />
</a-col>
<a-col span="24">
<a-input v-model:value="value" placeholder="密码" />
</a-col>
<a-col span="24">
<a-input v-model:value="value" placeholder="验证码" />
</a-col>
<a-col span="24">
<a-button type="primary" block>登录/注册</a-button>
</a-col>
<a-col span="24">
忘记密码?
</a-col>
</a-row>
</a-tab-pane>
<a-tab-pane key="2" tab="我要招聘" force-render>我要招聘</a-tab-pane>
</a-tabs>
</div>
</a-col>
</a-row>
</a-col>
</a-row>
</div>
</template>

<script setup lang="ts">
import { ref, computed } from 'vue';
</script>

<style lang="less">
.aaa {
position: relative;
}

.content {
// display: none;
position: absolute;
top: 94px;
left: 0;
right: 0;
bottom: 30px;
height: 46vh;
padding-inline: 50px;
}

.login-box {
display: flex;
align-items: center;
justify-content: center;
padding: 20px 30px;
border-radius: 10px;
background-color: aliceblue;
}
.ant-tabs-nav-wrap {
flex: none !important;
}
.ant-tabs-nav {
justify-content: center !important;
}
</style>

+ 0
- 59
src/components/layout/tabs/index.vue View File

@@ -1,59 +0,0 @@
<template>
<div class="tabs-content">
<a-row type="flex" justify="center">
<a-col span="24">
<a-tabs v-model:activeKey="activeKey">
<a-tab-pane key="1" tab="求职招聘">Content of Tab Pane 1</a-tab-pane>
<a-tab-pane key="2" tab="个人求职">
<div style="padding-inline: 50px;">
<a-row type="flex" justify="center">
<a-col span="18">
<job-search></job-search>
<job-list></job-list>
</a-col>
</a-row>
</div>
</a-tab-pane>
<a-tab-pane key="3" tab="企业招聘">Content of Tab Pane 3</a-tab-pane>
<a-tab-pane key="3" tab="家政">Content of Tab Pane 3</a-tab-pane>
<a-tab-pane key="3" tab="招聘会">Content of Tab Pane 3</a-tab-pane>
<a-tab-pane key="3" tab="职场资讯">Content of Tab Pane 3</a-tab-pane>
<a-tab-pane key="3" tab="下载专区">Content of Tab Pane 3</a-tab-pane>
</a-tabs>
</a-col>
</a-row>
</div>
</template>

<script setup lang="ts">
import { ref, computed } from 'vue';
import JobSearch from '@/components/job/search/index.vue'
import JobList from '@/components/job/list/index.vue'

let activeKey = ref('2')
</script>

<style lang="less" scoped>
.tabs-content {
position: absolute;
top: 64px;
width: 100%;
// background-color: #f0f0f0;
// padding-inline: 50px;
}

::v-deep(.ant-tabs-nav-wrap) {
width: 100%;
flex: none !important;
justify-content: center !important;
}

::v-deep(.ant-tabs-nav) {
background-color: #fff;
}


.ant-tabs-content-holder {
background-color: #f0f0f0 !important;
}
</style>

+ 35
- 0
src/hooks/common.d.ts View File

@@ -0,0 +1,35 @@
declare namespace CommonType {
type PageType = {
current ?: Number;
pageSize ?: Number;
total ?: Number;
pageSizeOptions ?: String[];
hideOnSinglePage ?: Boolean;
showSizeChanger ?: Boolean;
}
type ModelType = {
title ?: String;
okText : String | '提交';
resetText : String | '重置';
cancelText : String | '取消';
}
type SearchType = {
page ?: Number,
pagesize ?: Number,
sort ?: String,
sortby ?: String,
keyword ?: String
}
type TableType = {
data : Object[],
columns : Object[],
}
type DeleteType = {
id ?: Number
}
}


+ 0
- 0
src/hooks/index.ts View File


+ 50
- 0
src/hooks/useAsRouter.ts View File

@@ -0,0 +1,50 @@
import { ref } from 'vue';
import { router } from '@/router';

export const useAsRouter = () => {
// 获取当前路由
function routerCur() {
return router.currentRoute.value.path
}
// 获取当前路由父路由
function routerArrayCur() {
return router.currentRoute.value.matched[1].path;
}
// 获取当前父路由和子路由
function routerArrayParentChildCur() {
return router.currentRoute.value.matched[1];
}
// 跳转路由
function routerTo(url : string) {
router.push(url)
}

// 匹配路由页面
function routerDynamic(userRouter : string[], originRouter : Object[]) {
const finalRouter = originRouter.filter(item => userRouter.includes(item.name)).map(item => ({ ...item, children: item.children ? routerDynamic(userRouter, item.children) : null }));
return finalRouter;
}

// 添加路由
function routerAdd(route) {
router.addRoute('', route);
}

// 初始化路由
function routerInit() {
return router.options.routes + router.options.routes.LayoutRoute;
}

return {
routerCur,
routerArrayCur,
routerArrayParentChildCur,
routerTo,
routerDynamic,
routerAdd,
routerInit
}
}

+ 109
- 0
src/hooks/useCommon.ts View File

@@ -0,0 +1,109 @@
import { ref } from 'vue';
import { store } from '@/store';
import { useAsRouter } from './useAsRouter'



interface CommonInterface {
model ?: CommonType.ModelType,
page ?: CommonType.PageType
search ?: CommonType.SearchType
table ?: CommonType.TableType
delParam ?: CommonType.DeleteType,

}

export const useCommon = () => {
const { routerTo, routerCur, routerArrayCur } = useAsRouter();
let commomParams = ref<CommonInterface>({
model: {
title: '',
okText: '提交',
resetText: '重置',
cancelText: '取消',
},
page: {
current: 1,
pageSize: 1,
total: 10,
pageSizeOptions: ['10', '20', '30', '40'],
hideOnSinglePage: false,
showSizeChanger: true
},
search: {
page : 1,
pagesize : 10,
sort : 'id',
sortby : 'asc',
keyword : ''
},
table: {
data : [],
columns : [],
},

delParam :{
id: 0
},

// // MENU
// openSubMenu: [],
// menuList: [],
})

let openAddModel = ref<Boolean>(store.state.openModel);
let openOtherModel_1 = ref<Boolean>(store.state.openOtherModel_1);

// 点击菜单获取路由
const onMenu = (path) => {
routerTo(path);
};

// Modal
const hideModal = () => {
store.commit('getOpenModel', {
openAddModel: false
})
}

// 打开添加/编辑对话框
const showModal = () => {
store.commit('getOpenModel', {
openAddModel: true
})
};

const showOtherModal1 = () => {
store.commit('getOpenMoreModel', {
openOtherModel_1: true
})
};

const hideOtherModal1 = () => {
store.commit('getOpenMoreModel', {
openOtherModel_1: false
})
}




return {
store,
commomParams,
openAddModel,
onMenu,
hideModal,
showModal,
openOtherModel_1,
showOtherModal1,
hideOtherModal1,
}
}

+ 24
- 0
src/hooks/useMenu.ts View File

@@ -0,0 +1,24 @@
import { ref } from 'vue';
import { useAsRouter } from './useAsRouter'
import { store } from '@/store'

export const useMenu = () => {
const { routerTo, routerCur, routerArrayCur,
routerArrayParentChildCur } = useAsRouter();

const openSubMenu = ref<string[]>([]);

// 点击菜单获取路由
const onMenu = (path) => {
routerTo(path);
};


return {
routerCur,
routerArrayCur,
routerArrayParentChildCur,
openSubMenu,
onMenu,
}
}

+ 156
- 2
src/router/dynamic.ts View File

@@ -2,7 +2,7 @@ import type { AppRouteRecordRaw, AppRouteModule } from '@/router/types';
import { HomeOutlined } from '@ant-design/icons-vue';
import { routerList } from './routerList';

// 权限管理
// 首页
const HomeRoute : AppRouteRecordRaw = {
path: '/home',
name: 'home',
@@ -11,8 +11,162 @@ const HomeRoute : AppRouteRecordRaw = {
title: '首页',
icon: HomeOutlined
},
};
//求职
const JobRoute : AppRouteRecordRaw = {
path: '/job',
name: 'job',
component: routerList.Job,
meta: {
title: '求职招聘',
icon: HomeOutlined
},
children: [
{
path: '/job/home',
name: 'home',
component: routerList.JobHome,
meta: {
title: '首页',
icon: HomeOutlined
},
},
{
path: '/personal',
name: 'personal',
component: routerList.Personal,
meta: {
title: '个人求职',
icon: HomeOutlined
},
},
{
path: '/company',
name: 'company',
component: routerList.Company,
meta: {
title: '企业招聘',
icon: HomeOutlined
},
},
{
path: '/homemake',
name: 'homemake',
component: routerList.Homemake,
meta: {
title: '家政',
icon: HomeOutlined
},
},
{
path: '/invite/meet',
name: 'inviteMeet',
component: routerList.InviteMeet,
meta: {
title: '招聘会',
icon: HomeOutlined
},
},
{
path: '/information',
name: 'information',
component: routerList.Information,
meta: {
title: '职场资讯',
icon: HomeOutlined
},
},
{
path: '/download',
name: 'download',
component: routerList.Download,
meta: {
title: '下载专区',
icon: HomeOutlined
},
}
]
};

//关于菊城人才
const AboutRoute : AppRouteRecordRaw = {
path: '/about',
name: 'about',
component: routerList.About,
meta: {
title: '关于菊城人才',
icon: HomeOutlined
},
};

// 法律咨询
const LawRoute : AppRouteRecordRaw = {
path: '/law',
name: 'law',
component: routerList.Law,
meta: {
title: '法律咨询',
icon: HomeOutlined
},
};

// 人才导师
const MentorRoute : AppRouteRecordRaw = {
path: '/mentor',
name: 'mentor',
component: routerList.Mentor,
meta: {
title: '人才导师',
icon: HomeOutlined
},
};


export const routesModuleList : AppRouteModule[] = [HomeRoute];
// 专家组
const ExpertRoute : AppRouteRecordRaw = {
path: '/expert',
name: 'expert',
component: routerList.Expert,
meta: {
title: '专家组',
icon: HomeOutlined
},
};

// 培训列表
const TrainRoute : AppRouteRecordRaw = {
path: '/train',
name: 'train',
component: routerList.Train,
meta: {
title: '培训列表',
icon: HomeOutlined
},
};

// 党群关系
const RelationshipRoute : AppRouteRecordRaw = {
path: '/relationship',
name: 'relationship',
component: routerList.Relationship,
meta: {
title: '党群关系',
icon: HomeOutlined
},
};

// 新闻中心
const NewsRoute : AppRouteRecordRaw = {
path: '/news',
name: 'news',
component: routerList.News,
meta: {
title: '新闻中心',
icon: HomeOutlined
},
};

export const routesModuleList : AppRouteModule[] = [HomeRoute, JobRoute, AboutRoute, LawRoute, MentorRoute, ExpertRoute, TrainRoute, RelationshipRoute, NewsRoute];

+ 33
- 0
src/router/routerList.ts View File

@@ -1,6 +1,39 @@
import Home from '@/views/home/index.vue';

import Job from '@/views/job/index.vue';

import JobHome from '@/views/job/home/index.vue';
import Personal from '@/views/job/personal/index.vue';
import Company from '@/views/job/company/index.vue';
import Homemake from '@/views/job/homemake/index.vue';
import InviteMeet from '@/views/job/invite-meet/index.vue';
import Information from '@/views/job/information/index.vue';
import Download from '@/views/job/download/index.vue';

import About from '@/views/about/index.vue';
import Law from '@/views/law-advice/index.vue';
import Mentor from '@/views/talent-mentor/index.vue';
import Expert from '@/views/expert/index.vue';
import Train from '@/views/train/index.vue';
import Relationship from '@/views/relationship/index.vue';
import News from '@/views/news/index.vue';


export const routerList = {
Home,
Job,
JobHome,
Personal,
Company,
Homemake,
InviteMeet,
Information,
Download,
About,
Law,
Mentor,
Expert,
Train,
Relationship,
News
}

+ 3
- 21
src/router/routes.ts View File

@@ -4,8 +4,7 @@ import { HomeOutlined } from '@ant-design/icons-vue';
// import LOGIN from '@/views/login/login.vue';
// import HOME from '@/views/home/home.vue';
import Layout from '@/components/layout/index.vue';
import Home from '@/views/home/index.vue';
import Job from '@/views/job/index.vue';
import { routesModuleList } from '@/router/dynamic';

// // 登录路由
// export const LoginRoute: AppRouteRecordRaw = {
@@ -22,26 +21,9 @@ export const LayoutRoute: AppRouteRecordRaw = {
path: '',
name: 'layout',
component: Layout,
meta: {
title: '登录'
},
redirect: '/home',
children: [
{
path: '/home',
name: 'home',
component: Home,
meta: {
title: '首页'
}
},
{
path: '/job',
name: 'job',
component: Job,
meta: {
title: '求职招聘'
}
}
...routesModuleList
]
}


+ 3
- 14
src/store/mutations.ts View File

@@ -1,18 +1,7 @@
const getCollapsed = (state) => {
state.collapsed = !state.collapsed;
const getRouteName = (state, payload) => {
state.routeName = payload.routeName;
}

const getOpenModel = (state, payload) => {
state.openAddModel = payload.openAddModel;
}

const getOpenMoreModel = (state, payload) => {
state.openOtherModel_1 = payload.openOtherModel_1;
}


export const mutations = {
getCollapsed,
getOpenModel,
getOpenMoreModel
getRouteName
}

+ 1
- 6
src/store/state.ts View File

@@ -1,10 +1,5 @@
import { StateType } from './types'

export const state = <StateType>{
collapsed: false,
openAddModel: false,
openMoreModel: {
showAddModel: false,
showOrderModel: false
}
routeName: ''
}

+ 1
- 3
src/store/types.ts View File

@@ -1,5 +1,3 @@
export interface StateType {
collapsed: boolean,
openAddModel: boolean,
openOtherModel_1: boolean
routeName ?: String
}

+ 3
- 0
src/style.css View File

@@ -79,6 +79,9 @@ button:focus-visible {
}
}

.content-padding-inline {
padding-inline: 50px;
}
/* 从右开始 */
.horizontal-flex-end {
display: flex;

+ 8
- 0
src/views/about/index.vue View File

@@ -0,0 +1,8 @@
<template>
</template>

<script>
</script>

<style>
</style>

+ 8
- 0
src/views/expert/index.vue View File

@@ -0,0 +1,8 @@
<template>
</template>

<script>
</script>

<style>
</style>

+ 2
- 7
src/views/home/index.vue View File

@@ -1,14 +1,9 @@
<template>
<!-- <home-swiper></home-swiper> -->
<home-hot></home-hot>
<home-job></home-job>

</template>

<script setup lang="ts">
import { ref, computed } from 'vue';
// import HomeSwiper from '@/views/home/swiper/index.vue'
import HomeHot from '@/views/home/hot/index.vue'
import HomeJob from '@/views/home/job/index.vue'

</script>

<style>

+ 0
- 76
src/views/home/swiper/index.vue View File

@@ -1,76 +0,0 @@
<template>
<a-image width="100vw" height="40vh"
src="https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png" />
<div class="content">
<a-row type="flex" justify="center">
<a-col span="18">
<a-row type="flex" justify="end">
<a-col span="5">
<div class="login-box">
<a-tabs v-model:activeKey="activeKey">
<a-tab-pane key="1" tab="我要找工作">
<a-row :gutter="[0, 16]">
<a-col span="24">
<a-input v-model:value="value" placeholder="账号" />
</a-col>
<a-col span="24">
<a-input v-model:value="value" placeholder="密码" />
</a-col>
<a-col span="24">
<a-input v-model:value="value" placeholder="验证码" />
</a-col>
<a-col span="24">
<a-button type="primary" block>登录/注册</a-button>
</a-col>
<a-col span="24">
忘记密码?
</a-col>
</a-row>
</a-tab-pane>
<a-tab-pane key="2" tab="我要招聘" force-render>我要招聘</a-tab-pane>
</a-tabs>
</div>
</a-col>
</a-row>
</a-col>
</a-row>
</div>
</template>

<script setup lang="ts">
import { ref, computed } from 'vue';
</script>

<style lang="less" scoped>
.ant-image {
position: relative;
}

.content {
position: absolute;
top: 94px;
left: 0;
right: 0;
bottom: 30px;
z-index: 99;
// height: 30vh;
padding-inline: 50px;
}

.login-box {
display: flex;
align-items: center;
justify-content: center;
padding: 20px 30px;
border-radius: 10px;
background-color: aliceblue;
}
.ant-tabs-nav-wrap {
flex: none !important;
}
.ant-tabs-nav {
justify-content: center !important;
}
</style>

+ 13
- 0
src/views/job/company/index.vue View File

@@ -0,0 +1,13 @@
<template>
<job-search></job-search>
<job-list></job-list>
</template>
<script setup lang="ts">
import { ref, onMounted, computed, watch } from 'vue';
import JobSearch from '@/components/job/search/index.vue'
import JobList from '@/components/job/list/index.vue'
import JobInternship from '@/components/job/internship/index.vue'
import JobDetail from '@/components/job/detail/index.vue'
</script>
<style>
</style>

+ 73
- 0
src/views/job/download/index.vue View File

@@ -0,0 +1,73 @@
<template>
<a-row>
<a-col span="4">
<a-menu v-model:openKeys="openKeys" v-model:selectedKeys="selectedKeys" style="width: 100%;" mode="inline">
<a-menu-item key="1">个人求职</a-menu-item>
<a-menu-item key="2">企业招聘</a-menu-item>
<a-menu-item key="3">应届毕业生</a-menu-item>
<a-menu-item key="4">人才入户</a-menu-item>
<a-menu-item key="5">其他</a-menu-item>
</a-menu>
</a-col>
<a-col span="16">
<div style="width: 100%;background-color: #fff;padding: 10px;">
<a-list item-layout="horizontal" :data-source="data">
<template #renderItem="{ item }">
<a-list-item>
<a-list-item-meta
description="2020-11-12">
<template #title>
<a href="https://www.antdv.com/">{{ item.title }}</a>
</template>
</a-list-item-meta>
<template #extra>
<a-button>下载</a-button>
</template>
</a-list-item>
</template>
</a-list>
<a-pagination v-model:current="current" :total="500" style="text-align: center;" />
</div>
</a-col>
<a-col span="4">
<a-list size="small" bordered :data-source="data" style="height: 294px">
<template #renderItem="{ item }">
<a-list-item>{{ item }}</a-list-item>
</template>
<template #header>
<div>Header</div>
</template>
</a-list>
</a-col>
</a-row>



</template>
<script setup lang="ts">
import { ref, onMounted, computed, watch } from 'vue';
const openKeys = ref<string[]>(['1']);
const selectedKeys = ref<string[]>(['1']);

interface DataItem {
title : string;
}
const data : DataItem[] = ref([
{
title: 'Ant Design Title 1',
},
{
title: 'Ant Design Title 2',
},
{
title: 'Ant Design Title 3',
},
{
title: 'Ant Design Title 4',
},
])
</script>

<style>
</style>

+ 19
- 0
src/views/job/home/index.vue View File

@@ -0,0 +1,19 @@
<template>
<job-swiper></job-swiper>
<a-row type="flex" justify="center" class="content-padding-inline">
<a-col span="18">
<home-hot></home-hot>
<home-job></home-job>
</a-col>
</a-row>
</template>

<script setup lang="ts">
import { ref, computed } from 'vue';
import JobSwiper from '@/components/job/swiper/index.vue'
import HomeHot from '@/views/home/hot/index.vue'
import HomeJob from '@/views/home/job/index.vue'
</script>

<style>
</style>

+ 8
- 0
src/views/job/homemake/index.vue View File

@@ -0,0 +1,8 @@
<template>
</template>

<script>
</script>

<style>
</style>

+ 45
- 1
src/views/job/index.vue View File

@@ -1,7 +1,51 @@
<template>
<template v-if="routeName !== '/job/home'">
<a-menu mode="horizontal" v-model:selectedKeys="jobMenu" forceSubMenuRender
style="background: #ffffff; height: '90vh';color: #797979;width: 100%;display: flex;justify-content: center;">
<a-menu-item>
<span>{{subMenu.meta.title}}</span>
</a-menu-item>
<template v-for="(item,index) in subMenu.children" :key="item.path">
<a-menu-item :key="item.path" @click="onMenu(item.path)" v-if="item.path !== '/job/home'">
<span>{{item.meta.title}}</span>
</a-menu-item>
</template>
</a-menu>
</template>

<div v-if="routeName !== '/job/home'" class="content-padding-inline" style="margin-top: 30px;">
<a-row type="flex" justify="center">
<a-col span="18">
<router-view></router-view>
</a-col>
</a-row>
</div>
<div v-else>
<router-view></router-view>
</div>
</template>

<script>
<script setup lang="ts">
import { ref, onMounted, computed, watch } from 'vue';
import { store } from '@/store/index';
import { useMenu } from '@/hooks/useMenu';
import type { AppRouteRecordRaw } from '@/router/types';
let { onMenu, routerCur, routerArrayCur, routerArrayParentChildCur } = useMenu();
let subMenu = ref<AppRouteRecordRaw>(routerArrayParentChildCur())

let routeName = computed(() => {
return store.state.routeName
})

let jobMenu = computed(() => {
let newSelectedMenu = [routerCur()];
return newSelectedMenu;
})

onMounted(() => {
// // subMenu.value.children.shift();
// menuName.value = subMenu.value.meta.title;
})
</script>

<style>

+ 77
- 0
src/views/job/information/index.vue View File

@@ -0,0 +1,77 @@
<template>
<a-row>
<a-col span="4">
<a-menu v-model:openKeys="openKeys" v-model:selectedKeys="selectedKeys" style="width: 100%;" mode="inline">
<a-menu-item key="1">本站公告</a-menu-item>
<a-menu-item key="2">小榄动态</a-menu-item>
<a-menu-item key="3">职场攻略</a-menu-item>
<a-menu-item key="4">创业就业</a-menu-item>
<a-menu-item key="5">劳动与法</a-menu-item>
</a-menu>
</a-col>
<a-col span="16">
<div style="width: 100%;background-color: #fff;padding: 10px;">
<a-list item-layout="horizontal" :data-source="data">
<template #renderItem="{ item }">
<a-list-item>
<a-list-item-meta
description="2020-11-12">
<template #title>
<a href="https://www.antdv.com/">{{ item.title }}</a>
</template>
</a-list-item-meta>
<template #extra>
<img
width="96px" height="96px"
alt="logo"
src="https://gw.alipayobjects.com/zos/rmsportal/mqaQswcyDLcXyDKnZfES.png"
/>
</template>
</a-list-item>
</template>
</a-list>
<a-pagination v-model:current="current" :total="500" style="text-align: center;" />
</div>
</a-col>
<a-col span="4">
<a-list size="small" bordered :data-source="data" style="height: 294px">
<template #renderItem="{ item }">
<a-list-item>{{ item }}</a-list-item>
</template>
<template #header>
<div>Header</div>
</template>
</a-list>
</a-col>
</a-row>



</template>
<script setup lang="ts">
import { ref, onMounted, computed, watch } from 'vue';
const openKeys = ref<string[]>(['1']);
const selectedKeys = ref<string[]>(['1']);

interface DataItem {
title : string;
}
const data : DataItem[] = ref([
{
title: 'Ant Design Title 1',
},
{
title: 'Ant Design Title 2',
},
{
title: 'Ant Design Title 3',
},
{
title: 'Ant Design Title 4',
},
])
</script>

<style>
</style>

+ 70
- 0
src/views/job/invite-meet/index.vue View File

@@ -0,0 +1,70 @@
<template>
<a-row>
<a-col span="4">
<a-menu v-model:openKeys="openKeys" v-model:selectedKeys="selectedKeys" style="width: 100%;" mode="inline">
<a-menu-item key="1">招聘会预定</a-menu-item>
<a-menu-item key="2">企业参会方式</a-menu-item>
<a-menu-item key="3">求职者参会指南</a-menu-item>
<a-menu-item key="4">乘车路线</a-menu-item>
<a-menu-item key="5">绿色通道</a-menu-item>
<a-menu-item key="6">联系方式</a-menu-item>
</a-menu>
</a-col>
<a-col span="16">
<div style="width: 100%;background-color: #fff;padding: 10px;">
<a-list item-layout="horizontal" :data-source="data">
<template #renderItem="{ item }">
<a-list-item>
<a-list-item-meta
description="Ant Design, a design language for background applications, is refined by Ant UED Team">
<template #title>
<a href="https://www.antdv.com/">{{ item.title }}</a>
</template>
</a-list-item-meta>
</a-list-item>
</template>
</a-list>
<a-pagination v-model:current="current" :total="500" style="text-align: center;" />
</div>
</a-col>
<a-col span="4">
<a-list size="small" bordered :data-source="data" style="height: 294px">
<template #renderItem="{ item }">
<a-list-item>{{ item }}</a-list-item>
</template>
<template #header>
<div>Header</div>
</template>
</a-list>
</a-col>
</a-row>



</template>
<script setup lang="ts">
import { ref, onMounted, computed, watch } from 'vue';
const openKeys = ref<string[]>(['1']);
const selectedKeys = ref<string[]>(['1']);

interface DataItem {
title : string;
}
const data : DataItem[] = ref([
{
title: 'Ant Design Title 1',
},
{
title: 'Ant Design Title 2',
},
{
title: 'Ant Design Title 3',
},
{
title: 'Ant Design Title 4',
},
])
</script>

<style>
</style>

+ 17
- 0
src/views/job/personal/index.vue View File

@@ -0,0 +1,17 @@
<template>
<job-search></job-search>
<job-list></job-list>
<job-internship></job-internship>
<job-detail></job-detail>
</template>

<script setup lang="ts">
import { ref, onMounted, computed, watch } from 'vue';
import JobSearch from '@/components/job/search/index.vue'
import JobList from '@/components/job/list/index.vue'
import JobInternship from '@/components/job/internship/index.vue'
import JobDetail from '@/components/job/detail/index.vue'
</script>

<style>
</style>

+ 8
- 0
src/views/law-advice/index.vue View File

@@ -0,0 +1,8 @@
<template>
</template>

<script>
</script>

<style>
</style>

+ 8
- 0
src/views/news/index.vue View File

@@ -0,0 +1,8 @@
<template>
</template>

<script>
</script>

<style>
</style>

+ 8
- 0
src/views/relationship/index.vue View File

@@ -0,0 +1,8 @@
<template>
</template>

<script>
</script>

<style>
</style>

+ 8
- 0
src/views/talent-mentor/index.vue View File

@@ -0,0 +1,8 @@
<template>
</template>

<script>
</script>

<style>
</style>

+ 8
- 0
src/views/train/index.vue View File

@@ -0,0 +1,8 @@
<template>
</template>

<script>
</script>

<style>
</style>

Loading…
Cancel
Save