Compare commits

...

No commits in common. "wjx" and "main" have entirely different histories.
wjx ... main

8 changed files with 2397 additions and 1485 deletions

View File

@ -276,6 +276,13 @@
"watchThrottled": true, "watchThrottled": true,
"watchTriggerable": true, "watchTriggerable": true,
"watchWithFilter": true, "watchWithFilter": true,
"whenever": true "whenever": true,
"DirectiveBinding": true,
"MaybeRef": true,
"MaybeRefOrGetter": true,
"onWatcherCleanup": true,
"useId": true,
"useModel": true,
"useTemplateRef": true
} }
} }

View File

@ -30,7 +30,7 @@
"xlsx": "^0.18.5" "xlsx": "^0.18.5"
}, },
"devDependencies": { "devDependencies": {
"@arco-design/web-vue": "~2.55.1", "@arco-design/web-vue": "~2.55.3",
"@commitlint/cli": "~17.3.0", "@commitlint/cli": "~17.3.0",
"@commitlint/config-conventional": "~17.3.0", "@commitlint/config-conventional": "~17.3.0",
"@iconify/json": "^2.2.144", "@iconify/json": "^2.2.144",

3479
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

68
src/api/upms/position.ts Normal file
View File

@ -0,0 +1,68 @@
import axios from '@/utils/axios'
/**
*
* @param {Object} page -
* @param {Object} entity -
* @returns {Promise} - Promise
*/
export function pageRes(page, entity) {
return axios.post('/recruit/position/page/res', {
...page,
...entity
})
}
/**
*
* @param {Object|null} entity -
* @returns {Promise} - Promise
*/
export function getPositionList(entity = null) {
return axios.post('/recruit/position/list', entity)
}
/**
*
* @param {Object} entity -
* @returns {Promise} - Promise
*/
export function addPosition(entity) {
return axios.post('/recruit/position/add', entity)
}
/**
*
* @param {Object} entity -
* @returns {Promise} - Promise
*/
export function updatePosition(entity) {
return axios.post('/recruit/position/edit', entity)
}
/**
*
* @param {Object} entity - id
* @returns {Promise} - Promise
*/
export function deletePosition(entity) {
return axios.post('/recruit/position/del', entity)
}
/**
*
* @param {Object} entity -
* @returns {Promise} - Promise
*/
export function addDelivery(entity) {
return axios.post('/recruit/resume/add_delivery', entity)
}
/**
* id去查询该岗位下面的简历
* @param {String} positionId - id
* @returns {Promise} - Promise
*/
export function getResumesByPositionId(positionId) {
return axios.get(`/recruit/resume/getResumesByPositionId?positionId=${positionId}`)
}

View File

@ -0,0 +1,135 @@
<template>
<c-table :option="option">
<template #menuLeft="{ record }">
<button class="delivery-button" @click="handleClick">简历</button>
</template>
</c-table>
<a-modal v-model:visible="visible" @ok="handleOk" @cancel="handleCancel" fullscreen>
<template #title> 简历审核 </template>
<div>
<c-table :option="option"></c-table>
</div>
</a-modal>
</template>
<script setup lang="ts">
import { ref, onMounted } from 'vue'
import option from './option'
//
import {
pageRes,
getPositionList,
addPosition,
updatePosition,
deletePosition,
getResumesByPositionId
} from '@/api/upms/position'
//
const page = {
current: 1,
size: 10
}
// ,id
const entity = {
id: '165646957334757381',
jobName: '测试岗6666',
jobContent: '岗位描述166666'
}
// id
const getResumeById = async () => {
try {
const response = await getResumesByPositionId(id)
console.log('岗位下的简历查询结果:', response.data)
} catch (error) {
console.error('岗位下的简历查询失败:', error)
}
}
// ,
const testPageRes = async () => {
try {
const response = await pageRes(page, null)
console.log('分页查询结果:', response.data)
} catch (error) {
console.error('分页查询失败:', error)
}
}
//
const testGetPositionList = async () => {
try {
const response = await getPositionList(entity)
console.log('获取职位列表结果:', response.data)
} catch (error) {
console.error('获取职位列表失败:', error)
}
}
//
const testAddPosition = async () => {
try {
const response = await addPosition(entity)
console.log('新增职位结果:', response.data)
} catch (error) {
console.error('新增职位失败:', error)
}
}
//
const testUpdatePosition = async () => {
try {
const response = await updatePosition(entity)
console.log('修改职位结果:', response.data)
} catch (error) {
console.error('修改职位失败:', error)
}
}
//
const testDeletePosition = async () => {
try {
const response = await deletePosition({ id: '53734efd-ef77-11ef-be44-0242c0a81002' }) // id
console.log('删除职位结果:', response.data)
} catch (error) {
console.error('删除职位失败:', error)
}
}
//
onMounted(async () => {
// await testPageRes()
// await testGetPositionList()
// await testAddPosition()
// await testUpdatePosition()
// await testDeletePosition()
})
const openDialog = () => {
//
console.log('投递按钮被点击')
}
//
const visible = ref(false)
const handleClick = () => {
visible.value = true
}
const handleOk = () => {
visible.value = false
}
const handleCancel = () => {
visible.value = false
}
</script>
<style lang="scss">
.arco-modal-fullscreen {
top: 20%;
width: 60%;
height: 60%;
}
</style>

View File

@ -0,0 +1,55 @@
import { useUserStore } from '@/store/user'
import { TableOption } from '@/types'
import { onBeforeRemove } from '@/utils/upload-event'
const userStore = useUserStore()
const option: TableOption = {
api: {
base: '/recruit/position',
page: '/page/res'
},
permissionPrefix: 'recruit_position_',
permissions: userStore.permissions,
columns: [
{
name: '职位',
prop: 'jobName',
rules: [
{ required: true, message: '职位不能为空' },
{ minLength: 2, message: '职位不少于2个字符' },
{ maxLength: 40, message: '不能超过40个字符' }
]
},
{
name: '职位地点',
prop: 'positionLocation',
type: 'input',
rules: [
{ required: true, message: '职位地点不能为空' },
{ minLength: 2, message: '职位不少于2个字符' },
{ maxLength: 60, message: '不能超过60个字符' }
]
},
{
name: '企业联系人',
prop: 'enterpriseContactPerson',
type: 'input',
rules: [{ required: true, message: '企业联系人不能为空' }]
},
{
name: '联系人手机号',
prop: 'enterprisePhone',
type: 'input',
rules: [{ required: true, message: '联系人手机号' }]
},
{
name: '附件',
prop: 'files',
type: 'upload',
action: '/sys/file/upload',
onBeforeRemove,
stringify: true
}
]
}
export default option

View File

@ -1,6 +1,110 @@
<template> <template>
<c-table :option="option"> </c-table> <c-table :option="option">
<template #menuLeft="{ record }">
<button class="delivery-button" @click="() => handleClick(record)">投递</button>
</template>
</c-table>
<a-modal
v-model:visible="visible"
title="请选择投递的职位"
@cancel="handleCancel"
@before-ok="handleBeforeOk"
>
<a-form :model="form">
<a-form-item field="post" label="职位">
<a-select v-model="form.post">
<!-- 动态渲染职位选项 -->
<a-option v-for="job in jobList" :key="job.id" :value="job.id">{{
job.jobName
}}</a-option>
</a-select>
</a-form-item>
</a-form>
</a-modal>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { reactive, ref } from 'vue'
import option from './option' import option from './option'
import { addDelivery, getPositionList } from '@/api/upms/position'
//
const visible = ref(false)
//
const form = reactive({
name: '',
post: ''
})
//
const jobList = ref([])
//
const currentRecord = ref(null)
//
const handleClick = async (record) => {
//
currentRecord.value = record
//
await getDeliverys()
visible.value = true
}
//
const getDeliverys = async () => {
try {
//
const entity2 = {
fullName: '',
resumeSource: '',
positionId: ''
}
const response = await getPositionList(entity2)
console.log('职位投递获取结果:', response)
// jobList
jobList.value = response
} catch (error) {
console.error('获取职位失败:', error)
}
}
//
const addDeliverys = async () => {
try {
//
console.log(`获取到的当前行是${JSON.stringify(currentRecord.value)}`)
const entity = {
fullName: currentRecord.value?.fullName || '',
resumeSource: currentRecord.value?.resumeSource || '',
positionId: form.post,
id: currentRecord.value.id
}
const response = await addDelivery(entity)
console.log('投递结果:', response.data)
} catch (error) {
console.error('投递失败:', error)
}
}
//
const handleBeforeOk = async (done) => {
console.log(form)
// addDeliverys
await addDeliverys()
window.setTimeout(() => {
done()
//
}, 1000)
}
//
const handleCancel = () => {
visible.value = false
}
</script> </script>
<style lang="scss">
.arco-modal-footer {
text-align: center !important;
}
</style>

View File

@ -20,14 +20,6 @@ const option: TableOption = {
{ maxLength: 20, message: '不能超过20个字符' } { maxLength: 20, message: '不能超过20个字符' }
] ]
}, },
{
name: '附件',
prop: 'files',
type: 'upload',
action: '/sys/file/upload',
onBeforeRemove,
stringify: true
},
{ {
name: '简历来源', name: '简历来源',
prop: 'resumeSource', prop: 'resumeSource',
@ -37,14 +29,26 @@ const option: TableOption = {
{ {
name: '创建人', name: '创建人',
prop: 'createName', prop: 'createName',
addDisplay: false, type: 'input',
editDisplay: false rules: [
{ required: true, message: '创建人不能为空' },
{ minLength: 2, message: '创建人不少于2个字符' },
{ maxLength: 20, message: '不能超过20个字符' }
]
}, },
{ {
name: '创建人手机号', name: '创建人手机号',
prop: 'createPhone', prop: 'createPhone',
addDisplay: false, type: 'input',
editDisplay: false rules: [{ required: true, message: '创建人手机号不能为空' }]
},
{
name: '附件',
prop: 'files',
type: 'upload',
action: '/sys/file/upload',
onBeforeRemove,
stringify: true
} }
] ]
} }