Browse Source

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

Xiao_123 11 months ago
parent
commit
11338ce4d9

+ 1 - 1
components.d.ts

@@ -20,7 +20,7 @@ declare module 'vue' {
     CtPagination: typeof import('./src/components/CtPagination/index.vue')['default']
     CtSearch: typeof import('./src/components/CtSearch/index.vue')['default']
     CtTextField: typeof import('./src/components/CtVuetify/CtTextField/index.vue')['default']
-    DatePicker: typeof import('./src/components/FormUI/datePicker/index.vue')['default']
+    DatePicker: typeof import('./src/components/DatePicker/index.vue')['default']
     Details: typeof import('./src/components/Enterprise/details.vue')['default']
     Empty: typeof import('./src/components/Empty/index.vue')['default']
     HeadSearch: typeof import('./src/components/headSearch/index.vue')['default']

+ 25 - 1
src/api/personal/user.js

@@ -6,4 +6,28 @@ export const getUserInfo = async (params) => {
     url: '/app-api/menduner/system/mde-user/get',
     params
   })
-}
+}
+
+// 获取当前用户绑定的企业列表
+export const getUserBindEnterpriseList = async (params) => {
+  return await request.get({
+    url: '/app-api/menduner/system/enterprise-user-bind/get/user',
+    params
+  })
+}
+
+// 企业注册申请
+export const enterpriseRegisterApply = async (data) => {
+  return await request.post({
+    url: '/app-api/menduner/system/enterprise-register/apply',
+    data
+  })
+}
+
+// 获取当前用户提交的企业申请
+export const getUserRegisterEnterpriseApply = async (params) => {
+  return await request.get({
+    url: '/app-api/menduner/system/enterprise-register/by/user',
+    params
+  })
+}

+ 2 - 6
src/layout/company/navBar.vue

@@ -95,13 +95,9 @@ import { useRouter } from 'vue-router'
 const router = useRouter()
 const handleLogoClick = () => { router.push({ path: '/enterprise/home'}) }
 
-const userType = ref(0) // 0企业用户、1个人用户
 const changeRole = () => {
-  if (userType.value) {
-    router.push({ path: '/enterprise/register' })
-  } else {
-    router.push({ path: '/' })
-  }
+  router.push({ path: '/' })
+  // router.push({ path: '/enterprise/register' })
 }
 
 const handleToPersonalCenter = () => {

+ 17 - 8
src/layout/personal/navBar.vue

@@ -102,6 +102,7 @@ import { reactive, ref } from 'vue'
 import { getToken } from '@/utils/auth'
 import { useUserStore } from '@/store/user'
 import { useLocaleStore } from '@/store/locale'
+import { getUserBindEnterpriseList, getUserRegisterEnterpriseApply } from '@/api/personal/user'
 defineOptions({ name: 'personal-navbar' })
 
 defineProps({
@@ -124,13 +125,21 @@ import { useRouter } from 'vue-router'
 const router = useRouter()
 const handleLogoClick = () => { router.push({ path: '/home'}) }
 
-const loginType = ref(1) // 0企业用户、1个人用户
-const changeRole = () => {
-  if (loginType.value) {
-    router.push({ path: '/enterprise/register' })
-  } else {
-    router.push({ path: '/enterprise/talentPool' })
-  }
+// 查看用户是否有企业
+const changeLoginType = async () => {
+  // const data = await getUserBindEnterpriseList()
+  const data = await getUserBindEnterpriseList() // 申请通过才会数据,否则空数组
+  if (data?.length) router.push({ path: '/enterprise' })
+  else getApplyInfo()
+}
+
+// 查看用户是否有在申请中的数据
+const getApplyInfo = async () => {
+  const data = await getUserRegisterEnterpriseApply()
+  const path = ref('')
+  if (data && Object.keys(data).length) path.value = '/enterprise/inReview' // 已经有数据说明已经申请过了
+  else path.value = '/enterprise/register'
+  router.push({ path })
 }
 
 const handleToPersonalCenter = () => {
@@ -150,7 +159,7 @@ const handleLogout = async () => {
 const items = ref([
   { title: '在线简历', icon: 'mdi-list-box-outline', change: () => router.push({ path: '/resume' }) },
   { title: '账号设置', icon: 'mdi-cog-outline', change: () => router.push({ path: '/personalAccount/accountBinding' }) },
-  { title: '切换为招聘者', icon: 'mdi-swap-horizontal', change: changeRole },
+  { title: '切换为招聘者', icon: 'mdi-swap-horizontal', change: changeLoginType },
   { title: '退出登录', icon: 'mdi-logout', change: handleLogout }
 ])
 const baseInfo = reactive(JSON.parse(localStorage.getItem('baseInfo'))) // 人才信息

+ 2 - 0
src/locales/en.js

@@ -9,6 +9,8 @@ export default {
     change: 'Change',
     complete: 'Complete',
     saveMsg: 'Save successful',
+    toHome: 'Go back to the homepage',
+    submittedSuccessfully: 'Submitted successful',
     addMsg: 'New successfully added',
     delMsg: 'Delete successful',
     uploadSucMsg: 'Upload successful',

+ 2 - 0
src/locales/zh-CN.js

@@ -9,6 +9,8 @@ export default {
     change: '更改',
     complete: '完成',
     saveMsg: '保存成功',
+    toHome: '回到首页',
+    submittedSuccessfully: '提交成功',
     addMsg: '新增成功',
     delMsg: '删除成功',
     uploadSucMsg: '上传成功',

+ 8 - 1
src/router/modules/personal.js

@@ -88,10 +88,17 @@ const personal = [
       },
       {
         path: '/enterprise/joiningEnterprise',
-        component: () => import('@/views/enterprise/components/JoiningEnterprise.vue'),
+        component: () => import('@/views/enterprise/components/joiningEnterprise.vue'),
         meta: {
           title: '加入企业'
         }
+      },
+      {
+        path: '/enterprise/inReview',
+        component: () => import('@/views/enterprise/components/inReview.vue'),
+        meta: {
+          title: '申请信息'
+        }
       }
     ]
   }

+ 2 - 24
src/store/user.js

@@ -77,32 +77,10 @@ export const useUserStore = defineStore('user',
       if (data.expType && data.expType !== 0) await getBaseInfoDictOfName(2, data, data.expType, 'expTypeText') // 工作经验
       if (data.sex && data.sex !== 0) await getBaseInfoDictOfName(3, data, data.sex, 'sexTypeText') // 性别
       if (data.jobType && data.jobType !== 0) await getBaseInfoDictOfName(4, data, data.jobType, 'jobTypeText') // 求职类型
-      if (data.maritalStatus && data.maritalStatus !== 0) await getMaritalText(data, data.maritalStatus) // 	婚姻状况
-      if (data.jobStatus && data.jobStatus !== 0) await getJobStatusText(data, data.jobStatus) // 	求职状态
+      if (data.jobStatus && data.jobStatus !== 0) await getBaseInfoDictOfName(5, data, data.jobStatus, 'jobStatusText') // 	求职状态
+      if (data.maritalStatus && data.maritalStatus !== 0) await getBaseInfoDictOfName(6, data, data.maritalStatus, 'maritalText') // 	婚姻状况
       return data
     }
-    const getMaritalText = async (data, value) => { // 字典未加上,暂时的
-      const items = [
-        { label: '未婚', value: '0' },
-        { label: '已婚', value: '1' },
-        { label: '离异', value: '2' },
-        { label: '保密', value: '3' }
-      ]
-      const obj = items.find(e => e.value === value)
-      const str = obj ? obj.label : '暂无'
-      data.maritalText = str
-    }
-    const getJobStatusText = async (data, value) => { // 字典未加上,暂时的
-      const items = [
-        { label: '离职-随时到岗', value: '0' },
-        { label: '在职-月内到岗', value: '1' },
-        { label: '在职-考虑机会', value: '2' },
-        { label: '在职-暂不考虑', value: '3' }
-      ]
-      const obj = items.find(e => e.value === value)
-      const str = obj ? obj.label : '暂无'
-      data.jobStatusText = str
-    }
 
     // 退出登录
     const userLogout = async () => {

+ 3 - 1
src/utils/getText.js

@@ -15,6 +15,8 @@ export const getBaseInfoDictOfName = async (index = 0, baseInfo, value, addKeyNa
     { dictType: 'menduner_exp_type', itemText: 'label', itemValue: 'value' },
     { dictType: 'system_user_sex', itemText: 'label', itemValue: 'value', saveType: 'dict' },
     { dictType: 'menduner_job_type', itemText: 'label', itemValue: 'value', saveType: 'dict' },
+    { dictType: 'menduner_job_status', itemText: 'label', itemValue: 'value', saveType: 'dict' },
+    { dictType: 'menduner_marital_status', itemText: 'label', itemValue: 'value', saveType: 'dict' },
   ]
   const e = test[index]
 
@@ -25,7 +27,7 @@ export const getBaseInfoDictOfName = async (index = 0, baseInfo, value, addKeyNa
   baseInfo[addKeyName] = item ? item[e.itemText] : '暂无'
 }
 
-// export const getBaseInfoDictOfName = async (baseInfo, value, addKey, itemText = 'name', itemValue = 'id') => { // 一维数组
+// export const getBaseInfoDictOfName1 = async (baseInfo, value, addKey, itemText = 'name', itemValue = 'id') => { // 一维数组
 //   if (!value && value !== 0) baseInfo[addKey] = '暂无'
 //   const { data } = await getDict('menduner_area_type', {}, 'areaList')
 //   const item = data.find(formItem => Number(formItem[itemValue]) === Number(value))

+ 7 - 6
src/views/PersonalCenter/dynamic/left.vue

@@ -62,6 +62,7 @@
 </template>
 
 <script setup>
+import { getDict } from '@/hooks/web/useDictionaries'
 defineOptions({ name: 'personal-center-left'})
 import { ref } from 'vue'
 import PositionItem from '../components/posiitonItem.vue'
@@ -69,12 +70,12 @@ import PositionItem from '../components/posiitonItem.vue'
 const tab = ref(1)
 const secondTab = ref(7)
 const selectVal = ref('0')
-const items = [
-  { label: '离职-随时到岗', value: '0' },
-  { label: '在职-暂不考虑', value: '1' },
-  { label: '在职-考虑机会', value: '2' },
-  { label: '在职-月内到岗', value: '3' }
-]
+const items = ref([])
+
+getDict('menduner_job_status').then(({ data }) => {
+  data = data?.length && data || []
+  items.value = data
+})
 
 let baseInfo = ref({})
 const getBasicInfo = () => {

+ 8 - 2
src/views/enterprise/components/JoiningEnterprise.vue

@@ -14,7 +14,7 @@
         <v-btn
           :loading="loginLoading"
           color="primary" class="white--text mt-8" min-width="350"
-          to="/enterprise/talentPool"
+          @click="handleCommit"
         >
         {{ $t('common.complete') }}
         </v-btn>
@@ -31,11 +31,14 @@
 import CtForm from '@/components/CtForm'
 import { enterpriseSearchByName } from '@/api/resume'
 import { useRouter } from 'vue-router'
+import Snackbar from '@/plugins/snackbar'
+import { useI18n } from '@/hooks/web/useI18n'
 import { ref } from 'vue'
 
 defineOptions({name: 'enterprise-enterpriseRegister-joiningEnterprise'})
 const router = useRouter()
 const loginLoading = ref(false)
+const { t } = useI18n()
 
 // 企业名称下拉列表
 const getSchoolListData = async (name) => {
@@ -84,8 +87,11 @@ const handleCommit = () => {
   // await saveResumeBasicInfo({ ...baseInfo.value, avatar: data })
   // await userStore.getUserBaseInfos(baseInfo.value.userId)
   // getBasicInfo()
+  Snackbar.success(t('common.submittedSuccessfully'))
+  setTimeout(() => {
+    router.push({ path: '/enterprise' })
+  }, 3000);
 }
-handleCommit()
 </script>
 <style lang="scss" scoped>
 .CtFormClass {

+ 27 - 0
src/views/enterprise/components/inReview.vue

@@ -0,0 +1,27 @@
+<template>
+  <div class="pt-5">
+    <v-card class="default-width pa-5">
+      <div style="width: 600px;margin: 80px auto;">
+        <div>您的申请正在审核中,审核时间在1~3个工作日内,申请结果会以短信方式通知到您的手机上,请注意查收</div>
+        <div class="mt-5">
+          <span>提交时间:</span>
+          <span>{{ commitTime }}</span>
+        </div>
+        <div class="text-center">
+          <!-- <v-btn class="mt-10" color="warning" @click="router.push({ path: '/' })">{{ $t('common.toHome') }}</v-btn> -->
+          <v-btn class="mt-16" color="warning" to="/">{{ $t('common.toHome') }}</v-btn>
+        </div>
+      </div>
+    </v-card>
+  </div>
+</template>
+
+<script setup>
+import { ref } from 'vue';
+
+defineOptions({name: 'enterprise-enterpriseRegister-inReview'})
+
+const commitTime = ref(new Date())
+</script>
+<style lang="scss" scoped>
+</style>

+ 85 - 44
src/views/enterprise/components/register.vue

@@ -10,48 +10,54 @@
         <CtForm ref="CtFormRef" :items="formItems" style="width: 100%;"></CtForm>
         <!-- 上传照片 -->
         <div style="color: #999;">
-          <span class="mr-1" style="color: red;">*</span>
+          <span class="mr-1" style="color: #fe574a;">*</span>
           <span>上传营业执照</span>
-          <span class="mx-3 defaultLink">查看示例</span>
+          <!-- <span class="mx-3 defaultLink">查看示例</span> -->
           <span>支持jpg、jpeg、png格式,照片大小不得超过10M</span>
         </div>
-        <div class="file-input-box mt-3" @click="openFileInput">
-          <div class="icon text-center">
-            <span class="mdi mdi-plus" style="font-size: 20px;"></span>
-            <div style="font-size: 12px; ">上传照片</div>
+        <div class="file-box">
+          <div class="file-item" v-if="licenseUrl">
+            <v-img width="100%" height="100%" :src="licenseUrl"></v-img>
+            <!-- <v-img width="100%" height="100%" src="http://menduner.citupro.com:6868/admin-api/infra/file/24/get/cd7f5e26a239fb0ab335585e04c709b065f52832fc31539b3a5423224fc6d16c.png"></v-img> -->
+          </div>
+          <div class="file-item file-input-box" :class="{'verifyAct': fileVerify}" @click="openFileInput">
+            <div class="icon text-center">
+              <span class="mdi mdi-plus" style="font-size: 20px;"></span>
+              <div style="font-size: 12px; ">上传照片</div>
+            </div>
+            <input
+              type="file"
+              ref="fileInput"
+              accept="image/png, image/jpg, image/jpeg"
+              style="display: none;"
+              @change="handleUploadFile"
+            />
           </div>
-          <input
-            type="file"
-            ref="fileInput"
-            accept="image/png, image/jpg, image/jpeg"
-            style="display: none;"
-            @change="handleUploadFile"
-          />
         </div>
         <!-- 注意事项 -->
         <div class="note mt-5">
-          <h4>注意事项</h4>
-          <div>1.企业名称为对外展示的企业名称,建议填写公司营业执照上的名称,请区分总公司和分公司</div>
-          <div>
+          <h4>注意事项:</h4>
+          <span>企业名称为对外展示的企业名称,建议填写公司营业执照上的名称,请区分总公司和分公司</span>
+          <!-- <div>
             <span>2.若公司已注册,请上传公司委托证明下载模版</span>
             <span class="mx-3 defaultLink">下载模版</span>
-          </div>
+          </div> -->
         </div>
       </div>
       <div class="text-center">
         <!-- 提交 -->
         <v-btn
           :loading="loginLoading"
-          color="primary" class="white--text mt-8" min-width="350"
-          to="/enterprise/talentPool"
+          color="primary" class="white--text my-8" min-width="350"
+          @click="handleCommit"
         >
         {{ $t('common.complete') }}
         </v-btn>
       </div>
-      <!-- 底部 -->
-      <div class="text-center mt-5">
-        <v-btn color="primary" variant="text" to="/enterprise/joiningEnterprise">{{ $t('enterprise.joiningEnterprise') }}</v-btn>
-      </div>
+      <!-- 底部 个人不能绑定企业 要去后端管理员加 -->
+      <!-- <div class="text-center">
+        <v-btn color="primary" variant="text" @click="router.push({ path: '/enterprise/joiningEnterprise' })">{{ $t('enterprise.joiningEnterprise') }}</v-btn>
+      </div> -->
     </v-card>
   </div>
 </template>
@@ -61,9 +67,14 @@ import CtForm from '@/components/CtForm'
 import Snackbar from '@/plugins/snackbar'
 import { uploadFile } from '@/api/common'
 import { useI18n } from '@/hooks/web/useI18n'
+import { useRouter } from 'vue-router'
+import { enterpriseRegisterApply } from '@/api/personal/user'
 import { ref } from 'vue';
 defineOptions({name: 'enterprise-enterpriseRegister-register'})
 const { t } = useI18n()
+const CtFormRef = ref()
+const router = useRouter()
+const fileVerify = ref(false)
 const loginLoading = ref(false)
 
 const formItems = ref({
@@ -109,23 +120,36 @@ const openFileInput = () => {
   fileInput.value.click()
   clicked.value = false
 }
-// 上传头像
+// 上传
+let licenseUrl = ref('')
 const handleUploadFile = async (e) => {
   const file = e.target.files[0]
   const formData = new FormData()
   formData.append('file', file)
   const { data } = await uploadFile(formData)
   if (!data) return
-  console.log('uploadFile->data', data)
+  licenseUrl.value = data
+  fileVerify.value = false
+  // console.log('uploadFile->data', data)
   Snackbar.success(t('common.uploadSucMsg'))
 }
-// 提交
-const handleCommit = () => {
-  // await saveResumeBasicInfo({ ...baseInfo.value, avatar: data })
-  // await userStore.getUserBaseInfos(baseInfo.value.userId)
-  // getBasicInfo()
+// 提交 企业注册
+const handleCommit = async () => {
+  // 广州辞图科技有限公司
+  const { valid } = await CtFormRef.value.formRef.validate()
+  const businessLicenseUrl = licenseUrl.value; if (!businessLicenseUrl) fileVerify.value = true
+  if (!valid || !businessLicenseUrl) return
+  const baseInfo = {}
+  formItems.value.options.forEach(e => { baseInfo[e.key] = e.value })
+  await enterpriseRegisterApply({ ...baseInfo, businessLicenseUrl })
+  Snackbar.success(t('common.submittedSuccessfully'))
+  router.push({ path: '/enterprise/inReview' })
+  // 暂时自动跳转
+  setTimeout(() => {
+    router.push({ path: '/enterprise' })
+  }, 8000);
 }
-handleCommit()
+
 </script>
 <style lang="scss" scoped>
 .CtFormClass {
@@ -136,19 +160,36 @@ handleCommit()
   font-size: 14px;
   line-height: 32px;
 }
-.file-input-box {
-  position: relative;
-  height: 80px;
-  width: 100px;
-  border: 1px solid rgb(188, 188, 188);
-  border-radius: 5px;
-  cursor: pointer;
-  .icon {
-    position: absolute;
-    top: 45%;
-    left: 50%;
-    transform: translate(-50%, -50%);
-    color: #999;
+.file-box {
+  display: flex;
+  flex-wrap: wrap; /* 允许换行 */
+  width: 100%; /* 设置容器宽度 */
+  .file-item {
+    height: 80px;
+    width: 100px;
+    border-radius: 5px;
+    margin-right: 8px;
+    margin-top: 12px;
+    // border: 1px solid rgb(188, 188, 188);
+    border: 1px solid rgba(188, 188, 188, 0.5);
+  }
+  .file-input-box {
+    position: relative;
+    border: 1px solid rgb(188, 188, 188);
+    cursor: pointer;
+    .icon {
+      position: absolute;
+      top: 45%;
+      left: 50%;
+      transform: translate(-50%, -50%);
+      color: #999;
+    }
+  }
+  // 验证是否为空
+  .verifyAct {
+    color: #fe574a;
+    border: 1px solid #fe574a;
+    .icon { color: #fe574a; }
   }
 }
 </style>

+ 4 - 12
src/views/resume/components/basicInfo.vue

@@ -286,13 +286,9 @@ const formItems = ref({
       outlined: true,
       itemText: 'label',
       itemValue: 'value',
+      dictTypeName: 'menduner_job_status',
       rules: [v => !!v || '请选择求职状态'],
-      items: [
-        { label: '离职-随时到岗', value: '0' },
-        { label: '在职-月内到岗', value: '1' },
-        { label: '在职-考虑机会', value: '2' },
-        { label: '在职-暂不考虑', value: '3' }
-      ]
+      items: []
     },
     {
       type: 'autocomplete',
@@ -304,13 +300,9 @@ const formItems = ref({
       outlined: true,
       itemText: 'label',
       itemValue: 'value',
+      dictTypeName: 'menduner_marital_status',
       rules: [v => !!v || '请选择婚姻状况'],
-      items: [
-        { label: '未婚', value: '0' },
-        { label: '已婚', value: '1' },
-        { label: '离异', value: '2' },
-        { label: '保密', value: '3' }
-      ]
+      items: []
     },
     {
       type: 'datePicker',