瀏覽代碼

Merge branch 'groupJobFair' of https://git.citupro.com/zhengnaiwen_citu/menduner into groupJobFair

lifanagju_citu 2 月之前
父節點
當前提交
9e973524bd

+ 3 - 1
components.d.ts

@@ -17,7 +17,6 @@ declare module 'vue' {
     Combobox: typeof import('./src/components/FormUI/combobox/index.vue')['default']
     ComboboxZhAndEn: typeof import('./src/components/FormUI/comboboxZhAndEn/index.vue')['default']
     ConfirmPaymentDialog: typeof import('./src/components/pay/confirmPaymentDialog.vue')['default']
-    copy: typeof import('./src/components/CtForm/index copy.vue')['default']
     CtBtn: typeof import('./src/components/CtVuetify/CtBtn/index.vue')['default']
     CtDialog: typeof import('./src/components/CtDialog/index.vue')['default']
     CtFilter: typeof import('./src/components/CtFilter/index.vue')['default']
@@ -75,4 +74,7 @@ declare module 'vue' {
     VerifySlide: typeof import('./src/components/Verifition/Verify/VerifySlide.vue')['default']
     WangEditor: typeof import('./src/components/FormUI/wangEditor/index.vue')['default']
   }
+  export interface ComponentCustomProperties {
+    vLoading: typeof import('element-plus/es')['ElLoadingDirective']
+  }
 }

+ 32 - 11
src/layout/personal/navBar.vue

@@ -38,14 +38,13 @@
         
         <div class="d-flex" style="height: 50px;">
           <div class="btns d-flex align-center" v-if="!isLogin && showLoginBtn">
-            <v-btn color="primary" style="color: #fff !important; background-color: #00B760;" @click="handleLogin">
-              {{ route.path === '/flame' ? '老师登录/注册' : '登录/注册' }}
-            </v-btn>
+            <v-btn color="primary" style="color: #fff !important; background-color: #00B760;" to="/login">{{ t('login.loginOrRegister') }}</v-btn>
           </div>
           
           <!-- 头像用户名 -->
           <div class="d-flex align-center color-333" v-if="isLogin">
-            <span class="cursor-pointer mr-5 commonHover" @click="handleSwitch">我要招聘</span>
+            <span class="cursor-pointer mr-5 commonHover" v-if="showTeacherLogin" @click="handleSwitchTeacher">切换为老师</span>
+            <span class="cursor-pointer mr-5 commonHover" v-else @click="handleSwitchEnterprise">我要招聘</span>
             <span class="cursor-pointer commonHover" @click="router.push({ path: paths[6] })">
               <span>
                 现金:{{ userAccount?.balance && userAccount?.balance > 0 ? (userAccount?.balance / 100.0).toFixed(2) : 0 }}
@@ -138,6 +137,7 @@ import MessageNotification from '../message.vue'
 import { getUserAvatar } from '@/utils/avatar'
 import defineListPage from '@/views/entrances/navBar/components/defineListPage'
 import { formatName } from '@/utils/getText'
+import { getSchoolInformation } from '@/api/school'
 
 defineOptions({ name: 'personal-navbar' })
 
@@ -153,10 +153,23 @@ defineProps({
 })
 
 const showBall = ref(false)
+const showTeacherLogin = ref(false)
+
+// 获取老师注册信息
+const schoolInfo = ref({})
+const getSchoolInfo = async () => {
+  const data = await getSchoolInformation()
+  if (data && Object.keys(data).length > 0) {
+    schoolInfo.value = data
+    showTeacherLogin.value = true
+  }
+}
 
-onMounted(() => {
+onMounted(async () => {
   if (getToken()) {
     showBall.value = true
+
+    await getSchoolInfo()
   }
 })
 
@@ -225,7 +238,7 @@ const show = ref(false)
 const radios = ref(null)
 const enterpriseList = ref([])
 // 切换为招聘者
-const handleSwitch = async () => {
+const handleSwitchEnterprise = async () => {
   await getApplyInfo() // 查询申请信息(注册进度)
   const data = await getUserBindEnterpriseList() // 申请通过才有数据,否则空数组
   enterpriseList.value = data || []
@@ -267,6 +280,19 @@ const newRegistering = () => {
   router.replace({ path })
 }
 
+// 跳转老师页面
+const statusList = [
+  { status: '0', path: '/register/school/inReview', key: 'registerSchoolInfo' }, // 审核中
+  { status: '1', path: '/recruit/teacher/studentList/index', key: 'schoolInfo' }, // 审核通过
+  { status: '2', path: '/register/school/inReview', key: 'registerSchoolInfo' }, // 审核不通过
+]
+const handleSwitchTeacher = () => {
+  const obj = statusList.find(item => item.status === schoolInfo.value?.authStatus)
+  if (!obj || !schoolInfo.value) return
+  localStorage.setItem(obj.key, JSON.stringify(schoolInfo.value))
+  router.push({ path: obj.path })
+}
+
 const handleToPersonalCenter = () => {
   router.push({ path: paths[5] })
 }
@@ -305,11 +331,6 @@ userStore.$subscribe((mutation, state) => {
   updatePage()
 })
 
-const handleLogin = () => {
-  const path = route.path === '/flame' ? '/flameLogin' : '/login'
-  router.push(path)
-}
-
 // 语言切换
 // const handleChangeLocale = (item) => {
 //   localeStore.setCurrentLocale(item)

+ 5 - 11
src/store/user.js

@@ -281,23 +281,17 @@ export const useUserStore = defineStore('user',
         if (!isRegister) return
 
         if (!data || !Object.keys(data).length) {
-          console.log('没有注册过,直接跳转到学校注册页面')
+          // console.log('没有注册过,直接跳转到学校注册页面')
           router.push({ path: '/register/schoolIndex' })
         }
-        else if (data?.authStatus === '0') {
-          console.log('审核中,等待审核')
+        else if (data?.authStatus === '0' || data?.authStatus === '2') {
+          // console.log('审核中,等待审核  || 审核不通过,重新填写信息提交', data.authStatus)
           localStorage.setItem('registerSchoolInfo', JSON.stringify(data))
           router.push({ path: '/register/school/inReview' })
         }
         else if (data?.authStatus === '1') {
-          localStorage.setItem('schoolInfo', JSON.stringify(data))
-          console.log('审核通过直接进入老师页面')
-          router.push('/recruit/teacher') 
-        }
-        else if (data?.authStatus === '2') {
-          console.log('审核不通过,重新填写信息提交')
-          localStorage.setItem('registerSchoolInfo', JSON.stringify(data))
-          router.push({ path: '/register/school/inReview' })
+          // console.log('审核通过直接进入老师页面')
+          router.push('/recruit/teacher/studentList/index') 
         }
       }
     }

+ 3 - 2
src/views/flame/index.vue

@@ -1,8 +1,8 @@
 <template>
 	<div class="pa-3 default-width">
-		<!-- <div class="text-end mb-5">
+		<div v-if="!getToken()" class="text-end mb-5">
 			<v-btn color="primary" to="/flameLogin">老师登录/注册</v-btn>
-		</div> -->
+		</div>
 		<v-img src="https://minio.menduner.com/dev/108ff7690ab0773374138568fd0a3a166ee45df1f39b78ff0b2cdaeddbf71261.png"></v-img>
 		<v-img class="mt-3" src="https://minio.menduner.com/dev/95502df43c2155c457c485e869066536566d5f58ae80313567f81e7215f7eb77.png"></v-img>
 	</div>
@@ -10,6 +10,7 @@
 
 <script setup>
 defineOptions({ name: 'Flame'})
+import { getToken } from '@/utils/auth'
 </script>
 
 <style scoped lang="scss">

+ 8 - 0
src/views/recruit/enterprise/search/recommend/index.vue

@@ -31,6 +31,12 @@
           <span class="defaultLink ml-3 mt-2">{{ item?.name }}</span>
         </div>
       </template>
+      <template #interestedPositions="{ item }">
+        <div style="max-width: 200px" v-ellipse-tooltip>{{ item.position?.positionNames }}</div>
+      </template>
+      <template #lastWorkExp="{ item }">
+        {{ item?.lastWorkExp && Object.keys(item?.lastWorkExp).length > 0 ? `${item.lastWorkExp?.enterpriseName ? item.lastWorkExp?.enterpriseName + ' - ' : ''}${item.lastWorkExp.positionName}` : '' }}
+      </template>
       <template #actions="{ item }">
         <v-btn color="primary" variant="text" @click="handleInvite(item)">邀请面试</v-btn>
         <v-btn color="primary" variant="text" @click="handleCommunicate(item)">立即沟通</v-btn>
@@ -79,6 +85,8 @@ const loading = ref(false)
 const headers = ref([
   { title: '姓名', key: 'name', sortable: false },
   { title: '求职状态', key: 'jobStatusName', sortable: false },
+  { title: '感兴趣职位', key: 'interestedPositions', sortable: false },
+  { title: '最近一份工作经历', key: 'lastWorkExp', sortable: false },
   { title: '工作年限', key: 'expName', sortable: false },
   { title: '最高学历', key: 'eduName', sortable: false },
   { title: '所在城市', key: 'areaName', sortable: false },

+ 7 - 4
src/views/recruit/enterprise/student/InternshipSituation/index.vue

@@ -13,7 +13,7 @@
 			</div>
 			<!-- 时间范围筛选 -->
 			<div class="d-flex align-center ml-7">
-        <span class="color-666">实习日期</span>
+        <span class="color-666">到岗日期</span>
         <div class="ml-5">
           <date-picker 
 						v-model="date"
@@ -49,6 +49,9 @@
             <span class="ml-3">{{ item?.person?.name }}</span>
           </div>
         </template>
+				<template #status="{ item }">
+					{{ statistics.find(e => e.value === item?.status)?.label }}
+				</template>
         <template #actions="{ item }">
           <v-btn v-if="!item?.recommendationLetter" color="primary" variant="text" @click="handleUploadLetter(item.id)">上传推荐信</v-btn>
           <v-btn v-if="!item?.evaluate" color="#00897B" variant="text" @click="handleIssueCertificate(item.id)">颁发实习证书</v-btn>
@@ -97,9 +100,9 @@ const tableData = ref([])
 
 const headers = [
   { title: '学生姓名', key: 'studentName', sortable: false },
-  { title: '就读学校', key: 'student.schoolName', sortable: false },
-  { title: '所属院系', key: 'student.schoolDepartmentName', sortable: false },
-  { title: '所属专业', key: 'student.majorName', sortable: false },
+  { title: '学生院系', key: 'student.schoolDept.name', sortable: false },
+  { title: '所学专业', key: 'student.major.nameCn', sortable: false },
+	{ title: '实习状态', key: 'status', sortable: false },
   { title: '应聘职位', key: 'job.name', sortable: false, value: item => formatName(item.job.name) },
   { title: '到岗日期', key: 'startTime', sortable: false, value: item => timesTampChange(item.startTime, 'Y-M-D') },
   { title: '结束日期', key: 'endTime', sortable: false, value: item => timesTampChange(item.endTime, 'Y-M-D') },

+ 1 - 1
src/views/recruit/personal/PersonalCenter/resume/online/components/selfEvaluation.vue

@@ -48,7 +48,7 @@ const getData = async () => {
   emit('complete', { status: Boolean(advantage.value), id: 'selfEvaluation' })
 }
 getData()
-
+ 
 const advantageRules = ref([
   value => {
     if (value) return true

+ 2 - 1
src/views/recruit/personal/PersonalCenter/student/information/index.vue

@@ -177,7 +177,7 @@ const getDepartmentList = async (id, key, type, isRefreshValue = false) => {
 
 // 获取学生基本信息
 const studentInfoFun = async () => {
-  await userStore.getStudentInformation()
+  // await userStore.getStudentInformation()
   const data = JSON.parse(localStorage.getItem('studentInfo') || '{}')
   if (data.schoolId) getDepartmentList(data.schoolId, 'schoolDeptId', 0)
   if (data?.schoolClassId) getDepartmentList(data.schoolDeptId, 'schoolClassId', 2)
@@ -217,6 +217,7 @@ const handleSubmit = async () => {
 
   await saveStudentSimpleInfo(params)
   setTimeout(async () => {
+    await userStore.getStudentInformation()
     studentInfoFun()
     Snackbar.success(t('common.submittedSuccessfully'))
     overlay.value = false

+ 3 - 2
src/views/recruit/personal/PersonalCenter/student/intershipCompany/index.vue

@@ -21,8 +21,8 @@
 			<img src="https://minio.citupro.com/dev/static/bgc.jpg" width="500" height="700" cover />
 			<div class="cer-introduce">
 				兹有
-				<span class="cer-text">{{ itemData?.student?.schoolName }}</span>
-        <span class="cer-text">{{ itemData?.student?.majorName }}</span>
+				<span class="cer-text">{{ studentInfo?.schoolInfo?.name }}</span>
+        <span class="cer-text">{{ studentInfo?.major?.nameCn }}</span>
         专业<span class="cer-text">{{ itemData?.person?.name }}</span>
         同学于<span class="cer-text">{{ itemData?.startTime ? timesTampChange(itemData?.startTime, 'Y-M-D') : '' }}</span>
         至<span class="cer-text">{{ itemData?.endTime ? timesTampChange(itemData?.endTime, 'Y-M-D') : '' }}</span>
@@ -66,6 +66,7 @@ const query = ref({
 	status: ''
 })
 const itemData = ref({})
+const studentInfo = ref(localStorage.getItem('studentInfo') ? JSON.parse(localStorage.getItem('studentInfo')) : {})
 
 const getList = async () => {
 	query.value.status = tabList.value[tab.value]?.value

+ 1 - 0
src/views/recruit/personal/components/studentDeliveryForm.vue

@@ -9,6 +9,7 @@
 // 学生-实习到岗信息表单
 defineOptions({ name: 'studentDeliveryForm'})
 import { ref, nextTick } from 'vue'
+import Snackbar from '@/plugins/snackbar'
 
 const CtFormRef = ref()
 

+ 2 - 2
src/views/recruit/personal/position/components/details.vue

@@ -116,7 +116,7 @@
       @close="showUploadDialog = false"
       @submit="handleUploadSubmit"
     >
-      <div class="color-warning mb-3" style="font-size: 13px;">* 仅支持.doc, .docx, .pdf文件且大小不能超过20MB</div>
+      <div class="color-warning my-5" style="font-size: 13px;">* 仅支持.doc, .docx, .pdf文件且大小不能超过20MB</div>
       <CtForm ref="CtFormRef" :items="formItems">
         <template #uploadFile="{ item }">
           <TextInput v-model="item.value" :item="item" @click="openFileInput"></TextInput>
@@ -124,7 +124,7 @@
         </template>
       </CtForm>
       <!-- 学生-实习到岗信息 -->
-      <studentDeliveryForm v-if="baseInfo?.type && Number(baseInfo.type) === 1" ref="studentDeliveryFormRef" />
+      <studentDeliveryForm style="margin-top: 70px;" v-if="baseInfo?.type && Number(baseInfo.type) === 1" ref="studentDeliveryFormRef" />
     </CtDialog>
 
     <!-- 选择简历 -->

+ 1 - 0
src/views/recruit/teacher/organization/index.vue

@@ -76,6 +76,7 @@ const query = ref({
 const pageInfo = ref({
   pageNo: 1,
   pageSize: 10,
+  schoolId: JSON.parse(localStorage.getItem('schoolInfo'))?.schoolId,
   type: 0
 })
 

+ 12 - 3
src/views/recruit/teacher/studentList/index.vue

@@ -7,7 +7,8 @@
         <Autocomplete class="mr-3" v-model="query.schoolDeptId" :item="schoolDepartmentItem"></Autocomplete>
         <TextInput class="mr-3" v-model="query.name" :item="studentNameItem" @enter="handleSearch()"></TextInput>
         <v-btn color="primary" class="half-button ml-3" @click="handleSearch()">查 询</v-btn>
-        <v-btn class="half-button ml-3" prepend-icon="mdi-refresh" variant="outlined" color="primary" @click="handleSearch(true)">刷 新</v-btn>
+        <v-btn class="half-button ml-3" prepend-icon="mdi-refresh" variant="outlined" color="primary" @click="handleReset">重 置</v-btn>
+        <v-btn class="half-button ml-3" prepend-icon="mdi-refresh" variant="outlined" color="warning" @click="handleSearch(true)">刷 新</v-btn>
       </div>
       <!-- <v-btn :loading="exportLoading" prepend-icon="mdi-export-variant" color="primary" variant="tonal" class="ml-3" @click="null">导出</v-btn> -->
     </div>
@@ -40,7 +41,7 @@
     </div>
 
     <v-navigation-drawer v-model="showDetail" absolute location="right" rounded temporary width="700" class="pa-5">
-    <div class="resume-header" style="height: 50px;">
+    <div class="resume-header" style="height: 60px;">
       <div class="resume-title">{{ itemData?.person?.name }} - 实习报告</div>
       <Autocomplete v-model="enterpriseId" :item="enterpriseItem" @change="handleEnterprise"></Autocomplete>
     </div>
@@ -87,7 +88,7 @@ const studentNameItem = ref({
   type: 'text',
   width: 300,
   label: '请输入学生姓名搜索',
-  clearable: true,
+  clearable: false,
   hideDetails: true
 })
 const enterpriseId = ref(null)
@@ -134,6 +135,14 @@ const handleSearch = (refresh = false) => {
   getData(refresh)
 }
 
+// 重置
+const handleReset = () => {
+  query.value.pageNo = 1
+  query.value.name = null
+  query.value.schoolDeptId = null
+  getData()
+}
+
 const schoolInfo = ref(localStorage.getItem('schoolInfo') ? JSON.parse(localStorage.getItem('schoolInfo')) : {})
 const schoolDepartmentItem = ref({ width: 300, items: [], clearable: false, hideDetails: true, label: '请选择院系', itemText: 'name', itemValue: 'id' })
 

+ 0 - 6
src/views/register/school.vue

@@ -9,12 +9,8 @@ defineOptions({ name: 'register-school'})
 import { ref, onMounted } from 'vue'
 import PhonePage from './person.vue'
 import { webContentStore } from '@/store/webContent'
-import { useUserStore } from '@/store/user'
-import { useRouter } from 'vue-router'
 
-const router = useRouter()
 const webContent = webContentStore()
-const userStore = useUserStore()
 const isMobile = ref(false)
 onMounted(async () => {
   await webContent.getSystemWebContent()
@@ -24,9 +20,7 @@ onMounted(async () => {
 
 // 手机验证码效验通过
 const handleValidate= async () => {
-	// 验证通过,跳转到学校信息填写页面
 	localStorage.setItem('necessaryInfoReady', 'ready')
-	// await userStore.handleSmsLogin()
 }
 </script>
 

+ 1 - 1
src/views/register/schoolForm.vue

@@ -261,7 +261,7 @@ const handleSubmit = async () => {
 
 		Snackbar.success('提交成功,等待系统管理员审核!')
 		// 重新提交审核的需将authStatus改为0(待审核状态)
-		localStorage.setItem('registerSchoolInfo', JSON.stringify(isUpdate.value ? { ...obj, authStatus: '0' } : obj))
+		localStorage.setItem('registerSchoolInfo', JSON.stringify({ ...obj, authStatus: '0' }))
 		isUpdate.value = false
 		router.push('/register/school/inReview')
 	} catch {}

+ 30 - 6
src/views/register/schoolInReview.vue

@@ -32,11 +32,11 @@
             <div class="text-center ml-5">潘青海先生(Peter Pan)</div>
           </div>
         </div>
-
-        <div class="text-center">
-          <v-btn class="mt-16 mr-3 buttons" color="primary" @click="handleBackToFlame">回到火苗儿校企</v-btn>
-          <v-btn v-if="applyInfo?.authStatus === '2'" class="mt-16 buttons" color="primary" @click="handleConfirm">{{ $t('common.resubmit') }}</v-btn>
-        </div>
+      </div>
+      <div class="text-center mb-15">
+        <v-btn class="mt-16 mr-3 buttons" color="primary" @click="handleBackToFlame">回到火苗儿校企</v-btn>
+        <v-btn v-if="getToken()" class="mt-16 mr-3 buttons" color="primary" @click="handleRefreshApproved">刷新审核进度</v-btn>
+        <v-btn v-if="applyInfo?.authStatus === '2'" class="mt-16 buttons" color="primary" @click="handleConfirm">{{ $t('common.resubmit') }}</v-btn>
       </div>
     </v-card>
   </div>
@@ -46,10 +46,12 @@
 defineOptions({ name: 'register-schoolForm'})
 import { ref, onMounted } from 'vue'
 import { webContentStore } from '@/store/webContent'
-// import navBar from '@/layout/personal/navBar.vue'
 import { useRouter } from 'vue-router'
 import { timesTampChange } from '@/utils/date'
 import { useUserStore } from '@/store/user'
+import { getToken } from '@/utils/auth'
+import { getSchoolInformation } from '@/api/school'
+import Snackbar from '@/plugins/snackbar'
 
 const userStore = useUserStore()
 const applyInfo = ref(localStorage.getItem('registerSchoolInfo') ? JSON.parse(localStorage.getItem('registerSchoolInfo')) : {})
@@ -72,6 +74,28 @@ const handleBackToFlame = async () => {
 const handleConfirm = async () => {
   router.push('/register/schoolIndex')
 }
+
+// 刷新审核状态
+const handleRefreshApproved = async () => {
+  const data = await getSchoolInformation()
+  if (!data) return
+  localStorage.setItem('schoolInfo', data ? JSON.stringify(data) : '{}')
+  
+  if (data?.authStatus === '1') {
+    Snackbar.success('您的账号审核已通过')
+    router.push('/recruit/teacher/studentList/index')
+  }
+  if (data?.authStatus === '0') {
+    Snackbar.warning('您的账号还在审核中,请耐心等待')
+  }
+  if (data?.authStatus === '2') {
+    Snackbar.warning('您的账号审核未通过,请重新提交')
+  }
+  
+  applyInfo.value = data
+  localStorage.setItem('registerSchoolInfo', JSON.stringify(data))
+  console.log('刷新审核状态', applyInfo.value)
+}
 </script>
 
 <style scoped lang="scss">