招聘网页
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

index.vue 3.4KB

1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. <template>
  2. <a-search @searchData="searchData" @clearData="clearData" :search_params="commomParams.search"></a-search>
  3. <a-biaoge :data="commomParams.table.data" :columns="commomParams.table.columns" :pagination="commomParams.page"
  4. @page="getPage" :loading="loading">
  5. <template #meet_status="{ record }">
  6. <span v-if="record.status == 1">开启</span>
  7. <span v-if="record.status == 2">关闭</span>
  8. </template>
  9. <template #default="{ record }">
  10. <a-row :gutter="20">
  11. <a-popconfirm title="是否要申请参加该招聘会?" @confirm="applyFor(record.id)">
  12. <a-col><a-button type="primary" size="small">申请</a-button></a-col>
  13. </a-popconfirm>
  14. <a-popconfirm placement="left" ok-text="关闭" @confirm="confirm">
  15. <template #icon></template>
  16. <template #title>
  17. <a-card style="width: 600px; overflow: auto;">
  18. <a-card-meta :title="detailData.title" >
  19. <template #description>
  20. <div>
  21. 发布时间: {{detailData.open_date}}
  22. </div>
  23. <div>
  24. 招聘会地点: {{detailData.address}}
  25. </div>
  26. </template>
  27. </a-card-meta>
  28. <a-divider />
  29. <div style="height: 600px; overflow: auto;">
  30. <div v-html="detailData.content"></div>
  31. </div>
  32. </a-card>
  33. </template>
  34. <a-button type="primary" size="small" @click="toDetail(record)">详情</a-button>
  35. </a-popconfirm>
  36. </a-row>
  37. </template>
  38. </a-biaoge>
  39. </template>
  40. <script setup lang="ts">
  41. import { ref, onMounted, computed } from 'vue';
  42. import he from 'he';
  43. import { PostRecruitmentList, PostRecruitmentbookAdd, PostRecruitmentBookcompany } from '@/apis/models';
  44. import { useCommon } from '@/hooks/useCommon';
  45. import { cols } from '@/components/company/meet/subscribe/columns';
  46. import ASearch from '@/components/company/meet/subscribe/search.vue';
  47. import { warnToast, successToast } from '@/utils/toastHelper';
  48. let { commomParams } = useCommon();
  49. let loading = ref<Boolean>(true);
  50. onMounted(() => {
  51. commomParams.value.search.status = 1
  52. getData(commomParams.value.search);
  53. })
  54. const searchData = (data : object) => {
  55. commomParams.value.search = data
  56. getData();
  57. }
  58. const clearData = (data : object) => {
  59. if (data) {
  60. commomParams.value.search = data
  61. } else {
  62. commomParams.value.search = {
  63. page: 1,
  64. pagesize: 10,
  65. sort: 'id',
  66. sortby: 'asc',
  67. keyword: ''
  68. }
  69. }
  70. getData();
  71. }
  72. const getPage = (data : object) => {
  73. commomParams.value.search.page = data.current;
  74. commomParams.value.search.pagesize = data.pageSize;
  75. getData();
  76. }
  77. const getData = async () => {
  78. try {
  79. loading.value = true;
  80. let res = await PostRecruitmentList(commomParams.value.search);
  81. loading.value = false;
  82. commomParams.value.table.data = res.data.recruitments;
  83. commomParams.value.table.columns = cols;
  84. commomParams.value.page = {
  85. current: commomParams.value.search.page,
  86. pageSize: commomParams.value.search.pagesize,
  87. total: res.data.total,
  88. pageSizeOptions: ['10', '20', '30', '40'],
  89. hideOnSinglePage: false,
  90. showSizeChanger: true
  91. };
  92. } catch {
  93. loading.value = false;
  94. }
  95. }
  96. // 申请
  97. const applyFor = (val) => {
  98. PostRecruitmentbookAdd({ recruitment_id: val, company_id: 0 }).then(res => {
  99. successToast('预定成功')
  100. })
  101. }
  102. // 详情
  103. let detailData = ref<object>({})
  104. const toDetail = (data) => {
  105. detailData.value = data
  106. detailData.value.content = he.decode(detailData.value.content)
  107. }
  108. </script>
  109. <style scoped lang="less">
  110. </style>