Bladeren bron

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

zhengnaiwen_citu 7 maanden geleden
bovenliggende
commit
1aae1a8513

+ 1 - 1
.env.development

@@ -1,6 +1,6 @@
 NODE_ENV = 'development'
 NODE_ENV = 'development'
 
 
-VITE_APP_TITLE = 门墩儿招聘
+VITE_APP_TITLE = 门墩儿
 
 
 # 访问路径
 # 访问路径
 # VITE_ACCESS_BASE_URL = 'http://localhost:3000'
 # VITE_ACCESS_BASE_URL = 'http://localhost:3000'

+ 1 - 1
.env.localDev

@@ -1,6 +1,6 @@
 NODE_ENV = 'localDev'
 NODE_ENV = 'localDev'
 
 
-VITE_APP_TITLE = 门墩儿招聘
+VITE_APP_TITLE = 门墩儿
 
 
 # 访问路径
 # 访问路径
 # VITE_ACCESS_BASE_URL = 'http://menduner.citupro.com:7878'
 # VITE_ACCESS_BASE_URL = 'http://menduner.citupro.com:7878'

+ 7 - 0
src/api/recruit/enterprise/position/index.js

@@ -13,3 +13,10 @@ export const getRecruitPositionDetails = async (id) => {
     url: `/app-api/menduner/system/recruit/position/get?id=${id}`
     url: `/app-api/menduner/system/recruit/position/get?id=${id}`
   })
   })
 }
 }
+
+// 获取企业发布职位类型权限
+export const getEnterprisePubJobTypePermission = async () => {
+  return await request.get({
+    url: '/app-api/menduner/system/recruit/enterprise/get/pub-job-type-perm'
+  })
+}

+ 0 - 1
src/layout/personal/navBar.vue

@@ -107,7 +107,6 @@
       <v-radio-group v-model="radios" :hide-details="true">
       <v-radio-group v-model="radios" :hide-details="true">
         <v-radio v-for="item in enterpriseList" :key="item.enterpriseId" color="primary" :label="item.enterpriseName" :value="item.enterpriseId"></v-radio>
         <v-radio v-for="item in enterpriseList" :key="item.enterpriseId" color="primary" :label="item.enterpriseName" :value="item.enterpriseId"></v-radio>
       </v-radio-group>
       </v-radio-group>
-      <!-- <v-btn :loading="loading1" color="primary" variant="text" @click="newRegistering">{{ btnType ? '注册新企业' : '查看申请进度' }}</v-btn> -->
       <div class="text-end pr-5 pt-5">
       <div class="text-end pr-5 pt-5">
         <span class="color-error cursor-pointer text-decoration-underline" @click="newRegistering">{{ btnType ? '都不是我要的?去注册新企业' : '查看申请进度' }}</span>
         <span class="color-error cursor-pointer text-decoration-underline" @click="newRegistering">{{ btnType ? '都不是我要的?去注册新企业' : '查看申请进度' }}</span>
       </div>
       </div>

+ 58 - 55
src/views/recruit/entRegister/register.vue

@@ -107,7 +107,7 @@ const showPreview = ref(false)
 const current = ref(0)
 const current = ref(0)
 const business = ref({})
 const business = ref({})
 let licenseUrl = ref('')
 let licenseUrl = ref('')
-const email = localStorage.getItem('loginAccount') || ''
+// const email = localStorage.getItem('loginAccount') && checkEmail(localStorage.getItem('loginAccount')) ? localStorage.getItem('loginAccount') : ''
 
 
 // 组件挂载后添加事件监听器
 // 组件挂载后添加事件监听器
 const isMobile = ref(false)
 const isMobile = ref(false)
@@ -123,58 +123,6 @@ const showContactList = ref(false)
 const contactInfo = { contactName: '', phone: '', email: '', password: '', passwordConfirm:'' }
 const contactInfo = { contactName: '', phone: '', email: '', password: '', passwordConfirm:'' }
 let contactList = [{ ...contactInfo }]
 let contactList = [{ ...contactInfo }]
 const contactCopy = ref([])
 const contactCopy = ref([])
-const contactSubmit = () => {
-  let falseValueIndex = null
-  let falseKey = null
-  contactCopy.value.forEach((e, index) => {
-    if (falseValueIndex !== null) return
-    if (e && Object.keys(e).length) {
-      Object.keys(e).forEach(key => {
-        if (falseValueIndex !== null) return
-        if (!e[key]) {
-          falseValueIndex = index
-          falseKey = key
-        }
-      })
-    }
-    if (e.password && e.passwordConfirm && e.password !== e.passwordConfirm) 
-    falseValueIndex = index
-    falseKey = 'compareFalse'
-  })
-  const textList =  {
-    contactName: '姓名',
-    phone: '联系电话',
-    email: '企业邮箱',
-    password: '登录密码',
-    passwordConfirm: '登录密码',
-  }
-  if (falseValueIndex || falseValueIndex === 0) {
-    //
-    let text = ''
-    if (falseKey === 'compareFalse') {
-      text = falseValueIndex ? `【联系人${falseValueIndex}】两次输入的密码不一致` : `【管理员】两次输入的密码不一致`
-    } else {
-      text = falseValueIndex ? `请完善联系人${falseValueIndex}的【${textList[falseKey]}】` : `请完善管理员的【${textList[falseKey]}】`
-    }
-    Confirm(t('common.confirmTitle'), text, { hideCancelBtn: true })
-    return
-  } 
-  contactList = [...contactCopy.value]
-  showContactList.value = false
-  saveRegisterInfo()
-}
-const handleAddContact = () => {
-  contactCopy.value = [...contactList]
-  showContactList.value = true
-}
-const addMore = () => {
-  contactCopy.value.push({...contactInfo})
-}
-const delContact = (index) => {
-  Confirm('系统提示', `是否确认删除${index ? `联系人${index}` : '管理员'}?`).then(async () => {
-    contactCopy.value.splice(index, 1)
-  })
-}
 
 
 // 注册信息保存
 // 注册信息保存
 const enterpriseRegisterInfo = ref(localStorage.getItem('enterpriseRegisterInfo') ? JSON.parse(localStorage.getItem('enterpriseRegisterInfo')) : {})
 const enterpriseRegisterInfo = ref(localStorage.getItem('enterpriseRegisterInfo') ? JSON.parse(localStorage.getItem('enterpriseRegisterInfo')) : {})
@@ -334,7 +282,6 @@ const handleCommit = async () => {
 // 不通过的企业注册申请 重新发起
 // 不通过的企业注册申请 重新发起
 const failureReason = ref('')
 const failureReason = ref('')
 const info = JSON.parse(localStorage.getItem('userApplyInfo'))
 const info = JSON.parse(localStorage.getItem('userApplyInfo'))
-console.log(1, '23456', info)
 // 审核不通过的数据回显
 // 审核不通过的数据回显
 if (info && Object.keys(info).length && info.status === '2') {
 if (info && Object.keys(info).length && info.status === '2') {
   failureReason.value = info?.reason || ''
   failureReason.value = info?.reason || ''
@@ -364,6 +311,60 @@ if (info && Object.keys(info).length && info.status === '2') {
   }
   }
 }
 }
 
 
+// 多个联系人提交保存
+const contactSubmit = () => {
+  let falseValueIndex = null
+  let falseKey = null
+  contactCopy.value.forEach((e, index) => {
+    if (falseValueIndex !== null) return
+    if (e && Object.keys(e).length) {
+      Object.keys(e).forEach(key => {
+        if (falseValueIndex !== null) return
+        if (!e[key]) {
+          falseValueIndex = index
+          falseKey = key
+        }
+      })
+    }
+    if (e.password && e.passwordConfirm && e.password !== e.passwordConfirm) 
+    falseValueIndex = index
+    falseKey = 'compareFalse'
+  })
+  const textList =  {
+    contactName: '姓名',
+    phone: '联系电话',
+    email: '企业邮箱',
+    password: '登录密码',
+    passwordConfirm: '登录密码',
+  }
+  if (falseValueIndex || falseValueIndex === 0) {
+    //
+    let text = ''
+    if (falseKey === 'compareFalse') {
+      text = falseValueIndex ? `【联系人${falseValueIndex}】两次输入的密码不一致` : `【管理员】两次输入的密码不一致`
+    } else {
+      text = falseValueIndex ? `请完善联系人${falseValueIndex}的【${textList[falseKey]}】` : `请完善管理员的【${textList[falseKey]}】`
+    }
+    Confirm(t('common.confirmTitle'), text, { hideCancelBtn: true })
+    return
+  } 
+  contactList = [...contactCopy.value]
+  showContactList.value = false
+  saveRegisterInfo()
+}
+const handleAddContact = () => {
+  contactCopy.value = [...contactList]
+  showContactList.value = true
+}
+const addMore = () => {
+  contactCopy.value.push({...contactInfo})
+}
+const delContact = (index) => {
+  Confirm('系统提示', `是否确认删除${index ? `联系人${index}` : '管理员'}?`).then(async () => {
+    contactCopy.value.splice(index, 1)
+  })
+}
+
 const contactNameObj = {
 const contactNameObj = {
   type: 'text',
   type: 'text',
   key: 'contactName',
   key: 'contactName',
@@ -382,7 +383,8 @@ const phoneObj = {
 const emailObj = {
 const emailObj = {
   type: 'text',
   type: 'text',
   key: 'email',
   key: 'email',
-  value: email ? email : '',
+  value: '',
+  // value: email ? email : '',
   label: '企业邮箱 *(此邮箱将用于日后“登录邮箱”)',
   label: '企业邮箱 *(此邮箱将用于日后“登录邮箱”)',
   // label: '企业邮箱 * (此邮箱将作为企业登录的账号)',
   // label: '企业邮箱 * (此邮箱将作为企业登录的账号)',
   rules: [
   rules: [
@@ -434,6 +436,7 @@ const passwordConfirmObj = {
     },
     },
   ],
   ],
 }
 }
+
 </script>
 </script>
 
 
 <style lang="scss" scoped>
 <style lang="scss" scoped>

+ 4 - 1
src/views/recruit/enterprise/hirePosition/components/item.vue

@@ -74,6 +74,7 @@ import { useI18n } from '@/hooks/web/useI18n'
 import { closeJobAdvertised, enableJobAdvertised, updatePositionExpireTime } from '@/api/position'
 import { closeJobAdvertised, enableJobAdvertised, updatePositionExpireTime } from '@/api/position'
 import Snackbar from '@/plugins/snackbar'
 import Snackbar from '@/plugins/snackbar'
 import confirmPaymentDialog from '@/components/pay/confirmPaymentDialog.vue'
 import confirmPaymentDialog from '@/components/pay/confirmPaymentDialog.vue'
+import { getEnterprisePubJobTypePermission } from '@/api/recruit/enterprise/position'
 
 
 const { t } = useI18n()
 const { t } = useI18n()
 const emit = defineEmits(['refresh'])
 const emit = defineEmits(['refresh'])
@@ -143,8 +144,10 @@ const handleAction = async (index, { id }) => {
 
 
 const router = useRouter()
 const router = useRouter()
 // 职位编辑
 // 职位编辑
-const handleEdit = (val) => {
+const handleEdit = async (val) => {
   if (props.tab !== 1) return
   if (props.tab !== 1) return
+  const data = await getEnterprisePubJobTypePermission()
+  if (!data || !data.length) return Snackbar.warning('没有该操作权限,请联系平台管理员升级后再试')
   router.push(`/recruit/enterprise/hirePosition/edit?id=${val.id}`)
   router.push(`/recruit/enterprise/hirePosition/edit?id=${val.id}`)
 }
 }
 
 

+ 12 - 2
src/views/recruit/enterprise/hirePosition/components/jobRequirements.vue

@@ -57,6 +57,7 @@ import CtForm from '@/components/CtForm'
 import { reactive, ref, watch } from 'vue'
 import { reactive, ref, watch } from 'vue'
 import { getDict } from '@/hooks/web/useDictionaries'
 import { getDict } from '@/hooks/web/useDictionaries'
 import { getTagTreeDataApi } from '@/api/enterprise'
 import { getTagTreeDataApi } from '@/api/enterprise'
+import { getEnterprisePubJobTypePermission } from '@/api/recruit/enterprise/position'
 
 
 const props = defineProps({
 const props = defineProps({
   itemData: Object
   itemData: Object
@@ -71,10 +72,10 @@ const items = ref({
       key: 'type',
       key: 'type',
       value: null,
       value: null,
       label: '招聘类型 *',
       label: '招聘类型 *',
-      itemText: 'label',
+      itemText: 'key',
       itemValue: 'value',
       itemValue: 'value',
       col: 4,
       col: 4,
-      dictTypeName: 'menduner_job_type',
+      // dictTypeName: 'menduner_job_type',
       rules: [v => !!v || '招聘类型'],
       rules: [v => !!v || '招聘类型'],
       items: []
       items: []
     },
     },
@@ -188,6 +189,15 @@ const items = ref({
   ]
   ]
 })
 })
 
 
+const getJobTypeList = async () => {
+  const data = await getEnterprisePubJobTypePermission()
+  if (!data || !data.length) return
+  const jobTypeItem = items.value.options.find(e => e.key === 'type')
+  if (jobTypeItem) jobTypeItem.items = data
+  //  Snackbar.warning('没有该操作权限,请联系平台管理员升级后再试')
+}
+getJobTypeList()
+
 // 招聘职位标签
 // 招聘职位标签
 const tagList = ref([])
 const tagList = ref([])
 const getTagList = async () => {
 const getTagList = async () => {

+ 4 - 0
src/views/recruit/enterprise/hirePosition/index.vue

@@ -42,6 +42,8 @@ import { dealDictArrayData } from '@/utils/position'
 import { useI18n } from '@/hooks/web/useI18n'
 import { useI18n } from '@/hooks/web/useI18n'
 import { useUserStore } from '@/store/user'
 import { useUserStore } from '@/store/user'
 import download from '@/utils/download'
 import download from '@/utils/download'
+import { getEnterprisePubJobTypePermission } from '@/api/recruit/enterprise/position'
+import Snackbar from '@/plugins/snackbar'
 
 
 const store = useUserStore()
 const store = useUserStore()
 
 
@@ -77,6 +79,8 @@ const textItem = ref({
 })
 })
 
 
 const handleAdd = async () => {
 const handleAdd = async () => {
+  const data = await getEnterprisePubJobTypePermission()
+  if (!data || !data.length) return Snackbar.warning('没有该操作权限,请联系平台管理员升级后再试')
   router.push('/recruit/enterprise/hirePosition/add')
   router.push('/recruit/enterprise/hirePosition/add')
   await store.getEnterpriseUserAccountInfo()
   await store.getEnterpriseUserAccountInfo()
 }
 }

+ 4 - 1
src/views/recruit/enterprise/positionManagement/components/item.vue

@@ -82,6 +82,7 @@ import { ref, watch } from 'vue'
 import { useRouter } from 'vue-router'
 import { useRouter } from 'vue-router'
 import { timesTampChange } from '@/utils/date'
 import { timesTampChange } from '@/utils/date'
 import { useI18n } from '@/hooks/web/useI18n'
 import { useI18n } from '@/hooks/web/useI18n'
+import { getEnterprisePubJobTypePermission } from '@/api/recruit/enterprise/position'
 import { closeJobAdvertised, enableJobAdvertised, refreshJobAdvertised, topJobAdvertised, updatePositionExpireTime, topJobAdvertisedCancel } from '@/api/position'
 import { closeJobAdvertised, enableJobAdvertised, refreshJobAdvertised, topJobAdvertised, updatePositionExpireTime, topJobAdvertisedCancel } from '@/api/position'
 import Snackbar from '@/plugins/snackbar'
 import Snackbar from '@/plugins/snackbar'
 
 
@@ -192,8 +193,10 @@ const handleSubmit = async () => {
 
 
 const router = useRouter()
 const router = useRouter()
 // 职位编辑
 // 职位编辑
-const handleEdit = (val) => {
+const handleEdit = async (val) => {
   if (props.tab !== 1) return
   if (props.tab !== 1) return
+  const data = await getEnterprisePubJobTypePermission()
+  if (!data || !data.length) return Snackbar.warning('没有该操作权限,请联系平台管理员升级后再试')
   router.push(`/recruit/enterprise/position/edit?id=${val.id}`)
   router.push(`/recruit/enterprise/position/edit?id=${val.id}`)
 }
 }
 </script>
 </script>

+ 12 - 2
src/views/recruit/enterprise/positionManagement/components/jobRequirements.vue

@@ -57,6 +57,7 @@ import CtForm from '@/components/CtForm'
 import { reactive, ref, watch } from 'vue'
 import { reactive, ref, watch } from 'vue'
 import { getDict } from '@/hooks/web/useDictionaries'
 import { getDict } from '@/hooks/web/useDictionaries'
 import { getTagTreeDataApi } from '@/api/enterprise'
 import { getTagTreeDataApi } from '@/api/enterprise'
+import { getEnterprisePubJobTypePermission } from '@/api/recruit/enterprise/position'
 
 
 const props = defineProps({
 const props = defineProps({
   itemData: Object
   itemData: Object
@@ -71,10 +72,10 @@ const items = ref({
       key: 'type',
       key: 'type',
       value: null,
       value: null,
       label: '招聘类型 *',
       label: '招聘类型 *',
-      itemText: 'label',
+      itemText: 'key',
       itemValue: 'value',
       itemValue: 'value',
       col: 4,
       col: 4,
-      dictTypeName: 'menduner_job_type',
+      // dictTypeName: 'menduner_job_type',
       rules: [v => !!v || '招聘类型'],
       rules: [v => !!v || '招聘类型'],
       items: []
       items: []
     },
     },
@@ -188,6 +189,15 @@ const items = ref({
   ]
   ]
 })
 })
 
 
+const getJobTypeList = async () => {
+  const data = await getEnterprisePubJobTypePermission()
+  if (!data || !data.length) return
+  const jobTypeItem = items.value.options.find(e => e.key === 'type')
+  if (jobTypeItem) jobTypeItem.items = data
+  //  Snackbar.warning('没有该操作权限,请联系平台管理员升级后再试')
+}
+getJobTypeList()
+
 // 招聘职位标签
 // 招聘职位标签
 const tagList = ref([])
 const tagList = ref([])
 const getTagList = async () => {
 const getTagList = async () => {

+ 3 - 0
src/views/recruit/enterprise/positionManagement/index.vue

@@ -48,6 +48,7 @@ import { getJobAdvertisedList, getJobAdvertisedExport, jobAdvertisedTemplateDown
 import { dealDictArrayData } from '@/utils/position'
 import { dealDictArrayData } from '@/utils/position'
 import { useI18n } from '@/hooks/web/useI18n'
 import { useI18n } from '@/hooks/web/useI18n'
 import { useUserStore } from '@/store/user'
 import { useUserStore } from '@/store/user'
+import { getEnterprisePubJobTypePermission } from '@/api/recruit/enterprise/position'
 import download from '@/utils/download'
 import download from '@/utils/download'
 import Snackbar from '@/plugins/snackbar'
 import Snackbar from '@/plugins/snackbar'
 import Confirm from '@/plugins/confirm'
 import Confirm from '@/plugins/confirm'
@@ -88,6 +89,8 @@ const textItem = ref({
 })
 })
 
 
 const handleAdd = async () => {
 const handleAdd = async () => {
+  const data = await getEnterprisePubJobTypePermission()
+  if (!data || !data.length) return Snackbar.warning('没有该操作权限,请联系平台管理员升级后再试')
   router.push('/recruit/enterprise/position/add')
   router.push('/recruit/enterprise/position/add')
   await store.getEnterpriseUserAccountInfo()
   await store.getEnterpriseUserAccountInfo()
 }
 }

BIN
src/views/recruit/personal/home/img/adImg.jpg


+ 26 - 1
src/views/recruit/personal/home/index.vue

@@ -25,6 +25,18 @@
   </div>
   </div>
   <!-- 快速填写简易人才信息-弹窗 -->
   <!-- 快速填写简易人才信息-弹窗 -->
   <simplePage v-if="showSimplePage" :closeable="true" closeText="暂时跳过" @close="handleInfoClose" @simpleInfoReady="handleUpdateInfo"></simplePage>
   <simplePage v-if="showSimplePage" :closeable="true" closeText="暂时跳过" @close="handleInfoClose" @simpleInfoReady="handleUpdateInfo"></simplePage>
+  <v-dialog
+    v-model="adDialog"
+    max-width="900"
+    :persistent="false"
+  >
+    <div style="cursor: pointer;" @click="adClick">
+      <v-img src="./img/adImg.jpg" :width="900" style="height: 530px;border-radius: 4px;"></v-img>
+    </div>
+    <div class="text-center mt-5">
+      <span style="color: white; font-size: 28px;" class="mdi mdi-close-circle-outline cursor-pointer" @click="adDialog = false"></span>
+    </div>
+  </v-dialog>
 </template>
 </template>
 
 
 <script setup>
 <script setup>
@@ -37,7 +49,7 @@ import hotPromotedPositions from './components/hotPromotedPositions.vue'
 import PopularEnterprises from './components/popularEnterprises.vue'
 import PopularEnterprises from './components/popularEnterprises.vue'
 import advertisementPage from './components/advertisement/index.vue'
 import advertisementPage from './components/advertisement/index.vue'
 import { useRouter } from 'vue-router'
 import { useRouter } from 'vue-router'
-import { nextTick, ref } from 'vue'
+import { nextTick, onMounted, ref } from 'vue'
 import { useUserStore } from '@/store/user'
 import { useUserStore } from '@/store/user'
 import { getToken } from '@/utils/auth'
 import { getToken } from '@/utils/auth'
 
 
@@ -73,6 +85,19 @@ const handleUpdateInfo = async () => {
 const handleOpenAdvertise = () => {
 const handleOpenAdvertise = () => {
   window.open('https://mp.weixin.qq.com/s/Us_cWsRpGQBnLFBrZGynLA')
   window.open('https://mp.weixin.qq.com/s/Us_cWsRpGQBnLFBrZGynLA')
 }
 }
+
+
+const adDialog = ref(false)
+onMounted(() => {
+  const lastTime = localStorage.getItem('adDialogTime')
+  localStorage.setItem('adDialogTime', Date.now())
+  if (!lastTime || (Date.now() - Number(lastTime) > 300000)) {
+    adDialog.value = true
+  }
+})
+const adClick = () => {
+  if (!getToken()) router.push('/login')
+}
 </script>
 </script>
 
 
 <style lang="scss" scoped>
 <style lang="scss" scoped>