|
@@ -30,11 +30,16 @@
|
|
|
<span class="defaultLink ml-3 mt-2">{{ item?.name }}</span>
|
|
|
</div>
|
|
|
</template>
|
|
|
- <!-- <template #actions="{ item }">
|
|
|
- <v-btn color="primary" variant="text" @click="handleCommunicate(item)">立即沟通</v-btn>
|
|
|
- </template> -->
|
|
|
+ <template #actions="{ item }">
|
|
|
+ <v-btn color="primary" variant="text" @click="handleInvite(item)">邀请面试</v-btn>
|
|
|
+ </template>
|
|
|
</CtTable>
|
|
|
</div>
|
|
|
+
|
|
|
+ <!-- 面试邀请 -->
|
|
|
+ <CtDialog :visible="showInvite" :widthType="4" titleClass="text-h6" title="邀请面试" @close="showInvite = false; itemData = {}" @submit="handleSubmit">
|
|
|
+ <InvitePage v-if="showInvite" ref="inviteRef" :itemData="itemData"></InvitePage>
|
|
|
+ </CtDialog>
|
|
|
</template>
|
|
|
|
|
|
<script setup>
|
|
@@ -42,12 +47,12 @@ defineOptions({ name: 'searchRecommend' })
|
|
|
import { ref, computed } from 'vue'
|
|
|
import { getPersonRecommendPage, getJobAdvertised } from '@/api/enterprise'
|
|
|
import { timesTampChange } from '@/utils/date'
|
|
|
-// import { talkToUser, defaultTextEnt } from '@/hooks/web/useIM'
|
|
|
-// import { useRouter } from 'vue-router'
|
|
|
import { dealDictArrayData } from '@/utils/position'
|
|
|
import { getUserAvatar } from '@/utils/avatar'
|
|
|
+import InvitePage from '@/views/recruit/enterprise/resume/components/invite'
|
|
|
+import Snackbar from '@/plugins/snackbar'
|
|
|
+import { saveInterviewInvite } from '@/api/recruit/enterprise/interview'
|
|
|
|
|
|
-// const router = useRouter()
|
|
|
const query = ref({
|
|
|
pageNo: 1,
|
|
|
pageSize: 10,
|
|
@@ -72,8 +77,10 @@ const headers = ref([
|
|
|
{ title: '户籍地', key: 'regName', sortable: false },
|
|
|
{ title: '婚姻状况', key: 'maritalStatusName', sortable: false },
|
|
|
{ title: '首次工作时间', key: 'firstWorkTime', sortable: false, value: item => timesTampChange(item.firstWorkTime, 'Y-M-D') },
|
|
|
- // { title: '操作', key: 'actions', sortable: false }
|
|
|
+ { title: '操作', key: 'actions', sortable: false }
|
|
|
])
|
|
|
+const inviteRef = ref()
|
|
|
+const showInvite = ref(false)
|
|
|
|
|
|
// 职位列表
|
|
|
const getJobList = async () => {
|
|
@@ -81,7 +88,7 @@ const getJobList = async () => {
|
|
|
if (data.length) {
|
|
|
const list = dealDictArrayData([], data)
|
|
|
selectItems.value.items = list.map(e => {
|
|
|
- return { label: `${e.name}${e.areaName ? '_' + e.areaName : ''} ${e.payFrom ? e.payFrom + '-' : ''}${e.payTo}${e.payName ? '/' + e.payName : ''}`, value: e.id }
|
|
|
+ return { label: `${e.name}${e.areaName ? '_' + e.areaName : ''} ${e.payFrom ? e.payFrom + '-' : ''}${e.payTo}${e.payName ? '/' + e.payName : ''}`, value: e.id, data: e }
|
|
|
})
|
|
|
}
|
|
|
}
|
|
@@ -103,7 +110,6 @@ const getData = async () => {
|
|
|
loading.value = false
|
|
|
}
|
|
|
}
|
|
|
-// getData()
|
|
|
|
|
|
// 推荐
|
|
|
const handleChange = () => {
|
|
@@ -118,13 +124,32 @@ const handleChangePage = (e) =>{
|
|
|
getData()
|
|
|
}
|
|
|
|
|
|
-// 立即沟通
|
|
|
-// const handleCommunicate = async (item) => {
|
|
|
-// const userId = item.userId
|
|
|
-// await talkToUser({userId, text: defaultTextEnt})
|
|
|
-// let url = `/recruit/enterprise/chatTools?id=${userId}`
|
|
|
-// router.push(url)
|
|
|
-// }
|
|
|
+// 面试邀请
|
|
|
+const itemData = ref({})
|
|
|
+const handleInvite = ({ userId }) => {
|
|
|
+ const job = selectItems.value.items.find(e => e.value === query.value.jobId).data
|
|
|
+ itemData.value = {
|
|
|
+ userId,
|
|
|
+ job
|
|
|
+ }
|
|
|
+ showInvite.value = true
|
|
|
+}
|
|
|
+
|
|
|
+const handleSubmit = async () => {
|
|
|
+ const { valid } = await inviteRef.value.CtFormRef.formRef.validate()
|
|
|
+ if (!valid) {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ const query = inviteRef.value.getQuery()
|
|
|
+ if (!query.time) {
|
|
|
+ Snackbar.warning('面试时间不能为空')
|
|
|
+ return
|
|
|
+ }
|
|
|
+ await saveInterviewInvite(query)
|
|
|
+ Snackbar.success('操作成功')
|
|
|
+ showInvite.value = false
|
|
|
+ itemData .value = {}
|
|
|
+}
|
|
|
|
|
|
// 人才详情
|
|
|
const handleToPersonDetail = ({ userId, id }) => {
|