Procházet zdrojové kódy

feat: 企业与岗位详情页

zhangying před 1 rokem
rodič
revize
c7a5592a13

+ 3 - 1
vue/src/router/asyncModules/companyService.ts

@@ -2,8 +2,10 @@ export default {
   'companyService/enterprise/index': () => import('@/views/companyService/company/index.vue'),
   'companyService/enterprise/add': () => import('@/views/companyService/company/edit.vue'),
   'companyService/enterprise/edit': () => import('@/views/companyService/company/edit.vue'),
+  'companyService/enterprise/detail': () => import('@/views/companyService/company/detail.vue'),
   'companyService/post/index': () => import('@/views/companyService/post/index.vue'),
   'companyService/post/add': () => import('@/views/companyService/post/edit.vue'),
   'companyService/post/edit': () => import('@/views/companyService/post/edit.vue'),
-  'companyService/post/recommend': () => import('@/views/companyService/post/recommend.vue')
+  'companyService/post/recommend': () => import('@/views/companyService/post/recommend.vue'),
+  'companyService/post/detail': () => import('@/views/companyService/post/detail.vue')
 };

+ 95 - 0
vue/src/views/companyService/company/detail.vue

@@ -0,0 +1,95 @@
+<template>
+  <div class="card-edit">
+    <a-divider orientation="left">企业基础信息</a-divider>
+    <a-descriptions bordered>
+      <a-descriptions-item label="统一社会信用代码">{{ companyInfo.companyCode }}</a-descriptions-item>
+      <a-descriptions-item label="企业名称">{{ companyInfo.companyName }}</a-descriptions-item>
+      <a-descriptions-item label="所属驿站">{{ companyInfo.SiteName }}</a-descriptions-item>
+      <a-descriptions-item :span="2" label="企业办公地址">{{ companyInfo.companyAddress }}</a-descriptions-item>
+      <a-descriptions-item label="企业联系人">{{ companyInfo.userName }}</a-descriptions-item>
+      <a-descriptions-item label="企业联系电话">{{ companyInfo.userMobile }}</a-descriptions-item>
+      <a-descriptions-item label="企业状态">{{ companyInfo.recordStatus == 0 ? '停业' : '在营' }}</a-descriptions-item>
+      <a-descriptions-item label="是否缺工">{{ companyInfo.isShortage == 0 ? '否' : '是' }}</a-descriptions-item>
+      <a-descriptions-item label="企业所在经度">{{ companyInfo.longitude }}</a-descriptions-item>
+      <a-descriptions-item label="企业所在纬度">{{ companyInfo.latitude }}</a-descriptions-item>
+    </a-descriptions>
+    <a-divider orientation="left">附件照片</a-divider>
+    <b-upload-file :fileRefId="companyInfo.companyID" :readonly="true" :multiple="true" style="width: 100%;"
+                   :setFileList="setFileList" :accept="'.pdf,.png,.jpg'"></b-upload-file>
+    <a-divider orientation="left">其他信息</a-divider>
+    <a-descriptions bordered>
+      <a-descriptions-item label="法定代表人(负责人)">{{ companyInfo.frName }}</a-descriptions-item>
+      <a-descriptions-item label="营业执照有效期">
+        {{ companyInfo.validDate ? dayjs(companyInfo.validDate).format('YYYY-MM-DD') : '' }}
+      </a-descriptions-item>
+      <a-descriptions-item label="企业邮箱">{{ companyInfo.companyEmail }}</a-descriptions-item>
+      <a-descriptions-item label="企业分类">{{ companyInfo.companyType }}</a-descriptions-item>
+      <a-descriptions-item label="所属县区">{{ companyInfo.regionName }}</a-descriptions-item>
+      <a-descriptions-item label="所属街道">{{ companyInfo.streetName }}</a-descriptions-item>
+      <a-descriptions-item label="企业规模">{{ companyInfo.companyModel }}</a-descriptions-item>
+      <a-descriptions-item label="用工情况(人)">{{ companyInfo.workSituation }}</a-descriptions-item>
+      <a-descriptions-item label="参保人数(人)">{{ companyInfo.insuredCount }}</a-descriptions-item>
+      <a-descriptions-item :span="3" label="经营范围">{{ companyInfo.businScope }}</a-descriptions-item>
+      <a-descriptions-item :span="3" label="企业简介">{{ companyInfo.companyDesc }}</a-descriptions-item>
+    </a-descriptions>
+  </div>
+</template>
+
+<script setup lang="ts">
+
+import {getCompanyById} from "@/api/companyService/company";
+import {onMounted, reactive, ref} from "vue";
+import BUploadFile from "@/components/file/uploadFile.vue";
+import dayjs from "dayjs";
+
+// 企业信息
+const companyInfo = reactive({
+  companyID: "",
+  companyCode: "",
+  companyName: "",
+  SiteName: "",
+  companyAddress: "",
+  userName: "",
+  userMobile: "",
+  recordStatus: null,
+  isShortage: null,
+  longitude: "",
+  latitude: "",
+  frName: "",
+  validDate: "",
+  companyEmail: "",
+  companyType: "",
+  regionName: "",
+  streetName: "",
+  companyModel: "",
+  workSituation: "",
+  insuredCount: "",
+  businScope: "",
+  companyDesc: "",
+})
+// 文件数据
+const fileList = ref();
+
+// 数据加载
+function loadData(id: any) {
+  getCompanyById(id).then(result => {
+    Object.keys(companyInfo).forEach(key => {
+      companyInfo[key] = result[key]
+    })
+  })
+}
+
+// 设置文件列表
+function setFileList(files) {
+  fileList.value = files;
+};
+
+onMounted(() => {
+  const id = history.state.params?.id;
+  loadData(id);
+})
+</script>
+
+<style scoped>
+
+</style>

+ 12 - 7
vue/src/views/companyService/company/index.vue

@@ -101,6 +101,7 @@
         <template #bodyCell="{ column, text, record }">
           <template v-if="column.key === 'operation'">
             <div class="table-operation">
+              <a-button type="link" size="small" @click='onDetail(record)' functioncode="T01020101">查看</a-button>
               <a-button type="link" size="small" @click='onEdit(record)' functioncode="T01020103">编辑</a-button>
               <a-button type="link" size="small" @click="onDel(record)" functioncode="T01020104">删除</a-button>
             </div>
@@ -119,15 +120,14 @@
 </template>
 
 <script lang="ts">
-import {reactive, ref, computed, defineComponent, createVNode} from 'vue';
+import {computed, createVNode, defineComponent, reactive, ref} from 'vue';
 import {DownOutlined, ExclamationCircleOutlined, UpOutlined} from '@ant-design/icons-vue';
-import type {FormInstance} from 'ant-design-vue';
-import type {TableColumnsType, TableProps} from 'ant-design-vue';
-import {getList, del} from '@/api/companyService/company';
+import type {FormInstance, TableColumnsType, TableProps} from 'ant-design-vue';
+import {Modal, SelectProps} from "ant-design-vue";
+import {del, getList} from '@/api/companyService/company';
 import BExportExcel from "@/components/basic/excel/exportExcel/exportExcel.vue";
 import BImportExcel from '@/components/basic/excel/importExcel/importExcel.vue';
 import {getPaginationTotalTitle} from "@/utils/common";
-import {Modal, SelectProps} from "ant-design-vue";
 import dayjs from "dayjs";
 import {useTabsViewStore} from '@/store/modules/tabsView';
 import {get} from "@/api/common";
@@ -210,7 +210,7 @@ export default defineComponent({
           return item.record.createTime == null ? "" : (dayjs(item.record.createTime).format('YYYY-MM-DD'))
         }
       },
-      {title: '操作', key: 'operation', fixed: 'right', width: 100, align: "center"},
+      {title: '操作', key: 'operation', fixed: 'right', width: 150, align: "center"},
     ];
     const pagination = computed(() => ({
       total: formState.total,
@@ -302,6 +302,10 @@ export default defineComponent({
       tabsViewStore.addTabByPath('/companyService/enterprise/edit', {id: item.companyID});
     };
 
+    const onDetail = (item: any) => {
+      tabsViewStore.addTabByPath('/companyService/enterprise/detail', {id: item.companyID});
+    };
+
     return {
       formRef,
       modalShowRef,
@@ -324,7 +328,8 @@ export default defineComponent({
       importOptions,
       recordStatusList,
       regionList,
-      streetList
+      streetList,
+      onDetail
     };
   },
   created() {

+ 97 - 0
vue/src/views/companyService/post/detail.vue

@@ -0,0 +1,97 @@
+<template>
+  <div class="card-edit">
+    <a-divider orientation="left">岗位基础信息</a-divider>
+    <a-descriptions bordered>
+      <a-descriptions-item label="企业名称">{{ postInfo.companyName }}</a-descriptions-item>
+      <a-descriptions-item label="岗位名称">{{ postInfo.professionName }}</a-descriptions-item>
+      <a-descriptions-item label="招聘人数">{{ postInfo.recruitCount }}</a-descriptions-item>
+      <a-descriptions-item label="招聘日期">
+        {{ postInfo.startTime ? dayjs(postInfo.startTime).format('YYYY-MM-DD') : '' }}
+        至
+        {{ postInfo.endTime ? dayjs(postInfo.endTime).format('YYYY-MM-DD') : '' }}
+      </a-descriptions-item>
+      <a-descriptions-item :span="3" label="招聘地点">{{ postInfo.jobPlace }}</a-descriptions-item>
+    </a-descriptions>
+    <a-divider orientation="left">其他信息</a-divider>
+    <a-descriptions bordered>
+      <a-descriptions-item label="岗位月薪(元)">
+        {{ postInfo.minSalary }}
+        至
+        {{ postInfo.maxSalary }}
+      </a-descriptions-item>
+      <a-descriptions-item label="是否有试用期">{{ postInfo.isTrail ? '是' : '否' }}</a-descriptions-item>
+      <a-descriptions-item label="试用期(月)">{{ postInfo.trailMonths }}</a-descriptions-item>
+      <a-descriptions-item label="试用期月薪(元)">
+        {{ postInfo.trailMinSalary }}
+        至
+        {{ postInfo.trailMaxSalary }}
+      </a-descriptions-item>
+      <a-descriptions-item label="工作年限要求">{{ workYear }}</a-descriptions-item>
+      <a-descriptions-item label="学历要求">{{ postInfo.cultureLevelName }}</a-descriptions-item>
+      <a-descriptions-item :span="3" label="福利待遇">{{ postInfo.welfare }}</a-descriptions-item>
+      <a-descriptions-item :span="3" label="其他要求">{{ postInfo.postDesc }}</a-descriptions-item>
+    </a-descriptions>
+  </div>
+</template>
+
+<script setup lang="ts">
+import {getPostByID} from "@/api/companyService/post";
+import {computed, onMounted, reactive, ref} from "vue";
+import dayjs from "dayjs";
+import {get} from "@/api/common";
+
+// 岗位信息
+const postInfo = reactive({
+  companyName: "",
+  professionName: "",
+  recruitCount: "",
+  startTime: "",
+  endTime: "",
+  jobPlace: "",
+  minSalary: "",
+  maxSalary: "",
+  isTrail: "",
+  trailMonths: "",
+  trailMinSalary: "",
+  trailMaxSalary: "",
+  workYear: "",
+  cultureLevelName: "",
+  welfare: "",
+  postDesc: "",
+})
+// 工作年限数据
+const WorkYearTypeList = ref<Array<any>>([])
+// 获取工作年限
+const workYear = computed(() => {
+  if (postInfo.workYear && WorkYearTypeList.value.length > 0) {
+    const item = WorkYearTypeList.value.find(item => item.value == postInfo.workYear)
+    if (item) {
+      return item.name;
+    }
+  }
+  return postInfo.workYear;
+})
+
+// 数据加载
+function loadData(id: any) {
+  getPostByID(id).then(result => {
+    Object.keys(postInfo).forEach((key) => {
+
+      postInfo[key] = result[key];
+    })
+  })
+}
+
+// 页面初始化
+onMounted(() => {
+  const id = history.state.params?.id;
+  loadData(id);
+  get('system/dictionary/getDictionaryItemByCodeList', {code: 'WorkYearType'}).then(result => {
+    WorkYearTypeList.value = result;
+  });
+})
+</script>
+
+<style scoped>
+
+</style>

+ 11 - 8
vue/src/views/companyService/post/index.vue

@@ -100,6 +100,7 @@
           </template>
           <template v-if="column.key === 'operation'">
             <div class="table-operation">
+              <a-button type="link" size="small" @click='onDetail(record)' functioncode="T01020201">查看</a-button>
               <a-button type="link" size="small" @click='onEdit(record)' functioncode="T01020203">编辑</a-button>
               <a-button type="link" size="small" @click="onDel(record)" functioncode="T01020204">删除</a-button>
               <a-button type="link" size="small"  @click="onRecommendJob(record)" functioncode="T01030207">推荐求职人员</a-button>
@@ -113,16 +114,14 @@
 </template>
 
 <script lang="ts">
-import {reactive, ref, computed, defineComponent, createVNode} from 'vue';
-import {DownOutlined, UpOutlined} from '@ant-design/icons-vue';
-import type {FormInstance} from 'ant-design-vue';
+import {computed, createVNode, defineComponent, reactive, ref} from 'vue';
+import {DownOutlined, ExclamationCircleOutlined, UpOutlined} from '@ant-design/icons-vue';
+import type {FormInstance, TableColumnsType, TableProps} from 'ant-design-vue';
 import {Modal, SelectProps} from 'ant-design-vue';
-import type {TableColumnsType, TableProps} from 'ant-design-vue';
-import {getList, del} from '@/api/companyService/post';
+import {del, getList} from '@/api/companyService/post';
 import BExportExcel from "@/components/basic/excel/exportExcel/exportExcel.vue";
 import BImportExcel from '@/components/basic/excel/importExcel/importExcel.vue';
 import {getPaginationTotalTitle} from "@/utils/common";
-import {ExclamationCircleOutlined} from '@ant-design/icons-vue';
 import dayjs from 'dayjs';
 import {useRoute} from 'vue-router';
 import {useTabsViewStore} from "@/store/modules/tabsView";
@@ -215,7 +214,7 @@ export default defineComponent({
       {title: '联系人', dataIndex: 'userName', key: 'userName', align: "center"},
       {title: '联系电话', dataIndex: 'userMobile', key: 'userMobile', width: 200, align: "center"},
       {title: '推荐数量', dataIndex: 'recommendNum',key: 'recommendNum',width: 100, align: "center"},
-      {title: '操作', key: 'operation', fixed: 'right', width: 200, align: "center"},
+      {title: '操作', key: 'operation', fixed: 'right', width: 240, align: "center"},
     ];
     const pagination = computed(() => ({
       total: formState.total,
@@ -241,6 +240,9 @@ export default defineComponent({
     const onEdit = (item: any) => {
       tabsViewStore.addTabByPath('/companyService/post/edit', {id: item.postID});
     };
+    const onDetail = (item: any) => {
+      tabsViewStore.addTabByPath('/companyService/post/detail', {id: item.postID});
+    };
 
     const onRecommendJob = (item) =>{
       recommendRef.value.show(item.professionID,item.professionName,item.postID,item.companyName,0,'推荐求职人员');
@@ -330,7 +332,8 @@ export default defineComponent({
       onRecommendInfo,
       expand,
       postStatusList,
-      companyList
+      companyList,
+      onDetail
     };
   },
   created() {