feat: job details
This commit is contained in:
@@ -5,31 +5,81 @@
|
|||||||
>
|
>
|
||||||
<Breadcrumbs
|
<Breadcrumbs
|
||||||
class="h-7"
|
class="h-7"
|
||||||
:items="[{ label: __('Jobs'), route: { name: 'Jobs' } }]"
|
:items="[
|
||||||
|
{
|
||||||
|
label: __('Jobs'),
|
||||||
|
route: { name: 'Jobs' },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: job.data?.job_title,
|
||||||
|
route: { name: 'JobDetail', params: { job: job.data?.name } },
|
||||||
|
},
|
||||||
|
]"
|
||||||
/>
|
/>
|
||||||
<div class="flex">
|
<div v-if="user.data?.name" class="flex">
|
||||||
<Button v-if="user.data?.name" variant="solid">
|
<Button class="mr-2">
|
||||||
<template #prefix>
|
<template #prefix>
|
||||||
<Plus class="h-4 w-4" />
|
<Flag class="h-4 w-4" />
|
||||||
</template>
|
</template>
|
||||||
{{ __('New Job') }}
|
{{ __('Report') }}
|
||||||
|
</Button>
|
||||||
|
<Button variant="solid">
|
||||||
|
<template #prefix>
|
||||||
|
<SendHorizonal class="h-4 w-4" />
|
||||||
|
</template>
|
||||||
|
{{ __('Apply') }}
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
<div></div>
|
<div v-if="job.data">
|
||||||
|
<div class="p-5 sm:p-5">
|
||||||
|
<div class="flex mb-4">
|
||||||
|
<img
|
||||||
|
:src="job.data.company_logo"
|
||||||
|
class="w-16 h-16 rounded-lg object-contain mr-4"
|
||||||
|
/>
|
||||||
|
<div>
|
||||||
|
<div class="text-2xl font-semibold mb-2">
|
||||||
|
{{ job.data.job_title }}
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
{{ __('posted by') }}
|
||||||
|
<span class="font-medium">{{ job.data.company_name }}</span>
|
||||||
|
{{ __('on') }}
|
||||||
|
<span class="font-medium">{{
|
||||||
|
dayjs(job.data.creation).format('DD MMM YYYY')
|
||||||
|
}}</span>
|
||||||
|
</div>
|
||||||
|
<div class="flex items-center mt-2">
|
||||||
|
<Badge :label="job.data.type" theme="green" size="lg" />
|
||||||
|
<Badge
|
||||||
|
:label="job.data.location"
|
||||||
|
theme="gray"
|
||||||
|
size="lg"
|
||||||
|
class="ml-4"
|
||||||
|
>
|
||||||
|
<template #prefix>
|
||||||
|
<MapPin class="h-4 w-4 stroke-1.5" />
|
||||||
|
</template>
|
||||||
|
</Badge>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<p
|
||||||
|
v-html="job.data.description"
|
||||||
|
class="ProseMirror prose prose-table:table-fixed prose-td:p-2 prose-th:p-2 prose-td:border prose-th:border prose-td:border-gray-300 prose-th:border-gray-300 prose-td:relative prose-th:relative prose-th:bg-gray-100 prose-sm max-w-none !whitespace-normal mt-6"
|
||||||
|
></p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script setup>
|
<script setup>
|
||||||
import {
|
import { Badge, Button, Breadcrumbs, createResource } from 'frappe-ui'
|
||||||
createDocumentResource,
|
import { inject, computed } from 'vue'
|
||||||
Button,
|
import { Plus, MapPin, SendHorizonal, Flag } from 'lucide-vue-next'
|
||||||
Breadcrumbs,
|
|
||||||
createResource,
|
|
||||||
} from 'frappe-ui'
|
|
||||||
import { inject } from 'vue'
|
|
||||||
import { Plus } from 'lucide-vue-next'
|
|
||||||
|
|
||||||
const user = inject('$user')
|
const user = inject('$user')
|
||||||
|
const dayjs = inject('$dayjs')
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
job: {
|
job: {
|
||||||
@@ -37,12 +87,13 @@ const props = defineProps({
|
|||||||
required: true,
|
required: true,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
const job = createResource({
|
const job = createResource({
|
||||||
url: 'lms.lms.api.get_job_details',
|
url: 'lms.lms.api.get_job_details',
|
||||||
params: {
|
params: {
|
||||||
job: props.job,
|
job: props.job,
|
||||||
},
|
},
|
||||||
cache: ['job'],
|
cache: ['job', props.job],
|
||||||
auto: true,
|
auto: true,
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -24,6 +24,7 @@
|
|||||||
name: 'JobDetail',
|
name: 'JobDetail',
|
||||||
params: { job: job.name },
|
params: { job: job.name },
|
||||||
}"
|
}"
|
||||||
|
:key="job.name"
|
||||||
>
|
>
|
||||||
<JobCard :job="job" />
|
<JobCard :job="job" />
|
||||||
</router-link>
|
</router-link>
|
||||||
|
|||||||
@@ -225,7 +225,16 @@ def get_job_details(job):
|
|||||||
return frappe.db.get_value(
|
return frappe.db.get_value(
|
||||||
"Job Opportunity",
|
"Job Opportunity",
|
||||||
job,
|
job,
|
||||||
["job_title", "location", "type", "company_name", "company_logo", "name", "creation"],
|
[
|
||||||
|
"job_title",
|
||||||
|
"location",
|
||||||
|
"type",
|
||||||
|
"company_name",
|
||||||
|
"company_logo",
|
||||||
|
"name",
|
||||||
|
"creation",
|
||||||
|
"description",
|
||||||
|
],
|
||||||
as_dict=1,
|
as_dict=1,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user