فهرست منبع

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

lifanagju_citu 9 ماه پیش
والد
کامیت
515b658999

+ 0 - 72
src/views/recruit/enterprise/publicRecruitmentManagement/commission/index.vue

@@ -1,72 +0,0 @@
-<template>
-  <v-card class="pa-5 card-box" style="height: 500px;">
-    <div class="resume-header mb-3">
-      <div class="resume-title">推荐人佣金比例设置</div>
-    </div>
-    <div class="d-flex flex-column align-center justify-center" style="height: 350px;">
-      <CtForm ref="formPageRef" :items="items" style="width: 500px;"></CtForm>
-      <v-btn class="buttons" color="primary" @click="handleSubmit">{{ $t('common.submit') }}</v-btn>
-    </div>
-  </v-card>
-</template>
-
-<script setup>
-defineOptions({ name: 'public-recruitment-commission'})
-import { ref } from 'vue'
-import { useI18n } from '@/hooks/web/useI18n'
-import { getHireCommissionRatio, updateHireCommissionRatio } from '@/api/recruit/public/commission'
-import Snackbar from '@/plugins/snackbar'
-
-const { t } = useI18n()
-const formPageRef = ref()
-const items = ref({
-  options: [
-    {
-      type: 'number',
-      key: 'rate',
-      value: null,
-      suffix: '%',
-      label: '推荐人佣金比例 *',
-      rules: [v => !!v || '请填写推荐人佣金比例']
-    }
-  ]
-})
-
-// 效验数值
-const validateNumber = (input) => {
-  let number = parseFloat(input)
-  if (isNaN(number) || !isFinite(number)) {
-    return false
-  }
-  if (number < 0.01 || number > 100.00) {
-    return false
-  }
-  let parts = input.split('.')
-  if (parts.length > 1 && parts[1].length > 2) {
-    return false
-  }
-  return true
-}
-
-// 获取佣金比例
-const getData = async () => {
-  const data = await getHireCommissionRatio()
-  if (!data) return
-  items.value.options.find(e => e.key === 'rate').value = data.rate
-}
-getData()
-
-const handleSubmit = async () => {
-  const { valid } = await formPageRef.value.formRef.validate()
-  if (!valid) return
-  const rate = items.value.options.find(e => e.key === 'rate').value
-  if (!validateNumber(rate)) return Snackbar.warning('请填写正确格式的数值')
-  await updateHireCommissionRatio(rate)
-  Snackbar.success(t('common.submittedSuccessfully'))
-  getData()
-}
-</script>
-
-<style scoped lang="scss">
-
-</style>

+ 0 - 162
src/views/recruit/enterprise/publicRecruitmentManagement/deliver/components/table.vue

@@ -1,162 +0,0 @@
-<template>
-  <div>
-    <div class="mr-5 d-flex align-center" v-if="tab === 0">
-      <div style="width: 200px;">
-        <v-radio-group v-model="radio" inline style="height: 28px;" @update:modelValue="handleChangeSelected">
-          <v-radio v-model="radio" label="已报名" value="0" hide-details density="compact" class="mr-3"></v-radio>
-          <v-radio v-model="radio" label="已查看" value="1" hide-details density="compact"></v-radio>
-        </v-radio-group>
-      </div>
-      <div class="reset-text cursor-pointer ml-3" @click="handleReset">重置</div>
-    </div>
-    <v-data-table
-      class="mt-5"
-      v-model="selected"
-      :items="items"
-      :headers="headers"
-      hover
-      show-select
-      :disable-sort="true"
-      height="60vh"
-      item-value="id"
-    >
-      <template #bottom></template>
-      <template v-slot:item.name="{ item }">
-        <div class="d-flex align-center cursor-pointer" @click="handleToPersonDetail(item)">
-          <v-badge
-            bordered
-            offset-y="6"
-            :color="badgeColor(item)"
-            :icon="badgeIcon(item)">
-            <v-avatar size="40" :image="item.person.avatar || 'https://minio.citupro.com/dev/menduner/7.png'"></v-avatar>
-          </v-badge>
-          <span class="defaultLink ml-3">{{ item?.person?.name }}</span>
-        </div>
-      </template>
-      <template v-slot:item.actions="{ item }">
-        <v-btn v-if="tab === 0 && item.url" color="primary" variant="text" @click="handlePreviewResume(item)">查看附件</v-btn>
-        <v-btn v-if="tab === 1 || tab === 0" color="primary" variant="text" @click="handleEliminate(item)">不合适</v-btn>
-        <v-btn v-if="tab === 2" color="primary" variant="text" @click="handleEnterByEnterprise(item)">入职</v-btn>
-        <v-btn v-if="tab === 3" color="primary" variant="text" @click="handleSettlement(item)">结算</v-btn>
-        <v-btn v-if="radio === '1'" color="primary" variant="text">邀请面试</v-btn>
-      </template>
-    </v-data-table>
-  </div>
-</template>
-
-<script setup>
-defineOptions({ name: 'table-page'})
-import { ref, computed } from 'vue'
-import { hireJobCvRelSettlement, hireJobCvRelLook } from '@/api/recruit/public/delivery'
-import { joinEliminate, personEntryByEnterprise } from '@/api/recruit/enterprise/personnel'
-import { previewFile } from '@/utils'
-import { useI18n } from '@/hooks/web/useI18n'
-import Snackbar from '@/plugins/snackbar'
-import { useUserStore } from '@/store/user'
-
-const { t } = useI18n()
-const radio = ref()
-const userStore = useUserStore()
-const emit = defineEmits(['refresh', 'radio', 'reset'])
-const props = defineProps({
-  tab: Number,
-  items: Array,
-  tabList: Array
-})
-const badgeColor = computed(() => (item) => {
-  return (item.person && item.person.sex) ? (item.person.sex === '1' ? '#1867c0' : 'error') : 'error'
-})
-
-const badgeIcon = computed(() => (item) => {
-  return (item.person && item.person.sex) ? (item.person.sex === '1' ? 'mdi-gender-male' : 'mdi-gender-female') : 'mdi-gender-female'
-})
-
-const selected = ref([])
-const headers = ref([
-  { title: '姓名', value: 'name' },
-  { title: '应聘职位', value: 'job.name', sortable: false },
-  { title: '求职状态', key: 'person.jobStatusName', sortable: false },
-  { title: '工作经验', key: 'person.expName', sortable: false },
-  { title: '最高学历', key: 'person.eduName', sortable: false },
-  { title: '岗位薪资', key: 'job', value: item => `${item.job.payFrom}-${item.job.payTo}/${item.job.payName}`, sortable: false },
-  { title: '推荐人', key: 'recommendPerson', value: item => item?.recommendPerson?.name, sortable: false },
-  { title: '进度', key: 'status', sortable: false, value: item => props.tabList.find(e => e.value === Number(item.status)).label },
-  { title: '结果反馈', key: '', sortable: false },
-  { title: '操作', value: 'actions' }
-])
-
-// 人才详情
-const handleToPersonDetail = ({ userId, id }) => {
-  if (!userId || !id) return
-  window.open(`/recruit/enterprise/resumeManagement/talentPool/details/${userId}?id=${id}`)
-}
-
-// 入职
-const handleEnterByEnterprise = async (item) => {
-  if (!item.id) return
-  await personEntryByEnterprise(item.id)
-  Snackbar.success(t('common.operationSuccessful'))
-  emit('refresh')
-}
-
-// 不合适
-const handleEliminate = async (item) => {
-  if (!item.id || !item?.job?.id) return
-  const query = {
-    bizId: item.id,
-    jobId: item.job.id,
-    userId: item.userId,
-    type: props.tab === 0 ? '0' : '1' // 投递简历0 已邀约1
-  }
-  await joinEliminate(query)
-  Snackbar.success(t('common.operationSuccessful'))
-  emit('refresh')
-}
-
-// 结算
-const handleSettlement = async (item) => {
-  if (!item.id) return
-  await hireJobCvRelSettlement(item.id)
-  Snackbar.success(t('common.operationSuccessful'))
-  emit('refresh')
-  // 更新账户信息
-  setTimeout(async () => {
-    await userStore.getEnterpriseUserAccountInfo()
-  }, 2000)
-}
-
-// 查看简历
-const handlePreviewResume = async ({ url, id }) => {
-  if (!url || !id) return
-  await hireJobCvRelLook(id)
-  previewFile(url)
-}
-
-// 已报名、已查看
-const handleChangeSelected = (e) => {
-  emit('radio', e)
-}
-
-const handleReset = () => {
-  radio.value = ''
-  emit('reset')
-}
-</script>
-
-<style scoped lang="scss">
-:deep(.v-table > .v-table__wrapper > table > thead) {
-  background-color: #f7f8fa !important;
-}
-:deep(.v-selection-control__input) {
-  color: var(--v-primary-base) !important;
-  // color: #767778;
-}
-
-.reset-text {
-  font-size: 14px;
-  color: var(--color-666);
-  &:hover {
-    color: var(--v-primary-base);
-  }
-}
-</style>

+ 0 - 108
src/views/recruit/enterprise/publicRecruitmentManagement/deliver/index.vue

@@ -1,108 +0,0 @@
-<template>
-  <v-card class="pa-5 card-box">
-    <div class="d-flex justify-space-between">
-      <v-tabs v-model="tab" align-tabs="start" color="primary" bg-color="#f7f8fa" @update:model-value="handleUpdateTab">
-        <v-tab v-for="k in tabList" :value="k.value" :key="k.value">{{ k.label }}</v-tab>
-      </v-tabs>
-      <TextInput v-model="textItems.value" :item="textItems" @appendInnerClick="handleSearch" @enter="handleSearch"></TextInput>
-    </div>
-
-    <v-window v-model="tab" class="mt-1">
-      <v-window-item v-for="k in tabList" :value="k.value" :key="k.value">
-        <TablePage :items="items" :tab="k.value" :tabList="tabList" @refresh="getList" @radio="handleSelect" @reset="handleReset"></TablePage>
-        <CtPagination
-          v-if="total > 0"
-          :total="total"
-          :page="query.pageNo"
-          :limit="query.pageSize"
-          @handleChange="handleChangePage"
-        ></CtPagination>
-      </v-window-item>
-    </v-window>
-  </v-card>
-</template>
-
-<script setup>
-defineOptions({ name: 'public-recruitment-deliver'})
-import { ref } from 'vue'
-import { getHireJobCvPage } from '@/api/recruit/public/delivery'
-import { dealDictObjData } from '@/utils/position'
-import TablePage from './components/table.vue'
-
-const total = ref(0)
-const query = ref({
-  pageNo: 1,
-  pageSize: 10,
-  status: null
-})
-const tab = ref(0)
-const items = ref([])
-const tabList = ref([
-  { label: '简历投递', value: 0, status: null },
-  { label: '已邀约', value: 1, status: 2 },
-  { label: '已入职', value: 2, status: 3 },
-  { label: '已结算', value: 3, status: 4 },
-  { label: '不合适', value: 4, status: 99 }
-])
-const textItems = ref({
-  type: 'text',
-  value: '',
-  width: 250,
-  label: '搜索姓名',
-  clearable: true,
-  appendInnerIcon: 'mdi-magnify'
-})
-
-const getList = async () => {
-  const res = await getHireJobCvPage(query.value)
-  if (!res.list.length) {
-    items.value = []
-    total.value = 0
-    return
-  }
-  items.value = res.list.map(e => {
-    let obj = e
-    obj.person = Object.assign(e.person, dealDictObjData({}, e.person))
-    obj.job = Object.assign(e.job, dealDictObjData({}, e.job))
-    return obj
-  })
-  total.value = res.total
-}
-getList()
-
-const handleSearch = () => {
-  if (textItems.value.value) query.value.name = textItems.value.value
-  else delete query.value.name
-  query.value.pageNo = 1
-  getList()
-}
-
-// 已查看、已报名查看
-const handleSelect = (e) => {
-  query.value.status = e
-  query.value.pageNo = 1
-  getList()
-}
-
-const handleReset = () => {
-  query.value.status = null
-  query.value.pageNo = 1
-  getList()
-}
-
-// tab
-const handleUpdateTab = () => {
-  query.value.status = tabList.value.find(e => e.value === tab.value).status
-  query.value.pageNo = 1
-  getList()
-}
-
-// 分页
-const handleChangePage = (i) => {
-  query.value.pageNo = i
-  getList()
-}
-</script>
-
-<style scoped lang="scss">
-</style>