|
@@ -45,7 +45,7 @@
|
|
|
<v-btn v-if="tab === 0" color="primary" variant="text" @click="handlePreviewResume(item)">查看附件</v-btn>
|
|
|
<v-btn v-if="tab === 0" color="primary" variant="text" @click="handleInterviewInvite(item)">邀请面试</v-btn>
|
|
|
<v-btn v-if="[0, 1].includes(tab)" color="primary" variant="text" @click="handleEliminate(item)">不合适</v-btn>
|
|
|
- <v-btn v-if="tab === 1 && [15,4].includes(item.status)" color="primary" variant="text" @click="handleEnterByEnterprise(item)">入职</v-btn>
|
|
|
+ <v-btn v-if="tab === 1" color="primary" variant="text" @click="handleEnterByEnterprise(item)">入职</v-btn>
|
|
|
</template>
|
|
|
</CtTable>
|
|
|
</v-tabs-window-item>
|
|
@@ -64,6 +64,18 @@
|
|
|
<CtForm ref="CtFormInviteRef" :items="formItems" style="height: 500px;"></CtForm>
|
|
|
</CtDialog>
|
|
|
|
|
|
+ <!-- 邀请面试 -->
|
|
|
+ <CtDialog
|
|
|
+ :visible="showAccess"
|
|
|
+ :widthType="4"
|
|
|
+ titleClass="text-h6"
|
|
|
+ title="面试信息"
|
|
|
+ @close="showAccess = false"
|
|
|
+ @submit="handleAccess"
|
|
|
+ >
|
|
|
+ <CtForm ref="CtFormAccessRef" :items="AccessItems" style="height: 500px;"></CtForm>
|
|
|
+ </CtDialog>
|
|
|
+
|
|
|
<CtDialog
|
|
|
:visible="showReject"
|
|
|
:widthType="4"
|
|
@@ -74,20 +86,6 @@
|
|
|
>
|
|
|
<CtForm ref="CtFormRejectRef" :items="rejectItems"></CtForm>
|
|
|
</CtDialog>
|
|
|
-
|
|
|
- <TipDialog
|
|
|
- :visible="showTip"
|
|
|
- icon="mdi-check-circle-outline"
|
|
|
- message="面试邀请发送成功"
|
|
|
- @close="showTip = false"
|
|
|
- >
|
|
|
- <div
|
|
|
- class="color-primary text-decoration-underline cursor-pointer"
|
|
|
- @click="handleToInterviewManagement"
|
|
|
- >
|
|
|
- 点击到面试中查看。
|
|
|
- </div>
|
|
|
- </TipDialog>
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
@@ -97,7 +95,7 @@ import { ref } from 'vue'
|
|
|
import { useRouter, useRoute } from 'vue-router'
|
|
|
import { useI18n } from '@/hooks/web/useI18n'
|
|
|
import Snackbar from '@/plugins/snackbar'
|
|
|
-import { getResumeList, resumeAccept, resumeInterview } from '@/api/recruit/enterprise/jobFair'
|
|
|
+import { getResumeList, resumeCancel, resumeAccept, resumeInterview } from '@/api/recruit/enterprise/jobFair'
|
|
|
import { useUserStore } from '@/store/user'
|
|
|
import { getDict } from '@/hooks/web/useDictionaries'
|
|
|
import { previewFile } from '@/utils'
|
|
@@ -137,6 +135,7 @@ const headers = ref([
|
|
|
|
|
|
const CtFormInviteRef = ref()
|
|
|
const CtFormRejectRef = ref()
|
|
|
+const CtFormAccessRef = ref()
|
|
|
|
|
|
const formItems = ref({
|
|
|
options: [
|
|
@@ -182,6 +181,39 @@ const rejectItems = ref({
|
|
|
]
|
|
|
})
|
|
|
|
|
|
+const AccessItems = ref({
|
|
|
+ options: [
|
|
|
+ {
|
|
|
+ type: 'datePicker',
|
|
|
+ mode: 'datetime',
|
|
|
+ labelWidth: 78,
|
|
|
+ value: '',
|
|
|
+ key: 'jobJoinDate',
|
|
|
+ label: '入职时间 *',
|
|
|
+ format: "YYYY/MM/DD HH:mm",
|
|
|
+ flexStyle: 'mb-7',
|
|
|
+ disabledDate: true,
|
|
|
+ rules: [v => !!v || '请选择入职时间']
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: 'text',
|
|
|
+ key: 'name',
|
|
|
+ value: '',
|
|
|
+ noParam: true,
|
|
|
+ disabled: true,
|
|
|
+ label: '入职人员'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: 'text',
|
|
|
+ key: 'position',
|
|
|
+ value: '',
|
|
|
+ noParam: true,
|
|
|
+ disabled: true,
|
|
|
+ label: '入职岗位'
|
|
|
+ }
|
|
|
+ ]
|
|
|
+})
|
|
|
+
|
|
|
const items = ref([])
|
|
|
const loading = ref(false)
|
|
|
const total = ref(0)
|
|
@@ -195,6 +227,8 @@ const showInvite = ref(false)
|
|
|
|
|
|
const showReject = ref(false)
|
|
|
|
|
|
+const showAccess = ref(false)
|
|
|
+
|
|
|
// 状态字典
|
|
|
const statusList = ref([])
|
|
|
|
|
@@ -269,13 +303,47 @@ const handleReject = async () => {
|
|
|
practiceSubmitRecordId: itemData.value.practiceSubmitRecordId,
|
|
|
enterpriseId: itemData.value.enterpriseId
|
|
|
})
|
|
|
- await resumeAccept(query)
|
|
|
+ await resumeCancel(query)
|
|
|
|
|
|
Snackbar.success(t('common.operationSuccessful'))
|
|
|
showReject.value = false
|
|
|
getList()
|
|
|
}
|
|
|
|
|
|
+// 入职
|
|
|
+const handleEnterByEnterprise = async (item) => {
|
|
|
+ AccessItems.value.options.forEach(e => {
|
|
|
+ if (e.key === 'name') {
|
|
|
+ e.value = item.student?.studentName
|
|
|
+ }
|
|
|
+ if (e.key === 'position') {
|
|
|
+ e.value = item.enterpriseRecruit.enterpriseRecruitJobName
|
|
|
+ }
|
|
|
+ })
|
|
|
+ itemData.value = item
|
|
|
+ showAccess.value = true
|
|
|
+
|
|
|
+}
|
|
|
+const handleAccess = async () => {
|
|
|
+
|
|
|
+ const { valid } = await CtFormAccessRef.value.formRef.validate()
|
|
|
+ if (!valid) return
|
|
|
+ const query = AccessItems.value.options.reduce((acc, cur) => {
|
|
|
+ if (cur.noParam) {
|
|
|
+ return acc
|
|
|
+ }
|
|
|
+ acc[cur.key] = cur.value
|
|
|
+ return acc
|
|
|
+ }, {
|
|
|
+ practiceSubmitRecordId: itemData.value.practiceSubmitRecordId,
|
|
|
+ studentId: itemData.value.studentId
|
|
|
+ })
|
|
|
+ await resumeAccept(query)
|
|
|
+ Snackbar.success(t('common.operationSuccessful'))
|
|
|
+ showAccess.value = false
|
|
|
+ getList()
|
|
|
+}
|
|
|
+
|
|
|
|
|
|
|
|
|
const getList = async () => {
|