ソースを参照

个人中心-求职反馈-面试(待面试、已完成):学生上报实习企业

Xiao_123 1 週間 前
コミット
acfdc3aff0

+ 7 - 0
src/api/recruit/personal/student.js

@@ -85,4 +85,11 @@ export const getMajorList = async (params) => {
     url: '/app-api/menduner/system/major/list',
     params
   })
+}
+
+// 上报实习企业
+export const reportStudentPracticeEnterprise = async (enterpriseId, internshipJobId) => {
+	return await request.post({
+		url: `/app-api/menduner/system/student/internship/enterprise?enterpriseId=${enterpriseId}&internshipJobId=${internshipJobId}`,
+	})
 }

+ 1 - 0
src/assets/svg/current-practice-enterprise.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1746526056628" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="20662" xmlns:xlink="http://www.w3.org/1999/xlink" width="64" height="64"><path d="M515.2 67.2c-246.4 0-448 201.6-448 448s201.6 448 448 448 448-201.6 448-448-201.6-448-448-448z m214.4 425.6l-86.4 86.4 19.2 121.6c3.2 12.8-3.2 25.6-12.8 32-6.4 3.2-12.8 6.4-19.2 6.4-6.4 0-9.6 0-16-3.2L512 678.4 409.6 736c-9.6 6.4-22.4 6.4-35.2-3.2-9.6-6.4-16-19.2-12.8-32l19.2-121.6-83.2-86.4c-9.6-9.6-12.8-22.4-6.4-32 3.2-12.8 12.8-19.2 25.6-22.4l115.2-16 51.2-112c6.4-9.6 16-19.2 28.8-19.2s22.4 6.4 28.8 19.2l51.2 112 115.2 19.2c12.8 3.2 22.4 9.6 25.6 22.4 6.4 6.4 6.4 19.2-3.2 28.8z" fill="#ff5252" p-id="20663"></path></svg>

+ 28 - 8
src/views/recruit/personal/PersonalCenter/jobFeedback/components/interview/item.vue

@@ -8,15 +8,18 @@
         <v-btn color="primary" size="small" @click.stop="handleAgree(val)">同意</v-btn>
         <v-btn class="ml-3" color="error" size="small" @click.stop="handleRefuse(val)">拒绝</v-btn>
       </div>
+      <div v-if="['1', '3'].includes(val.status) && val.jobFairId && !val.internshipEnterprise" class="header-btn">
+        <v-btn color="primary" size="small" @click="handleReport(val)">上报为实习企业</v-btn>
+      </div>
       <div v-if="val.job.status === '1'" class="font-size-14 header-btn color-error">职位已关闭</div>
       <div class="img-box">
-          <v-avatar :image="getUserAvatar(val.contact.avatar, val.contact.sex)" size="x-small"></v-avatar>
-          <span class="name">
-            <span class="mx-3">{{ val.contact.name }}</span>
-            <span class="gray">{{ val.contact.postNameCn }}</span>
-            <span v-if="val.invitePhone" class="septal-line"></span>
-            <span class="gray">{{ val.invitePhone }}</span>
-          </span>
+        <v-avatar :image="getUserAvatar(val.contact.avatar, val.contact.sex)" size="x-small"></v-avatar>
+        <span class="name">
+          <span class="mx-3">{{ val.contact.name }}</span>
+          <span class="gray">{{ val.contact.postNameCn }}</span>
+          <span v-if="val.invitePhone" class="septal-line"></span>
+          <span class="gray">{{ val.invitePhone }}</span>
+        </span>
       </div>
     </div>
     <div class="info-content">
@@ -27,7 +30,11 @@
         </div>
         <div class="job-info color-666">
           <div class="job-name ellipsis" style="max-width: 410px;">
-            <!-- <svg-icon v-if="val.jobFairId" name="jobFair" size="18" class="mr-1"></svg-icon> -->
+            <v-tooltip text="上报的实习企业" location="top">
+              <template v-slot:activator="{ props }">
+                <svg-icon v-bind="props" v-if="val.internshipEnterprise" name="current-practice-enterprise" size="20"></svg-icon>
+              </template>
+            </v-tooltip>
             <span class="mr-3" :class="{'cursor-pointer': val.job.status === '0', 'position-name': val.job.status === '0'}" @click.stop="handleToPositionDetails(val)">{{ formatName(val.job.name) }}</span>
             <span v-if="!val.job.payFrom && !val.job.payTo">面议</span>
             <span v-else>{{ val.job.payFrom ? val.job.payFrom + '-' : '' }}{{ val.job.payTo }}{{ val.job.payName ? '/' + val.job.payName : '' }}</span>
@@ -63,6 +70,7 @@ import { getUserAvatar } from '@/utils/avatar'
 import { useRouter } from 'vue-router'
 import { formatName } from '@/utils/getText'
 import { jumpToEnterpriseDetail } from '@/utils/position'
+import { reportStudentPracticeEnterprise } from '@/api/recruit/personal/student.js'
 
 const { t } = useI18n()
 const emits = defineEmits(['refresh'])
@@ -115,6 +123,17 @@ const handleRefuse = (val) => {
     emits('refresh')
   })
 }
+
+// 上报为实习企业
+const handleReport = async (val) => {
+  if (!val.jobFairId) return Snackbar.warning('不是招聘会职位不能上报为实习企业')
+  if (!val.enterpriseId || !val.jobId) return Snackbar.warning('企业或职位信息错误')
+  Confirm(t('common.confirmTitle'), '是否确定上报为实习企业?').then(async () => {
+    await reportStudentPracticeEnterprise(val.enterpriseId, val.jobId)
+    Snackbar.success('上报成功')
+    emits('refresh')
+  })
+}
 </script>
 
 <style scoped lang="scss">
@@ -122,6 +141,7 @@ const handleRefuse = (val) => {
   height: 160px;
   background-color: #fff;
   border-radius: 12px;
+  border: 1px solid #fff;
   .info-header {
     height: 48px;
     background: linear-gradient(90deg,#f5fcfc,#fcfbfa);

+ 8 - 3
src/views/recruit/personal/PersonalCenter/student/InternshipReport/index.vue

@@ -12,15 +12,14 @@
 	<div class="pa-3">
 		<div v-if="items && items.length > 0">
 			<div v-for="item in items" :key="item.date" class="mb-3">
-				<div class="title-date">{{ item.date }}</div>
+				<div class="title-date mb-3">{{ item.date }}</div>
 				<div class="d-flex flex-wrap">
 					<img 
 						v-for="(src, index) in item.arr" 
 						:key="index" 
 						:src="src" 
 						@click="handlePreview(item.arr, index)" 
-						class="cursor-pointer" 
-						style="width: 200px; height: 250px;"
+						class="cursor-pointer report-img mb-3 mr-3" 
 					/>
 				</div>
 			</div>
@@ -168,4 +167,10 @@ const handlePreview = (arr, index) => {
 	padding-left: 12px;
 	line-height: 17px;
 }
+.report-img {
+	width: 200px; 
+	height: 250px; 
+	border: 1px solid #00B760; 
+	border-radius: 4px;
+}
 </style>

+ 3 - 1
src/views/recruit/personal/PersonalCenter/student/intershipCompany/item.vue

@@ -129,8 +129,10 @@ const handleDownLoadRecommendationLetter = (val) => {
 .position-item {
   background-color: #fff;
   border-radius: 12px;
+  border: 1px solid #fff;
   &:hover {
-    box-shadow: 0px 3px 5px -1px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, 0.2)), 0px 5px 8px 0px var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, 0.14)), 0px 1px 14px 0px var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, 0.12)) !important;
+    border: 1px solid #00B760;
+    box-shadow: 5px 9px 12px 1px rgba(0, 183, 96, 0.17) !important;
   }
   .info-header {
     height: 48px;