{"version":3,"file":"JobDirection-7886d65e.js","sources":["../../../app/javascript/assets/images/icons/zoom.svg","../../../app/javascript/assets/images/icons/arrow-left-blue.svg","../../../app/javascript/assets/images/icons/arrow_curved_left.svg","../../../app/javascript/assets/images/icons/trash_grey.svg","../../../app/javascript/assets/images/image-empty.png","../../../app/javascript/assets/images/icons/ic_occupation.svg","../../../app/javascript/assets/images/icons/ic_income.svg","../../../app/javascript/assets/images/icons/ic_round-place-blue.svg","../../../app/javascript/assets/images/icons/ic_industry.svg","../../../app/javascript/assets/images/icons/gear-white.svg","../../../app/javascript/assets/images/icons/checked.svg","../../../app/javascript/assets/images/icons/star-border-blue.svg","../../../app/javascript/assets/images/icons/paginate-angle-right.svg","../../../app/javascript/assets/images/icons/menu.svg","../../../app/javascript/assets/images/icons/ic-remove.svg","../../../app/javascript/components/JobSearch/EmploymentType.vue","../../../app/javascript/pages/candidate/job/direct/JobSearch.vue","../../../app/javascript/pages/candidate/job/direct/JobSearchSP.vue","../../../app/javascript/assets/images/icons/ic_round-place.svg","../../../app/javascript/components/Swiper/RelatedJob.vue","../../../app/javascript/components/common/ModalBase/standard.vue","../../../app/javascript/components/common/PlatformModal/Direct.vue","../../../app/javascript/pages/candidate/job/direct/Index.vue","../../../app/javascript/assets/image/icon-close-white.svg","../../../app/javascript/pages/candidate/job/agent/JobSearch.vue","../../../app/javascript/pages/candidate/job/agent/JobSearchSP.vue","../../../app/javascript/components/common/PlatformModal/Agent.vue","../../../app/javascript/pages/candidate/job/agent/AgentSearch.vue","../../../app/javascript/pages/candidate/job/JobDirection.vue"],"sourcesContent":["export default \"__VITE_ASSET__185ae262__\"","export default \"__VITE_ASSET__ece4a254__\"","export default \"__VITE_ASSET__07012051__\"","export default \"__VITE_ASSET__3b842d8b__\"","export default \"__VITE_ASSET__877290a1__\"","export default \"__VITE_ASSET__131c9c7f__\"","export default \"__VITE_ASSET__d1004a23__\"","export default \"__VITE_ASSET__ac7872c1__\"","export default \"__VITE_ASSET__eb012e37__\"","export default \"__VITE_ASSET__ef1c7035__\"","export default \"__VITE_ASSET__41081ab3__\"","export default \"__VITE_ASSET__5ad89468__\"","export default \"__VITE_ASSET__183755db__\"","export default \"__VITE_ASSET__8a9d0cc8__\"","export default \"__VITE_ASSET__679d5db7__\"","<template>\n <div class=\"row mx-3\">\n <label class=\"form-label p-0 size-12 lh-12\">髮�畑蠖「諷�</label>\n <div class=\"row justify-content-start w-77\">\n <Field name=\"employment_type_id\">\n <div class=\"col-auto me-2 my-2 py-2 align-items-center bg-silver-primary rounded-2 d-flex align-items-center\"\n v-for=\"employment in props.employmentTypes\" :key=\"employment.id\">\n <input\n class=\"form-check-input form-check-base w-1d5 h-1d5 radio-primary-input mt-0\"\n type=\"checkbox\"\n :id=\"employment.id.toString()\"\n :checked=\"props.employments.some((item) => item.id == employment.id)\"\n @change=\"selectEmployment(employment)\"\n />\n <label\n class=\"form-check-label form-check-label-base size-12 ms-3\"\n :for=\"employment.id.toString()\"\n >\n {{ employment?.name ?? \"\" }}\n </label>\n </div>\n </Field>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { EmploymentTypePrimary } from '@/types/models/employmentType';\nimport { Field } from 'vee-validate';\nimport { PropType} from 'vue';\n\nconst selectEmployment = (employment: EmploymentTypePrimary) => {\n emit('select', employment)\n}\n\nconst props = defineProps({\n employments: {\n type: Array as PropType<Array<EmploymentTypePrimary>>,\n required: false,\n default: () => []\n },\n employmentTypes: {\n type: Array as unknown as () => any,\n required: false\n }\n})\n\nconst emit = defineEmits([\"select\"]);\n</script>\n","<template>\n <div v-if=\"!isListSearchEnable\" class=\"position-sticky top-86x\">\n <form class=\"job-search w-317x container container-primary my-15 px-0\"\n @submit=\"onSubmitForSearchJob\">\n <div class=\"alert alert-success alert-dismissible fade show text-danger\" role=\"alert\"\n v-if=\"saveJobSearchResult == 'limited'\">\n 菫晏ュ倥〒縺阪k譚。莉カ縺ョ荳企剞��10莉カ�峨↓驕斐@縺ヲ縺�∪縺兔n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"alert\" aria-label=\"Close\"></button>\n </div>\n <div class=\"alert alert-success alert-dismissible fade show\" role=\"alert\" v-if=\"saveJobSearchResult == 'success'\">\n 譖エ譁ー縺梧ュ」蟶ク縺ォ螳御コ�@縺セ縺励◆縲�\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"alert\" aria-label=\"Close\"></button>\n </div>\n <div class=\"alert alert-danger alert-dismissible fade show\" role=\"alert\" v-if=\"saveJobSearchResult == 'fail'\">\n 譖エ譁ー縺御クュ譁ュ縺輔l縺セ縺励◆縲�\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"alert\" aria-label=\"Close\"></button>\n </div>\n <div class=\"bg-blue-primary d-md-flex justify-content-center d-none rounded-top-8\">\n <p class=\"m-2 text-white\">讀懃エ「譚。莉カ</p>\n </div>\n <div class=\"bg-white-primary mx-3 mx-md-0\">\n <div class=\"search-job__body overflow-y-scroll\">\n <div class=\"d-flex justify-content-center py-2 bg-silver-primary\">\n <button type=\"button\"\n class=\"btn bg-white d-flex justify-content-center align-items-center bg-silver-primary\"\n @click=\"toggleConditionSearchStatus\">\n <img src=\"@/assets/images/icons/menu.svg\" class=\"me-2\" />\n <div class=\"flex-grow-1 size-12 lh-12 fw-medium color-blue-primary\">菫晏ュ倥@縺滓、懃エ「譚。莉カ</div>\n </button>\n </div>\n <Occupation @open=\"onOpenModalOccupation\" @remove=\"onRemoveOccupation\" :occupations=\"occupationSelected\" />\n <hr class=\"color-grey-primary opacity-100\">\n <DesiredJob @open=\"onOpenModalPrefecture\" @remove=\"onRemovePrefecture\" :prefectures=\"prefectureSelected\" />\n <hr class=\"color-grey-primary opacity-100\">\n\n <!-- annual-income -->\n\n <AnnualIncome @changeMin=\"onChangeMinIncome\" @changeMax=\"onChangeMaxIncome\" :min_income=\"minIncomeSelected\"\n :max_income=\"maxIncomeSelected\" :incomes=\"props.incomes\" />\n <hr class=\"color-grey-primary opacity-100\">\n <!-- Industry -->\n\n <Industry @open=\"onOpenModalIndustry\" @remove=\"onRemoveIndusty\" :industries=\"industriesSelected\" />\n <hr class=\"color-grey-primary opacity-100\">\n <!-- Skill -->\n\n <Skill @open=\"onOpenModalSkill\" @remove=\"onRemoveSkill\" :skills=\"skillSelected\" />\n <hr class=\"color-grey-primary opacity-100\">\n <!-- Employment_type -->\n\n <EmploymentType @select=\"onCheckEmployment\" :employments=\"employmentSelected\"\n :employmentTypes=\"props.employmentTypes\" />\n <hr class=\"color-grey-primary opacity-100\">\n\n <!-- Job features -->\n\n <JobFeature @open=\"onOpenModalJobFeature\" @remove=\"onRemoveJobFeature\" :jobFeatures=\"jobFeatureSelected\" />\n <hr class=\"color-grey-primary opacity-100\">\n\n <!-- Search word -->\n <div class=\"row mx-3 justify-content-start\">\n <span class=\"form-label align-self-start size-12 p-0\">繝輔Μ繝シ繝ッ繝シ繝�</span>\n <input type=\"text\" v-model=\"searchWord\" name=\"search_word\"\n class=\"form-control size-14 bg-silver-primary input-primary\" placeholder=\"萓具シ俄雷笳銀雷\"\n v-on:keydown.enter.prevent=\"onChangeSearchWord\">\n </div>\n </div>\n\n <hr class=\"color-grey-primary opacity-100\">\n\n <div class=\"job-search__footer justify-content-center mb-3\">\n <div class=\"text-center\">\n <p class=\"size-12 fw-bold\">縺薙�譚。莉カ縺ョ豎ゆココ謨ー<span class=\"size-20 px-2\"><vue3-autocounter ref='counter'\n :startAmount='0' :endAmount='resultSearch' :duration='1' :autoinit='true'\n @finished='' /></span><span>莉カ</span></p>\n </div>\n <div class=\"d-flex justify-content-center\">\n <button type=\"button\"\n class=\"w-285x align-items-center justify-content-center d-flex h-48x btn btn-primary py-3 size-12 col-12 col-md-9\"\n @click=\"() => onChangeResultSearch(true)\" data-bs-dismiss=\"modal\">\n 縺薙�譚。莉カ縺ァ讀懃エ「\n </button>\n </div>\n <div class=\"h-48x d-flex justify-content-center mt-3\">\n <div v-if=\"totalConditionSearch < 10\">\n <button type=\"button\"\n class=\"w-285x h-48x justify-content-center d-flex align-items-center btn btn-outline-secondary rounded-24 py-3 size-12 col-12 col-md-9\"\n data-bs-toggle=\"modal\" data-bs-target=\"#saveJobCondition\">\n 縺薙�譚。莉カ繧剃ソ晏ュ禄n </button>\n </div>\n <div v-else>\n <button type=\"button\"\n class=\"w-285x justify-content-center d-flex align-items-center btn btn-outline-secondary rounded-24 py-3 size-12 col-12 col-md-9 disabled\">\n 縺薙�譚。莉カ繧剃ソ晏ュ禄n </button>\n <p class=\"text-danger size-12 text-center\">菫晏ュ倥〒縺阪k譚。莉カ縺ョ荳企剞��10莉カ�峨↓驕斐@縺ヲ縺�∪縺�</p>\n </div>\n </div>\n\n <div class=\"text-center mt-2 mw-100 h-46x d-flex justify-content-center align-items-center\">\n\n <button type=\"button\" class=\"btn btn-link color-blue-primary text-decoration-none size-12\"\n @click=\"onClearConditionSearch\">\n <img src=\"@/assets/images/icons/ic-remove.svg\" alt=\"Group icon\" class=\"mb-2x\">\n 譚。莉カ繧偵け繝ェ繧「\n </button>\n </div>\n </div>\n </div>\n </form>\n </div>\n <div v-else class='position-relative'>\n <div class=\"job-search list-condition-search position-absolute position-fixed w-317x\"\n :style=\"{ top: isScrolled ? '100px' : '', bottom: isScrolledBottom ? '0': '' }\">\n <div class=\"bg-blue-primary my-15 py-2 rounded-2 rounded-bottom-0\">\n <div class=\"d-flex col-10 justify-content-center align-items-center\">\n <p class=\"text-white m-0 ms-5\">菫晏ュ倥@縺滓、懃エ「譚。莉カ</p>\n </div>\n </div>\n <div class=\"text-center bg-grey-05 py-2 border-start border-end border-white shadow-sm\"\n @click=\"toggleConditionSearchStatus\">\n <img src=\"@/assets/images/icons/arrow-left-blue.svg\" alt=\"Back icon\">\n <span class=\"ms-2 color-blue-primary cursor-pointer\">譚。莉カ險ュ螳壹↓謌サ繧�</span>\n </div>\n <div class=\"list-job-container overflow-y-scroll bg-white mb-5 shadow-sm rounded-bottom-2\">\n <div v-if=\"totalConditionSearch == 0\">\n <p class=\"pt-3 text-center text-black-50 text-opacity-50\">菫晏ュ倥@縺滓、懃エ「譚。莉カ縺ッ縺ゅj縺セ縺帙s</p>\n </div>\n <div class=\"border-bottom border-start-white border-end-white\" v-for=\"searchCondition in listConditionSearch\">\n <div class=\"d-flex justify-content-between px-3\">\n <div class=\"d-flex cursor-pointer\" @click=\"onApplySearchCondition(searchCondition)\">\n <img src=\"@/assets/images/icons/arrow_curved_left.svg\" alt=\"Back icon\">\n <p class=\"text-black my-3 mx-2 truncate-text w-14\" :title=\"searchCondition.title\">{{\n searchCondition.title }}</p>\n </div>\n <img src=\"@/assets/images/icons/trash_grey.svg\" alt=\"Back icon\" class=\"cursor-pointer\"\n @click=\"onOpenModaConditionSearchConfirm(searchCondition.id, searchCondition.title)\">\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"modal fade\" id=\"saveJobCondition\" tabindex=\"-1\" aria-hidden=\"true\">\n <div class=\"modal-dialog\">\n <div class=\"modal-content\">\n <div class=\"d-flex justify-content-end px-3 pt-3\">\n <button role=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\"></button>\n </div>\n <div class=\"modal-body p-0\">\n <div class=\"d-flex justify-content-center p-0\">\n <p class=\"m-2 fw-bold size-16\">讀懃エ「譚。莉カ繧剃ソ晏ュ�</p>\n </div>\n <div class=\"row mx-3 justify-content-start px-3\">\n <span class=\"form-label align-self-start size-12\">讀懃エ「譚。莉カ蜷�</span>\n <input type=\"text\" v-model=\"title\" name=\"title\"\n class=\"form-control size-14 border-0 bg-silver-primary input-primary\" maxlength=\"100\">\n <div class=\"d-flex justify-content-end counter text-black-50 size-10 mt-2\">\n 譁�ュ玲焚�� {{ title?.length }}\n </div>\n </div>\n <div class=\"h-48x d-flex justify-content-center my-4\">\n <button type=\"button\"\n class=\"align-items-center justify-content-center d-flex h-48x w-285x btn btn-primary rounded-24 py-3 size-12\"\n @click=\"onSubmitForSearchJob\" data-bs-dismiss=\"modal\">\n 縺薙�譚。莉カ繧剃ソ晏ュ禄n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"modal fade\" id=\"confirmDeleteSearchConditionPC\" tabindex=\"-1\" aria-hidden=\"true\">\n <div class=\"modal-dialog\">\n <div class=\"modal-content\">\n <div class=\"d-flex justify-content-end px-3 pt-3\">\n <button role=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\"></button>\n </div>\n <div class=\"modal-body p-0\">\n <div class=\"d-flex justify-content-center p-0\">\n <h6 class=\"m-2 px-4\">�「{{ titleItemSearch }}�」 繧貞炎髯、縺励∪縺吶°��</h6>\n </div>\n <div class=\"h-48x d-flex justify-content-center my-4\">\n <button type=\"button\"\n class=\"btn-center btn-primary bg-white py-2 px-4 color-blue-primary size-12 pe-auto w-8\"\n data-bs-dismiss=\"modal\" aria-label='Close'>\n 繧ュ繝」繝ウ繧サ繝ォ\n </button>\n <button type=\"button\" class=\"btn-center btn-primary py-2 px-4 ms-4 text-white size-12 pe-auto w-8\"\n @click=\"onDeleteSearchCondition(idItemSearch)\" data-bs-dismiss=\"modal\">\n 蜑企勁縺吶k\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <ModalBase ref=\"modalOccupations\" element=\"modalOccupationsElement\" title=\"閨キ遞ョ繧帝∈縺カ\" @addItems=\"addOccupations\">\n <template #body>\n <div id=\"occupation-accordion\" class=\"accordion accordion-primary\">\n <div class=\"accordion-item\" v-for=\"occupation in props.occupations\" :key=\"occupation.id\">\n <div class=\"accordion-header px-3 py-2\">\n <div class=\"flex-grow-1\">\n <input \n type=\"checkbox\" \n class=\"form-check-input collapsed checkbox-primary-input w-1d5 h-1d5 mt-0\"\n :id=\"`occupation-item-input-${occupation.id}`\"\n @change=\"(e) => onChooseOccupationCategory(occupation, e)\"\n :checked=\"valuesOccupations.some(item => item.id == occupation.id)\"\n >\n <label \n class=\"form-check-label size-12 ms-3\"\n :for=\"`occupation-item-input-${occupation.id}`\"\n >\n {{ occupation.name }}\n </label>\n </div>\n <div \n v-if=\"occupation?.children?.length\"\n class=\"accordion-button collapsed d-contents\" \n data-bs-toggle=\"collapse\"\n :data-bs-target=\"`#occupation-item-${occupation.id}-search`\"\n aria-expanded=\"true\"\n :aria-controls=\"`occupation-item-${occupation.id}-search`\"\n ></div>\n </div>\n <div \n class=\"row mx-2 my-2 pe-0 accordion-collapse collapse\" \n :id=\"`occupation-item-${occupation.id}-search`\"\n >\n <div \n class=\"py-2 d-flex w-unset align-items-center accordion-body\" \n :aria-labelledby=\"`occupation-${occupation.id}`\"\n v-for=\"children in occupation.children\" \n :key=\"children.id\"\n >\n <input \n type=\"checkbox\"\n class=\"form-check-input checkbox-primary-input w-1d5 h-1d5 d-flex flex-inherit mt-0\"\n :id=\"`occupation-item-input-${children.id}`\"\n :checked=\"valuesOccupations.some(item => item.children.some(c => c.id == children.id))\"\n @change=\"onChooseOccupation(occupation, children)\"\n >\n <label \n class=\"form-check-label size-12 ms-3\" \n :for=\"`occupation-item-input-${children.id}`\"\n >\n {{ children.name }}\n </label>\n </div>\n </div>\n </div>\n </div>\n </template>\n </ModalBase>\n\n <ModalBase ref=\"modalPrefecture\" element=\"modalPrefectureElement\" title=\"蜍、蜍吝慍繧帝∈縺カ\" @addItems=\"addPrefectures\">\n <template #body>\n <div class=\"py-24x px-40x d-flex gap-3 w-100 accordion__left\">\n <div class=\"d-flex p-0 m-0 w-160x align-items-start\">\n <div class=\"border rounded-8 border-1 border flex-grow-1 align-items-start\">\n <div v-for=\"prefecture in prefectures\"\n :class=\"`prefecture-item py-3 px-24x border-bottom cursor-pointer ${prefectureAccordionSelected === prefecture.id && 'accordion__left--active'}`\"\n @click=\"prefectureAccordionSelected = prefecture.id\">\n {{ prefecture.name }}\n </div>\n </div>\n </div>\n <div class=\"accordion accordion-primary flex-grow-1\">\n <div\n :class=\"`accordion accordion-item accordion-primary border-grey-10 d-flex border flex-column ${prefectureChildrens && index !== prefectureChildrens.length - 1 ? 'border-bottom-0' : ''}`\"\n id=\"prefecture-accordion\" v-for=\"children, index in prefectureChildrens\" :key=\"children.id\">\n <div class=\"accordion-header px-3 py-2\">\n <div class=\"flex-grow-1\">\n <input type=\"checkbox\" class=\"form-check-input collapsed checkbox-primary-input w-1d5 h-1d5 mt-0\"\n :id=\"`prefecture-item-input-${prefectureAccordionSelected}-children-${children.id}`\"\n @change=\"onChangePrefecture(children)\"\n :checked=\"valuesPrefectures.some(item => item.id == children.id)\">\n <label class=\"form-check-label size-12 ms-3\"\n :for=\"`prefecture-item-input-${prefectureAccordionSelected}-children-${children.id}`\">\n {{ children.name }}\n </label>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n </template>\n </ModalBase>\n\n <ModalBase ref=\"modalIndustry\" element=\"modalIndustryElement\" title=\"讌ュ遞ョ繧定ソス蜉�縺吶k\" @addItems=\"addIndustries\">\n <template #body>\n <div class=\"accordion accordion-primary\">\n <div class=\"accordion-item\" v-for=\"industry in props.industries\">\n <div class=\"accordion-header px-3 py-2\">\n <div class=\"flex-grow-1\">\n <input type=\"checkbox\" class=\"form-check-input collapsed checkbox-primary-input w-1d5 h-1d5 mt-0\"\n :id=\"`industry-item-input-${industry.id}`\"\n @change=\"(e) => onChooseIndustryCategory(industry, e)\"\n :checked=\"valuesIndustries.some(item => item.id == industry.id)\">\n <label class=\"form-check-label size-12 ms-3\"\n :for=\"`industry-item-input-${industry.id}`\">\n {{ industry.name }}\n </label>\n </div>\n <div v-show=\"industry?.children && industry?.children.length\"\n class=\"accordion-button collapsed d-contents\" data-bs-toggle=\"collapse\"\n :data-bs-target=\"`#industry-item-${industry.id}-search`\"\n aria-expanded=\"true\"\n :aria-controls=\"`#industry-item-${industry.id}-search`\"></div>\n </div>\n <div class=\"row mx-2 my-2 pe-0 accordion-collapse collapse\" :id=\"`industry-item-${industry.id}-search`\">\n <div class=\"py-2 d-flex w-unset align-items-center accordion-body\" :aria-labelledby=\"`industry-${industry.id}`\"\n v-for=\"children in industry.children\">\n <input type=\"checkbox\"\n class=\"form-check-input checkbox-primary-input w-1d5 h-1d5 d-flex flex-inherit mt-0\"\n :id=\"`industry-item-input-${children.id}`\"\n :checked=\"valuesIndustries.some(item => item.children.some(c => c.id == children.id))\"\n @click=\"onChooseIndustry(industry, children)\">\n <label class=\"form-check-label size-12 ms-3\" :for=\"`industry-item-input-${children.id}`\">\n {{ children.name }}\n </label>\n </div>\n </div>\n </div>\n </div>\n </template>\n </ModalBase>\n\n <ModalBase ref=\"modalSkills\" element=\"modalSkillsElement\" title=\"繧ケ繧ュ繝ォ繧帝∈縺カ\" @addItems=\"addSkills\">\n <template #body>\n <div class=\"accordion accordion-primary\">\n <div class=\"accordion-item\" v-for=\"skill in props.skills\">\n <div class=\"accordion-header px-3 py-2\">\n <div class=\"flex-grow-1\">\n <input type=\"checkbox\" class=\"form-check-input collapsed checkbox-primary-input w-1d5 h-1d5 mt-0\"\n :id=\"`skill-item-input-${skill.id}`\"\n @change=\"(e) => onChooseSkillCategory(skill, e)\"\n :checked=\"valueSkills.some(item => item.id == skill.id)\">\n <label class=\"form-check-label size-12 ms-3\"\n :for=\"`skill-item-input-${skill.id}`\">\n {{ skill.name }}\n </label>\n </div>\n <div v-show=\"skill?.children && skill?.children.length\"\n class=\"accordion-button collapsed d-contents\" data-bs-toggle=\"collapse\"\n :data-bs-target=\"`#skill-item-${skill.id}-search`\"\n aria-expanded=\"true\"\n :aria-controls=\"`#skill-item-${skill.id}-search`\"></div>\n </div>\n <div class=\"row mx-2 my-2 pe-0 accordion-collapse collapse\" :id=\"`skill-item-${skill.id}-search`\">\n <div class=\"py-2 d-flex w-unset align-items-center accordion-body\" :aria-labelledby=\"`skill-${skill.id}`\"\n v-for=\"children in skill.children\">\n <input type=\"checkbox\"\n class=\"form-check-input checkbox-primary-input w-1d5 h-1d5 d-flex flex-inherit mt-0\"\n :id=\"`skill-item-input-${children.id}`\"\n :checked=\"valueSkills.some(item => item.children.some(c => c.id == children.id))\"\n @click=\"onChooseSkill(skill, children)\">\n <label class=\"form-check-label size-12 ms-3\" :for=\"`skill-item-input-${children.id}`\">\n {{ children.name }}\n </label>\n </div>\n </div>\n </div>\n </div>\n </template>\n </ModalBase>\n\n <ModalBase ref=\"modalJobFeatures\" element=\"modalJobFeaturesElement\" title=\"豎ゆココ縺ョ迚ケ蠕エ繧定ソス蜉�縺吶k\" @addItems=\"addJobFeature\">\n <template #body>\n <div id=\"job-features-accordion\" class=\"accordion accordion-primary\">\n <div class=\"accordion-item\" v-for=\"jobFeature in jobFeatures\">\n <div class=\"accordion-header px-3 py-2\">\n <div class=\"flex-grow-1\">\n <input type=\"checkbox\" class=\"form-check-input collapsed checkbox-primary-input w-1d5 h-1d5 mt-0\"\n :id=\"`job-feature-item-input-${jobFeature.id}`\"\n @change=\"(e) => onChooseJobFeatureCategory(jobFeature, e)\"\n :checked=\"valueJobFeatures.some(item => item.id == jobFeature.id)\">\n <label class=\"form-check-label size-12 ms-3\"\n :for=\"`job-feature-item-input-${jobFeature.id}`\">\n {{ jobFeature.name }}\n </label>\n </div>\n <div v-show=\"jobFeature?.children && jobFeature?.children.length\"\n class=\"accordion-button collapsed d-contents\" data-bs-toggle=\"collapse\"\n :data-bs-target=\"`#job-feature-item-${jobFeature.id}-search`\"\n aria-expanded=\"true\"\n :aria-controls=\"`#job-feature-item-${jobFeature.id}-search`\"></div>\n </div>\n <div class=\"row mx-2 my-2 pe-0 accordion-collapse collapse\" :id=\"`job-feature-item-${jobFeature.id}-search`\">\n <div class=\"py-2 d-flex w-unset align-items-center accordion-body\" :aria-labelledby=\"`job-feature-${jobFeature.id}`\"\n v-for=\"children in jobFeature.children\">\n <input type=\"checkbox\"\n class=\"form-check-input checkbox-primary-input w-1d5 h-1d5 d-flex flex-inherit mt-0\"\n :id=\"`job-features-item-input-${children.id}`\"\n :checked=\"valueJobFeatures.some(item => item.children.some(c => c.id == children.id))\"\n @click=\"onChooseJobFeature(jobFeature, children)\">\n <label class=\"form-check-label size-12 ms-3\" :for=\"`job-features-item-input-${children.id}`\">\n {{ children.name }}\n </label>\n </div>\n </div>\n </div>\n </div>\n </template>\n </ModalBase>\n</template>\n<script setup lang=\"ts\">\nimport _ from 'lodash';\nimport { computed, onMounted, ref, watchEffect, nextTick } from \"vue\";\nimport { Collapse } from 'bootstrap';\nimport ModalBase from \"@/components/common/ModalBase/index.vue\";\nimport Occupation from '@/components/JobSearch/Occupation.vue';\nimport DesiredJob from '@/components/JobSearch/DesiredJob.vue';\nimport AnnualIncome from '@/components/JobSearch/AnnualIncome.vue';\nimport EmploymentType from '@/components/JobSearch/EmploymentType.vue'\nimport Industry from '@/components/JobSearch/Industry.vue';\nimport Skill from '@/components/JobSearch/Skill.vue';\nimport JobFeature from '@/components/JobSearch/JobFeature.vue'\nimport { OccupationThirdary } from '@/types/models/occupation';\nimport { PrefectureFifth, PrefectureFourth, PrefecturePrimary, PrefectureSecondary } from '@/types/models/prefecture';\nimport { saveJobSearchCondition } from '@/apis/candidate';\nimport { IndustryType } from '@/types/models/industryType';\nimport { SkillsType } from '@/types/models/skill';\nimport { EmploymentTypePrimary } from '@/types/models/employmentType';\nimport { JobFeaturePrimary, JobFeatureSecondary } from '@/types/models/jobFeatureType'\nimport { IncomePrimary } from '@/types/models/income';\nimport { cloneDeep } from 'lodash'\nimport Vue3Autocounter from 'vue3-autocounter';\nimport { CityPrimary } from '@/types/models/city';\nimport { useRoute } from 'vue-router';\nimport { deleteConditionJobSearch, getJobSearch, getListConditionJobSearch } from '@/apis/job.api';\nimport { SEARCH_PATH } from \"@/constant/routers/path\";\nimport router from '@/routers';\nimport { KANTO_ID } from '@/constant';\n\nconst valuesPrefectures = ref<PrefecturePrimary[]>([]);\nconst valuesOccupations = ref<OccupationThirdary[]>([]);\nconst valuesIndustries = ref<IndustryType[]>([]);\nconst valueSkills = ref<SkillsType[]>([]);\nconst valueJobFeatures = ref<JobFeaturePrimary[]>([]);\n\nconst searchWord = ref<string | null>(null);\nconst title = ref<string | null>(null);\n\nlet prefectureSelected = ref<PrefectureFourth[]>([]);\nlet occupationSelected = ref<OccupationThirdary[]>([]);\nlet industriesSelected = ref<IndustryType[]>([]);\nlet skillSelected = ref<SkillsType[]>([]);\nlet jobFeatureSelected = ref<JobFeaturePrimary[]>([]);\nlet employmentSelected = ref<EmploymentTypePrimary[]>([]);\nlet minIncomeSelected = ref<IncomePrimary>();\nlet maxIncomeSelected = ref<IncomePrimary>();\nconst prefectureAccordionSelected = ref<number>(KANTO_ID);\n\nconst modalPrefecture = ref<InstanceType<typeof ModalBase> | null>(null);\nconst modalOccupations = ref<InstanceType<typeof ModalBase> | null>(null);\nconst modalIndustry = ref<InstanceType<typeof ModalBase> | null>(null);\nconst modalSkills = ref<InstanceType<typeof ModalBase> | null>(null);\nconst modalJobFeatures = ref<InstanceType<typeof ModalBase> | null>(null);\n\nconst route = useRoute();\nlet resultSearch = ref(0);\nconst listConditionSearch = ref();\nconst totalConditionSearch = ref<number>(0);\nconst modalElement = ref();\nconst isListSearchEnable = ref(false);\nconst isScrolled = ref(false);\nconst isScrolledBottom = ref(false);\nconst idItemSearch = ref(0);\nconst titleItemSearch = ref('');\n\nconst saveJobSearchResult = ref<string | null>(null);\n\nonMounted(async () => {\n title.value = getCurrentDate();\n await getListConditionSearch();\n await getParamSearch();\n onChangeResultSearch(false);\n});\n\nwatchEffect(() => {\n if (!props.prefectures.length || prefectureAccordionSelected.value) return;\n prefectureAccordionSelected.value = props.prefectures[0].id;\n});\n\nconst prefectureChildrens = computed(() => {\n const prefecturesFound = props.prefectures.find((prefecture: any) => prefecture.id === prefectureAccordionSelected.value);\n if (prefecturesFound) return prefecturesFound.children;\n return [];\n});\n\nconst getCurrentDate = () => {\n const currentDate = new Date();\n const month = String(currentDate.getMonth() + 1).padStart(2, '0');\n const day = String(currentDate.getDate()).padStart(2, '0');\n const time = String(currentDate.getHours()).padStart(2, '0') + ':' + String(currentDate.getMinutes()).padStart(2, '0')\n + ':' + String(currentDate.getSeconds()).padStart(2, '0');\n\n return currentDate.getFullYear() + '/' + month + '/' + day + ' ' + time\n}\n\nconst onOpenModaConditionSearchConfirm = (id: number, title: string) => {\n idItemSearch.value = id;\n titleItemSearch.value = title;\n\n nextTick(() => {\n const confirmDeleteElement = document.getElementById('confirmDeleteSearchConditionPC');\n if (confirmDeleteElement) {\n modalElement.value = new Collapse(<HTMLElement>confirmDeleteElement);\n modalElement.value.show();\n }\n });\n}\n\nconst toggleConditionSearchStatus = () => {\n isListSearchEnable.value = !isListSearchEnable.value;\n saveJobSearchResult.value = '';\n}\n\nconst onChangeSearchWord = async () => {\n search();\n}\n\nconst onOpenModalOccupation = () => {\n modalOccupations?.value?.onOpen()\n}\n\nconst addOccupations = () => {\n occupationSelected.value = cloneDeep(valuesOccupations.value)\n search();\n}\n\nconst onChooseOccupationCategory = (occupation, event) => {\n event.stopPropagation();\n \n const isCurrentlySelected = valuesOccupations.value.some(item => item.id === occupation.id);\n \n if (!isCurrentlySelected) {\n const newOccupation = {\n id: occupation.id,\n name: occupation.name,\n children: []\n };\n \n occupation.children.forEach(child => {\n newOccupation.children.push({\n id: child.id,\n name: child.name\n });\n });\n \n valuesOccupations.value.push(newOccupation);\n } else {\n const index = valuesOccupations.value.findIndex(item => item.id === occupation.id);\n if (index !== -1) {\n valuesOccupations.value.splice(index, 1);\n }\n }\n \n const accordionId = `occupation-item-${occupation.id}-search`;\n const accordionElement = document.getElementById(accordionId);\n if (accordionElement) {\n const collapse = Collapse.getInstance(accordionElement) || new Collapse(accordionElement);\n if (!accordionElement.classList.contains('show')) {\n collapse.show();\n }\n }\n \n search();\n}\n\nconst onChooseOccupation = (parent, child) => {\n let parentCategory = valuesOccupations.value.find(item => item.id === parent.id);\n \n if (!parentCategory) {\n parentCategory = {\n id: parent.id,\n name: parent.name,\n children: []\n };\n valuesOccupations.value.push(parentCategory);\n }\n \n const childIndex = parentCategory.children.findIndex(item => item.id === child.id);\n \n if (childIndex === -1) {\n parentCategory.children.push({\n id: child.id,\n name: child.name\n });\n } else {\n parentCategory.children.splice(childIndex, 1);\n \n if (parentCategory.children.length === 0) {\n const parentIndex = valuesOccupations.value.findIndex(item => item.id === parent.id);\n if (parentIndex !== -1) {\n valuesOccupations.value.splice(parentIndex, 1);\n }\n }\n }\n \n search();\n}\n\nconst onRemoveOccupation = (occupationId: number) => {\n valuesOccupations.value = valuesOccupations.value\n .map(item => ({ ...item, children: item.children.filter(child => child.id !== occupationId) }))\n .filter(item => item.children.length > 0)\n occupationSelected.value = cloneDeep(valuesOccupations.value)\n search();\n}\n\nconst onOpenModalPrefecture = () => {\n modalPrefecture?.value?.onOpen()\n}\n\nconst onChangePrefecture = (prefecture: PrefectureSecondary) => {\n let checked = false\n if (valuesPrefectures.value.find(item => item.id == prefecture.id)) {\n valuesPrefectures.value = valuesPrefectures.value.filter(item => prefecture.id !== item.id)\n } else {\n checked = true\n valuesPrefectures.value.push({ id: prefecture.id, name: prefecture.name, cities: [] })\n }\n\n props.prefectures.map(item => {\n item.children?.map(child => {\n if (child.id == prefecture.id) {\n child.selected = checked\n }\n })\n })\n}\n\nconst onChangeCity = (prefecture: PrefectureSecondary, city: CityPrimary) => {\n if (_.find(valuesPrefectures.value, { id: prefecture.id })) {\n selectedCity(prefecture, city);\n } else {\n valuesPrefectures.value.push({ id: prefecture.id, name: prefecture.name, cities: [] });\n selectedCity(prefecture, city);\n }\n};\n\nconst selectedCity = (prefecture: PrefectureSecondary, city: CityPrimary) => {\n let prefectureEntry = _.find(valuesPrefectures.value, { id: prefecture.id });\n if (prefectureEntry) {\n if (_.find(prefectureEntry.cities, { id: city.id })) {\n prefectureEntry.cities = _.reject(prefectureEntry.cities, { id: city.id });\n } else {\n prefectureEntry.cities.push(city);\n }\n\n if (prefectureEntry.cities.length === 0) {\n valuesPrefectures.value = _.reject(valuesPrefectures.value, { id: prefecture.id });\n\n _.forEach(props.prefectures, item => {\n _.forEach(item.children, child => {\n if (child.id === prefecture.id) {\n child.selected = false;\n }\n });\n });\n }\n }\n};\n\nconst onRemovePrefecture = (prefectureId: number) => {\n valuesPrefectures.value = valuesPrefectures.value.filter((item) => { return item.id != prefectureId });\n prefectureSelected.value = cloneDeep(valuesPrefectures.value)\n search();\n}\n\nconst addPrefectures = () => {\n prefectureSelected.value = cloneDeep(valuesPrefectures.value)\n search();\n}\n\nconst onChangeMinIncome = (minIncome: any) => {\n minIncomeSelected.value = minIncome.value\n search();\n}\n\nconst onChangeMaxIncome = (maxIncome: any) => {\n maxIncomeSelected.value = maxIncome.value\n search();\n}\n\nconst onOpenModalIndustry = () => {\n modalIndustry?.value?.onOpen()\n}\n\nconst onChooseIndustryCategory = (industry, event) => {\n event.stopPropagation();\n \n const isCurrentlySelected = valuesIndustries.value.some(item => item.id === industry.id);\n \n if (!isCurrentlySelected) {\n const newIndustry = {\n id: industry.id,\n name: industry.name,\n children: []\n };\n \n industry.children.forEach(child => {\n newIndustry.children.push({\n id: child.id,\n name: child.name\n });\n });\n \n valuesIndustries.value.push(newIndustry);\n } else {\n const index = valuesIndustries.value.findIndex(item => item.id === industry.id);\n if (index !== -1) {\n valuesIndustries.value.splice(index, 1);\n }\n }\n \n const accordionId = `industry-item-${industry.id}-search`;\n const accordionElement = document.getElementById(accordionId);\n if (accordionElement) {\n const collapse = Collapse.getInstance(accordionElement) || new Collapse(accordionElement);\n if (!accordionElement.classList.contains('show')) {\n collapse.show();\n }\n }\n \n search();\n}\n\nconst onChooseIndustry = (industryCategory: IndustryType, industry: IndustryType) => {\n if (_.find(valuesIndustries.value, { id: industryCategory.id })) {\n selectedIndustry(industryCategory, industry);\n } else {\n valuesIndustries.value.push({ id: industryCategory.id, name: industryCategory.name, children: [] });\n selectedIndustry(industryCategory, industry);\n }\n}\n\nconst selectedIndustry = (industryCategory: IndustryType, industry: IndustryType) => {\n let industryCategoryEntry = _.find(valuesIndustries.value, { id: industryCategory.id });\n if (industryCategoryEntry) {\n if (_.find(industryCategoryEntry.children, { id: industry.id })) {\n industryCategoryEntry.children = _.reject(industryCategoryEntry.children, { id: industry.id });\n } else {\n industryCategoryEntry.children.push(industry);\n }\n\n if (industryCategoryEntry.children.length === 0) {\n valuesIndustries.value = _.reject(valuesIndustries.value, { id: industryCategory.id });\n\n _.forEach(props.industries, item => {\n if (item.id === industryCategory.id) {\n item.selected = false;\n }\n });\n }\n }\n};\n\nconst onRemoveIndusty = (industryId: number) => {\n valuesIndustries.value = valuesIndustries.value\n .map(item => ({ ...item, children: item.children.filter(child => child.id !== industryId) }))\n .filter(item => item.children.length > 0)\n industriesSelected.value = cloneDeep(valuesIndustries.value)\n search();\n}\n\nconst addIndustries = () => {\n industriesSelected.value = cloneDeep(valuesIndustries.value)\n search();\n}\n\nconst onOpenModalSkill = () => {\n modalSkills?.value?.onOpen();\n}\n\nconst onChooseSkillCategory = (skill, event) => {\n event.stopPropagation();\n \n const isCurrentlySelected = valueSkills.value.some(item => item.id === skill.id);\n \n if (!isCurrentlySelected) {\n const newSkill = {\n id: skill.id,\n name: skill.name,\n children: []\n };\n \n skill.children.forEach(child => {\n newSkill.children.push({\n id: child.id,\n name: child.name\n });\n });\n \n valueSkills.value.push(newSkill);\n } else {\n const index = valueSkills.value.findIndex(item => item.id === skill.id);\n if (index !== -1) {\n valueSkills.value.splice(index, 1);\n }\n }\n \n const accordionId = `skill-item-${skill.id}-search`;\n const accordionElement = document.getElementById(accordionId);\n if (accordionElement) {\n const collapse = Collapse.getInstance(accordionElement) || new Collapse(accordionElement);\n if (!accordionElement.classList.contains('show')) {\n collapse.show();\n }\n }\n \n search();\n}\n\nconst onChooseSkill = (skillCategory: SkillsType, skill: SkillsType) => {\n if (_.find(valueSkills.value, { id: skillCategory.id })) {\n selectedSkill(skillCategory, skill);\n } else {\n valueSkills.value.push({ id: skillCategory.id, name: skillCategory.name, children: [] });\n selectedSkill(skillCategory, skill);\n }\n}\n\nconst selectedSkill = (skillCategory: SkillsType, skill: SkillsType) => {\n let skillCategoryEntry = _.find(valueSkills.value, { id: skillCategory.id });\n if (skillCategoryEntry) {\n if (_.find(skillCategoryEntry.children, { id: skill.id })) {\n skillCategoryEntry.children = _.reject(skillCategoryEntry.children, { id: skill.id });\n } else {\n skillCategoryEntry.children.push(skill);\n }\n\n if (skillCategoryEntry.children.length === 0) {\n valueSkills.value = _.reject(valueSkills.value, { id: skillCategory.id });\n\n _.forEach(props.skills, item => {\n if (item.id === skillCategory.id) {\n item.selected = false;\n }\n });\n }\n }\n};\n\nconst onRemoveSkill = (skillId: number) => {\n valueSkills.value = valueSkills.value\n .map(item => ({ ...item, children: item.children.filter(child => child.id !== skillId) }))\n .filter(item => item.children.length > 0)\n skillSelected.value = cloneDeep(valueSkills.value)\n search();\n}\n\nconst addSkills = () => {\n skillSelected.value = cloneDeep(valueSkills.value)\n search();\n}\n\nconst onCheckEmployment = (employment: any) => {\n const employmentType = employmentSelected.value.find((item) => item.id === employment.id)\n if (!employmentType) {\n employmentSelected.value.push(employment);\n } else {\n employmentSelected.value = employmentSelected.value.filter((item) => { return item.id != employment.id })\n }\n search();\n}\n\nconst onOpenModalJobFeature = () => {\n modalJobFeatures?.value?.onOpen();\n}\n\nconst onChooseJobFeatureCategory = (jobFeature, event) => {\n event.stopPropagation();\n \n const isCurrentlySelected = valueJobFeatures.value.some(item => item.id === jobFeature.id);\n \n if (!isCurrentlySelected) {\n const newJobFeature = {\n id: jobFeature.id,\n name: jobFeature.name,\n children: []\n };\n \n jobFeature.children.forEach(child => {\n newJobFeature.children.push({\n id: child.id,\n name: child.name\n });\n });\n \n valueJobFeatures.value.push(newJobFeature);\n } else {\n const index = valueJobFeatures.value.findIndex(item => item.id === jobFeature.id);\n if (index !== -1) {\n valueJobFeatures.value.splice(index, 1);\n }\n }\n \n const accordionId = `job-feature-item-${jobFeature.id}-search`;\n const accordionElement = document.getElementById(accordionId);\n if (accordionElement) {\n const collapse = Collapse.getInstance(accordionElement) || new Collapse(accordionElement);\n if (!accordionElement.classList.contains('show')) {\n collapse.show();\n }\n }\n \n search();\n}\n\nconst onChooseJobFeature = (jobFeatureCategory: JobFeaturePrimary, jobFeature: JobFeatureSecondary) => {\n if (_.find(valueJobFeatures.value, { id: jobFeatureCategory.id })) {\n selectedJobFeature(jobFeatureCategory, jobFeature);\n } else {\n valueJobFeatures.value.push({ id: jobFeatureCategory.id, name: jobFeatureCategory.name, children: [] });\n selectedJobFeature(jobFeatureCategory, jobFeature);\n }\n}\n\nconst selectedJobFeature = (jobFeatureCategory: JobFeaturePrimary, jobFeature: JobFeatureSecondary) => {\n let jobFeatureCategoryEntry = _.find(valueJobFeatures.value, { id: jobFeatureCategory.id });\n if (jobFeatureCategoryEntry) {\n if (_.find(jobFeatureCategoryEntry.children, { id: jobFeature.id })) {\n jobFeatureCategoryEntry.children = _.reject(jobFeatureCategoryEntry.children, { id: jobFeature.id });\n } else {\n jobFeatureCategoryEntry.children.push(jobFeature);\n }\n\n if (jobFeatureCategoryEntry.children.length === 0) {\n valueJobFeatures.value = _.reject(valueJobFeatures.value, { id: jobFeatureCategory.id });\n\n _.forEach(props.jobFeatures, item => {\n if (item.id === jobFeatureCategory.id) {\n item.selected = false;\n }\n });\n }\n }\n};\n\nconst onRemoveJobFeature = (id: number) => {\n valueJobFeatures.value = valueJobFeatures.value\n .map(item => ({ ...item, children: item.children.filter(child => child.id !== id) }))\n .filter(item => item.children.length > 0)\n jobFeatureSelected.value = cloneDeep(valueJobFeatures.value)\n search();\n}\n\nconst addJobFeature = () => {\n jobFeatureSelected.value = cloneDeep(valueJobFeatures.value)\n search();\n}\n\nconst initialValuesConditionSearch = () => {\n searchWord.value = '';\n prefectureSelected.value = [];\n valuesPrefectures.value = [];\n occupationSelected.value = [];\n valuesOccupations.value = [];\n industriesSelected.value = [];\n valuesIndustries.value = [];\n skillSelected.value = [];\n valueSkills.value = [];\n jobFeatureSelected.value = [];\n valueJobFeatures.value = [];\n employmentSelected.value = [];\n minIncomeSelected.value = undefined;\n maxIncomeSelected.value = undefined;\n}\n\nconst onClearConditionSearch = () => {\n initialValuesConditionSearch();\n search();\n}\n\nconst onChangeResultSearch = async (initPage: boolean) => {\n const data = {\n keywords: searchWord.value,\n job_types: occupationSelected.value.flatMap((item) => item.children.map((c) => c.id)),\n prefectures: prefectureSelected.value.map((item) => item.id),\n min_annual_income: minIncomeSelected.value,\n max_annual_income: maxIncomeSelected.value,\n industries: industriesSelected.value.flatMap((item) => item.children.map((c) => c.id)),\n skills: skillSelected.value.flatMap((item) => item.children.map((c) => c.id)),\n employment_types: employmentSelected.value.map((item) => item.id),\n job_features: jobFeatureSelected.value.flatMap((item) => item.children.map((c) => c.id)),\n sort_by: props.sort,\n page: initPage ? undefined : Math.max(Number(route.query.page) || 1, 1)\n }\n\n const response = await getJobSearch(data)\n resultSearch.value = response.data.pagy.count\n emit(\"searchJob\", response, data);\n}\n\nconst onDeleteSearchCondition = async (id: number) => {\n const response = await deleteConditionJobSearch(id)\n if (response.status == 200) {\n getListConditionSearch();\n }\n}\n\nconst emit = defineEmits(['searchJob']);\n\nconst props = defineProps({\n prefectures: {\n type: Array as unknown as () => any,\n required: false\n },\n occupations: {\n type: Array as unknown as () => any,\n required: false\n },\n incomes: {\n type: Array as unknown as () => any,\n required: false\n },\n industries: {\n type: Array as unknown as () => any,\n required: false\n },\n skills: {\n type: Array as unknown as () => any,\n required: false\n },\n jobFeatures: {\n type: Array as unknown as () => any,\n required: false\n },\n employmentTypes: {\n type: Array as unknown as () => any,\n required: false\n },\n sort: {\n type: String as unknown as () => any,\n required: false\n },\n inputListJob: {\n type: Array as unknown as () => any,\n required: false\n }\n})\n\nconst search = async () => {\n const data = {\n keywords: searchWord.value,\n job_types: occupationSelected.value.flatMap((item) => item.children.map((c) => c.id)),\n prefectures: prefectureSelected.value.map((item) => item.id),\n min_annual_income: minIncomeSelected.value,\n max_annual_income: maxIncomeSelected.value,\n industries: industriesSelected.value.flatMap((item) => item.children.map((c) => c.id)),\n skills: skillSelected.value.flatMap((item) => item.children.map((c) => c.id)),\n employment_types: employmentSelected.value.map((item) => item.id),\n job_features: jobFeatureSelected.value.flatMap((item) => item.children.map((c) => c.id)),\n sort_by: props.sort\n }\n\n const response = await getJobSearch(data)\n resultSearch.value = response.data.pagy.count\n const page = Math.max(Number(route.query.page) || 1, 1);\n const paramsData = {\n keywords: searchWord.value || undefined,\n job_types: occupationSelected.value.flatMap((item) => item.children.map((c) => c.id)),\n prefectures: prefectureSelected.value?.map(item => item.id),\n city_ids: prefectureSelected.value.flatMap(item => item.cities.map(({ id }) => id)),\n min_annual_income: minIncomeSelected.value,\n max_annual_income: maxIncomeSelected.value,\n industries: industriesSelected.value?.flatMap((item) => item.children.map((c) => c.id)),\n skills: skillSelected.value?.flatMap((item) => item.children.map((c) => c.id)),\n employment_types: employmentSelected.value?.map(item => item.id),\n job_features: jobFeatureSelected.value?.flatMap((item) => item.children.map((c) => c.id)),\n direct: true,\n page: page === 1 ? undefined : page\n }\n if (window.scrollY > 0) window.scrollTo(0, 0)\n router.push({ path: SEARCH_PATH, query: paramsData });\n}\n\nconst getListConditionSearch = async () => {\n const response = await getListConditionJobSearch()\n if (response.status == 200 && response?.data?.job_search_conditions) {\n listConditionSearch.value = response?.data?.job_search_conditions.filter(item => item.service_type_flag != true)\n totalConditionSearch.value = listConditionSearch?.value?.length || 0\n }\n}\n\nconst onSubmitForSearchJob = async () => {\n await getListConditionSearch();\n if (totalConditionSearch.value > 10) {\n setTimeout(() => {\n saveJobSearchResult.value = '';\n }, 3000);\n return saveJobSearchResult.value = 'limited';\n }\n let conditionSearchLocations: PrefectureFifth[] = []\n prefectureSelected.value.forEach(item => {\n if (item.cities.length <= 0) return conditionSearchLocations.push({ prefecture_id: item.id })\n item.cities.forEach(city => conditionSearchLocations.push({ prefecture_id: item.id, city_id: city.id }))\n })\n event?.preventDefault();\n const data = {\n title: title.value || getCurrentDate(),\n keywords: searchWord.value,\n job_types: occupationSelected.value.flatMap((item) => item.children.map((c) => c.id)),\n prefectures: conditionSearchLocations,\n min_annual_income: minIncomeSelected.value,\n max_annual_income: maxIncomeSelected.value,\n industries: industriesSelected.value.flatMap((item) => item.children.map((c) => c.id)),\n skills: skillSelected.value.flatMap((item) => item.children.map((c) => c.id)),\n employment_types: employmentSelected.value.map((item) => item.id),\n job_features: jobFeatureSelected.value.flatMap((item) => item.children.map((c) => c.id)),\n }\n const response = await saveJobSearchCondition(data)\n if (response.status === 200) {\n getListConditionSearch();\n setTimeout(() => {\n saveJobSearchResult.value = '';\n }, 3000);\n saveJobSearchResult.value = 'success'\n }\n else {\n getListConditionSearch();\n setTimeout(() => {\n saveJobSearchResult.value = '';\n }, 3000);\n saveJobSearchResult.value = 'fail'\n }\n}\n\nconst onApplySearchCondition = (searchCondition: any) => {\n initialValuesConditionSearch();\n title.value = searchCondition?.title\n searchWord.value = searchCondition?.candidate_saved_job_search_condition_freeword?.free_word\n searchCondition.candidate_saved_job_search_condition_occupations.map((item) => {\n props.occupations.forEach(occupation => {\n let occupationChild = occupation.children.find(child => child.id === item.occupation_id);\n\n if (occupationChild) {\n onChooseOccupation(occupation, occupationChild)\n occupationSelected.value = cloneDeep(valuesOccupations.value);\n }\n });\n })\n const prefectureIds = [... new Set(searchCondition.candidate_saved_job_search_condition_locations.map((item) => item.prefecture_id))]\n const cityIds = [... new Set(searchCondition.candidate_saved_job_search_condition_locations.map((item) => item.city_id))]\n prefectureIds.forEach((id) => {\n const prefecture = props.prefectures.find(prefecture => prefecture.children.some(child => child.id === id));\n if (prefecture) {\n const prefectureChild = prefecture.children.find(child => child.id === id);\n const cities = [];\n\n cityIds.filter(item => item !== null).forEach(cityId => {\n const matchingCity = [...prefectureChild.main_cities, ...prefectureChild.extra_cities].find(city => city.id === cityId);\n\n if (matchingCity) {\n cities.push(matchingCity);\n }\n });\n\n valuesPrefectures.value.push({ id: prefectureChild.id, name: prefectureChild.name, cities: cities });\n prefectureSelected.value = cloneDeep(valuesPrefectures.value)\n }\n })\n minIncomeSelected.value = searchCondition.annual_min_income_id\n maxIncomeSelected.value = searchCondition.annual_max_income_id\n searchCondition.candidate_saved_job_search_condition_industries.map((item) => {\n props.industries.forEach(industry => {\n let industryChild = industry.children?.find(child => child.id === item.industry_id);\n\n if (industryChild) {\n onChooseIndustry(industry, industryChild)\n industriesSelected.value = cloneDeep(valuesIndustries.value);\n }\n })\n });\n searchCondition.candidate_saved_job_search_condition_skills.map((item) => {\n props.skills.forEach(skill => {\n let skillChild = skill.children.find(child => child.id === item.skill_id);\n\n if (skillChild) {\n onChooseSkill(skill, skillChild)\n skillSelected.value = cloneDeep(valueSkills.value);\n }\n });\n });\n searchCondition.candidate_saved_job_search_condition_employment_types.map((item) => {\n let employmentType = props.employmentTypes.find(child => child.id === item.employment_type_id);\n\n if (employmentType) {\n employmentSelected.value.push(employmentType)\n }\n });\n searchCondition.candidate_saved_job_search_condition_features.map((item) => {\n props.jobFeatures.forEach(jobFeature => {\n let jobFeatureChild = jobFeature.children.find(child => child.id === item.job_feature_id);\n\n if (jobFeatureChild) {\n onChooseJobFeature(jobFeature, jobFeatureChild)\n jobFeatureSelected.value = cloneDeep(valueJobFeatures.value);\n }\n });\n });\n search();\n onChangeResultSearch(true);\n toggleConditionSearchStatus();\n}\n\nconst getParamSearch = async () => {\n if (Object.keys(route.query).length === 0) return search();\n initialValuesConditionSearch();\n if (route.query.occupation_id) {\n occupationSelected.value = new Array({ name: route.query.name, OccupationId: route.query.occupation_id });\n }\n\n if (route.query.prefecture_id) {\n prefectureSelected.value = new Array({ name: route.query.name, id: route.query.prefecture_id });\n }\n\n if (route.query.industry_id) {\n industriesSelected.value = new Array({ name: route.query.name, id: route.query.industry_id });\n }\n\n if (route.query.job_feature_id) {\n jobFeatureSelected.value = new Array({ name: route.query.name, id: route.query.job_feature_id });\n }\n\n if (route.query['roots_index_form[annual_min_income_id]']) {\n minIncomeSelected.value = route.query['roots_index_form[annual_min_income_id]']\n }\n\n if (route.query['roots_index_form[annual_max_income_id]']) {\n maxIncomeSelected.value = route.query['roots_index_form[annual_max_income_id]']\n }\n\n searchWord.value = route.query.keywords\n title.value = route.query.title || getCurrentDate();\n getOccupations();\n getAnnualIncome();\n getIndustries();\n getSkills();\n getJobFeatures();\n getEmploymentTypes();\n getDesireLocation();\n search();\n}\n\nconst getDesireLocation = () => {\n if (route.query.prefectures || route.query['prefectures[]']) {\n let prefectureIds: any\n if (route.query.prefectures) {\n prefectureIds = Array.isArray(route.query.prefectures) ? route.query.prefectures : [route.query.prefectures];\n } else {\n prefectureIds = Array.isArray(route.query['prefectures[]']) ? route.query['prefectures[]'] : [route.query['prefectures[]']];\n }\n\n [... new Set(prefectureIds)].forEach(id => {\n const prefecture = props.prefectures.find(prefecture => prefecture.children.some(child => child.id.toString() == id));\n if (prefecture) {\n const prefectureChild = prefecture.children.find(child => child.id.toString() == id);\n const cities = [];\n\n if (route.query.city_ids || route.query['cities[]']) {\n let cityIds: any\n if (route.query.city_ids) {\n cityIds = Array.isArray(route.query.city_ids) ? route.query.city_ids : [route.query.city_ids];\n } else {\n cityIds = Array.isArray(route.query['cities[]']) ? route.query['cities[]'] : [route.query['cities[]']];\n }\n\n cityIds.forEach(cityId => {\n const matchingCity = [...prefectureChild.main_cities, ...prefectureChild.extra_cities].find(city => city.id.toString() == cityId);\n\n if (matchingCity) {\n cities.push(matchingCity);\n }\n });\n }\n\n valuesPrefectures.value.push({ id: prefectureChild.id, name: prefectureChild.name, cities: cities });\n prefectureSelected.value = cloneDeep(valuesPrefectures.value)\n }\n });\n }\n}\n\nconst getOccupations = () => {\n if (route.query.job_types || route.query['job_types[]']) {\n let occupationIds: any\n if (route.query.job_types) {\n occupationIds = Array.isArray(route.query.job_types) ? route.query.job_types : [route.query.job_types];\n } else {\n occupationIds = Array.isArray(route.query['job_types[]']) ? route.query['job_types[]'] : [route.query['job_types[]']];\n }\n\n occupationIds.forEach(id => {\n props.occupations.forEach(occupation => {\n let occupationChild = occupation.children.find(child => child.id.toString() == id);\n\n if (occupationChild) {\n onChooseOccupation(occupation, occupationChild)\n occupationSelected.value = cloneDeep(valuesOccupations.value);\n }\n });\n });\n }\n}\n\nconst getAnnualIncome = () => {\n const minIncomeId = route.query.min_annual_income\n const maxIncomeId = route.query.max_annual_income\n\n const minIncome = props.incomes.find(income => income.id.toString() == minIncomeId);\n const maxIncome = props.incomes.find(income => income.id.toString() == maxIncomeId);\n\n if (minIncome) {\n minIncomeSelected.value = minIncome.id\n }\n if (maxIncome) {\n maxIncomeSelected.value = maxIncome.id\n }\n}\n\nconst getIndustries = () => {\n if (route.query.industries || route.query['industries[]']) {\n let industriesId: any\n if (route.query.industries) {\n industriesId = Array.isArray(route.query.industries) ? route.query.industries : [route.query.industries];\n } else {\n industriesId = Array.isArray(route.query['industries[]']) ? route.query['industries[]'] : [route.query['industries[]']];\n }\n\n industriesId.forEach(id => {\n props.industries.forEach(industry => {\n let industryChild = industry.children.find(child => child.id.toString() == id);\n\n if (industryChild) {\n onChooseIndustry(industry, industryChild)\n industriesSelected.value = cloneDeep(valuesIndustries.value);\n }\n });\n });\n }\n}\n\nconst getSkills = () => {\n if (route.query.skills || route.query['skills[]']) {\n let skillIds: any\n if (route.query.skills) {\n skillIds = Array.isArray(route.query.skills) ? route.query.skills : [route.query.skills];\n } else {\n skillIds = Array.isArray(route.query['skills[]']) ? route.query['skills[]'] : [route.query['skills[]']];\n }\n\n skillIds.forEach(id => {\n props.skills.forEach(skill => {\n let skillChild = skill.children.find(child => child.id.toString() == id);\n\n if (skillChild) {\n onChooseSkill(skill, skillChild)\n skillSelected.value = cloneDeep(valueSkills.value);\n }\n });\n });\n }\n}\n\nconst getJobFeatures = () => {\n if (route.query.job_features || route.query['job_features[]']) {\n let jobFeatureIds: any\n if (route.query.job_features) {\n jobFeatureIds = Array.isArray(route.query.job_features) ? route.query.job_features : [route.query.job_features];\n } else {\n jobFeatureIds = Array.isArray(route.query['job_features[]']) ? route.query['job_features[]'] : [route.query['job_features[]']];\n }\n\n jobFeatureIds.forEach(id => {\n props.jobFeatures.forEach(jobFeature => {\n let jobFeatureChild = jobFeature.children.find(child => child.id.toString() == id);\n\n if (jobFeatureChild) {\n onChooseJobFeature(jobFeature, jobFeatureChild)\n jobFeatureSelected.value = cloneDeep(valueJobFeatures.value);\n }\n });\n });\n }\n}\n\nconst getEmploymentTypes = () => {\n if (route.query.employment_types || route.query['employment_types[]']) {\n let employmentTypeIds: any\n if (route.query.employment_types) {\n employmentTypeIds = Array.isArray(route.query.employment_types) ? route.query.employment_types : [route.query.employment_types];\n } else {\n employmentTypeIds = Array.isArray(route.query['employment_types[]']) ? route.query['employment_types[]'] : [route.query['employment_types[]']];\n }\n\n employmentTypeIds.forEach(id => {\n let employmentType = props.employmentTypes.find(item => item.id.toString() == id);\n\n if (employmentType) {\n employmentSelected.value.push(employmentType)\n }\n });\n }\n}\n</script>\n","<template>\n <form class=\"job-search container container-primary my-15 px-0\" @submit=\"onSubmitForSearchJob\">\n <div class=\"alert alert-success alert-dismissible fade show text-danger\" role=\"alert\"\n v-if=\"saveJobSearchResult == 'limited'\">\n 菫晏ュ倥〒縺阪k譚。莉カ縺ョ荳企剞��10莉カ�峨↓驕斐@縺ヲ縺�∪縺兔n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"alert\" aria-label=\"Close\"></button>\n </div>\n <div class=\"alert alert-success alert-dismissible fade show\" role=\"alert\" v-if=\"saveJobSearchResult == 'success'\">\n 譖エ譁ー縺梧ュ」蟶ク縺ォ螳御コ�@縺セ縺励◆縲�\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"alert\" aria-label=\"Close\"></button>\n </div>\n <div class=\"alert alert-danger alert-dismissible fade show\" role=\"alert\" v-if=\"saveJobSearchResult == 'fail'\">\n 譖エ譁ー縺御クュ譁ュ縺輔l縺セ縺励◆縲�\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"alert\" aria-label=\"Close\"></button>\n </div>\n <div class=\"bg-blue-primary d-md-flex justify-content-center d-none\">\n <p class=\"m-2 text-white\">讀懃エ「譚。莉カ</p>\n </div>\n <div class=\"search-job__body bg-white-primary mx-md-0\">\n <div class=\"d-flex justify-content-center my-2\" data-bs-toggle=\"modal\"\n data-bs-target=\"#modalListConditionSearchElement\">\n <img src=\"@/assets/images/icons/menu.svg\" class=\"me-2\" />\n <span class=\"size-12 fw-medium color-blue-primary\">菫晏ュ倥@縺滓、懃エ「譚。莉カ</span>\n </div>\n <Occupation @open=\"onOpenModalOccupation\" @remove=\"onRemoveOccupation\" :occupations=\"occupationSelected\" />\n <hr class=\"color-grey-primary opacity-100\">\n <DesiredJob @open=\"onOpenModalPrefecture\" @remove=\"onRemovePrefecture\" :prefectures=\"prefectureSelected\" />\n <hr class=\"color-grey-primary opacity-100\">\n\n <!-- annual-income -->\n\n <AnnualIncome @changeMin=\"onChangeMinIncome\" @changeMax=\"onChangeMaxIncome\" :min_income=\"minIncomeSelected\"\n :max_income=\"maxIncomeSelected\" :incomes=\"props.incomes\" />\n <hr class=\"color-grey-primary opacity-100\">\n <!-- Industry -->\n\n <Industry @open=\"onOpenModalIndustry\" @remove=\"onRemoveIndustry\" :industries=\"industriesSelected\" />\n <hr class=\"color-grey-primary opacity-100\">\n <!-- Skill -->\n\n <Skill @open=\"onOpenModalSkill\" @remove=\"onRemoveSkill\" :skills=\"skillSelected\" />\n <hr class=\"color-grey-primary opacity-100\">\n <!-- Employment_type -->\n\n <EmploymentType @select=\"onCheckEmployment\" :employments=\"employmentSelected\"\n :employmentTypes=\"props.employmentTypes\" />\n <hr class=\"color-grey-primary opacity-100\">\n\n <!-- Job features -->\n\n <JobFeature @open=\"onOpenModalJobFeature\" @remove=\"onRemoveJobFeature\" :jobFeatures=\"jobFeatureSelected\" />\n <hr class=\"color-grey-primary opacity-100\">\n\n <!-- Search word -->\n <div class=\"row justify-content-start px-3\">\n <span class=\"form-label align-self-start size-12\">繝輔Μ繝シ繝ッ繝シ繝�</span>\n <div>\n <input type=\"text\" v-model=\"searchWord\" name=\"search_word\"\n class=\"form-control me-3 size-14 bg-silver-primary input-primary\" placeholder=\"萓具シ俄雷笳銀雷\"\n v-on:keydown.enter.prevent=\"onChangeSearchWord\">\n </div>\n </div>\n <hr class=\"color-grey-primary opacity-100\">\n\n <div class=\"job-search__footer pt-2 mt-4 row pb-4r justify-content-center mb-a4\">\n <div class=\"row text-center\">\n <p class=\"size-12 fw-bold\">縺薙�譚。莉カ縺ョ豎ゆココ謨ー<span class=\"size-20 px-2\"><vue3-autocounter ref='counter' :startAmount='0'\n :endAmount='resultSearch' :duration='1' :autoinit='true' @finished='' /></span><span>莉カ</span></p>\n </div>\n <div class=\"d-flex justify-content-center\">\n <button type=\"button\"\n class=\"justify-content-center d-flex align-items-center h-48x w-285x btn btn-primary py-3 size-12 col-12 col-md-9\"\n @click=\"() => onChangeResultSearch(true)\" data-bs-dismiss=\"modal\">\n 縺薙�譚。莉カ縺ァ讀懃エ「\n </button>\n </div>\n <div class=\"d-flex justify-content-center mt-3\">\n <div id=\"save-job-available\" :class=\"totalConditionSearch < 10 ? 'd-block' : 'd-none'\">\n <button type=\"button\"\n class=\"justify-content-center d-flex align-items-center h-48x w-285x btn btn-outline-secondary rounded-24 py-3 size-12 col-12 col-md-9\"\n @click=\"onOpenModalSaveJobCondition\">\n 縺薙�譚。莉カ繧剃ソ晏ュ禄n </button>\n </div>\n <div id=\"save-job-unavailable\" :class=\"totalConditionSearch < 10 ? 'd-none' : 'd-block'\">\n <button type=\"button\"\n class=\"justify-content-center d-flex align-items-center h-48x w-285x btn btn-outline-secondary rounded-24 py-3 size-12 col-12 col-md-9 disabled\">\n 縺薙�譚。莉カ繧剃ソ晏ュ禄n </button>\n <p class=\"text-danger size-12 text-center\">菫晏ュ倥〒縺阪k譚。莉カ縺ョ荳企剞��10莉カ�峨↓驕斐@縺ヲ縺�∪縺�</p>\n </div>\n </div>\n\n <div class=\"text-center mt-2 mw-100 h-46x d-flex justify-content-center align-items-center\">\n <button type=\"button\" class=\"btn btn-link color-blue-primary text-decoration-none size-12\"\n @click=\"onClearConditionSearch\">\n <img src=\"@/assets/images/icons/ic-remove.svg\" alt=\"Group icon\" class=\"mb-2x\">\n 譚。莉カ繧偵け繝ェ繧「\n </button>\n </div>\n </div>\n </div>\n </form>\n\n <ModalBase isShowAddButton ref=\"modalSaveJobConditionSP\" element=\"modalSaveJobConditionElementSP\">\n <template #body>\n <div class=\"d-flex justify-content-center p-0\">\n <p class=\"m-2 fw-bold size-16\">讀懃エ「譚。莉カ繧剃ソ晏ュ�</p>\n </div>\n <div class=\"row mx-3 justify-content-start px-3\">\n <span class=\"form-label align-self-start size-12\">讀懃エ「譚。莉カ蜷�</span>\n <input type=\"text\" v-model=\"title\" name=\"title\"\n class=\"form-control size-14 border-0 bg-silver-primary input-primary\">\n <div class=\"d-flex justify-content-end counter text-black-50 size-10 mt-2\">\n 譁�ュ玲焚�� {{ title?.length }}\n </div>\n </div>\n <div class=\"h-48x d-flex justify-content-center my-4\">\n <button type=\"button\"\n class=\"align-items-center justify-content-center d-flex h-48x w-285x btn btn-primary rounded-24 py-3 size-12\"\n @click=\"onSubmitForSearchJob\" data-bs-dismiss=\"modal\">\n 縺薙�譚。莉カ繧剃ソ晏ュ禄n </button>\n </div>\n </template>\n </ModalBase>\n\n <ModalBase :data=\"props.occupations.length\" is-show-scroll-button class=\"bg-red\" ref=\"modalOccupationsSP\"\n element=\"modalOccupationsElementSP\" title=\"閨キ遞ョ繧帝∈縺カ\" @addItems=\"addOccupations\">\n <template #body>\n <div id=\"occupation-accordion\" class=\"accordion accordion-primary\">\n <div class=\"accordion-item border-top-0 rounded-0\" v-for=\"occupation in props.occupations\"\n :key=\"occupation.id\">\n <h4 class=\"accordion-header px-3 py-2\">\n <span class=\"text-decoration-none size-14 bg-white pe-1 d-flex align-items-center w-100\">\n <input \n type=\"checkbox\" \n class=\"form-check-input collapsed checkbox-primary-input w-1d5 h-1d5 mt-0\"\n :id=\"`occupation-item-input-${occupation.id}`\"\n @change=\"onChooseOccupationCategory(occupation)\"\n :checked=\"valuesOccupations.some(item => item.id == occupation.id)\"\n >\n <label class=\"form-check-label size-14 ms-3\" @click=\"onChooseOccupationCategory(occupation)\">\n {{ occupation.name }}\n </label>\n <div class=\"accordion-button collapsed d-contents\"\n data-bs-toggle=\"collapse\"\n :data-bs-target=\"`#occupation-item-${occupation.id}-search-sp`\"\n aria-expanded=\"true\"\n :aria-controls=\"`occupation-item-${occupation.id}-search-sp`\"\n ></div>\n </span>\n </h4>\n <div \n class=\"row mx-2 my-2 pe-0 accordion-collapse collapse\" \n :id=\"`occupation-item-${occupation.id}-search-sp`\"\n >\n <div \n class=\"accordion-body ps-4 pe-3 py-2 border-bottom\" \n :class=\"{ 'border-top': index == 0 }\"\n :aria-labelledby=\"`occupation-${occupation.id}`\"\n v-for=\"(children, index) in occupation.children\"\n :key=\"children.id\"\n >\n <input type=\"checkbox\" class=\"form-check-input checkbox-primary-input w-1d5 h-1d5\"\n :id=\"`occupation-item-input-${children.id}`\"\n :checked=\"valuesOccupations.some(item => item.children.some(c => c.id == children.id))\"\n @click=\"onChooseOccupation(occupation, children)\">\n <label class=\"form-check-label size-14 ms-3\" :for=\"`occupation-item-input-${children.id}`\"\n @click=\"onChooseOccupation(occupation, children)\">\n {{ children.name }}\n </label>\n </div>\n </div>\n </div>\n </div>\n </template>\n </ModalBase>\n\n <ModalBase :data=\"props.prefectures.length\" is-show-scroll-button ref=\"modalPrefectureSP\"\n element=\"modalPrefectureElementSP\" title=\"蜍、蜍吝慍繧帝∈縺カ\" @addItems=\"addPrefectures\">\n <template #body>\n <div id=\"prefecture-accordion\" class=\"accordion accordion-primary\">\n <div class=\"accordion-item\" v-for=\"prefecture in props.prefectures\">\n <h4 :id=\"`prefecture-${prefecture.id}`\" class=\"accordion-header\">\n <a class=\"collapsed rounded-0 bg-white accordion-button ps-3 size-14 text-decoration-none\"\n data-bs-toggle=\"collapse\" :data-bs-target=\"`#prefecture-item-${prefecture.id}`\" aria-expanded=\"true\"\n :aria-controls=\"`prefecture-item-${prefecture.id}`\">\n {{ prefecture.name }}\n </a>\n </h4>\n <div :id=\"`prefecture-item-${prefecture.id}`\" class=\"accordion-collapse collapse\">\n <div class=\"accordion-body p-0\">\n <div class=\"accordion accordion-primary\">\n <div class=\"accordion-item border-top-0 rounded-0\" v-for=\"children in prefecture.children\"\n :key=\"children.id\">\n <h4 class=\"accordion-header px-3 py-2\">\n <span class=\"text-decoration-none size-14 bg-white ps-3 pe-1 d-flex align-items-center w-100\">\n <input type=\"checkbox\" class=\"form-check-input collapsed checkbox-primary-input w-1d5 h-1d5 mt-0\"\n :id=\"`prefecture-item-input-${prefecture.id}-children-${children.id}`\"\n @change=\"onChangePrefecture(children)\"\n :checked=\"valuesPrefectures.some(item => item.id == children.id)\">\n <label class=\"form-check-label size-14 ms-3\" @click=\"onChangePrefecture(children)\">\n {{ children.name }}\n </label>\n </span>\n </h4>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </template>\n </ModalBase>\n\n <ModalBase is-show-scroll-button ref=\"modalIndustrySP\" element=\"modalIndustryElementSP\" title=\"讌ュ遞ョ繧帝∈縺カ\"\n @addItems=\"addIndustries\">\n <template #body>\n <div id=\"industry-accordion\" class=\"accordion accordion-primary\">\n <div class=\"accordion-item border-top-0 rounded-0\" v-for=\"industry in props.industries\"\n :key=\"industry.id\">\n <h4 class=\"accordion-header px-3 py-2\">\n <span class=\"text-decoration-none size-14 bg-white pe-1 d-flex align-items-center w-100\">\n <input type=\"checkbox\" class=\"form-check-input collapsed checkbox-primary-input w-1d5 h-1d5 mt-0\"\n :id=\"`industry-item-input-${industry.id}`\"\n @change=\"onChooseIndustryCategory(industry)\"\n :checked=\"valuesIndustries.some(item => item.id == industry.id)\">\n <label class=\"form-check-label size-14 ms-3\" @click=\"onChooseIndustryCategory(industry)\">\n {{ industry.name }}\n </label>\n <div class=\"accordion-button collapsed d-contents\" data-bs-toggle=\"collapse\"\n :data-bs-target=\"`#industry-item-${industry.id}-search-sp`\"\n aria-expanded=\"true\"\n :aria-controls=\"`industry-item-${industry.id}-search-sp`\"></div>\n </span>\n </h4>\n <div :id=\"`industry-item-${industry.id}-search-sp`\"\n class=\"accordion-body p-0 collapse\">\n <div class=\"ps-4 pe-3 py-2 border-bottom\" :class=\"{ 'border-top': index == 0 }\"\n v-for=\"(children, index) in industry.children\">\n <input type=\"checkbox\" class=\"form-check-input checkbox-primary-input w-1d5 h-1d5\"\n :id=\"`industry-item-input-${children.id}`\"\n :checked=\"valuesIndustries.some(item => item.children.some(c => c.id == children.id))\"\n @click=\"onChooseIndustry(industry, children)\">\n <label class=\"form-check-label size-14 ms-3\" :for=\"`industry-item-input-${children.id}`\">\n {{ children.name }}\n </label>\n </div>\n </div>\n </div>\n </div>\n </template>\n </ModalBase>\n\n <ModalBase is-show-scroll-button ref=\"modalSkillsSP\" element=\"modalSkillsElementSP\" title=\"繧ケ繧ュ繝ォ繧帝∈縺カ\"\n @addItems=\"addSkills\">\n <template #body>\n <div id=\"skill-accordion\" class=\"accordion accordion-primary\">\n <div class=\"accordion-item border-top-0 rounded-0\" v-for=\"skill in props.skills\"\n :key=\"skill.id\">\n <h4 class=\"accordion-header px-3 py-2\">\n <span class=\"text-decoration-none size-14 bg-white pe-1 d-flex align-items-center w-100\">\n <input type=\"checkbox\" class=\"form-check-input collapsed checkbox-primary-input w-1d5 h-1d5 mt-0\"\n :id=\"`skill-item-input-${skill.id}`\"\n @change=\"onChooseSkillCategory(skill)\"\n :checked=\"valueSkills.some(item => item.id == skill.id)\">\n <label class=\"form-check-label size-14 ms-3\" @click=\"onChooseSkillCategory(skill)\">\n {{ skill.name }}\n </label>\n <div class=\"accordion-button collapsed d-contents\" data-bs-toggle=\"collapse\"\n :data-bs-target=\"`#skill-item-${skill.id}-search-sp`\"\n aria-expanded=\"true\"\n :aria-controls=\"`skill-item-${skill.id}-search-sp`\"></div>\n </span>\n </h4>\n <div :id=\"`skill-item-${skill.id}-search-sp`\"\n class=\"accordion-body p-0 collapse\">\n <div class=\"ps-4 pe-3 py-2 border-bottom\" :class=\"{ 'border-top': index == 0 }\"\n v-for=\"(children, index) in skill.children\">\n <input type=\"checkbox\" class=\"form-check-input checkbox-primary-input w-1d5 h-1d5\"\n :id=\"`skill-item-input-${children.id}`\"\n :checked=\"valueSkills.some(item => item.children.some(c => c.id == children.id))\"\n @click=\"onChooseSkill(skill, children)\">\n <label class=\"form-check-label size-14 ms-3\" :for=\"`skill-item-input-${children.id}`\">\n {{ children.name }}\n </label>\n </div>\n </div>\n </div>\n </div>\n </template>\n </ModalBase>\n\n <ModalBase is-show-scroll-button ref=\"modalJobFeaturesSP\" element=\"modalJobFeaturesElementSP\" title=\"豎ゆココ縺ョ迚ケ蠕エ繧帝∈縺カ\"\n @addItems=\"addJobFeature\">\n <template #body>\n <div id=\"job-features-accordion\" class=\"accordion accordion-primary\">\n <div class=\"accordion-item border-top-0 rounded-0\" v-for=\"jobFeature in props.jobFeatures\"\n :key=\"jobFeature.id\">\n <h4 class=\"accordion-header px-3 py-2\">\n <span class=\"text-decoration-none size-14 bg-white pe-1 d-flex align-items-center w-100\">\n <input type=\"checkbox\" class=\"form-check-input collapsed checkbox-primary-input w-1d5 h-1d5 mt-0\"\n :id=\"`job-features-item-input-${jobFeature.id}`\"\n @change=\"onChooseJobFeatureCategory(jobFeature)\"\n :checked=\"valueJobFeatures.some(item => item.id == jobFeature.id)\">\n <label class=\"form-check-label size-14 ms-3\" @click=\"onChooseJobFeatureCategory(jobFeature)\">\n {{ jobFeature.name }}\n </label>\n <div class=\"accordion-button collapsed d-contents\" data-bs-toggle=\"collapse\"\n :data-bs-target=\"`#job-features-item-${jobFeature.id}-search-sp`\"\n aria-expanded=\"true\"\n :aria-controls=\"`job-features-item-${jobFeature.id}-search-sp`\"></div>\n </span>\n </h4>\n <div :id=\"`job-features-item-${jobFeature.id}-search-sp`\"\n class=\"accordion-body p-0 collapse\">\n <div class=\"ps-4 pe-3 py-2 border-bottom\" :class=\"{ 'border-top': index == 0 }\"\n v-for=\"(children, index) in jobFeature.children\">\n <input type=\"checkbox\" class=\"form-check-input checkbox-primary-input w-1d5 h-1d5\"\n :id=\"`job-features-item-input-${children.id}`\"\n :checked=\"valueJobFeatures.some(item => item.children.some(c => c.id == children.id))\"\n @click=\"onChooseJobFeature(jobFeature, children)\">\n <label class=\"form-check-label size-14 ms-3\" :for=\"`job-features-item-input-${children.id}`\"\n @click=\"onChooseJobFeature(jobFeature, children)\">\n {{ children.name }}\n </label>\n </div>\n </div>\n </div>\n </div>\n </template>\n </ModalBase>\n</template>\n\n<script setup lang=\"ts\">\nimport _ from 'lodash';\nimport { onMounted, ref, watch, nextTick } from \"vue\";\nimport { Collapse } from 'bootstrap';\nimport ModalBase from \"@/components/common/ModalBase/index.vue\";\nimport Occupation from '@/components/JobSearch/Occupation.vue';\nimport DesiredJob from '@/components/JobSearch/DesiredJob.vue';\nimport AnnualIncome from '@/components/JobSearch/AnnualIncome.vue';\nimport EmploymentType from '@/components/JobSearch/EmploymentType.vue'\nimport Industry from '@/components/JobSearch/Industry.vue';\nimport Skill from '@/components/JobSearch/Skill.vue';\nimport JobFeature from '@/components/JobSearch/JobFeature.vue'\nimport { OccupationThirdary } from '@/types/models/occupation';\nimport { PrefectureFourth, PrefecturePrimary, PrefectureSecondary } from '@/types/models/prefecture';\nimport { saveJobSearchCondition } from '@/apis/candidate';\nimport { IndustryType } from '@/types/models/industryType';\nimport { SkillsType } from '@/types/models/skill';\nimport { EmploymentTypePrimary } from '@/types/models/employmentType';\nimport { JobFeaturePrimary, JobFeatureSecondary } from '@/types/models/jobFeatureType'\nimport { IncomePrimary } from '@/types/models/income';\nimport { cloneDeep } from 'lodash'\nimport Vue3Autocounter from 'vue3-autocounter';\nimport { CityPrimary } from '@/types/models/city';\nimport { useRoute } from 'vue-router';\nimport { CANDIDATE_LOGIN_PATH } from '@/constant/routers/path';\nimport { getJobSearch, getListConditionJobSearch } from '@/apis/job.api';\nimport { Modal } from 'bootstrap';\nimport { SEARCH_PATH } from \"@/constant/routers/path\";\nimport router from '@/routers';\n\nconst valuesPrefectures = ref<PrefecturePrimary[]>([]);\nconst valuesOccupations = ref<OccupationThirdary[]>([]);\nconst valuesIndustries = ref<IndustryType[]>([]);\nconst valueSkills = ref<SkillsType[]>([]);\nconst valueJobFeatures = ref<JobFeaturePrimary[]>([]);\n\nconst searchWord = ref<string | null>(null);\nconst title = ref<string | null>(null);\n\nlet prefectureSelected = ref<PrefectureFourth[]>([]);\nlet occupationSelected = ref<OccupationThirdary[]>([]);\nlet industriesSelected = ref<IndustryType[]>([]);\nlet skillSelected = ref<SkillsType[]>([]);\nlet jobFeatureSelected = ref<JobFeaturePrimary[]>([]);\nlet employmentSelected = ref<EmploymentTypePrimary[]>([]);\nlet minIncomeSelected = ref<IncomePrimary>();\nlet maxIncomeSelected = ref<IncomePrimary>();\n\nconst modalPrefectureSP = ref<InstanceType<typeof ModalBase> | null>(null);\nconst modalOccupationsSP = ref<InstanceType<typeof ModalBase> | null>(null);\nconst modalIndustrySP = ref<InstanceType<typeof ModalBase> | null>(null);\nconst modalSkillsSP = ref<InstanceType<typeof ModalBase> | null>(null);\nconst modalJobFeaturesSP = ref<InstanceType<typeof ModalBase> | null>(null);\nconst modalSaveJobConditionSP = ref<InstanceType<typeof ModalBase> | null>(null);\n\nconst route = useRoute();\nlet resultSearch = ref(0);\nconst listConditionSearch = ref();\nconst totalConditionSearch = ref<number>(0);\nconst saveJobSearchResult = ref<string | null>(null);\n\nonMounted(async () => {\n title.value = getCurrentDate();\n await getListConditionSearch();\n await getParamSearch();\n onChangeResultSearch(false);\n});\n\nwatch(() => route.params, async () => {\n title.value = getCurrentDate();\n await getListConditionSearch();\n await getParamSearch();\n});\n\nconst getCurrentDate = () => {\n const currentDate = new Date();\n const month = String(currentDate.getMonth() + 1).padStart(2, '0');\n const day = String(currentDate.getDate()).padStart(2, '0')\n const time = String(currentDate.getHours()).padStart(2, '0') + ':' + String(currentDate.getMinutes()).padStart(2, '0')\n + ':' + String(currentDate.getSeconds()).padStart(2, '0')\n\n return currentDate.getFullYear() + '/' + month + '/' + day + ' ' + time\n}\n\nconst onChangeSearchWord = async () => {\n search();\n}\n\nconst onOpenModalSaveJobCondition = () => {\n modalSaveJobConditionSP?.value?.onOpen()\n}\n\nconst onOpenModalOccupation = () => {\n modalOccupationsSP?.value?.onOpen()\n}\n\nconst addOccupations = () => {\n occupationSelected.value = cloneDeep(valuesOccupations.value)\n search();\n}\n\nconst onChooseOccupationCategory = (occupationCategory: OccupationThirdary) => {\n const isCurrentlySelected = valuesOccupations.value.some(item => item.id === occupationCategory.id);\n \n if (!isCurrentlySelected) {\n const newOccupation = {\n id: occupationCategory.id,\n name: occupationCategory.name,\n children: []\n };\n\n occupationCategory.children.forEach(child => {\n newOccupation.children.push({\n id: child.id,\n name: child.name\n });\n });\n\n valuesOccupations.value.push(newOccupation);\n } else {\n const index = valuesOccupations.value.findIndex(item => item.id === occupationCategory.id);\n if (index !== -1) {\n valuesOccupations.value.splice(index, 1);\n }\n }\n\n const accordionId = `occupation-item-${occupationCategory.id}-search-sp`;\n const accordionElement = document.getElementById(accordionId);\n if (accordionElement) {\n const collapse = Collapse.getInstance(accordionElement) || new Collapse(accordionElement);\n if (!accordionElement.classList.contains('show')) {\n collapse.show();\n }\n }\n}\n\nconst onChooseOccupation = (occupationCategory: OccupationThirdary, occupation: OccupationThirdary) => {\n if (_.find(valuesOccupations.value, { id: occupationCategory.id })) {\n selectedOccupation(occupationCategory, occupation);\n } else {\n valuesOccupations.value.push({ id: occupationCategory.id, name: occupationCategory.name, children: [] });\n selectedOccupation(occupationCategory, occupation);\n }\n}\n\nconst selectedOccupation = (occupationCategory: OccupationThirdary, occupation: OccupationThirdary) => {\n let occupationCategoryEntry = _.find(valuesOccupations.value, { id: occupationCategory.id });\n if (occupationCategoryEntry) {\n if (_.find(occupationCategoryEntry.children, { id: occupation.id })) {\n occupationCategoryEntry.children = _.reject(occupationCategoryEntry.children, { id: occupation.id });\n } else {\n occupationCategoryEntry.children.push(occupation);\n }\n\n if (occupationCategoryEntry.children.length === 0) {\n valuesOccupations.value = _.reject(valuesOccupations.value, { id: occupationCategory.id });\n\n _.forEach(props.occupations, item => {\n if (item.id === occupationCategory.id) {\n item.selected = false;\n }\n });\n }\n }\n};\n\nconst onRemoveOccupation = (occupationId: number) => {\n valuesOccupations.value = valuesOccupations.value\n .map(item => ({ ...item, children: item.children.filter(child => child.id !== occupationId) }))\n .filter(item => item.children.length > 0)\n occupationSelected.value = cloneDeep(valuesOccupations.value)\n search();\n}\n\nconst onOpenModalPrefecture = () => {\n modalPrefectureSP?.value?.onOpen()\n}\n\nconst onChangePrefecture = (prefecture: PrefectureSecondary) => {\n let checked = false\n if (valuesPrefectures.value.find(item => item.id == prefecture.id)) {\n valuesPrefectures.value = valuesPrefectures.value.filter(item => prefecture.id !== item.id)\n } else {\n checked = true\n valuesPrefectures.value.push({ id: prefecture.id, name: prefecture.name, cities: [] })\n }\n\n props.prefectures.map(item => {\n item.children?.map(child => {\n if (child.id == prefecture.id) {\n child.selected = checked\n }\n })\n })\n}\n\nconst onChangeCity = (prefecture: PrefectureSecondary, city: CityPrimary) => {\n if (_.find(valuesPrefectures.value, { id: prefecture.id })) {\n selectedCity(prefecture, city);\n } else {\n valuesPrefectures.value.push({ id: prefecture.id, name: prefecture.name, cities: [] });\n selectedCity(prefecture, city);\n }\n}\n\nconst selectedCity = (prefecture: PrefectureSecondary, city: CityPrimary) => {\n let prefectureEntry = _.find(valuesPrefectures.value, { id: prefecture.id });\n if (prefectureEntry) {\n if (_.find(prefectureEntry.cities, { id: city.id })) {\n prefectureEntry.cities = _.reject(prefectureEntry.cities, { id: city.id });\n } else {\n prefectureEntry.cities.push(city);\n }\n\n if (prefectureEntry.cities.length === 0) {\n valuesPrefectures.value = _.reject(valuesPrefectures.value, { id: prefecture.id });\n\n _.forEach(props.prefectures, item => {\n _.forEach(item.children, child => {\n if (child.id === prefecture.id) {\n child.selected = false;\n }\n });\n });\n }\n }\n}\n\nconst onRemovePrefecture = (prefectureId: number) => {\n valuesPrefectures.value = valuesPrefectures.value.filter((item) => { return item.id != prefectureId });\n prefectureSelected.value = cloneDeep(valuesPrefectures.value)\n search();\n}\n\nconst addPrefectures = () => {\n prefectureSelected.value = cloneDeep(valuesPrefectures.value)\n search();\n}\n\nconst onChangeMinIncome = (minIncome: any) => {\n minIncomeSelected.value = minIncome.value\n search();\n}\n\nconst onChangeMaxIncome = (maxIncome: any) => {\n maxIncomeSelected.value = maxIncome.value\n search();\n}\n\nconst onOpenModalIndustry = () => {\n modalIndustrySP?.value?.onOpen()\n}\n\nconst onChooseIndustryCategory = (industryCategory: IndustryType) => {\n const isCurrentlySelected = valuesIndustries.value.some(item => item.id === industryCategory.id);\n \n if (!isCurrentlySelected) {\n const newIndustry = {\n id: industryCategory.id,\n name: industryCategory.name,\n children: []\n };\n \n industryCategory.children.forEach(child => {\n newIndustry.children.push({\n id: child.id,\n name: child.name\n });\n });\n \n valuesIndustries.value.push(newIndustry);\n } else {\n const index = valuesIndustries.value.findIndex(item => item.id === industryCategory.id);\n if (index !== -1) {\n valuesIndustries.value.splice(index, 1);\n }\n }\n \n const accordionId = `industry-item-${industryCategory.id}-search-sp`;\n const accordionElement = document.getElementById(accordionId);\n if (accordionElement) {\n const collapse = Collapse.getInstance(accordionElement) || new Collapse(accordionElement);\n if (!accordionElement.classList.contains('show')) {\n collapse.show();\n }\n } \n}\n\nconst onChooseIndustry = (industryCategory: IndustryType, industry: IndustryType) => {\n if (_.find(valuesIndustries.value, { id: industryCategory.id })) {\n selectedIndustry(industryCategory, industry);\n } else {\n valuesIndustries.value.push({ id: industryCategory.id, name: industryCategory.name, children: [] });\n selectedIndustry(industryCategory, industry);\n }\n}\n\nconst selectedIndustry = (industryCategory: IndustryType, industry: IndustryType) => {\n let industryCategoryEntry = _.find(valuesIndustries.value, { id: industryCategory.id });\n if (industryCategoryEntry) {\n if (_.find(industryCategoryEntry.children, { id: industry.id })) {\n industryCategoryEntry.children = _.reject(industryCategoryEntry.children, { id: industry.id });\n } else {\n industryCategoryEntry.children.push(industry);\n }\n\n if (industryCategoryEntry.children.length === 0) {\n valuesIndustries.value = _.reject(valuesIndustries.value, { id: industryCategory.id });\n\n _.forEach(props.industries, item => {\n if (item.id === industryCategory.id) {\n item.selected = false;\n }\n });\n }\n }\n};\n\nconst onRemoveIndustry = (industryId: number) => {\n valuesIndustries.value = valuesIndustries.value\n .map(item => ({ ...item, children: item.children.filter(child => child.id !== industryId) }))\n .filter(item => item.children.length > 0)\n industriesSelected.value = cloneDeep(valuesIndustries.value)\n search();\n}\n\nconst addIndustries = () => {\n industriesSelected.value = cloneDeep(valuesIndustries.value)\n search();\n}\n\nconst onOpenModalSkill = () => {\n modalSkillsSP?.value?.onOpen();\n}\n\nconst onChooseSkillCategory = (skillCategory: SkillsType) => { \n const isCurrentlySelected = valueSkills.value.some(item => item.id === skillCategory.id);\n \n if (!isCurrentlySelected) {\n const newSkill = {\n id: skillCategory.id,\n name: skillCategory.name,\n children: []\n };\n \n skillCategory.children.forEach(child => {\n newSkill.children.push({\n id: child.id,\n name: child.name\n });\n });\n \n valueSkills.value.push(newSkill);\n } else {\n const index = valueSkills.value.findIndex(item => item.id === skillCategory.id);\n if (index !== -1) {\n valueSkills.value.splice(index, 1);\n }\n }\n \n const accordionId = `skill-item-${skillCategory.id}-search-sp`;\n const accordionElement = document.getElementById(accordionId);\n if (accordionElement) {\n const collapse = Collapse.getInstance(accordionElement) || new Collapse(accordionElement);\n if (!accordionElement.classList.contains('show')) {\n collapse.show();\n }\n } \n}\n\nconst onChooseSkill = (skillCategory: SkillsType, skill: SkillsType) => {\n if (_.find(valueSkills.value, { id: skillCategory.id })) {\n selectedSkill(skillCategory, skill);\n } else {\n valueSkills.value.push({ id: skillCategory.id, name: skillCategory.name, children: [] });\n selectedSkill(skillCategory, skill);\n }\n}\n\nconst selectedSkill = (skillCategory: SkillsType, skill: SkillsType) => {\n let skillCategoryEntry = _.find(valueSkills.value, { id: skillCategory.id });\n if (skillCategoryEntry) {\n if (_.find(skillCategoryEntry.children, { id: skill.id })) {\n skillCategoryEntry.children = _.reject(skillCategoryEntry.children, { id: skill.id });\n } else {\n skillCategoryEntry.children.push(skill);\n }\n\n if (skillCategoryEntry.children.length === 0) {\n valueSkills.value = _.reject(valueSkills.value, { id: skillCategory.id });\n\n _.forEach(props.skills, item => {\n if (item.id === skillCategory.id) {\n item.selected = false;\n }\n });\n }\n }\n};\n\nconst onRemoveSkill = (skillId: number) => {\n valueSkills.value = valueSkills.value\n .map(item => ({ ...item, children: item.children.filter(child => child.id !== skillId) }))\n .filter(item => item.children.length > 0)\n skillSelected.value = cloneDeep(valueSkills.value)\n search();\n}\n\nconst addSkills = () => {\n skillSelected.value = cloneDeep(valueSkills.value);\n search();\n}\n\nconst onCheckEmployment = (employment: any) => {\n const employmentType = employmentSelected.value.find((item) => item.id === employment.id)\n if (!employmentType) {\n employmentSelected.value.push(employment);\n } else {\n employmentSelected.value = employmentSelected.value.filter((item) => { return item.id != employment.id })\n }\n search();\n}\n\nconst onOpenModalJobFeature = () => {\n modalJobFeaturesSP?.value?.onOpen();\n}\n\nconst onChooseJobFeatureCategory = (jobFeatureCategory: JobFeaturePrimary) => {\n const isCurrentlySelected = valueJobFeatures.value.some(item => item.id === jobFeatureCategory.id);\n \n if (!isCurrentlySelected) {\n const newJobFeature = {\n id: jobFeatureCategory.id,\n name: jobFeatureCategory.name,\n children: []\n };\n \n jobFeatureCategory.children.forEach(child => {\n newJobFeature.children.push({\n id: child.id,\n name: child.name\n });\n });\n \n valueJobFeatures.value.push(newJobFeature);\n } else {\n const index = valueJobFeatures.value.findIndex(item => item.id === jobFeatureCategory.id);\n if (index !== -1) {\n valueJobFeatures.value.splice(index, 1);\n }\n }\n \n const accordionId = `job-features-item-${jobFeatureCategory.id}-search-sp`;\n const accordionElement = document.getElementById(accordionId);\n if (accordionElement) {\n const collapse = Collapse.getInstance(accordionElement) || new Collapse(accordionElement);\n if (!accordionElement.classList.contains('show')) {\n collapse.show();\n }\n } \n}\n\nconst onChooseJobFeature = (jobFeatureCategory: JobFeaturePrimary, jobFeature: JobFeatureSecondary) => {\n if (_.find(valueJobFeatures.value, { id: jobFeatureCategory.id })) {\n selectedJobFeature(jobFeatureCategory, jobFeature);\n } else {\n valueJobFeatures.value.push({ id: jobFeatureCategory.id, name: jobFeatureCategory.name, children: [] });\n selectedJobFeature(jobFeatureCategory, jobFeature);\n }\n}\n\nconst selectedJobFeature = (jobFeatureCategory: JobFeaturePrimary, jobFeature: JobFeatureSecondary) => {\n let jobFeatureCategoryEntry = _.find(valueJobFeatures.value, { id: jobFeatureCategory.id });\n if (jobFeatureCategoryEntry) {\n if (_.find(jobFeatureCategoryEntry.children, { id: jobFeature.id })) {\n jobFeatureCategoryEntry.children = _.reject(jobFeatureCategoryEntry.children, { id: jobFeature.id });\n } else {\n jobFeatureCategoryEntry.children.push(jobFeature);\n }\n\n if (jobFeatureCategoryEntry.children.length === 0) {\n valueJobFeatures.value = _.reject(valueJobFeatures.value, { id: jobFeatureCategory.id });\n\n _.forEach(props.jobFeatures, item => {\n if (item.id === jobFeatureCategory.id) {\n item.selected = false;\n }\n });\n }\n }\n};\n\nconst onRemoveJobFeature = (id: number) => {\n valueJobFeatures.value = valueJobFeatures.value\n .map(item => ({ ...item, children: item.children.filter(child => child.id !== id) }))\n .filter(item => item.children.length > 0)\n jobFeatureSelected.value = cloneDeep(valueJobFeatures.value)\n search();\n}\n\nconst addJobFeature = () => {\n jobFeatureSelected.value = cloneDeep(valueJobFeatures.value)\n search();\n}\n\nconst initialValuesConditionSearch = () => {\n searchWord.value = '';\n prefectureSelected.value = [];\n valuesPrefectures.value = [];\n occupationSelected.value = [];\n valuesOccupations.value = [];\n industriesSelected.value = [];\n valuesIndustries.value = [];\n skillSelected.value = [];\n valueSkills.value = [];\n jobFeatureSelected.value = [];\n valueJobFeatures.value = [];\n employmentSelected.value = [];\n minIncomeSelected.value = undefined;\n maxIncomeSelected.value = undefined;\n}\n\nconst onClearConditionSearch = () => {\n initialValuesConditionSearch();\n search();\n}\n\nconst openModalListJobCondition = async () => {\n await nextTick();\n const listConditionSearchElement = document.getElementById('modalListConditionSearchElement');\n if (listConditionSearchElement) {\n const modal = new Modal(<HTMLElement>listConditionSearchElement);\n modal.show();\n }\n}\n\nconst onChangeResultSearch = async (initPage: boolean) => {\n const data = {\n keywords: searchWord.value,\n job_types: occupationSelected.value.flatMap((item) => item.children.map((c) => c.id)),\n prefectures: prefectureSelected.value.map((item) => item.id),\n min_annual_income: minIncomeSelected.value,\n max_annual_income: maxIncomeSelected.value,\n industries: industriesSelected.value.flatMap((item) => item.children.map((c) => c.id)),\n skills: skillSelected.value.flatMap((item) => item.children.map((c) => c.id)),\n employment_types: employmentSelected.value.map((item) => item.id),\n job_features: jobFeatureSelected.value.flatMap((item) => item.children.map((c) => c.id)),\n sort_by: props.sort,\n page: initPage ? undefined : Math.max(Number(route.query.page) || 1, 1)\n }\n const response = await getJobSearch(data)\n resultSearch.value = response.data.pagy.count\n emit(\"searchJob\", response, data);\n}\n\nconst emit = defineEmits(['searchJob', 'createJobCondition']);\n\nconst props = defineProps({\n prefectures: {\n type: Array as unknown as () => any,\n required: false\n },\n occupations: {\n type: Array as unknown as () => any,\n required: false\n },\n incomes: {\n type: Array as unknown as () => any,\n required: false\n },\n industries: {\n type: Array as unknown as () => any,\n required: false\n },\n skills: {\n type: Array as unknown as () => any,\n required: false\n },\n jobFeatures: {\n type: Array as unknown as () => any,\n required: false\n },\n employmentTypes: {\n type: Array as unknown as () => any,\n required: false\n },\n sort: {\n type: String as unknown as () => any,\n required: false\n },\n})\n\nconst search = async () => {\n const data = {\n keywords: searchWord.value,\n job_types: occupationSelected.value.flatMap((item) => item.children.map((c) => c.id)),\n prefectures: prefectureSelected.value.map((item) => item.id),\n min_annual_income: minIncomeSelected.value,\n max_annual_income: maxIncomeSelected.value,\n industries: industriesSelected.value.flatMap((item) => item.children.map((c) => c.id)),\n skills: skillSelected.value.flatMap((item) => item.children.map((c) => c.id)),\n employment_types: employmentSelected.value.map((item) => item.id),\n job_features: jobFeatureSelected.value.flatMap((item) => item.children.map((c) => c.id)),\n sort_by: props.sort\n }\n\n const response = await getJobSearch(data);\n resultSearch.value = response.data.pagy.count;\n const page = Math.max(Number(route.query.page) || 1, 1);\n const paramsData = {\n keywords: searchWord.value || undefined,\n job_types: occupationSelected.value.flatMap((item) => item.children.map((c) => c.id)),\n prefectures: prefectureSelected.value.map(item => item.id),\n city_ids: prefectureSelected.value.flatMap(item => item.cities.map(({ id }) => id)),\n min_annual_income: minIncomeSelected.value,\n max_annual_income: maxIncomeSelected.value,\n industries: industriesSelected.value?.flatMap((item) => item.children.map((c) => c.id)),\n skills: skillSelected.value?.flatMap((item) => item.children.map((c) => c.id)),\n employment_types: employmentSelected.value?.map(item => item.id),\n job_features: jobFeatureSelected.value?.flatMap((item) => item.children.map((c) => c.id)),\n direct: true,\n page: page === 1 ? undefined : page\n }\n if (window.scrollY > 0) window.scrollTo(0, 0)\n router.push({ path: SEARCH_PATH, query: paramsData });\n}\n\nconst getListConditionSearch = async () => {\n const response = await getListConditionJobSearch()\n if (response.status == 200 && response?.data?.job_search_conditions) {\n listConditionSearch.value = response?.data?.job_search_conditions.filter(item => item.service_type_flag != true)\n totalConditionSearch.value = listConditionSearch.value.length || 0\n }\n}\n\nconst onSubmitForSearchJob = async () => {\n await getListConditionSearch();\n if (totalConditionSearch.value > 10) {\n setTimeout(() => {\n saveJobSearchResult.value = '';\n }, 3000);\n return saveJobSearchResult.value = 'limited';\n }\n let conditionSearchLocations: any[] = []\n prefectureSelected.value.forEach(item => {\n if (item.cities.length <= 0) return conditionSearchLocations.push({ prefecture_id: item.id })\n item.cities.forEach(city => conditionSearchLocations.push({ prefecture_id: item.id, city_id: city.id }))\n })\n event?.preventDefault();\n const data = {\n title: title.value || getCurrentDate(),\n keywords: searchWord.value,\n job_types: occupationSelected.value.flatMap((item) => item.children.map((c) => c.id)),\n prefectures: conditionSearchLocations,\n min_annual_income: minIncomeSelected.value,\n max_annual_income: maxIncomeSelected.value,\n industries: industriesSelected.value.flatMap((item) => item.children.map((c) => c.id)),\n skills: skillSelected.value.flatMap((item) => item.children.map((c) => c.id)),\n employment_types: employmentSelected.value.map((item) => item.id),\n job_features: jobFeatureSelected.value.flatMap((item) => item.children.map((c) => c.id)),\n }\n const response = await saveJobSearchCondition(data)\n if (response.status === 200) {\n emit('createJobCondition')\n setTimeout(() => {\n saveJobSearchResult.value = '';\n }, 3000);\n saveJobSearchResult.value = 'success';\n getListConditionSearch();\n }\n else {\n if (response.status === 401) {\n window.location.href = CANDIDATE_LOGIN_PATH\n }\n else {\n emit('createJobCondition')\n setTimeout(() => {\n saveJobSearchResult.value = '';\n }, 3000);\n saveJobSearchResult.value = 'fail';\n getListConditionSearch();\n }\n }\n}\n\nconst getParamSearch = async () => {\n if(Object.keys(route.query).length === 0) return search();\n initialValuesConditionSearch();\n if (route.query.occupation_id) {\n occupationSelected.value = new Array({ name: route.query.name, OccupationId: route.query.occupation_id });\n }\n\n if (route.query.prefecture_id) {\n prefectureSelected.value = new Array({ name: route.query.name, id: route.query.prefecture_id });\n }\n\n if (route.query.industry_id) {\n industriesSelected.value = new Array({ name: route.query.name, id: route.query.industry_id });\n }\n\n if (route.query.job_feature_id) {\n jobFeatureSelected.value = new Array({ name: route.query.name, id: route.query.job_feature_id });\n }\n\n if (route.query['roots_index_form[annual_min_income_id]']) {\n minIncomeSelected.value = route.query['roots_index_form[annual_min_income_id]']\n }\n\n if (route.query['roots_index_form[annual_max_income_id]']) {\n maxIncomeSelected.value = route.query['roots_index_form[annual_max_income_id]']\n }\n\n searchWord.value = route.query.keywords\n title.value = route.query.title || getCurrentDate();\n getJobTypes();\n getAnnualIncome();\n getIndustries();\n getSkills();\n getJobFeatures();\n getEmploymentTypes();\n getDesireLocation();\n search();\n}\n\nconst getDesireLocation = () => {\n if (route.query.prefectures || route.query['prefectures[]']) {\n let prefectureIds: any\n if (route.query.prefectures) {\n prefectureIds = Array.isArray(route.query.prefectures) ? route.query.prefectures : [route.query.prefectures];\n } else {\n prefectureIds = Array.isArray(route.query['prefectures[]']) ? route.query['prefectures[]'] : [route.query['prefectures[]']];\n }\n\n [... new Set(prefectureIds)].forEach(id => {\n const prefecture = props.prefectures.find(prefecture => prefecture.children.some(child => child.id.toString() == id));\n if (prefecture) {\n const prefectureChild = prefecture.children.find(child => child.id.toString() == id);\n const cities = [];\n\n if (route.query.city_ids || route.query['cities[]']) {\n let cityIds: any\n if (route.query.city_ids) {\n cityIds = Array.isArray(route.query.city_ids) ? route.query.city_ids : [route.query.city_ids];\n } else {\n cityIds = Array.isArray(route.query['cities[]']) ? route.query['cities[]'] : [route.query['cities[]']];\n }\n\n cityIds.forEach(cityId => {\n const matchingCity = [...prefectureChild.main_cities, ...prefectureChild.extra_cities].find(city => city.id.toString() == cityId);\n\n if (matchingCity) {\n cities.push(matchingCity);\n }\n });\n }\n\n valuesPrefectures.value.push({ id: prefectureChild.id, name: prefectureChild.name, cities: cities });\n prefectureSelected.value = cloneDeep(valuesPrefectures.value)\n }\n });\n }\n}\n\nconst getJobTypes = () => {\n if (route.query.job_types || route.query['job_types[]']) {\n let job_types: any\n if (route.query.job_types) {\n job_types = Array.isArray(route.query.job_types) ? route.query.job_types : [route.query.job_types];\n } else {\n job_types = Array.isArray(route.query['job_types[]']) ? route.query['job_types[]'] : [route.query['job_types[]']];\n }\n\n job_types.forEach(id => {\n props.occupations.forEach(occupation => {\n let occupationChild = occupation.children.find(child => child.id.toString() == id);\n\n if (occupationChild) {\n onChooseOccupation(occupation, occupationChild)\n occupationSelected.value = cloneDeep(valuesOccupations.value);\n }\n });\n });\n }\n}\n\nconst getAnnualIncome = () => {\n const minIncomeId = route.query.min_annual_income\n const maxIncomeId = route.query.max_annual_income\n\n const minIncome = props.incomes.find(income => income.id.toString() == minIncomeId);\n const maxIncome = props.incomes.find(income => income.id.toString() == maxIncomeId);\n\n if (minIncome) {\n minIncomeSelected.value = minIncome.id\n }\n if (maxIncome) {\n maxIncomeSelected.value = maxIncome.id\n }\n}\n\nconst getIndustries = () => {\n if (route.query.industries || route.query['industries[]']) {\n let industriesId: any\n if (route.query.industries) {\n industriesId = Array.isArray(route.query.industries) ? route.query.industries : [route.query.industries];\n } else {\n industriesId = Array.isArray(route.query['industries[]']) ? route.query['industries[]'] : [route.query['industries[]']];\n }\n\n industriesId.forEach(id => {\n props.industries.forEach(industry => {\n let industryChild = industry.children?.find(child => child.id.toString() == id);\n\n if (industryChild) {\n onChooseIndustry(industry, industryChild);\n industriesSelected.value = cloneDeep(valuesIndustries.value);\n }\n })\n });\n }\n}\n\nconst getSkills = () => {\n if (route.query.skills || route.query['skills[]']) {\n let skillIds: any\n if (route.query.skills) {\n skillIds = Array.isArray(route.query.skills) ? route.query.skills : [route.query.skills];\n } else {\n skillIds = Array.isArray(route.query['skills[]']) ? route.query['skills[]'] : [route.query['skills[]']];\n }\n\n skillIds.forEach(id => {\n props.skills.forEach(skill => {\n let skillChild = skill.children.find(child => child.id.toString() == id);\n\n if (skillChild) {\n onChooseSkill(skill, skillChild);\n skillSelected.value = cloneDeep(valueSkills.value);\n }\n });\n });\n }\n}\n\nconst getJobFeatures = () => {\n if (route.query.job_features || route.query['job_features[]']) {\n let jobFeatureIds: any\n if (route.query.job_features) {\n jobFeatureIds = Array.isArray(route.query.job_features) ? route.query.job_features : [route.query.job_features];\n } else {\n jobFeatureIds = Array.isArray(route.query['job_features[]']) ? route.query['job_features[]'] : [route.query['job_features[]']];\n }\n\n jobFeatureIds.forEach(id => {\n props.jobFeatures.forEach(jobFeature => {\n let jobFeatureChild = jobFeature.children.find(child => child.id.toString() == id);\n\n if (jobFeatureChild) {\n onChooseJobFeature(jobFeature, jobFeatureChild);\n jobFeatureSelected.value = cloneDeep(valueJobFeatures.value);\n }\n });\n });\n }\n}\n\nconst getEmploymentTypes = () => {\n if (route.query.employment_types || route.query['employment_types[]']) {\n let employmentTypeIds: any\n if (route.query.employment_types) {\n employmentTypeIds = Array.isArray(route.query.employment_types) ? route.query.employment_types : [route.query.employment_types];\n } else {\n employmentTypeIds = Array.isArray(route.query['employment_types[]']) ? route.query['employment_types[]'] : [route.query['employment_types[]']];\n }\n\n employmentTypeIds.forEach(id => {\n let employmentType = props.employmentTypes.find(item => item.id.toString() == id);\n\n if (employmentType) {\n employmentSelected.value.push(employmentType)\n }\n });\n }\n}\n</script>\n","export default \"__VITE_ASSET__b3019d40__\"","<template>\n <div class=\"row mt-4 mx-1r mx-0 mx-md-7\">\n <div class=\"col-2 col-md-1 d-flex flex-column justify-content-center position-relative button-prev\">\n <div class=\"position-absolute z-index-2 top-sm-6d5\">\n <button class=\"btn btn-primary rounded-circle w-3 h-3\">\n <img src=\"@/assets/images/icons/arrow-left.svg\" alt=\"\">\n </button>\n </div>\n </div>\n <div class=\"col-0 col-md-10 swiper related-jobs-swiper\">\n <div class=\"swiper-wrapper\">\n <div class=\"swiper-slide mh-sm-18 border rounded-2\" v-for=\"job in jobs\">\n <div class=\"job-related__primary border-0 rounded-2 bg-white-primary p-3 h-15\">\n <a class=\"job-related-primary-header cursor-point text-black text-decoration-none\" target=\"_blank\"\n rel=\"noopener noreferrer\" :href=\"`/jobs/${job.id}?direct=true`\">\n <h5 class=\"size-16\">{{ job.title }}</h5>\n <div class=\"d-flex size-12\">\n <p class=\"mb-0\">{{ job.company_name }}</p>\n <p class=\"mb-0 ms-2 col-3\">\n <img src=\"@/assets/images/icons/ic_round-place.svg\" alt=\"\">\n <span>{{ job.prefecture_name }}</span>\n </p>\n </div>\n <p class=\"size-12\">{{ job.range_income }}</p>\n <p class=\"truncate truncate-line-3\">{{ job.description }}</p>\n </a>\n </div>\n </div>\n </div>\n </div>\n <div class=\"col-0 col-md-1 d-flex flex-column justify-content-center align-items-end position-relative button-next\">\n <div class=\"position-absolute z-index-2 bottom-sm-5d5\">\n <button class=\"btn btn-primary rounded-circle w-3 h-3\">\n <img src=\"@/assets/images/icons/arrow-right.svg\" alt=\"\">\n </button>\n </div>\n </div>\n </div>\n <div class=\"swiper-pagination-bullets-primary\"></div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, onMounted } from 'vue';\nimport SwiperCore, { Swiper } from 'swiper'\nimport { Navigation, Pagination } from 'swiper/modules';\nimport 'swiper/css/pagination';\n\nSwiperCore.use([Navigation, Pagination]);\n\nexport default defineComponent({\n props: {\n jobs: {\n type: Array as () => any,\n required: true,\n },\n },\n setup(props) {\n const { jobs } = props;\n\n onMounted(() => {\n const swiper = new Swiper('.swiper', {\n centeredSlides: true,\n slidesPerView: 'auto',\n loop: true,\n keyboard: {\n enabled: true\n },\n navigation: {\n nextEl: '.button-next',\n prevEl: '.button-prev',\n },\n pagination: {\n el: \".swiper-pagination-bullets-primary\",\n clickable: true,\n enabled: true,\n },\n breakpoints: {\n 390: {\n slidesPerView: 1.25,\n spaceBetween: 10\n },\n\n 640: {\n slidesPerView: 1.25,\n spaceBetween: 10\n },\n\n 1024: {\n slidesPerView: 3,\n spaceBetween: 10\n }\n }\n });\n });\n\n return { jobs };\n },\n});\n</script>\n<style>\n.job-related__primary {\n @media screen and (min-width: 768px) {\n &:hover {\n background-color: #ececec;\n }\n\n &:active {\n background-color: #ecf8fa;\n }\n }\n\n @media screen and (max-width: 576px) {\n &:hover {\n background-color: #ecf8fa;\n }\n }\n}\n\n.swiper-pagination-bullets-primary {\n position: static;\n text-align: center;\n transition: 300ms opacity;\n transform: translate3d(0, 0, 0);\n z-index: 10;\n}\n</style>\n","<template>\n <div class=\"modal fade\" :id=\"modalId\" tabindex=\"-1\" :aria-labelledby=\"modalId + 'Label'\" aria-hidden=\"true\">\n <div class=\"modal-dialog\" :class=\"modalSizeClass\">\n <div class=\"modal-content\">\n <!-- Header -->\n <div class=\"modal-header\" v-if=\"!hideHeader\">\n <h5 class=\"modal-title\" :id=\"modalId + 'Label'\">\n <slot name=\"header\">{{ title }}</slot>\n </h5>\n <button\n v-if=\"!hideCloseButton\"\n type=\"button\"\n class=\"btn-close\"\n data-bs-dismiss=\"modal\"\n aria-label=\"Close\"\n @click=\"handleClose\"\n ></button>\n </div>\n\n <!-- Body -->\n <div class=\"modal-body\">\n <slot></slot>\n </div>\n\n <!-- Footer -->\n <div class=\"modal-footer\" v-if=\"!hideFooter\">\n <slot name=\"footer\">\n <button\n v-if=\"!hideCancelButton\"\n type=\"button\"\n class=\"btn btn-secondary\"\n data-bs-dismiss=\"modal\"\n @click=\"handleCancel\"\n >\n {{ cancelButtonText }}\n </button>\n <button\n v-if=\"!hideSubmitButton\"\n type=\"button\"\n class=\"btn btn-primary\"\n @click=\"handleSubmit\"\n :disabled=\"submitDisabled\"\n >\n {{ submitButtonText }}\n </button>\n </slot>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script>\nimport { Modal } from 'bootstrap'\n\nexport default {\n name: 'ModalBase',\n props: {\n modalId: {\n type: String,\n required: true\n },\n title: {\n type: String,\n default: ''\n },\n size: {\n type: String,\n default: 'md',\n validator: (value) => ['sm', 'md', 'lg', 'xl'].includes(value)\n },\n hideHeader: {\n type: Boolean,\n default: false\n },\n hideFooter: {\n type: Boolean,\n default: false\n },\n hideCloseButton: {\n type: Boolean,\n default: false\n },\n hideCancelButton: {\n type: Boolean,\n default: false\n },\n hideSubmitButton: {\n type: Boolean,\n default: false\n },\n submitDisabled: {\n type: Boolean,\n default: false\n },\n cancelButtonText: {\n type: String,\n default: 'Cancel'\n },\n submitButtonText: {\n type: String,\n default: 'Submit'\n }\n },\n\n computed: {\n modalSizeClass() {\n return this.size !== 'md' ? `modal-${this.size}` : ''\n }\n },\n\n data() {\n return {\n modalInstance: null\n }\n },\n\n mounted() {\n this.modalInstance = new Modal(document.getElementById(this.modalId))\n },\n\n methods: {\n show() {\n this.modalInstance.show()\n },\n hide() {\n this.modalInstance.hide()\n },\n handleClose() {\n this.$emit('close')\n },\n handleCancel() {\n this.$emit('cancel')\n },\n handleSubmit() {\n this.$emit('submit')\n }\n }\n}\n</script>\n","<template>\n <div class=\"modal fade\" id=\"platformDirectModal\" ref=\"modal\">\n <div class=\"modal-dialog modal-dialog-top\">\n <div class=\"modal-content rounded overflow-hidden min-w-md-560x\">\n <div class=\"modal-body p-0\">\n <div class=\"d-flex flex-column\">\n <div class=\"row bg-green-01 mb-2\">\n <div class=\"d-flex justify-content-end pt-2 ms-2 position-absolute\">\n <button role=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\"></button>\n </div>\n <div class=\"d-flex justify-content-center align-items-center mw-sm-90pct ps-sm-4r py-3\">\n <img src=\"@/assets/images/building-1.png\" alt=\"image\" class=\"img-fluid\" style=\"max-width: 60px;\">\n <h6 class=\"fw-bold text-info mb-0 ms-2 me-3\">豎ゆココ謗イ霈我シ∵・ュ縺ィ逶エ謗・繧�j蜿悶j繧偵@縺ヲ縺ソ縺セ縺帙s縺具シ�</h6>\n </div>\n </div>\n\n <div class=\"text-start px-3 px-md-4 py-3 color-black-02\">\n <div class=\"px-2\">\n <p>縲檎、セ蜀�SE霆「閨キ繝翫ン縲繝繧、繝ャ繧ッ繝医阪r縺泌茜逕ィ縺�◆縺�縺上→縲∵アゆココ繧呈軸霈峨☆繧倶シ∵・ュ縺ィ逶エ謗・繝。繝�そ繝シ繧ク縺ョ繧�j蜿悶j縲∵アゆココ蠢懷供縺悟庄閭ス縺ァ縺吶�</p>\n <p>繧ィ繝シ繧ク繧ァ繝ウ繝医し繝シ繝薙せ縺ィ荳ヲ陦後@縺ヲ繧オ繝シ繝薙せ繧偵#蛻ゥ逕ィ縺吶k縺薙→縺後〒縺阪∪縺吶�縺ァ縲√●縺イ縺泌茜逕ィ縺上□縺輔>縲�</p>\n <p>縺懊�縺薙�讖滉シ壹↓縺碑�霄ォ縺ョ繝励Ο繝輔ぅ繝シ繝ォ諠��ア繧貞�螳溘&縺帙※縺上□縺輔>縲�</p>\n <p>繝励Ο繝輔ぅ繝シ繝ォ諠��ア繧偵b縺ィ縺ォ縲∽シ∵・ュ縺九i縺ョ繧ケ繧ォ繧ヲ繝医′螻翫¥縺九b縺励l縺セ縺帙s縲�</p>\n <p>縺泌茜逕ィ縺輔l繧句�エ蜷医�<a href=\"/terms\" target=\"_blank\">蛻ゥ逕ィ隕冗エ�</a>繧偵#遒コ隱阪�縺泌酔諢上�荳翫∝茜逕ィ髢句ァ九@縺ヲ縺上□縺輔>縲�</p>\n </div>\n </div>\n\n <div class=\"d-flex justify-content-center pb-5\">\n <a class=\"btn btn-primary rounded px-4 py-2 text-white size-13\" :href=\"redirectToServiceDirect()\">\n 隕冗エ�↓蜷梧э縺励※繝繧、繝ャ繧ッ繝医し繝シ繝薙せ繧貞茜逕ィ縺吶k\n </a>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</template>\n<script setup lang=\"ts\">\nimport { SEARCH_PATH, WELCOME_GUIDE_PATH } from '@/constant/routers/path';\n\nconst redirectToServiceDirect = () => {\n const redirectUrl = `${SEARCH_PATH}&welcome_popup=true`;\n return `${WELCOME_GUIDE_PATH}?redirect_to=${encodeURIComponent(redirectUrl)}`;\n};\n\n</script>\n","<template>\n <div v-if=\"!isLoading\">\n <div class=\"placeholder\">\n <div class=\"placeholder-text\"></div>\n </div>\n </div>\n <div v-else>\n <div class=\"job-search-container row container-fluid mt-5d5 mx-0 mb-md-0 mb-5 gap-3 justify-content-center\">\n <div class=\"w-317x col-md-4 d-md-flex d-none p-0 job-search-wrapper align-items-start\" ref=\"jobSearchContainer\">\n <JobSearch @searchJob=\"onChangeResultSearch\" @createJobCondition=\"onSaveJobCondition\" :prefectures=\"prefectures\"\n :occupations=\"occupations\" :industries=\"industries\" :skills=\"skills\" :jobFeatures=\"jobFeatures\" :sort=\"sort\"\n :incomes=\"incomes\" :employmentTypes=\"employmentTypes\" :inputListJob=\"inputListJob\" />\n </div>\n <div class=\"d-md-none d-block p-0\">\n <div class=\"d-flex justify-content-center\">\n <button type=\"button\"\n class=\"btn btn-primary rounded-4x d-flex justify-content-center align-items-center w-11d625 mw-186x\"\n @click=\"onOpenModalSearchJob\">\n <div class=\"fw-medium size-12 lh-12 w-75\">讀懃エ「譚。莉カ</div>\n <img src=\"@/assets/images/icons/zoom.svg\" role=\"button\"\n class=\"border rounded-md-circle border-third p-0d25\" />\n </button>\n </div>\n\n <ModalBase isShowAddButton ref=\"modalListConditionSearch\" element=\"modalListConditionSearchElement\"\n title=\"菫晏ュ倥@縺滓、懃エ「譚。莉カ\" modalType=\"mx-4\" headerBackground=\"bg-blue-primary\" btnColseColor=\"btn-close-white\"\n colorText=\"text-white\">\n <template #body>\n <div class=\"text-center bg-grey-05 py-2\">\n <img src=\"@/assets/images/icons/arrow-left-blue.svg\" alt=\"Back icon\">\n <span class=\"ms-2 color-blue-primary cursor-pointer\" data-bs-toggle=\"modal\"\n data-bs-target=\"#jobCondition\">譚。莉カ險ュ螳壹↓謌サ繧�</span>\n </div>\n <div class=\"list-job-container overflow-y-scroll bg-white\">\n <div v-if=\"totalConditionSearch == 0\">\n <p class=\"text-center\">菫晏ュ倥@縺滓、懃エ「譚。莉カ縺ッ縺ゅj縺セ縺帙s</p>\n </div>\n <div class=\"border-bottom px-4\" v-for=\"searchCondition in listConditionSearch\">\n <div class=\"d-flex justify-content-between\">\n <div class=\"d-flex cursor-pointer\" @click=\"onApplySearchCondition(searchCondition)\"\n data-bs-dismiss=\"modal\">\n <img src=\"@/assets/images/icons/arrow_curved_left.svg\" alt=\"Back icon\">\n <p class=\"text-black my-3 mx-2 truncate-text w-16\">{{ searchCondition.title }}</p>\n </div>\n <img src=\"@/assets/images/icons/trash_grey.svg\" alt=\"Trash icon\" class=\"cursor-pointer\"\n @click=\"onOpenModaConditionSearchConfirm(searchCondition.id, searchCondition.title)\">\n </div>\n </div>\n </div>\n </template>\n </ModalBase>\n\n <div class=\"modal fade\" id=\"confirmDeleteSearchCondition\" tabindex=\"-1\" aria-hidden=\"true\">\n <div class=\"modal-dialog\">\n <div class=\"modal-content\">\n <div class=\"d-flex justify-content-end px-3 pt-3\">\n <button role=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\"></button>\n </div>\n <div class=\"modal-body p-0\">\n <div class=\"d-flex justify-content-center p-0\">\n <h6 class=\"m-2 px-4\">�「{{ titleItemSearch }}�」 繧貞炎髯、縺励∪縺吶°��</h6>\n </div>\n <div class=\"h-48x d-flex justify-content-center my-4\">\n <button type=\"button\"\n class=\"btn-center btn-primary bg-white py-2 px-4 color-blue-primary size-12 pe-auto w-8\"\n data-bs-dismiss=\"modal\" aria-label='Close'>\n 繧ュ繝」繝ウ繧サ繝ォ\n </button>\n <button type=\"button\" class=\"btn-center btn-primary py-2 px-4 ms-4 text-white size-12 pe-auto w-8\"\n @click=\"onDeleteSearchCondition(idItemSearch)\" data-bs-dismiss=\"modal\">\n 蜑企勁縺吶k\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"modal fade\" id=\"jobCondition\" tabindex=\"-1\" aria-hidden=\"true\">\n <div class=\"modal-dialog\">\n <div class=\"modal-content\">\n <div class=\"modal-header bg-blue-primary\">\n <p class=\"modal-title text-start size-16 fw-bold w-100 text-white\">讀懃エ「譚。莉カ</p>\n <button type=\"button\" class=\"btn-close btn-close-white\" data-bs-dismiss=\"modal\"></button>\n </div>\n <div class=\"modal-body p-0 no-bounce-x\">\n <JobSearchSP @searchJob=\"onChangeResultSearch\" @createJobCondition=\"onSaveJobCondition\" :sort=\"sort\"\n :prefectures=\"prefectures\" :occupations=\"occupations\" :industries=\"industries\" :skills=\"skills\"\n :jobFeatures=\"jobFeatures\" :incomes=\"incomes\" :employmentTypes=\"employmentTypes\" />\n </div>\n </div>\n </div>\n </div>\n\n </div>\n <div class=\"col-md-6 p-0 mt-3 mt-md-0 flex-grow-1 mw-634x\">\n <div :class=\"`bg-white h-3 d-flex align-items-center mt-md-0 mb-3 position-sticky z-1 job-list-tab ${userLoggedIn ? 'user-logged-in' : ''}`\">\n <a href=\"#\"\n class=\"col-6 text-center px-0 link-underline link-underline-opacity-0 d-inline-block size-12 fw-bold color-blue-primary menu-list-job menu-active d-inline-block\">\n 繝繧、繝ャ繧ッ繝域アゆココ\n <img src=\"@/assets/images/icons/question.svg\" alt=\"question icon\" class=\"ms-2 mb-1\" data-bs-toggle=\"tooltip\"\n data-bs-offset=\"0, 10\" data-bs-placement=\"bottom\" data-bs-custom-class=\"tooltip-third\" data-bs-html=\"true\"\n data-bs-title=\"縲後ム繧、繝ャ繧ッ繝域アゆココ縲阪�縲∵軸霈峨☆繧倶シ∵・ュ縺ョ豎ゆココ縺ォ豎り�閠�′逶エ謗・蠢懷供縺後〒縺阪k豎ゆココ蠖「蠑上〒縺吶�<br>窶サ繝繧、繝ャ繧ッ繝医し繝シ繝薙せ縺泌茜逕ィ縺ョ譁ケ縺ョ縺ソ縺泌ソ懷供縺後〒縺阪∪縺吶�\">\n </a>\n <a href=\"javascript:void(0);\"\n class=\"col-6 text-center px-0 link-underline link-underline-opacity-0 opacity-50 d-inline-block size-12 fw-bold color-blue-primary menu-list-job d-inline-block\"\n @click=\"redirectToAgentJobs\">\n 繧ィ繝シ繧ク繧ァ繝ウ繝域アゆココ\n <img src=\"@/assets/images/icons/question.svg\" alt=\"question icon\" class=\"ms-2 mb-1\" data-bs-toggle=\"tooltip\"\n data-bs-offset=\"0, 10\" data-bs-placement=\"bottom\" data-bs-custom-class=\"tooltip-third\" data-bs-html=\"true\"\n data-bs-title=\"縲後お繝シ繧ク繧ァ繝ウ繝域アゆココ縲阪�縲√い繧、繝�繝輔ぃ繧ッ繝医Μ繝シ縺御シ∵・ュ縺九i萓晞�シ縺輔l謗イ霈峨☆繧区アゆココ縺ォ蠢懷供縺ァ縺阪k豎ゆココ蠖「蠑上〒縺吶�<br>窶サ繧ィ繝シ繧ク繧ァ繝ウ繝医し繝シ繝薙せ縺泌茜逕ィ縺ョ譁ケ縺ョ縺ソ縺泌ソ懷供縺後〒縺阪∪縺吶�\">\n </a>\n </div>\n <h1 class=\"size-16 fw-bold d-md-flex m-0 text-center\">\n {{ h1Title }}\n </h1>\n <div class=\"d-md-flex m-0 text-center\">\n <p class=\"size-14 fw-bold mb-0\">縺薙�譚。莉カ縺ョ豎ゆココ謨ー<span class=\"size-20 px-2\"><vue3-autocounter ref='counter'\n :startAmount='0' :endAmount='totalResult' :duration='1' :autoinit='true'\n @finished='' /></span><span>莉カ</span></p>\n <div class=\"d-flex justify-content-center ms-md-3 order-2\">\n <div class=\"d-flex justify-content-between\">\n <select class=\"form-select select-input-primary w-8 h-2d5 size-14 lh-14\" aria-label=\"sort-job-label\"\n @change=\"onChangeSortDirection\" v-model=\"sort\">\n <option v-for=\"sort in sortCondition\" :value=\"sort.value\">{{ sort.text }}</option>\n </select>\n </div>\n </div>\n </div>\n <div ref=\"inputListJob\" class=\"list-job-search\">\n <div class=\"card w-100 mb-2 border-0 mt-3 pb-3\" v-for=\"job in jobs\">\n <div class=\"card-body p-0\" :id=\"`job-card-${job.id}`\">\n <div class=\"d-flex align-items-center w-100\">\n <div class=\"col-12 px-0 d-flex justify-content-center\">\n <img v-if=\"job.image_url\" :src=\"job.image_url\" :key=\"`job-image-${job.id}`\" alt=\"job card image\"\n class='card-img-top ratio-image object-fit-contain'>\n <img v-else src=\"@/assets/images/image-empty.png\" :key=\"`job-image-empty-${job.id}`\" alt=\"job card image\"\n class='card-img-top ratio-image object-fit-contain px-md-3 pt-3'>\n </div>\n </div>\n <div class=\"job-page__body py-3 pe-2 ps-3\">\n <div class=\"size-12 fw-medium pb-2\">\n {{ job.company_name }}\n </div>\n <div class=\"job-page__body-title d-flex justify-content-between\">\n <h2 class=\"m-0\">\n <a class=\"size-18 lh-18 fw-bold text-md-decoration-underline cursor-pointer flex-grow-1 text-black\"\n target=\"_blank\" rel=\"noopener noreferrer\"\n :href=\"`/jobs/${job.id}?direct=true`\">\n {{ job.title }}\n </a>\n </h2>\n <div class=\"d-flex justify-content-md-end flex-md-row gap-2 flex-column-reverse mb-md-0 mb-auto\">\n <div class=\"d-flex justify-content-end justify-content-md-center\"\n v-if=\"job.candidate_proposition?.apply\">\n <span class=\"tag-gray-01 size-10 lh-10 w-3d5 h-18x\">蠢懷供貂医∩</span>\n </div>\n <div class=\"d-flex justify-content-end justify-content-md-center\"\n v-if=\"new Date(job.public_date) >= pastDate\">\n <span class=\"tag-pink-01 size-10 lh-10 w-2d25 h-18x\">譁ー逹</span>\n </div>\n </div>\n </div>\n <div class=\"job-page__body-overview py-3 gap-2\">\n <div class=\"d-flex p-0 gap-2 flex-wrap\">\n <div v-if=\"job.occupation_description\"\n class=\"job-page__body-overview__place border border-blue-primary rounded-10x h-1d5 d-flex justify-content-center align-items-center px-2\">\n <img src=\"@/assets/images/icons/ic_occupation.svg\" alt=\"Occupation icon\">\n <span class=\"size-10 ps-1 color-blue-primary\">{{ truncateString(job.occupation_description, 22,\n '...') }}</span>\n </div>\n <div v-if=\"job.range_income\"\n class=\"job-page__body-overview__place rounded-10x h-1d5 d-flex justify-content-center align-items-center px-2\">\n <img src=\"@/assets/images/icons/ic_income.svg\" alt=\"Income icon\">\n <span class=\"size-10 ps-1\">{{ truncateString(job.range_income, 22, '...')\n }}</span>\n </div>\n <div v-if=\"job.prefecture_name\"\n class=\"job-page__body-overview__place border border-blue-primary rounded-10x h-1d5 d-flex justify-content-center align-items-center px-2\">\n <img src=\"@/assets/images/icons/ic_round-place-blue.svg\" alt=\"Place icon\">\n <span class=\"size-10 ps-1 lh-10 color-blue-primary\">{{ truncateString(job.prefecture_name, 22,\n '...') }}</span>\n </div>\n <div v-if=\"job.industry_name\"\n class=\"job-page__body-overview__place border border-blue-primary rounded-10x h-1d5 d-flex justify-content-center align-items-center px-2\">\n <img src=\"@/assets/images/icons/ic_industry.svg\" alt=\"Industry icon\">\n <span class=\"size-10 ps-1 color-blue-primary\">{{ truncateString(job.industry_name, 22, '...')\n }}</span>\n </div>\n <div v-if=\"job.skill\"\n class=\"job-page__body-overview__place border border-blue-primary rounded-10x h-1d5 d-flex justify-content-center align-items-center px-2\">\n <img src=\"@/assets/images/icons/gear-white.svg\" alt=\"Skill icon\">\n <span class=\"size-10 ps-1 color-blue-primary\">{{ truncateString(job.skill, 22,\n '...') }}</span>\n </div>\n </div>\n </div>\n <div class=\"job-page__body-description d-flex flex-column\">\n <div class=\"fw-bold mb-2\">莉穂コ句�螳ケ</div>\n <div v-if=\"isDescriptionLong(job.description)\">\n <span class=\"job-description\" v-html=\"job.isShowFullDescription ? job.description : truncateHtml(job.description, 200)\"></span>\n <span @click=\"handleShowHideDescription(job.id)\" class=\"color-grey-text-des cursor-pointer\">\n {{ job.isShowFullDescription ? '謚倥j縺溘◆繧' : '繧ゅ▲縺ィ縺ソ繧�' }}\n </span>\n </div>\n <div v-else>\n <span class=\"job-description\" v-html=\"job.description\"></span>\n </div>\n </div>\n </div>\n <div class=\"job-search__footer pt-2 d-md-flex justify-content-center\">\n <div v-if=\"!job.candidate_proposition?.apply\" class=\"d-flex justify-content-center\">\n <button type=\"button\" class=\"btn bg-grey-05 rounded-24 px-5 py-2 size-12\" @click=\"onFavoriteJob(job)\"\n v-if=\"job.candidate_proposition && job.candidate_proposition.job_like == 'anxious'\">\n <img src=\"@/assets/images/icons/checked.svg\" alt=\"checked icon\" class=\"me-1\">\n 豌励↓縺ェ繧区ク医∩\n </button>\n <button type=\"button\" class=\"btn btn-outline-secondary rounded-24 px-5 py-2 size-12\"\n @click=\"onFavoriteJob(job)\" v-else>\n <img src=\"@/assets/images/icons/star-border-blue.svg\" alt=\"checked icon\" class=\"me-1\">\n 豌励↓縺ェ繧欺n </button>\n </div>\n <div class=\"d-flex justify-content-center ms-md-3 mt-md-0 mt-2\">\n <a class=\"btn btn-primary rounded-24 px-5 px-auto py-2 size-12 w-185x\" target=\"_blank\"\n rel=\"noopener noreferrer\" :href=\"`/jobs/${job.id}?direct=true`\">\n 豎ゆココ繧定ヲ九k\n </a>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"pagination d-flex justify-content-center mt-3 mx size-12\">\n <vue-awesome-paginate\n v-model=\"pagy.page\"\n :on-click=\"navigateToPage\"\n :total-items=\"pagy.count\"\n :items-per-page=\"30\"\n :max-pages-shown=\"screenWidth <= 768 ? getMaxVisiblePagesSP() : getMaxVisiblePages()\"\n :show-ending-buttons=\"screenWidth <= 768 ? false : true\"\n :show-breakpoint-buttons=\"false\"\n :hide-prev-next-when-ends=\"true\"\n first-page-content=\"譛蛻昴∈\"\n last-page-content=\"譛蠕後∈\"\n >\n <template #prev-button>\n <a class=\"page-link cursor-pointer w-2 h-2 d-flex justify-content-center align-items-center border-0 rounded-4x\" aria-label=\"previous\">\n <img src=\"@/assets/images/icons/paginate-angle-left.svg\" alt=\"\">\n </a>\n </template>\n\n <template #next-button>\n <a class=\"page-link cursor-pointer w-2 h-2 d-flex justify-content-center align-items-center border-0 rounded-4x\" aria-label=\"next\">\n <img src=\"@/assets/images/icons/paginate-angle-right.svg\" alt=\"\">\n </a>\n </template>\n </vue-awesome-paginate>\n </div>\n </div>\n <div class=\"col-md-2 mb-md-0 mb-5 w-250x px-0\" v-if=\"jobViewHistory.length\">\n <div class=\"bg-white-primary w-100 border border-third rounded\">\n <div class=\"company-information overflow-y-scroll\">\n <div class=\"company-information__header border-bottom border-third py-3\">\n <h2 class=\"text-center size-14 color-blue-primary mb-0\">髢イ隕ァ螻・豁エ</h2>\n </div>\n <div class=\"company-information__body border-bottom size-12 px-2\" v-for=\"job in jobViewHistory\">\n <a class=\"size-12 p-3 border-bottom link-info text-black text-decoration-none cursor-pointer\"\n target=\"_blank\" rel=\"noopener noreferrer\" :href=\"`/jobs/${job.jobId}?direct=true`\">\n <h4 class=\"fw-bold size-12 text-decoration-underline\">{{ job.title }}</h4>\n <div class=\"d-block p-0 gap-2\">\n <div\n class=\"job-page__body-overview__place rounded-10x h-1d5 d-flex align-items-center px-2\"\n v-if=\"job.occupation != ''\">\n <img src=\"@/assets/images/icons/ic_occupation.svg\" alt=\"Occupation icon\">\n <span class=\"size-10 ps-1\">{{ truncateString(job.occupation, 25, '...') }}</span>\n </div>\n <div\n class=\"job-page__body-overview__place rounded-10x h-1d5 d-flex align-items-center px-2\"\n v-if=\"job.income != ''\">\n <img src=\"@/assets/images/icons/ic_income.svg\" alt=\"Income icon\">\n <span class=\"size-10 ps-1\">{{ job.income }}</span>\n </div>\n <div\n class=\"job-page__body-overview__place rounded-10x h-1d5 d-flex align-items-center px-2\"\n v-if=\"job.place != ''\">\n <img src=\"@/assets/images/icons/ic_round-place-blue.svg\" alt=\"Place icon\">\n <span class=\"size-10 ps-1\">{{ truncateString(job.place, 25, '...') }}</span>\n </div>\n <div\n class=\"job-page__body-overview__place rounded-10x h-1d5 d-flex align-items-center px-2\"\n v-if=\"job.industry != ''\">\n <img src=\"@/assets/images/icons/ic_industry.svg\" alt=\"Industry icon\">\n <span class=\"size-10 ps-1\">{{ truncateString(job.industry, 25, '...') }}</span>\n </div>\n <div v-if=\"job.skill != ''\"\n class=\"job-page__body-overview__place rounded-10x h-1d5 d-flex align-items-center px-2\">\n <img src=\"@/assets/images/icons/gear-white.svg\" alt=\"Skill icon\">\n <span class=\"size-10 ps-1\">{{ truncateString(job.skill, 25, '...') }}</span>\n </div>\n </div>\n </a>\n </div>\n </div>\n </div>\n </div>\n\n <ModalStandard ref=\"welcomeModal\" modalId=\"welcomeModal\" hideFooter=\"true\" hideHeader=\"true\">\n <div class=\"text-center p-4\">\n <h5 class=\"mb-4\">遉セ蜀�SE霆「閨キ繝翫ン 繝繧、繝ャ繧ッ繝医∈繧医≧縺薙◎</h5>\n <p class=\"mb-4\">繝繧、繝ャ繧ッ繝医し繝シ繝薙せ縺ョ蛻ゥ逕ィ縺碁幕蟋九&繧後∪縺励◆縲�</p>\n <p class=\"mb-4\">繝繧、繝ャ繧ッ繝域アゆココ縺ォ蠢懷供縺励◆繧翫�<br />莨∵・ュ縺九i縺ョ繧ケ繧ォ繧ヲ繝医r蜿励¢蜿悶j縺セ縺励g縺�シ�</p>\n <p class=\"mb-4\">繝励Ο繝輔ぅ繝シ繝ォ繧貞�螳溘&縺帙k縺サ縺ゥ縲�<br />莨∵・ュ縺九i縺ョ繧ケ繧ォ繧ヲ繝医′螻翫″繧�☆縺上↑繧翫∪縺呻シ�</p>\n <button class=\"btn btn-primary size-12 w-184x py-3 rounded-5\" @click=\"closeWelcomeModal\">\n 髢峨§繧欺n </button>\n </div>\n </ModalStandard>\n <Direct/>\n </div>\n <div class=\"d-flex justify-content-center mb-5 mb-md-0\" v-if=\"relatedJobs.length > 0\">\n <div class=\"job-related w-100\">\n <h4 class=\"mt-4 text-center size-18 fw-bold\">{{ prefectureName + '縺ョ譯井サカ繧偵♀謗「縺励〒縺吶°��'}}</h4>\n <SwiperComponent :jobs=\"relatedJobs\" />\n </div>\n </div>\n </div>\n <ScrollToTopButton />\n</template>\n\n<script setup lang=\"ts\">\nimport { onBeforeUnmount, onUnmounted, onMounted, ref, nextTick, watch, computed } from \"vue\"\nimport { Modal, Tooltip } from \"bootstrap\";\nimport JobSearch from \"@/pages/candidate/job/direct/JobSearch.vue\"\nimport JobSearchSP from \"@/pages/candidate/job/direct/JobSearchSP.vue\";\nimport { PaginationType } from \"@/types/models/PaginationType\";\nimport { createJobProposition, getJobSearch, getListConditionJobSearch, updateJobProposition, deleteConditionJobSearch } from \"@/apis/job.api\";\nimport { getEmploymentTypes, getIncomes, getIndustries, getJobFeature, getOccupations, getPrefectures, getSkills } from \"@/apis/candidate\";\nimport { PrefecturePrimary } from \"@/types/models/prefecture\";\nimport { OccupationPrimary } from \"@/types/models/occupation\";\nimport { IndustryType } from \"@/types/models/industryType\";\nimport { SkillsType } from \"@/types/models/skill\";\nimport { SearchConditionType } from \"@/types/models/searchConditionType\";\nimport { JobFeaturePrimary } from \"@/types/models/jobFeatureType\";\nimport Vue3Autocounter from 'vue3-autocounter';\nimport SwiperComponent from '@/components/Swiper/RelatedJob.vue'\nimport { truncateString } from \"@/utils/string\";\nimport { JobType } from \"@/types/models/JobType\";\nimport { IncomePrimary } from \"@/types/models/income\";\nimport { EmploymentTypePrimary } from \"@/types/models/employmentType\";\nimport { SEARCH_PATH, AGENT_SEARCH_PATH, CANDIDATE_SIGN_UP_PATH } from \"@/constant/routers/path\";\nimport router from '@/routers';\nimport { useRoute } from 'vue-router';\nimport ModalBase from \"@/components/common/ModalBase/index.vue\";\nimport ModalStandard from \"@/components/common/ModalBase/standard.vue\";\nimport Direct from \"@/components/common/PlatformModal/Direct.vue\";\nimport { useHead } from '@vueuse/head';\nimport ScrollToTopButton from \"@/components/ScrollToTopButton.vue\";\n\nconst route = useRoute();\nconst welcomeModal = ref<InstanceType<typeof ModalBase> | null>(null);\n\nconst modalListConditionSearch = ref<InstanceType<typeof ModalBase> | null>(null);\nconst modalElement = ref();\n\nconst prefectures = ref<PrefecturePrimary[]>([]);\nconst occupations = ref<OccupationPrimary[]>([]);\nconst incomes = ref<IncomePrimary[]>([]);\nconst industries = ref<IndustryType[]>([]);\nconst skills = ref<SkillsType[]>([]);\nconst jobFeatures = ref<JobFeaturePrimary[]>([]);\nconst employmentTypes = ref<EmploymentTypePrimary[]>([]);\nconst isLoading = ref(false);\nconst screenWidth = ref<number>(window.innerWidth);\nconst listConditionSearch = ref();\nconst totalConditionSearch = ref(0);\nconst idItemSearch = ref(0);\nconst titleItemSearch = ref('');\nconst inputListJob = ref(null);\nconst jobSearchContainer = ref(null);\nconst platform = ref();\nconst userLoggedIn = ref(false);\n\nconst updateScreenWidth = () => {\n screenWidth.value = window.innerWidth;\n};\n\nconst initPagination = {\n count: null,\n from: null,\n to: null,\n next: null,\n prev: null,\n page: null,\n pages: null\n}\n\nconst initialData = {\n keywords: null,\n job_types: null,\n prefectures: null,\n cities: null,\n min_annual_income: null,\n max_annual_income: null,\n industries: null,\n skills: null,\n employment_types: null,\n job_features: null\n}\nconst currentDate = new Date()\nconst pastDate = new Date(currentDate);\npastDate.setDate(currentDate.getDate() - 7);\n\nconst pagy = ref<PaginationType>(initPagination);\nconst jobs = ref();\nconst relatedJobs = ref();\nconst jobViewHistory = ref();\nconst prefectureName = ref<string | null>(null);\nconst data = ref(initialData);\nconst totalResult = ref();\n\nconst updateJobSearchPosition = () => {\n if (jobSearchContainer.value && inputListJob.value) {\n const containerRect = jobSearchContainer.value.getBoundingClientRect();\n const listRect = inputListJob.value.getBoundingClientRect();\n const jobSearch = jobSearchContainer.value.querySelector('.job-search');\n const listConditionSearch = jobSearchContainer.value.querySelector('.list-condition-search')\n\n if (jobs.value.length <= 1) {\n jobSearch?.style.setProperty('position', 'static', 'important');\n listConditionSearch?.style.setProperty('position', 'static', 'important');\n return;\n }\n\n if (jobSearch) {\n if (containerRect.top <= 0) {\n const maxTop = listRect.bottom - jobSearch.offsetHeight;\n const newTop = Math.min(100, maxTop);\n\n jobSearch.style.position = 'fixed';\n jobSearch.style.top = `${newTop}px`;\n jobSearch.style.width = `${containerRect.width}px`;\n } else {\n jobSearch.style.position = 'static';\n }\n }\n }\n};\n\nconst handleScroll = () => {\n// requestAnimationFrame(updateJobSearchPosition);\n};\n\nconst updateMetaTag = () => {\n const existingMeta = document.querySelector('meta[name=\"robots\"]');\n if (existingMeta) {\n document.head.removeChild(existingMeta);\n }\n\n if (jobs.value.length === 0) {\n const meta = document.createElement('meta');\n meta.name = \"robots\";\n meta.content = \"noindex\";\n document.head.appendChild(meta);\n }\n};\n\nonMounted(async () => {\n isLoading.value = false;\n\n try {\n await getAllData();\n\n // 繝��繧ソ縺ョ蛻晄悄蛹暴n data.value = {\n ...initialData,\n keywords: route.query.keywords as string || null,\n job_types: route.query.job_types || null,\n prefectures: route.query.prefectures || null,\n cities: route.query.cities || null,\n min_annual_income: route.query.min_annual_income || null,\n max_annual_income: route.query.max_annual_income || null,\n industries: route.query.industries || null,\n skills: Array.isArray(route.query.skills) \n ? route.query.skills \n : route.query.skills ? [route.query.skills] : null,\n employment_types: route.query.employment_types || null,\n job_features: route.query.job_features || null\n };\n\n // 繧ク繝ァ繝悶ョ繝シ繧ソ縺ョ蜿門セ励�1蝗槭□縺曾n await getJobs();\n await getListConditionSearch();\n \n isLoading.value = true;\n\n // 縺昴�莉悶�蛻晄悄蛹門�逅�\n window.addEventListener(\"resize\", updateScreenWidth);\n nextTick(() => {\n updateJobSearchPosition();\n window.addEventListener('scroll', handleScroll);\n window.addEventListener('resize', updateJobSearchPosition);\n new Tooltip(document.body, {\n selector: \"[data-bs-toggle='tooltip']\",\n customClass: 'tooltip-third'\n });\n });\n\n nextTick(() => {\n if (route.query.welcome_popup === 'true') {\n welcomeModal.value?.show();\n }\n });\n jobViewHistory.value = JSON.parse(localStorage.recentlyJob || '[]');\n } catch (error) {\n console.error('Error during component mount:', error);\n isLoading.value = true;\n }\n\n // 繝ュ繧ー繧、繝ウ繝√ぉ繝�け\n const token = localStorage.getItem('access_token');\n userLoggedIn.value = token && token.length > 0;\n});\n\nwatch(() => jobs.value, () => {\n updateMetaTag();\n updateJobSearchPosition();\n});\n\nwatch(() => pagy.value.page, async () => {\n await getJobs();\n});\n\nonUnmounted(() => {\n window.removeEventListener('scroll', handleScroll);\n window.removeEventListener('resize', updateJobSearchPosition);\n});\n\nonBeforeUnmount(() => {\n window.removeEventListener(\"resize\", updateScreenWidth);\n});\n\nconst isAllParamsNull = (): boolean => {\n const urlParams = new URLSearchParams(window.location.search);\n const excludedParams = ['page', 'direct'];\n\n excludedParams.forEach(param => urlParams.delete(param));\n const remainingParams = Object.fromEntries(urlParams);\n\n return Object.keys(remainingParams).length === 0;\n};\n\nconst isParamsSearchEmpty = computed(() => {\n return isAllParamsNull();\n});\n\nconst sortCondition = ref([\n { text: '譁ー逹鬆�', value: 'public_date' },\n { text: '蟷エ蜿朱��', value: 'annual_max_income_id' },\n]);\nconst sort = ref('public_date');\n\nconst getJobs = async () => {\n try {\n const params = { \n ...data.value,\n sort_by: sort.value,\n page: Math.max(Number(route.query.page) || 1, 1)\n };\n\n const response = await getJobSearch(params);\n if (response.status === 200) {\n platform.value = response.data.platform;\n jobs.value = response.data.jobs;\n pagy.value = response.data.pagy;\n totalResult.value = pagy.value.count;\n relatedJobs.value = response.data.related_jobs;\n prefectureName.value = response.data.prefecture_name;\n }\n } catch (error) {\n console.error('Error fetching jobs:', error);\n }\n};\n\nconst onFavoriteJob = async (job: JobType) => {\n if (!userLoggedIn.value) {\n window.location.href = CANDIDATE_SIGN_UP_PATH;\n return;\n }\n\n if (platform.value === 'agent') {\n showAgentModal();\n return;\n }\n\n job.candidate_proposition ? await updateFavoriteJob(job) : await createFavoriteJob(job);\n};\n\nconst showAgentModal = () => {\n modalElement.value = new Modal(<HTMLElement>document.getElementById('platformDirectModal'));\n modalElement.value.show();\n};\n\nconst createFavoriteJob = async (job: JobType) => {\n const response = await createJobProposition({ proposition_form: { job_id: job.id } });\n job.candidate_proposition = response.data.proposition;\n};\n\nconst updateFavoriteJob = async (job: JobType) => {\n const response = await updateJobProposition(job.candidate_proposition.id);\n job.candidate_proposition = response.data.proposition;\n};\n\nconst emit = defineEmits(['click'])\n\nconst onChangeResultSearch = (resultSearch: any, dataSearch: any) => {\n jobs.value = resultSearch.data.jobs\n pagy.value = resultSearch.data.pagy\n data.value = dataSearch\n totalResult.value = pagy.value.count\n const paramsUrl = { ...route.query, page: undefined, keywords: dataSearch.keywords };\n router.push({ path: SEARCH_PATH, query: paramsUrl });\n}\n\nconst onChangeSortDirection = async () => {\n data.value = Object.assign({}, data.value, { sort_by: sort.value })\n const response = await getJobSearch(data.value);\n if (response.status == 200) {\n jobs.value = response.data.jobs;\n pagy.value = response.data.pagy;\n totalResult.value = pagy.value.count;\n }\n}\n\nconst navigateToPage = async (page: number) => {\n data.value = Object.assign({}, data.value, { page: page, sort_by: sort.value })\n const response = await getJobSearch(data.value);\n if (response.status == 200) {\n if (window.scrollY > 0) window.scrollTo(0, 0)\n jobs.value = response.data.jobs;\n pagy.value = response.data.pagy;\n totalResult.value = pagy.value.count;\n const paramsUrl = { ...route.query, page: pagy.value.page };\n router.push({ path: SEARCH_PATH, query: paramsUrl });\n }\n}\n\nconst onSaveJobCondition = () => {\n getListConditionSearch();\n}\n\nconst onCloseModal = async (element: string) => {\n const modalElementDOM = document.getElementById(element);\n modalElementDOM?.classList.remove('show');\n modalElementDOM.style.display = 'none';\n modalElementDOM?.removeAttribute('aria-modal');\n modalElementDOM?.setAttribute('aria-hidden', 'true');\n document.querySelectorAll('.modal-backdrop').forEach(backdrop => backdrop.remove());\n await nextTick();\n document.body.removeAttribute('style');\n}\n\n// Get data\n\nconst getAllData = async () => {\n await Promise.all([getPrefecturesData(), getOccupationsData(),\n getIndustryData(), getSkillsData(), getJobFeatureData(),\n getIncomesData(), getEmploymentTypesData()]);\n};\n\nconst getPrefecturesData = async () => {\n const response = await getPrefectures();\n if (response.status === 200) {\n prefectures.value = response.data;\n }\n};\n\nconst getOccupationsData = async () => {\n const response = await getOccupations();\n if (response.status === 200) {\n occupations.value = response.data;\n }\n};\n\nconst getIncomesData = async () => {\n const response = await getIncomes();\n if (response.status === 200) {\n incomes.value = response.data;\n }\n}\n\nconst getIndustryData = async () => {\n const response = await getIndustries();\n if (response.status === 200) {\n industries.value = response.data;\n }\n}\n\nconst getSkillsData = async () => {\n const response = await getSkills();\n if (response.status === 200) {\n skills.value = response.data;\n }\n}\n\nconst getJobFeatureData = async () => {\n const response = await getJobFeature();\n if (response.status === 200) {\n jobFeatures.value = response.data;\n }\n}\n\nconst getEmploymentTypesData = async () => {\n const response = await getEmploymentTypes(true);\n if (response.status === 200) {\n employmentTypes.value = response.data\n }\n}\n\nconst onOpenModaConditionSearchConfirm = (id: number, title: string) => {\n idItemSearch.value = id;\n titleItemSearch.value = title;\n modalElement.value = new Modal(<HTMLElement>document.getElementById('confirmDeleteSearchCondition'));\n modalElement.value.show();\n}\n\nconst getListConditionSearch = async () => {\n const response = await getListConditionJobSearch()\n if (response.status == 200 && response?.data?.job_search_conditions) {\n listConditionSearch.value = response?.data?.job_search_conditions.filter(item => item.service_type_flag != true)\n totalConditionSearch.value = listConditionSearch?.value?.length\n }\n}\n\nconst onDeleteSearchCondition = async (id: number) => {\n const response = await deleteConditionJobSearch(id)\n if (response.status == 200) {\n const inputSaveJobAvailable = document.getElementById('save-job-available');\n const inputSaveJobUnavailable = document.getElementById('save-job-unavailable')\n await getListConditionSearch();\n if (totalConditionSearch.value < 10 && inputSaveJobAvailable && inputSaveJobUnavailable) {\n inputSaveJobAvailable.classList.toggle('d-none');\n inputSaveJobAvailable.classList.toggle('d-block');\n inputSaveJobUnavailable.classList.toggle('d-none');\n inputSaveJobUnavailable.classList.toggle('d-block');\n }\n }\n}\n\nconst onApplySearchCondition = (searchCondition: SearchConditionType) => {\n const page = Math.max(Number(route.query.page) || 1, 1);\n const data = {\n title: searchCondition?.title,\n keywords: searchCondition?.candidate_saved_job_search_condition_freeword?.free_word,\n job_types: searchCondition?.candidate_saved_job_search_condition_occupations?.map(item => item.occupation_id),\n prefectures: searchCondition?.candidate_saved_job_search_condition_locations?.map(item => item.prefecture_id),\n city_ids: searchCondition?.candidate_saved_job_search_condition_locations?.map(item => item.city_id),\n min_annual_income: searchCondition?.annual_min_income_id || '',\n max_annual_income: searchCondition?.annual_max_income_id || '',\n industries: searchCondition?.candidate_saved_job_search_condition_industries?.map(item => item.industry_id),\n skills: searchCondition?.candidate_saved_job_search_condition_skills?.map(item => item.skill_id),\n employment_types: searchCondition?.candidate_saved_job_search_condition_employment_types?.map(item => item.employment_type_id),\n job_features: searchCondition?.candidate_saved_job_search_condition_features?.map(item => item.feature_id),\n direct: \"true\",\n page: page === 1 ? undefined : page\n }\n modalElement.value = new Modal(<HTMLElement>document.getElementById('jobCondition'));\n modalElement.value.show();\n router.push({ path: SEARCH_PATH, query: data });\n}\n\nconst onOpenModalSearchJob = () => {\n modalElement.value = new Modal(<HTMLElement>document.getElementById('jobCondition'));\n modalElement.value.show();\n}\n\nconst stripHtmlTags = (html: string) => {\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = html;\n return tempDiv.textContent || tempDiv.innerText || '';\n};\n\nconst isDescriptionLong = (jobDescription: string ) => {\n const plainText = stripHtmlTags(jobDescription);\n return plainText.length > 200;\n};\n\nconst handleShowHideDescription = (jobId: number) => {\n const jobIndex = jobs.value.findIndex(item => item.id == jobId)\n jobs.value[jobIndex].isShowFullDescription = !jobs.value[jobIndex].isShowFullDescription;\n if (!jobs.value[jobIndex].isShowFullDescription) {\n const cardJobElement = document.getElementById(`job-card-${jobId}`)\n cardJobElement?.scrollIntoView(true)\n }\n}\n\nconst redirectToAgentJobs = () => {\n const urlParams = new URLSearchParams(window.location.search);\n urlParams.delete('direct');\n urlParams.delete('page');\n urlParams.delete('employment_types');\n urlParams.delete('job_features');\n \n if (urlParams.has('min_annual_income')) {\n const value = urlParams.get('min_annual_income') || '';\n urlParams.delete('min_annual_income');\n urlParams.set('wage_min', value);\n }\n if (urlParams.has('max_annual_income')) {\n const value = urlParams.get('max_annual_income') || '';\n urlParams.delete('max_annual_income');\n urlParams.set('wage_max', value);\n }\n \n window.location.href = `${AGENT_SEARCH_PATH}&${urlParams.toString()}`;\n}\n\nconst closeWelcomeModal = () => {\n welcomeModal.value?.hide()\n}\n\nconst truncateHtml = (html: string, maxLength: number) => {\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = html;\n\n let truncatedText = '';\n let currentLength = 0;\n\n const traverseNodes = (node) => {\n if (currentLength >= maxLength) return;\n\n if (node.nodeType === Node.TEXT_NODE) {\n const text = node.textContent;\n const remainingLength = maxLength - currentLength;\n\n if (text.length > remainingLength) {\n truncatedText += text.slice(0, remainingLength) + '...';\n currentLength = maxLength;\n } else {\n truncatedText += text;\n currentLength += text.length;\n }\n } else if (node.nodeType === Node.ELEMENT_NODE) {\n const clonedNode = node.cloneNode(false);\n for (let child of node.childNodes) {\n traverseNodes(child);\n if (currentLength >= maxLength) break;\n }\n if (currentLength < maxLength) {\n truncatedText += clonedNode.outerHTML;\n }\n }\n };\n\n traverseNodes(tempDiv);\n return truncatedText;\n};\n\n// getParentCategoryName髢「謨ー繧定ソス蜉�\nconst getParentCategoryName = (ids: string | string[], items: any[]) => {\n if (!ids || !items) return '';\n\n // 驟榊�縺ァ縺ェ縺��エ蜷医�驟榊�縺ォ螟画鋤\n const idArray = Array.isArray(ids) ? ids : [ids];\n const idNums = idArray.map(id => parseInt(id, 10));\n\n // 蜊倅ク縺ョID縺ョ蝣エ蜷医�蜃ヲ逅�\n if (idArray.length === 1) {\n const idNum = idNums[0];\n\n // 縺セ縺壼ュ舌き繝�ざ繝ェ繧呈爾縺兔n for (const parent of items) {\n if (parent.children) {\n const child = parent.children.find(child => child.id === idNum);\n if (child) {\n return child.name;\n }\n }\n }\n\n // 隕ェ繧ォ繝�ざ繝ェ繧呈爾縺兔n const parent = items.find(item => item.id === idNum);\n if (parent) {\n return parent.name;\n }\n } else {\n // 隍�焚縺ョID縺ョ蝣エ蜷医∝腰荳縺ョ隕ェ繧ォ繝�ざ繝ェ縺ョ蜈ィ縺ヲ縺ョ蟄舌き繝�ざ繝ェ縺碁∈謚槭&繧後※縺�k縺九メ繧ァ繝�け\n for (const parent of items) {\n if (parent.children) {\n const childIds = parent.children.map(child => child.id);\n \n // 驕ク謚槭&繧後◆ID縺悟�縺ヲ蜷後§隕ェ繧ォ繝�ざ繝ェ縺ョ蟄舌き繝�ざ繝ェ縺九メ繧ァ繝�け\n const allSelectedIdsAreChildren = idNums.every(id => childIds.includes(id));\n \n // 縺昴�隕ェ繧ォ繝�ざ繝ェ縺ョ蜈ィ縺ヲ縺ョ蟄舌き繝�ざ繝ェ縺碁∈謚槭&繧後※縺�k縺九メ繧ァ繝�け\n const allChildrenAreSelected = childIds.every(id => idNums.includes(id));\n\n if (allSelectedIdsAreChildren && allChildrenAreSelected) {\n return parent.name;\n }\n }\n }\n\n // 荳願ィ倥�譚。莉カ縺ォ蠖薙※縺ッ縺セ繧峨↑縺��エ蜷茨シ郁、�焚縺ョ逡ー縺ェ繧玖ヲェ縺ョ蟄舌き繝�ざ繝ェ縺碁∈謚槭&繧後※縺�k蝣エ蜷医↑縺ゥ�噂n return '';\n }\n\n return '';\n};\n\nconst getMaxVisiblePages = () => {\n if (pagy.value.page <= 6) return Math.min(5 + pagy.value.page - 1, 9);\n if (pagy.value.page >= pagy.value.pages - 5) return Math.min(5 + (pagy.value.pages - pagy.value.page), 9);\n return 9;\n}\n\nconst getMaxVisiblePagesSP = () => {\n if (pagy.value.page >= 4 && pagy.value.pages - pagy.value.page >= 2) return 3;\n return 4;\n}\n\n// computed 繝励Ο繝代ユ繧」繧定ソス蜉�\nconst getOccupationName = computed(() => \n getParentCategoryName(route.query.job_types, occupations.value)\n);\n\nconst getIndustryName = computed(() => \n getParentCategoryName(route.query.industries, industries.value)\n);\n\nconst getSkillName = computed(() => \n getParentCategoryName(route.query.skills, skills.value)\n);\n\nconst getPrefectureName = computed(() => \n getParentCategoryName(route.query.prefectures, prefectures.value)\n);\n\nconst getJobFeatureName = computed(() => \n getParentCategoryName(route.query.job_features, jobFeatures.value)\n);\n\nconst getDisplayName = computed(() => {\n if (route.query.job_types?.length > 0 && getOccupationName.value) return getOccupationName.value;\n if (route.query.industries?.length > 0 && getIndustryName.value) return getIndustryName.value;\n if (route.query.skills?.length > 0 && getSkillName.value) return getSkillName.value;\n if (route.query.prefectures?.length > 0 && getPrefectureName.value) return getPrefectureName.value;\n if (route.query.keywords) return `繧ュ繝シ繝ッ繝シ繝会シ�${route.query.keywords}`;\n return '';\n});\n\nconst h1Title = computed(() => {\n const name = getDisplayName.value;\n return name ? `${name}縺ョ遉セ蜀�SE繝繧、繝ャ繧ッ繝域アゆココ` : '縺吶∋縺ヲ縺ョ遉セ蜀�SE繝繧、繝ャ繧ッ繝域アゆココ';\n});\n\nconst getPageTitle = (name: string) => {\n return name ? `${name} 縺ョ遉セ蜀�SE 霆「閨キ繝サ豎ゆココ�懊ム繧、繝ャ繧ッ繝医せ繧ォ繧ヲ繝医〒莨∵・ュ縺九i逶エ謗・繧ェ繝輔ぃ繝シ - 遉セ蜀�SE霆「閨キ繝翫ン` \n : '遉セ蜀�SE縺ョ繝繧、繝ャ繧ッ繝郁サ「閨キ繝サ豎ゆココ讀懃エ「荳隕ァ�懊ム繧、繝ャ繧ッ繝医せ繧ォ繧ヲ繝医〒莨∵・ュ縺九i逶エ謗・繧ェ繝輔ぃ繝シ - 遉セ蜀�SE霆「閨キ繝翫ン';\n};\n\nconst getPageDescription = (name: string) => {\n return name ? `${name}縺ョ繝繧、繝ャ繧ッ繝�IT霆「閨キ繝サ豎ゆココ諠��ア繝壹�繧ク縲ゆシ∵・ュ縺ョ莠コ莠区球蠖楢�°繧臥峩謗・繧ケ繧ォ繧ヲ繝医r蜿励¢繧峨l繧九メ繝」繝ウ繧ケ縲ら、セ蜀�SE縺ォ迚ケ蛹悶@縺溘ム繧、繝ャ繧ッ繝医し繝シ繝薙せ縲檎、セ蜀�SE霆「閨キ繝翫ン縲阪� 螟ァ謇九�蜆ェ濶ッ莨∵・ュ縺ェ縺ゥ雎雁ッ後↑豎ゆココ謗イ霈我クュ縲A \n : '蝗ス蜀�怙螟ァ邏壹�遉セ蜀�SE繝サ諠��ア繧キ繧ケ繝�Β縲∬サ「閨キ繝サ豎ゆココ讀懃エ「繝繧、繝ャ繧ッ繝医�繝シ繧ク縺ァ縺吶ゆシ∵・ュ縺ョ莠コ莠区球蠖楢�°繧臥峩謗・繧ケ繧ォ繧ヲ繝医r蜿励¢繧峨l繧九メ繝」繝ウ繧ケ縲ら、セ蜀�SE縺ォ迚ケ蛹悶@縺溘ム繧、繝ャ繧ッ繝医し繝シ繝薙せ縲檎、セ蜀�SE霆「閨キ繝翫ン縲阪� 螟ァ謇九�蜆ェ濶ッ莨∵・ュ縺ェ縺ゥ雎雁ッ後↑豎ゆココ謗イ霈我クュ縲�';\n};\n\nconst title = computed(() => {\n return getPageTitle(getDisplayName.value);\n});\n\nconst description = computed(() => {\n return getPageDescription(getDisplayName.value);\n});\n\nconst keywords = computed(() => {\n const baseKeywords = '遉セ蜀�SE,霆「閨キ,豎ゆココ,IT霆「閨キ';\n return getDisplayName.value ? `${getDisplayName.value},${baseKeywords}` : baseKeywords;\n});\n\nwatch([title, description], () => {});\n\nwatch(() => route.query, () => {}, { deep: true });\n\n// useHead縺ョ險ュ螳壹r荳蠎ヲ縺�縺題。後≧\nuseHead({\n title,\n meta: [\n {\n name: 'description',\n content: description\n },\n {\n name: 'keywords',\n content: keywords\n },\n {\n property: 'og:site_name',\n content: \"遉セ蜀�SE霆「閨キ繝翫ン\"\n },\n {\n property: 'og:image',\n content: \"https://se-navi.jp/ogp_se.webp\"\n },\n {\n property: 'og:title',\n content: title\n },\n {\n property: 'og:description',\n content: description\n },\n {\n property: 'og:url',\n content: window.location.href\n },\n {\n property: 'twitter:image',\n content: \"https://se-navi.jp/ogp_se.webp\"\n },\n {\n name: 'twitter:title',\n content: title\n },\n {\n name: 'twitter:description',\n content: description\n }\n ]\n});\n</script>\n\n<style lang=\"scss\">\n@import url('@/assets/stylesheets/pages/search.scss');\n\n.job-search-container {\n @media screen and (min-width: 768px) {\n flex-wrap: nowrap;\n }\n}\n\n.job-description {\n white-space: pre-line;\n}\n\n::v-deep .job-search {\n transition: all 0.3s ease;\n max-height: calc(100vh - 30px);\n overflow-y: auto;\n}\n\n.no-bounce-x {\n @media screen and (max-width: 767px) {\n overflow-y: auto;\n overflow-x: hidden;\n }\n}\n</style>\n","export default \"__VITE_ASSET__5634016e__\"","<template>\n <div v-if=\"!isListSearchEnable\" class=\"position-sticky top-86x\">\n <form class=\"job-search w-317x container container-primary my-15 px-0\"\n @submit=\"onSubmitForSearchJob\">\n <div class=\"alert alert-success alert-dismissible fade show text-danger\" role=\"alert\"\n v-if=\"saveJobSearchResult == 'limited'\">\n 菫晏ュ倥〒縺阪k譚。莉カ縺ョ荳企剞��10莉カ�峨↓驕斐@縺ヲ縺�∪縺兔n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"alert\" aria-label=\"Close\"></button>\n </div>\n <div class=\"alert alert-success alert-dismissible fade show\" role=\"alert\" v-if=\"saveJobSearchResult == 'success'\">\n 譖エ譁ー縺梧ュ」蟶ク縺ォ螳御コ�@縺セ縺励◆縲�\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"alert\" aria-label=\"Close\"></button>\n </div>\n <div class=\"alert alert-danger alert-dismissible fade show\" role=\"alert\" v-if=\"saveJobSearchResult == 'fail'\">\n 譖エ譁ー縺御クュ譁ュ縺輔l縺セ縺励◆縲�\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"alert\" aria-label=\"Close\"></button>\n </div>\n <div class=\"bg-blue-primary d-md-flex justify-content-center d-none rounded-top-8\">\n <p class=\"m-2 text-white\">讀懃エ「譚。莉カ</p>\n </div>\n <div class=\"bg-white-primary mx-3 mx-md-0\">\n <div class=\"search-job-agent__body overflow-y-scroll\">\n <div class=\"d-flex justify-content-center py-2 bg-silver-primary\">\n <button type=\"button\"\n class=\"btn bg-white d-flex justify-content-center align-items-center bg-silver-primary\"\n @click=\"toggleConditionSearchStatus\">\n <img src=\"@/assets/images/icons/menu.svg\" class=\"me-2\" />\n <div class=\"flex-grow-1 size-12 lh-12 fw-medium color-blue-primary\">菫晏ュ倥@縺滓、懃エ「譚。莉カ</div>\n </button>\n </div>\n <!-- Occupation -->\n <Occupation @open=\"onOpenModalOccupation\" @remove=\"onRemoveOccupation\" :occupations=\"occupationSelected\" />\n <hr class=\"color-grey-primary opacity-100\">\n\n <!-- Prefecture -->\n <DesiredJob @open=\"onOpenModalPrefecture\" @remove=\"onRemovePrefecture\" :prefectures=\"prefectureSelected\" />\n <hr class=\"color-grey-primary opacity-100\">\n\n <!-- annual-income -->\n <AnnualIncome @changeMin=\"onChangeMinIncome\" @changeMax=\"onChangeMaxIncome\" :min_income=\"minIncomeSelected\"\n :max_income=\"maxIncomeSelected\" :incomes=\"props.incomes\" />\n <hr class=\"color-grey-primary opacity-100\">\n\n <!-- Industry -->\n <Industry @open=\"onOpenModalIndustry\" @remove=\"onRemoveIndusty\" :industries=\"industriesSelected\" />\n <hr class=\"color-grey-primary opacity-100\">\n\n <!-- Skill -->\n <Skill @open=\"onOpenModalSkill\" @remove=\"onRemoveSkill\" :skills=\"skillSelected\" />\n <hr class=\"color-grey-primary opacity-100\">\n\n <!-- Search word -->\n <div class=\"row mx-3 justify-content-start\">\n <span class=\"form-label align-self-start size-12 p-0\">繝輔Μ繝シ繝ッ繝シ繝�</span>\n <input type=\"text\" v-model=\"searchWord\" name=\"search_word\"\n class=\"form-control size-14 bg-silver-primary input-primary\" placeholder=\"萓具シ俄雷笳銀雷\"\n v-on:keydown.enter.prevent=\"search\">\n </div>\n </div>\n <hr class=\"color-grey-primary opacity-100\">\n\n <div class=\"job-search__footer justify-content-center mb-3\">\n <div class=\"text-center\">\n <p class=\"size-12 fw-bold\">縺薙�譚。莉カ縺ョ豎ゆココ謨ー<span class=\"size-20 px-2\"><vue3-autocounter ref='counter'\n :startAmount='0' :endAmount='resultSearch' :duration='1' :autoinit='true'\n @finished='' /></span><span>莉カ</span></p>\n </div>\n <div class=\"d-flex justify-content-center\">\n <button type=\"button\"\n class=\"w-285x align-items-center justify-content-center d-flex h-48x btn btn-primary py-3 size-12 col-12 col-md-9\"\n @click=\"() => onChangeResultSearch(true)\" data-bs-dismiss=\"modal\">\n 縺薙�譚。莉カ縺ァ讀懃エ「\n </button>\n </div>\n\n <div class=\"h-48x d-flex justify-content-center mt-3\">\n <div v-if=\"totalConditionSearch < 10\">\n <button type=\"button\"\n class=\"w-285x h-48x justify-content-center d-flex align-items-center btn btn-outline-secondary rounded-24 py-3 size-12 col-12 col-md-9\"\n data-bs-toggle=\"modal\" data-bs-target=\"#saveJobCondition\">\n 縺薙�譚。莉カ繧剃ソ晏ュ禄n </button>\n </div>\n <div v-else>\n <button type=\"button\"\n class=\"w-285x justify-content-center d-flex align-items-center btn btn-outline-secondary rounded-24 py-3 size-12 col-12 col-md-9 disabled\">\n 縺薙�譚。莉カ繧剃ソ晏ュ禄n </button>\n <p class=\"text-danger size-12 text-center\">菫晏ュ倥〒縺阪k譚。莉カ縺ョ荳企剞��10莉カ�峨↓驕斐@縺ヲ縺�∪縺�</p>\n </div>\n </div>\n\n <!-- Clear condition search -->\n <div class=\"text-center mt-2 mw-100 h-46x d-flex justify-content-center align-items-center\">\n <button type=\"button\" class=\"btn btn-link color-blue-primary text-decoration-none size-12\"\n @click=\"onClearConditionSearch\">\n <img src=\"@/assets/images/icons/ic-remove.svg\" alt=\"Group icon\" class=\"mb-2x\">\n 譚。莉カ繧偵け繝ェ繧「\n </button>\n </div>\n </div>\n </div>\n </form>\n </div>\n\n <div v-else class='position-relative'>\n <div class=\"job-search list-condition-search position-absolute position-fixed w-317x\"\n :style=\"{ top: isScrolled ? '100px' : '', bottom: isScrolledBottom ? '0' : '' }\">\n <div class=\"bg-blue-primary my-15 py-2 rounded-2 rounded-bottom-0\">\n <div class=\"d-flex col-10 justify-content-center align-items-center\">\n <p class=\"text-white m-0 ms-5\">菫晏ュ倥@縺滓、懃エ「譚。莉カ</p>\n </div>\n </div>\n <div class=\"text-center bg-grey-05 py-2 border-start border-end border-white shadow-sm\"\n @click=\"toggleConditionSearchStatus\">\n <img src=\"@/assets/images/icons/arrow-left-blue.svg\" alt=\"Back icon\">\n <span class=\"ms-2 color-blue-primary cursor-pointer\">譚。莉カ險ュ螳壹↓謌サ繧�</span>\n </div>\n <div class=\"list-job-container overflow-y-scroll bg-white mb-5 shadow-sm rounded-bottom-2\">\n <div v-if=\"totalConditionSearch == 0\">\n <p class=\"pt-3 text-center text-black-50 text-opacity-50\">菫晏ュ倥@縺滓、懃エ「譚。莉カ縺ッ縺ゅj縺セ縺帙s</p>\n </div>\n <div class=\"border-bottom border-start-white border-end-white\" v-for=\"searchCondition in listConditionSearch\">\n <div class=\"d-flex justify-content-between px-3\">\n <div class=\"d-flex cursor-pointer\" @click=\"onApplySearchCondition(searchCondition)\">\n <img src=\"@/assets/images/icons/arrow_curved_left.svg\" alt=\"Back icon\">\n <p class=\"text-black my-3 mx-2 truncate-text w-14\" :title=\"searchCondition.title\">{{\n searchCondition.title }}</p>\n </div>\n <img src=\"@/assets/images/icons/trash_grey.svg\" alt=\"Back icon\" class=\"cursor-pointer\"\n @click=\"onOpenModaConditionSearchConfirm(searchCondition.id, searchCondition.title)\">\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"modal fade\" id=\"saveJobCondition\" tabindex=\"-1\" aria-hidden=\"true\">\n <div class=\"modal-dialog\">\n <div class=\"modal-content\">\n <div class=\"d-flex justify-content-end px-3 pt-3\">\n <button role=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\"></button>\n </div>\n <div class=\"modal-body p-0\">\n <div class=\"d-flex justify-content-center p-0\">\n <p class=\"m-2 fw-bold size-16\">讀懃エ「譚。莉カ繧剃ソ晏ュ�</p>\n </div>\n <div class=\"row mx-3 justify-content-start px-3\">\n <span class=\"form-label align-self-start size-12\">讀懃エ「譚。莉カ蜷�</span>\n <input type=\"text\" v-model=\"title\" name=\"title\"\n class=\"form-control size-14 border-0 bg-silver-primary input-primary\" maxlength=\"100\">\n <div class=\"d-flex justify-content-end counter text-black-50 size-10 mt-2\">\n 譁�ュ玲焚�� {{ title?.length }}\n </div>\n </div>\n <div class=\"h-48x d-flex justify-content-center my-4\">\n <button type=\"button\"\n class=\"align-items-center justify-content-center d-flex h-48x w-285x btn btn-primary rounded-24 py-3 size-12\"\n @click=\"onSubmitForSearchJob\" data-bs-dismiss=\"modal\">\n 縺薙�譚。莉カ繧剃ソ晏ュ禄n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"modal fade\" id=\"confirmDeleteSearchConditionPC\" tabindex=\"-1\" aria-hidden=\"true\">\n <div class=\"modal-dialog\">\n <div class=\"modal-content\">\n <div class=\"d-flex justify-content-end px-3 pt-3\">\n <button role=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\"></button>\n </div>\n <div class=\"modal-body p-0\">\n <div class=\"d-flex justify-content-center p-0\">\n <h6 class=\"m-2 px-4\">�「{{ titleItemSearch }}�」 繧貞炎髯、縺励∪縺吶°��</h6>\n </div>\n <div class=\"h-48x d-flex justify-content-center my-4\">\n <button type=\"button\"\n class=\"btn-center btn-primary bg-white py-2 px-4 color-blue-primary size-12 pe-auto w-8\"\n data-bs-dismiss=\"modal\" aria-label='Close'>\n 繧ュ繝」繝ウ繧サ繝ォ\n </button>\n <button type=\"button\" class=\"btn-center btn-primary py-2 px-4 ms-4 text-white size-12 pe-auto w-8\"\n @click=\"onDeleteSearchCondition(idItemSearch)\" data-bs-dismiss=\"modal\">\n 蜑企勁縺吶k\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <ModalBase ref=\"modalOccupations\" element=\"modalOccupationsElement\" title=\"閨キ遞ョ繧帝∈縺カ\" @addItems=\"addOccupations\">\n <template #body>\n <div id=\"occupation-accordion\" class=\"accordion accordion-primary\">\n <div class=\"accordion-item\" v-for=\"occupation in props.occupations\">\n <div class=\"accordion-header px-3 py-2\">\n <div class=\"flex-grow-1\">\n <input type=\"checkbox\" class=\"form-check-input collapsed checkbox-primary-input w-1d5 h-1d5 mt-0\"\n :id=\"`occupation-item-input-${occupation.id}`\"\n @change=\"(e) => onChooseOccupationCategory(occupation, e)\"\n :checked=\"valuesOccupations.some(item => item.id == occupation.id)\">\n <label class=\"form-check-label size-12 ms-3\"\n :for=\"`occupation-item-input-${occupation.id}`\">\n {{ occupation.name }}\n </label>\n </div>\n <div v-show=\"occupation?.children && occupation?.children.length\"\n class=\"accordion-button collapsed d-contents\" data-bs-toggle=\"collapse\"\n :data-bs-target=\"`#occupation-item-${occupation.id}-search`\"\n aria-expanded=\"true\"\n :aria-controls=\"`#occupation-item-${occupation.id}-search`\"></div>\n </div>\n <div class=\"row mx-2 my-2 pe-0 accordion-collapse collapse\" :id=\"`occupation-item-${occupation.id}-search`\">\n <div class=\"py-2 d-flex w-unset align-items-center accordion-body\" :aria-labelledby=\"`occupation-${occupation.id}`\"\n v-for=\"children in occupation.children\">\n <input type=\"checkbox\"\n class=\"form-check-input checkbox-primary-input w-1d5 h-1d5 d-flex flex-inherit mt-0\"\n :id=\"`occupation-item-input-${children.id}`\"\n :checked=\"valuesOccupations.some(item => item.children.some(c => c.id == children.id))\"\n @click=\"onChooseOccupation(occupation, children)\">\n <label class=\"form-check-label size-12 ms-3\" :for=\"`occupation-item-input-${children.id}`\">\n {{ children.name }}\n </label>\n </div>\n </div>\n </div>\n </div>\n </template>\n </ModalBase>\n\n <ModalBase ref=\"modalPrefecture\" element=\"modalPrefectureElement\" title=\"蜍、蜍吝慍繧帝∈縺カ\" @addItems=\"addPrefectures\">\n <template #body>\n <div class=\"py-24x px-40x d-flex gap-3 w-100 accordion__left\">\n <div class=\"d-flex p-0 m-0 w-160x align-items-start\">\n <div class=\"border rounded-8 border-1 border flex-grow-1 align-items-start\">\n <div v-for=\"prefecture in prefectures\"\n :class=\"`prefecture-item py-3 px-24x border-bottom cursor-pointer ${prefectureAccordionSelected === prefecture.id && 'accordion__left--active'}`\"\n @click=\"prefectureAccordionSelected = prefecture.id\">\n {{ prefecture.name }}\n </div>\n </div>\n </div>\n <div class=\"accordion accordion-primary flex-grow-1\">\n <div\n :class=\"`accordion accordion-item accordion-primary border-grey-10 d-flex border flex-column ${prefectureChildrens && index !== prefectureChildrens.length - 1 ? 'border-bottom-0' : ''}`\"\n id=\"prefecture-accordion\" v-for=\"children, index in prefectureChildrens\" :key=\"children.id\">\n <div class=\"accordion-header px-3 py-2\">\n <div class=\"flex-grow-1\">\n <input type=\"checkbox\" class=\"form-check-input collapsed checkbox-primary-input w-1d5 h-1d5 mt-0\"\n :id=\"`prefecture-item-input-${prefectureAccordionSelected}-children-${children.id}`\"\n @change=\"onChangePrefecture(children)\"\n :checked=\"valuesPrefectures.some(item => item.id == children.id)\">\n <label class=\"form-check-label size-12 ms-3\"\n :for=\"`prefecture-item-input-${prefectureAccordionSelected}-children-${children.id}`\">\n {{ children.name }}\n </label>\n </div>\n </div>\n </div>\n </div>\n </div>\n </template>\n </ModalBase>\n\n <ModalBase ref=\"modalIndustry\" element=\"modalIndustryElement\" title=\"讌ュ遞ョ繧定ソス蜉�縺吶k\" @addItems=\"addIndustries\">\n <template #body>\n <div class=\"accordion accordion-primary\">\n <div class=\"accordion-item\" v-for=\"industry in props.industries\">\n <div class=\"accordion-header px-3 py-2\">\n <div class=\"flex-grow-1\">\n <input type=\"checkbox\" class=\"form-check-input collapsed checkbox-primary-input w-1d5 h-1d5 mt-0\"\n :id=\"`industry-item-input-${industry.id}`\"\n @change=\"(e) => onChooseIndustryCategory(industry, e)\"\n :checked=\"valuesIndustries.some(item => item.id == industry.id)\">\n <label class=\"form-check-label size-12 ms-3\"\n :for=\"`industry-item-input-${industry.id}`\">\n {{ industry.name }}\n </label>\n </div>\n <div v-show=\"industry?.children && industry?.children.length\"\n class=\"accordion-button collapsed d-contents\" data-bs-toggle=\"collapse\"\n :data-bs-target=\"`#industry-item-${industry.id}-search`\"\n aria-expanded=\"true\"\n :aria-controls=\"`#industry-item-${industry.id}-search`\"></div>\n </div>\n <div class=\"row mx-2 my-2 pe-0 accordion-collapse collapse\" :id=\"`industry-item-${industry.id}-search`\">\n <div class=\"py-2 d-flex w-unset align-items-center accordion-body\" :aria-labelledby=\"`industry-${industry.id}`\"\n v-for=\"children in industry.children\">\n <input type=\"checkbox\"\n class=\"form-check-input checkbox-primary-input w-1d5 h-1d5 d-flex flex-inherit mt-0\"\n :id=\"`industry-item-input-${children.id}`\"\n :checked=\"valuesIndustries.some(item => item.children.some(c => c.id == children.id))\"\n @click=\"onChooseIndustry(industry, children)\">\n <label class=\"form-check-label size-12 ms-3\" :for=\"`industry-item-input-${children.id}`\">\n {{ children.name }}\n </label>\n </div>\n </div>\n </div>\n </div>\n </template>\n </ModalBase>\n\n <ModalBase ref=\"modalSkills\" element=\"modalSkillsElement\" title=\"繧ケ繧ュ繝ォ繧帝∈縺カ\" @addItems=\"addSkills\">\n <template #body>\n <div class=\"accordion accordion-primary\">\n <div class=\"accordion-item\" v-for=\"skill in props.skills\">\n <div class=\"accordion-header px-3 py-2\">\n <div class=\"flex-grow-1\">\n <input type=\"checkbox\" class=\"form-check-input collapsed checkbox-primary-input w-1d5 h-1d5 mt-0\"\n :id=\"`skill-item-input-${skill.id}`\"\n @change=\"(e) => onChooseSkillCategory(skill, e)\"\n :checked=\"valueSkills.some(item => item.id == skill.id)\">\n <label class=\"form-check-label size-12 ms-3\"\n :for=\"`skill-item-input-${skill.id}`\">\n {{ skill.name }}\n </label>\n </div>\n <div v-show=\"skill?.children && skill?.children.length\"\n class=\"accordion-button collapsed d-contents\" data-bs-toggle=\"collapse\"\n :data-bs-target=\"`#skill-item-${skill.id}-search`\"\n aria-expanded=\"true\"\n :aria-controls=\"`#skill-item-${skill.id}-search`\"></div>\n </div>\n <div class=\"row mx-2 my-2 pe-0 accordion-collapse collapse\" :id=\"`skill-item-${skill.id}-search`\">\n <div class=\"py-2 d-flex w-unset align-items-center accordion-body\" :aria-labelledby=\"`skill-${skill.id}`\"\n v-for=\"children in skill.children\">\n <input type=\"checkbox\"\n class=\"form-check-input checkbox-primary-input w-1d5 h-1d5 d-flex flex-inherit mt-0\"\n :id=\"`skill-item-input-${children.id}`\"\n :checked=\"valueSkills.some(item => item.children.some(c => c.id == children.id))\"\n @click=\"onChooseSkill(skill, children)\">\n <label class=\"form-check-label size-12 ms-3\" :for=\"`skill-item-input-${children.id}`\">\n {{ children.name }}\n </label>\n </div>\n </div>\n </div>\n </div>\n </template>\n </ModalBase>\n</template>\n\n<script setup lang=\"ts\">\nimport _ from 'lodash';\nimport { computed, nextTick, onMounted, PropType, ref, watchEffect } from \"vue\";\nimport { Collapse } from 'bootstrap';\n\nimport ModalBase from \"@/components/common/ModalBase/index.vue\";\nimport Occupation from '@/components/JobSearch/Occupation.vue';\nimport DesiredJob from '@/components/JobSearch/DesiredJob.vue';\nimport AnnualIncome from '@/components/JobSearch/AnnualIncome.vue';\nimport Industry from '@/components/JobSearch/Industry.vue';\nimport Skill from '@/components/JobSearch/Skill.vue';\nimport { OccupationPrimary, OccupationThirdary } from '@/types/models/occupation';\nimport { PrefectureFifth, PrefectureFourth, PrefecturePrimary, PrefectureSecondary } from '@/types/models/prefecture';\nimport { IndustryType } from '@/types/models/industryType';\nimport { SkillsType } from '@/types/models/skill';\nimport { IncomePrimary } from '@/types/models/income';\nimport { cloneDeep, find, forEach, reject } from 'lodash'\nimport Vue3Autocounter from 'vue3-autocounter';\nimport { CityPrimary } from '@/types/models/city';\nimport {deleteConditionJobSearch, getAgentJobs, getListConditionJobSearch, getTokenAuthAgent } from '@/apis/job.api';\nimport { AuthTokenResponse } from '@/types/pages/job/agent/ResponseAuthToken'\nimport { saveJobSearchCondition } from '@/apis/candidate';\nimport { Modal } from 'bootstrap';\nimport { AGENT_SEARCH_PATH } from \"@/constant/routers/path\";\nimport router from '@/routers';\nimport { useRoute } from 'vue-router';\nimport { KANTO_ID } from '@/constant';\n\nconst valuesPrefectures = ref<PrefecturePrimary[]>([]);\nconst valuesOccupations = ref<OccupationThirdary[]>([]);\nconst valuesIndustries = ref<IndustryType[]>([]);\nconst valueSkills = ref<SkillsType[]>([]);\nconst searchWord = ref<string | null>(null);\nconst totalConditionSearch = ref<number>(0);\n\nconst saveJobSearchResult = ref<string | null>(null);\nconst listConditionSearch = ref();\nconst isListSearchEnable = ref(false);\nconst isScrolled = ref(false);\nconst isScrolledBottom = ref(false);\nconst idItemSearch = ref(0);\nconst titleItemSearch = ref('');\nconst modalElement = ref();\nconst title = ref<string | null>(null);\nconst perPage = 30;\nconst route = useRoute();\n\nlet prefectureSelected = ref<PrefectureFourth[]>([]);\nlet occupationSelected = ref<OccupationThirdary[]>([]);\nlet industriesSelected = ref<IndustryType[]>([]);\nlet skillSelected = ref<SkillsType[]>([]);\nlet minIncomeSelected = ref<IncomePrimary>();\nlet maxIncomeSelected = ref<IncomePrimary>();\nconst prefectureAccordionSelected = ref<number>(KANTO_ID);\n\nconst modalPrefecture = ref<InstanceType<typeof ModalBase> | null>(null);\nconst modalOccupations = ref<InstanceType<typeof ModalBase> | null>(null);\nconst modalIndustry = ref<InstanceType<typeof ModalBase> | null>(null);\nconst modalSkills = ref<InstanceType<typeof ModalBase> | null>(null);\n\nlet resultSearch = ref(0);\n\nonMounted(async () => {\n await getListConditionSearch();\n await getParamSearch();\n onChangeResultSearch(false);\n title.value = getCurrentDate();\n});\n\nwatchEffect(() => {\n if(!props.prefectures.length || prefectureAccordionSelected.value) return;\n prefectureAccordionSelected.value = props.prefectures[0].id;\n});\n\nconst prefectureChildrens = computed(() => {\n const prefecturesFound = props.prefectures.find((prefecture: any) => prefecture.id === prefectureAccordionSelected.value);\n if (prefecturesFound) return prefecturesFound.children;\n return [];\n});\n\nconst getCurrentDate = () => {\n const currentDate = new Date();\n const month = String(currentDate.getMonth() + 1).padStart(2, '0');\n const day = String(currentDate.getDate()).padStart(2, '0');\n const time = String(currentDate.getHours()).padStart(2, '0') + ':' + String(currentDate.getMinutes()).padStart(2, '0')\n + ':' + String(currentDate.getSeconds()).padStart(2, '0');\n\n return currentDate.getFullYear() + '/' + month + '/' + day + ' ' + time\n}\n\nconst onOpenModalOccupation = () => {\n modalOccupations?.value?.onOpen()\n}\n\nconst addOccupations = () => {\n occupationSelected.value = cloneDeep(valuesOccupations.value)\n search();\n}\n\nconst onChooseOccupationCategory = (occupation, event) => {\n event.stopPropagation();\n \n const isCurrentlySelected = valuesOccupations.value.some(item => item.id === occupation.id);\n \n if (!isCurrentlySelected) {\n const newOccupation = {\n id: occupation.id,\n name: occupation.name,\n children: []\n };\n \n occupation.children.forEach(child => {\n newOccupation.children.push({\n id: child.id,\n name: child.name\n });\n });\n \n valuesOccupations.value.push(newOccupation);\n } else {\n const index = valuesOccupations.value.findIndex(item => item.id === occupation.id);\n if (index !== -1) {\n valuesOccupations.value.splice(index, 1);\n }\n }\n \n // 繧「繧ウ繝シ繝�ぅ繧ェ繝ウ繧帝幕縺十n const accordionId = `occupation-item-${occupation.id}-search`;\n const accordionElement = document.getElementById(accordionId);\n if (accordionElement) {\n const collapse = Collapse.getInstance(accordionElement) || new Collapse(accordionElement);\n if (!accordionElement.classList.contains('show')) {\n collapse.show();\n }\n }\n \n search();\n}\n\nconst onChooseOccupation = (occupationCategory: OccupationThirdary, occupation: OccupationThirdary) => {\n if (_.find(valuesOccupations.value, { id: occupationCategory.id })) {\n selectedOccupation(occupationCategory, occupation);\n } else {\n valuesOccupations.value.push({ id: occupationCategory.id, name: occupationCategory.name, children: [] });\n selectedOccupation(occupationCategory, occupation);\n }\n}\n\nconst selectedOccupation = (occupationCategory: OccupationThirdary, occupation: OccupationThirdary) => {\n let occupationCategoryEntry = _.find(valuesOccupations.value, { id: occupationCategory.id });\n if (occupationCategoryEntry) {\n if (_.find(occupationCategoryEntry.children, { id: occupation.id })) {\n occupationCategoryEntry.children = _.reject(occupationCategoryEntry.children, { id: occupation.id });\n } else {\n occupationCategoryEntry.children.push(occupation);\n }\n\n if (occupationCategoryEntry.children.length === 0) {\n valuesOccupations.value = _.reject(valuesOccupations.value, { id: occupationCategory.id });\n\n _.forEach(props.occupations, item => {\n if (item.id === occupationCategory.id) {\n item.selected = false;\n }\n });\n }\n }\n};\n\nconst onRemoveOccupation = (occupationId: number) => {\n valuesOccupations.value = valuesOccupations.value\n .map(item => ({ ...item, children: item.children.filter(child => child.id !== occupationId) }))\n .filter(item => item.children.length > 0)\n occupationSelected.value = cloneDeep(valuesOccupations.value)\n search();\n}\n\nconst onOpenModalPrefecture = () => {\n modalPrefecture?.value?.onOpen()\n}\n\nconst onChangePrefecture = (prefecture: PrefectureSecondary) => {\n let checked = false\n if (valuesPrefectures.value.find(item => item.id == prefecture.id)) {\n valuesPrefectures.value = valuesPrefectures.value.filter(item => prefecture.id !== item.id)\n } else {\n checked = true\n valuesPrefectures.value.push({ id: prefecture.id, name: prefecture.name, cities: [] })\n }\n\n props.prefectures.map(item => {\n item.children?.map(child => {\n if (child.id == prefecture.id) {\n child.selected = checked\n }\n })\n })\n}\n\nconst onChangeCity = (prefecture: PrefectureSecondary, city: CityPrimary) => {\n if (find(valuesPrefectures.value, { id: prefecture.id })) {\n selectedCity(prefecture, city);\n } else {\n valuesPrefectures.value.push({ id: prefecture.id, name: prefecture.name, cities: [] });\n selectedCity(prefecture, city);\n }\n};\n\nconst selectedCity = (prefecture: PrefectureSecondary, city: CityPrimary) => {\n let prefectureEntry = find(valuesPrefectures.value, { id: prefecture.id });\n if (prefectureEntry) {\n if (find(prefectureEntry.cities, { id: city.id })) {\n prefectureEntry.cities = reject(prefectureEntry.cities, { id: city.id });\n } else {\n prefectureEntry.cities.push(city);\n }\n\n if (prefectureEntry.cities.length === 0) {\n valuesPrefectures.value = reject(valuesPrefectures.value, { id: prefecture.id });\n\n forEach(props.prefectures, item => {\n forEach(item.children, child => {\n if (child.id === prefecture.id) {\n child.selected = false;\n }\n });\n });\n }\n }\n};\n\nconst onRemovePrefecture = (prefectureId: number) => {\n valuesPrefectures.value = valuesPrefectures.value.filter((item) => { return item.id != prefectureId });\n prefectureSelected.value = cloneDeep(valuesPrefectures.value)\n search();\n}\n\nconst addPrefectures = () => {\n prefectureSelected.value = cloneDeep(valuesPrefectures.value)\n search();\n}\n\nconst onChangeMinIncome = (minIncome: any) => {\n minIncomeSelected.value = minIncome.value\n search();\n}\n\nconst onChangeMaxIncome = (maxIncome: any) => {\n maxIncomeSelected.value = maxIncome.value\n search();\n}\n\nconst onOpenModalIndustry = () => {\n modalIndustry?.value?.onOpen()\n}\n\nconst onChooseIndustryCategory = (industry, event) => {\n event.stopPropagation();\n \n const isCurrentlySelected = valuesIndustries.value.some(item => item.id === industry.id);\n \n if (!isCurrentlySelected) {\n const newIndustry = {\n id: industry.id,\n name: industry.name,\n children: []\n };\n \n industry.children.forEach(child => {\n newIndustry.children.push({\n id: child.id,\n name: child.name\n });\n });\n \n valuesIndustries.value.push(newIndustry);\n } else {\n const index = valuesIndustries.value.findIndex(item => item.id === industry.id);\n if (index !== -1) {\n valuesIndustries.value.splice(index, 1);\n }\n }\n \n // 繧「繧ウ繝シ繝�ぅ繧ェ繝ウ繧帝幕縺十n const accordionId = `industry-item-${industry.id}-search`;\n const accordionElement = document.getElementById(accordionId);\n if (accordionElement) {\n const collapse = Collapse.getInstance(accordionElement) || new Collapse(accordionElement);\n if (!accordionElement.classList.contains('show')) {\n collapse.show();\n }\n }\n \n search();\n}\n\nconst onChooseIndustry = (industryCategory: IndustryType, industry: IndustryType) => {\n if (_.find(valuesIndustries.value, { id: industryCategory.id })) {\n selectedIndustry(industryCategory, industry);\n } else {\n valuesIndustries.value.push({ id: industryCategory.id, name: industryCategory.name, children: [] });\n selectedIndustry(industryCategory, industry);\n }\n}\n\nconst selectedIndustry = (industryCategory: IndustryType, industry: IndustryType) => {\n let industryCategoryEntry = _.find(valuesIndustries.value, { id: industryCategory.id });\n if (industryCategoryEntry) {\n if (_.find(industryCategoryEntry.children, { id: industry.id })) {\n industryCategoryEntry.children = _.reject(industryCategoryEntry.children, { id: industry.id });\n } else {\n industryCategoryEntry.children.push(industry);\n }\n\n if (industryCategoryEntry.children.length === 0) {\n valuesIndustries.value = _.reject(valuesIndustries.value, { id: industryCategory.id });\n\n _.forEach(props.industries, item => {\n if (item.id === industryCategory.id) {\n item.selected = false;\n }\n });\n }\n }\n};\n\nconst onRemoveIndusty = (industryId: number) => {\n valuesIndustries.value = valuesIndustries.value\n .map(item => ({ ...item, children: item.children.filter(child => child.id !== industryId) }))\n .filter(item => item.children.length > 0)\n industriesSelected.value = cloneDeep(valuesIndustries.value)\n search();\n}\n\nconst addIndustries = () => {\n industriesSelected.value = cloneDeep(valuesIndustries.value)\n search();\n}\n\nconst onOpenModalSkill = () => {\n modalSkills?.value?.onOpen();\n}\n\nconst onChooseSkillCategory = (skill, event) => {\n event.stopPropagation();\n \n const isCurrentlySelected = valueSkills.value.some(item => item.id === skill.id);\n \n if (!isCurrentlySelected) {\n const newSkill = {\n id: skill.id,\n name: skill.name,\n children: []\n };\n \n skill.children.forEach(child => {\n newSkill.children.push({\n id: child.id,\n name: child.name\n });\n });\n \n valueSkills.value.push(newSkill);\n } else {\n const index = valueSkills.value.findIndex(item => item.id === skill.id);\n if (index !== -1) {\n valueSkills.value.splice(index, 1);\n }\n }\n \n // 繧「繧ウ繝シ繝�ぅ繧ェ繝ウ繧帝幕縺十n const accordionId = `skill-item-${skill.id}-search`;\n const accordionElement = document.getElementById(accordionId);\n if (accordionElement) {\n const collapse = Collapse.getInstance(accordionElement) || new Collapse(accordionElement);\n if (!accordionElement.classList.contains('show')) {\n collapse.show();\n }\n }\n \n search();\n}\n\nconst onChooseSkill = (skillCategory: SkillsType, skill: SkillsType) => {\n if (_.find(valueSkills.value, { id: skillCategory.id })) {\n selectedSkill(skillCategory, skill);\n } else {\n valueSkills.value.push({ id: skillCategory.id, name: skillCategory.name, children: [] });\n selectedSkill(skillCategory, skill);\n }\n}\n\nconst selectedSkill = (skillCategory: SkillsType, skill: SkillsType) => {\n let skillCategoryEntry = _.find(valueSkills.value, { id: skillCategory.id });\n if (skillCategoryEntry) {\n if (_.find(skillCategoryEntry.children, { id: skill.id })) {\n skillCategoryEntry.children = _.reject(skillCategoryEntry.children, { id: skill.id });\n } else {\n skillCategoryEntry.children.push(skill);\n }\n\n if (skillCategoryEntry.children.length === 0) {\n valueSkills.value = _.reject(valueSkills.value, { id: skillCategory.id });\n\n _.forEach(props.skills, item => {\n if (item.id === skillCategory.id) {\n item.selected = false;\n }\n });\n }\n }\n};\n\nconst onRemoveSkill = (skillId: number) => {\n valueSkills.value = valueSkills.value\n .map(item => ({ ...item, children: item.children.filter(child => child.id !== skillId) }))\n .filter(item => item.children.length > 0)\n skillSelected.value = cloneDeep(valueSkills.value)\n search();\n}\n\nconst addSkills = () => {\n skillSelected.value = cloneDeep(valueSkills.value)\n search();\n}\n\nconst onOpenModaConditionSearchConfirm = (id: number, title: string) => {\n idItemSearch.value = id;\n titleItemSearch.value = title;\n\n nextTick(() => {\n const confirmDeleteElement = document.getElementById('confirmDeleteSearchConditionPC');\n if (confirmDeleteElement) {\n modalElement.value = new Modal(<HTMLElement>confirmDeleteElement);\n modalElement.value.show();\n }\n });\n}\n\nconst initialValuesConditionSearch = () => {\n searchWord.value = '';\n prefectureSelected.value = [];\n valuesPrefectures.value = [];\n occupationSelected.value = [];\n valuesOccupations.value = [];\n industriesSelected.value = [];\n valuesIndustries.value = [];\n skillSelected.value = [];\n valueSkills.value = [];\n minIncomeSelected.value = undefined;\n maxIncomeSelected.value = undefined;\n}\n\nconst onClearConditionSearch = () => {\n initialValuesConditionSearch();\n search();\n}\n\nconst toggleConditionSearchStatus = () => {\n isListSearchEnable.value = !isListSearchEnable.value;\n saveJobSearchResult.value = '';\n}\n\nconst onChangeResultSearch = async (initPage: boolean) => {\n const minIncome = props.incomes.find(income => income.id === minIncomeSelected.value)\n const maxIncome = props.incomes.find(income => income.id === maxIncomeSelected.value)\n\n const data = {\n keywords: searchWord.value,\n occupations: occupationSelected.value.flatMap((item) => item.children.map((c) => c.id)),\n locations: prefectureSelected.value.map((item) => item.id),\n annual_min_income: minIncome ? getNumberIncome(minIncome?.display_amount) : null,\n annual_max_income: maxIncome ? getNumberIncome(maxIncome?.display_amount) : null,\n industries: industriesSelected.value.flatMap((item) => item.children.map((c) => c.id)),\n skills: skillSelected.value.flatMap((item) => item.children.map((c) => c.id)),\n sort_by: props.sort\n }\n const params: Record<string, any> = {\n include: ['corporation', 'prefectures', 'hrc_skills', 'hrc_job_types', 'corporation.corporation_industries'],\n 'filter[have_hrc_job_types_any]': data.occupations,\n 'filter[with_prefecture]': data.locations,\n 'filter[have_corporation_industries_any]': data.industries,\n 'filter[have_hrc_skills_any]': data.skills,\n 'filter[contain_keywords_any]': data.keywords?.trim().split(/[\\s縲]+/) || [], // Split whitespace full-width or half-width\n sort: '-' + data.sort_by,\n 'page[size]': perPage,\n 'page[number]': initPage ? 1 : Math.max(Number(route.query.page) || 1, 1)\n }\n if (data.annual_min_income || data.annual_max_income) {\n params['filter[with_wage_range]'] = [\n data.annual_min_income,\n data.annual_max_income\n ]\n }\n const response = await getAgentJobs(params);\n\n const pageInvalid = Math.max(Number(route.query.page) || 1, 1) > response.data.meta.total_pages\n resultSearch.value = response.data.meta.total_records\n emit(\"searchJob\", response, data);\n if (window.scrollY > 0) window.scrollTo(0, 0)\n if (pageInvalid) router.push({ path: AGENT_SEARCH_PATH, query: { ...route.query, page: response.data.meta.total_pages } });\n}\n\nconst onSubmitForSearchJob = async () => {\n await getListConditionSearch();\n if (totalConditionSearch.value > 10) {\n setTimeout(() => {\n saveJobSearchResult.value = '';\n }, 3000);\n return saveJobSearchResult.value = 'limited';\n }\n let conditionSearchLocations: PrefectureFifth[] = []\n prefectureSelected.value.forEach(item => {\n if (item.cities.length <= 0) return conditionSearchLocations.push({ prefecture_id: item.id })\n item.cities.forEach(city => conditionSearchLocations.push({ prefecture_id: item.id, city_id: city.id }))\n })\n event?.preventDefault();\n const data = {\n platform: true,\n title: title.value || getCurrentDate(),\n keywords: searchWord.value,\n occupations: occupationSelected.value.flatMap((item) => item.children.map((c) => c.id)),\n locations: conditionSearchLocations,\n annual_min_income_id: minIncomeSelected.value,\n annual_max_income_id: maxIncomeSelected.value,\n industries: industriesSelected.value.flatMap((item) => item.children.map((c) => c.id)),\n skills: skillSelected.value.flatMap((item) => item.children.map((c) => c.id)),\n }\n const response = await saveJobSearchCondition(data)\n if (response.status === 200) {\n getListConditionSearch();\n setTimeout(() => {\n saveJobSearchResult.value = '';\n }, 3000);\n saveJobSearchResult.value = 'success'\n }\n else {\n getListConditionSearch();\n setTimeout(() => {\n saveJobSearchResult.value = '';\n }, 3000);\n saveJobSearchResult.value = 'fail'\n }\n}\n\nconst getListConditionSearch = async () => {\n const response = await getListConditionJobSearch()\n if (response.status == 200 && response?.data?.job_search_conditions) {\n listConditionSearch.value = response?.data?.job_search_conditions.filter(item => item.service_type_flag != false)\n totalConditionSearch.value = listConditionSearch?.value?.length || 0\n }\n}\n\nconst onDeleteSearchCondition = async (id: number) => {\n const response = await deleteConditionJobSearch(id)\n if (response.status == 200) {\n getListConditionSearch();\n }\n}\n\nconst onApplySearchCondition = (searchCondition: any) => {\n initialValuesConditionSearch();\n title.value = searchCondition?.title\n searchWord.value = searchCondition?.candidate_saved_job_search_condition_freeword?.free_word\n searchCondition.candidate_saved_job_search_condition_occupations.map((item) => {\n props.occupations.forEach(occupation => {\n let occupationChild = occupation.children.find(child => child.id === item.occupation_id);\n\n if (occupationChild) {\n valuesOccupations.value.push({ name: occupationChild.name, OccupationId: occupationChild.id, agId: occupationChild.id})\n occupationSelected.value = cloneDeep(valuesOccupations.value);\n }\n });\n })\n const prefectureIds = [... new Set(searchCondition.candidate_saved_job_search_condition_locations.map((item) => item.prefecture_id))]\n const cityIds = [... new Set(searchCondition.candidate_saved_job_search_condition_locations.map((item) => item.city_id))]\n prefectureIds.forEach((id) => {\n const prefecture = props.prefectures.find(prefecture => prefecture.children.some(child => child.id === id));\n if (prefecture) {\n const prefectureChild = prefecture.children.find(child => child.id === id);\n const cities = [];\n\n cityIds.filter(item => item !== null).forEach(cityId => {\n const matchingCity = [...prefectureChild.main_cities, ...prefectureChild.extra_cities].find(city => city.id === cityId);\n\n if (matchingCity) {\n cities.push(matchingCity);\n }\n });\n\n valuesPrefectures.value.push({ id: prefectureChild.id, name: prefectureChild.name, cities: cities });\n prefectureSelected.value = cloneDeep(valuesPrefectures.value)\n }\n })\n minIncomeSelected.value = searchCondition.annual_min_income_id\n maxIncomeSelected.value = searchCondition.annual_max_income_id\n searchCondition.candidate_saved_job_search_condition_industries.map((item) => {\n props.industries.forEach(industry => {\n let industryChild = industry.children?.find(child => child.id === item.industry_id);\n\n if (industryChild) {\n valuesIndustries.value.push({ name: industryChild.name, id: industryChild.id, agId: industryChild.id })\n industriesSelected.value = cloneDeep(valuesIndustries.value);\n }\n })\n });\n searchCondition.candidate_saved_job_search_condition_skills.map((item) => {\n props.skills.forEach(skill => {\n let skillChild = skill.children.find(child => child.id === item.skill_id);\n\n if (skillChild) {\n valueSkills.value.push({ name: skillChild.name, id: skillChild.id })\n skillSelected.value = cloneDeep(valueSkills.value);\n }\n });\n });\n search();\n onChangeResultSearch(true);\n toggleConditionSearchStatus();\n}\n\nconst emit = defineEmits(['searchJob']);\n\nconst props = defineProps({\n prefectures: {\n type: Array as PropType<PrefecturePrimary[]>,\n required: true\n },\n occupations: {\n type: Array as PropType<OccupationPrimary[]>,\n required: true\n },\n industries: {\n type: Array as PropType<IndustryType[]>,\n required: true\n },\n skills: {\n type: Array as PropType<SkillsType[]>,\n required: true\n },\n sort: {\n type: String,\n required: true\n },\n incomes: {\n type: Array as PropType<IncomePrimary[]>,\n required: true\n }\n})\n\nconst search = async () => {\n const minIncome = props.incomes.find(income => income.id === minIncomeSelected.value)\n const maxIncome = props.incomes.find(income => income.id === maxIncomeSelected.value)\n\n const data = {\n keywords: searchWord.value,\n occupations: occupationSelected.value.flatMap((item) => item.children.map((c) => c.id)),\n locations: prefectureSelected.value.map((item) => item.id),\n annual_min_income: minIncome ? getNumberIncome(minIncome?.display_amount) : null,\n annual_max_income: maxIncome ? getNumberIncome(maxIncome?.display_amount) : null,\n industries: industriesSelected.value.flatMap((item) => item.children.map((c) => c.id)),\n skills: skillSelected.value.flatMap((item) => item.children.map((c) => c.id)),\n }\n\n const page = Math.max(Number(route.query.page) || 1, 1);\n const paramsData = {\n keywords: searchWord.value || undefined,\n job_types: occupationSelected.value.flatMap((item) => item.children.map((c) => c.id)),\n prefectures: prefectureSelected.value?.map(item => item.id),\n city_ids: prefectureSelected.value.flatMap(item => item.cities.map(({ id }) => id)),\n wage_min: minIncomeSelected.value,\n wage_max: maxIncomeSelected.value,\n industries: industriesSelected.value?.flatMap((item) => item.children.map((c) => c.id)),\n skills: skillSelected.value?.flatMap((item) => item.children.map((c) => c.id)),\n agent: true,\n page: page === 1 ? undefined : page\n }\n\n const params: Record<string, any> = {\n include: ['corporation', 'prefectures', 'hrc_skills', 'hrc_job_types', 'corporation.corporation_industries'],\n 'filter[have_hrc_job_types_any]': data.occupations,\n 'filter[with_prefecture]': data.locations,\n 'filter[have_corporation_industries_any]': data.industries,\n 'filter[have_hrc_skills_any]': data.skills,\n 'filter[contain_keywords_any]': data.keywords?.trim().split(/[\\s縲]+/) || [], // Split whitespace full-width or half-width\n }\n if (data.annual_min_income || data.annual_max_income) {\n params['filter[with_wage_range]'] = [\n data.annual_min_income,\n data.annual_max_income\n ]\n }\n const response = await getAgentJobs(params);\n resultSearch.value = response.data.meta.total_records;\n router.push({ path: AGENT_SEARCH_PATH, query: { ...route.query, ...paramsData } });\n}\n\nconst getNumberIncome = (income: string) => {\n const numberRegex = /\\d+/;\n const match = income.match(numberRegex);\n\n if (match) {\n const number = parseInt(match[0], 10);\n return number;\n }\n}\n\nconst getParamSearch = async () => {\n if (Object.keys(route.query).length === 0) return search();\n initialValuesConditionSearch();\n\n searchWord.value = route.query.keywords\n title.value = route.query.title || getCurrentDate();\n getOccupations();\n getDesireLocation();\n getAnnualIncome();\n getIndustries();\n getSkills();\n await search();\n}\n\nconst getDesireLocation = () => {\n if (route.query.prefectures || route.query['prefectures[]']) {\n let prefectureIds: any\n if (route.query.prefectures) {\n prefectureIds = Array.isArray(route.query.prefectures) ? route.query.prefectures : [route.query.prefectures];\n } else {\n prefectureIds = Array.isArray(route.query['prefectures[]']) ? route.query['prefectures[]'] : [route.query['prefectures[]']];\n }\n\n [... new Set(prefectureIds)].forEach(id => {\n const prefecture = props.prefectures.find(prefecture => prefecture.children.some(child => child.id.toString() == id));\n if (prefecture) {\n const prefectureChild = prefecture.children.find(child => child.id.toString() == id);\n const cities = [];\n\n if (route.query.city_ids || route.query['cities[]']) {\n let cityIds: any\n if (route.query.city_ids) {\n cityIds = Array.isArray(route.query.city_ids) ? route.query.city_ids : [route.query.city_ids];\n } else {\n cityIds = Array.isArray(route.query['cities[]']) ? route.query['cities[]'] : [route.query['cities[]']];\n }\n\n cityIds.forEach(cityId => {\n const matchingCity = [...prefectureChild.main_cities, ...prefectureChild.extra_cities].find(city => city.id.toString() == cityId);\n\n if (matchingCity) {\n cities.push(matchingCity);\n }\n });\n }\n\n valuesPrefectures.value.push({ id: prefectureChild.id, name: prefectureChild.name, cities: cities });\n prefectureSelected.value = cloneDeep(valuesPrefectures.value)\n }\n });\n }\n}\n\nconst getOccupations = () => {\n if (route.query.job_types || route.query['job_types[]']) {\n let occupationIds: any\n if (route.query.job_types) {\n occupationIds = Array.isArray(route.query.job_types) ? route.query.job_types : [route.query.job_types];\n } else {\n occupationIds = Array.isArray(route.query['job_types[]']) ? route.query['job_types[]'] : [route.query['job_types[]']];\n }\n\n occupationIds.forEach(id => {\n props.occupations.forEach(occupation => {\n let occupationChild = occupation.children.find(child => child.id.toString() == id);\n\n if (occupationChild) {\n onChooseOccupation(occupation, occupationChild)\n occupationSelected.value = cloneDeep(valuesOccupations.value);\n }\n });\n });\n }\n}\n\nconst getAnnualIncome = () => {\n const minIncomeId = route.query.wage_min\n const maxIncomeId = route.query.wage_max\n\n const minIncome = props.incomes.find(income => income.id.toString() == minIncomeId);\n const maxIncome = props.incomes.find(income => income.id.toString() == maxIncomeId);\n\n if (minIncome) {\n minIncomeSelected.value = minIncome.id\n }\n if (maxIncome) {\n maxIncomeSelected.value = maxIncome.id\n }\n}\n\nconst getIndustries = () => {\n if (route.query.industries || route.query['industries[]']) {\n let industriesId: any\n if (route.query.industries) {\n industriesId = Array.isArray(route.query.industries) ? route.query.industries : [route.query.industries];\n } else {\n industriesId = Array.isArray(route.query['industries[]']) ? route.query['industries[]'] : [route.query['industries[]']];\n }\n\n industriesId.forEach(id => {\n props.industries.forEach(industry => {\n let industryChild = industry.children.find(child => child.id.toString() == id);\n\n if (industryChild) {\n onChooseIndustry(industry, industryChild)\n industriesSelected.value = cloneDeep(valuesIndustries.value);\n }\n });\n });\n }\n}\n\nconst getSkills = () => {\n if (route.query.skills || route.query['skills[]']) {\n let skillIds: any\n if (route.query.skills) {\n skillIds = Array.isArray(route.query.skills) ? route.query.skills : [route.query.skills];\n } else {\n skillIds = Array.isArray(route.query['skills[]']) ? route.query['skills[]'] : [route.query['skills[]']];\n }\n\n skillIds.forEach(id => {\n props.skills.forEach(skill => {\n let skillChild = skill.children.find(child => child.id.toString() == id);\n\n if (skillChild) {\n onChooseSkill(skill, skillChild)\n skillSelected.value = cloneDeep(valueSkills.value);\n }\n });\n });\n }\n}\n</script>\n","<template>\n <form class=\"job-search container container-primary my-15 px-0\" @submit=\"onSubmitForSearchJob\">\n <div class=\"alert alert-success alert-dismissible fade show text-danger\" role=\"alert\"\n v-if=\"saveJobSearchResult == 'limited'\">\n 菫晏ュ倥〒縺阪k譚。莉カ縺ョ荳企剞��10莉カ�峨↓驕斐@縺ヲ縺�∪縺兔n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"alert\" aria-label=\"Close\"></button>\n </div>\n <div class=\"alert alert-success alert-dismissible fade show\" role=\"alert\" v-if=\"saveJobSearchResult == 'success'\">\n 譖エ譁ー縺梧ュ」蟶ク縺ォ螳御コ�@縺セ縺励◆縲�\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"alert\" aria-label=\"Close\"></button>\n </div>\n <div class=\"alert alert-danger alert-dismissible fade show\" role=\"alert\" v-if=\"saveJobSearchResult == 'fail'\">\n 譖エ譁ー縺御クュ譁ュ縺輔l縺セ縺励◆縲�\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"alert\" aria-label=\"Close\"></button>\n </div>\n <div class=\"bg-blue-primary d-md-flex justify-content-center d-none\">\n <p class=\"m-2 text-white\">讀懃エ「譚。莉カ</p>\n </div>\n <div class=\"search-job__body bg-white-primary py-4 mx-md-0\">\n <div class=\"d-flex justify-content-center my-2\" data-bs-toggle=\"modal\"\n data-bs-target=\"#modalListConditionSearchAgentElement\">\n <img src=\"@/assets/images/icons/menu.svg\" class=\"me-2\" />\n <span class=\"size-12 fw-medium color-blue-primary\">菫晏ュ倥@縺滓、懃エ「譚。莉カ</span>\n </div>\n\n <!-- Occupation -->\n <Occupation @open=\"onOpenModalOccupation\" @remove=\"onRemoveOccupation\" :occupations=\"occupationSelected\" />\n <hr class=\"color-grey-primary opacity-100\">\n\n <!-- Prefecture -->\n <DesiredJob @open=\"onOpenModalPrefecture\" @remove=\"onRemovePrefecture\" :prefectures=\"prefectureSelected\" />\n <hr class=\"color-grey-primary opacity-100\">\n\n <!-- annual-income -->\n <AnnualIncome @changeMin=\"onChangeMinIncome\" @changeMax=\"onChangeMaxIncome\" :min_income=\"minIncomeSelected\"\n :max_income=\"maxIncomeSelected\" :incomes=\"props.incomes\" />\n <hr class=\"color-grey-primary opacity-100\">\n\n <!-- Industry -->\n <Industry @open=\"onOpenModalIndustry\" @remove=\"onRemoveIndustry\" :industries=\"industriesSelected\" />\n <hr class=\"color-grey-primary opacity-100\">\n\n <!-- Skill -->\n <Skill @open=\"onOpenModalSkill\" @remove=\"onRemoveSkill\" :skills=\"skillSelected\" />\n <hr class=\"color-grey-primary opacity-100\">\n\n <!-- Search word -->\n <div class=\"row justify-content-start px-3\">\n <span class=\"form-label align-self-start size-12\">繝輔Μ繝シ繝ッ繝シ繝�</span>\n <div>\n <input type=\"text\" v-model=\"searchWord\" name=\"search_word\"\n class=\"form-control me-3 size-14 bg-silver-primary input-primary\" placeholder=\"萓具シ俄雷笳銀雷\"\n v-on:keydown.enter.prevent=\"search\">\n </div>\n </div>\n <hr class=\"color-grey-primary opacity-100\">\n\n <div class=\"job-search__footer pt-2 mt-4 row pb-4r justify-content-center mb-a4\">\n <div class=\"row text-center\">\n <p class=\"size-12 fw-bold\">縺薙�譚。莉カ縺ョ豎ゆココ謨ー<span class=\"size-20 px-2\"><vue3-autocounter ref='counter' :startAmount='0'\n :endAmount='resultSearch' :duration='1' :autoinit='true' @finished='' /></span><span>莉カ</span></p>\n </div>\n <div class=\"d-flex justify-content-center\">\n <button type=\"button\"\n class=\"justify-content-center d-flex align-items-center h-48x w-285x btn btn-primary py-3 size-12 col-12 col-md-9\"\n @click=\"() => onChangeResultSearch(true)\" data-bs-dismiss=\"modal\">\n 縺薙�譚。莉カ縺ァ讀懃エ「\n </button>\n </div>\n\n <div class=\"d-flex justify-content-center mt-3\">\n <div id=\"save-job-available\" :class=\"totalConditionSearch < 10 ? 'd-block' : 'd-none'\">\n <button type=\"button\"\n class=\"justify-content-center d-flex align-items-center h-48x w-285x btn btn-outline-secondary rounded-24 py-3 size-12 col-12 col-md-9\"\n @click=\"onOpenModalSaveJobCondition\">\n 縺薙�譚。莉カ繧剃ソ晏ュ禄n </button>\n </div>\n <div id=\"save-job-unavailable\" :class=\"totalConditionSearch < 10 ? 'd-none' : 'd-block'\">\n <button type=\"button\"\n class=\"justify-content-center d-flex align-items-center h-48x w-285x btn btn-outline-secondary rounded-24 py-3 size-12 col-12 col-md-9 disabled\">\n 縺薙�譚。莉カ繧剃ソ晏ュ禄n </button>\n <p class=\"text-danger size-12 text-center\">菫晏ュ倥〒縺阪k譚。莉カ縺ョ荳企剞��10莉カ�峨↓驕斐@縺ヲ縺�∪縺�</p>\n </div>\n </div>\n\n <!-- Clear condition -->\n <div class=\"text-center mt-2 mw-100 h-46x d-flex justify-content-center align-items-center\">\n <button type=\"button\" class=\"btn btn-link color-blue-primary text-decoration-none size-12\"\n @click=\"onClearConditionSearch\">\n <img src=\"@/assets/images/icons/ic-remove.svg\" alt=\"Group icon\" class=\"mb-2x\">\n 譚。莉カ繧偵け繝ェ繧「\n </button>\n </div>\n </div>\n </div>\n </form>\n\n <ModalBase isShowAddButton ref=\"modalSaveJobConditionSP\" element=\"modalSaveJobConditionElementSP\">\n <template #body>\n <div class=\"d-flex justify-content-center p-0\">\n <p class=\"m-2 fw-bold size-16\">讀懃エ「譚。莉カ繧剃ソ晏ュ�</p>\n </div>\n <div class=\"row mx-3 justify-content-start px-3\">\n <span class=\"form-label align-self-start size-12\">讀懃エ「譚。莉カ蜷�</span>\n <input type=\"text\" v-model=\"title\" name=\"title\"\n class=\"form-control size-14 border-0 bg-silver-primary input-primary\">\n <div class=\"d-flex justify-content-end counter text-black-50 size-10 mt-2\">\n 譁�ュ玲焚�� {{ title?.length }}\n </div>\n </div>\n <div class=\"h-48x d-flex justify-content-center my-4\">\n <button type=\"button\"\n class=\"align-items-center justify-content-center d-flex h-48x w-285x btn btn-primary rounded-24 py-3 size-12\"\n @click=\"onSubmitForSearchJob\" data-bs-dismiss=\"modal\">\n 縺薙�譚。莉カ繧剃ソ晏ュ禄n </button>\n </div>\n </template>\n </ModalBase>\n\n <ModalBase :data=\"props.occupations.length\" is-show-scroll-button class=\"bg-red\" ref=\"modalOccupationsSP\"\n element=\"modalOccupationsElementSP\" title=\"閨キ遞ョ繧帝∈縺カ\" @addItems=\"addOccupations\">\n <template #body>\n <div id=\"occupation-accordion\" class=\"accordion accordion-primary\">\n <div class=\"accordion-item border-top-0 rounded-0\" v-for=\"occupation in props.occupations\"\n :key=\"occupation.id\">\n <h4 class=\"accordion-header px-3 py-2\">\n <span class=\"text-decoration-none size-14 bg-white pe-1 d-flex align-items-center w-100\">\n <input\n type=\"checkbox\"\n class=\"form-check-input collapsed checkbox-primary-input w-1d5 h-1d5 mt-0\"\n :id=\"`occupation-item-input-${occupation.id}`\"\n @change=\"onChooseOccupationCategory(occupation)\"\n :checked=\"valuesOccupations.some(item => item.id == occupation.id)\"\n >\n <label class=\"form-check-label size-14 ms-3\" @click=\"onChooseOccupationCategory(occupation)\">\n {{ occupation.name }}\n </label>\n <div class=\"accordion-button collapsed d-contents\"\n data-bs-toggle=\"collapse\"\n :data-bs-target=\"`#occupation-item-${occupation.id}-search-sp`\"\n aria-expanded=\"true\"\n :aria-controls=\"`occupation-item-${occupation.id}-search-sp`\"\n ></div>\n </span>\n </h4>\n <div \n class=\"row mx-2 my-2 pe-0 accordion-collapse collapse\" \n :id=\"`occupation-item-${occupation.id}-search-sp`\"\n >\n <div \n class=\"accordion-body ps-4 pe-3 py-2 border-bottom\" \n :class=\"{ 'border-top': index == 0 }\"\n :aria-labelledby=\"`occupation-${occupation.id}`\"\n v-for=\"(children, index) in occupation.children\"\n :key=\"children.id\"\n >\n <input type=\"checkbox\" class=\"form-check-input checkbox-primary-input w-1d5 h-1d5\"\n :id=\"`occupation-item-input-${children.id}`\"\n :checked=\"valuesOccupations.some(item => item.children.some(c => c.id == children.id))\"\n @click=\"onChooseOccupation(occupation, children)\">\n <label class=\"form-check-label size-14 ms-3\" :for=\"`occupation-item-input-${children.id}`\"\n @click=\"onChooseOccupation(occupation, children)\">\n {{ children.name }}\n </label>\n </div>\n </div>\n </div>\n </div>\n </template>\n </ModalBase>\n\n <ModalBase :data=\"props.prefectures.length\" is-show-scroll-button ref=\"modalPrefectureSP\"\n element=\"modalPrefectureElementSP\" title=\"蜍、蜍吝慍繧帝∈縺カ\" @addItems=\"addPrefectures\">\n <template #body>\n <div id=\"prefecture-accordion\" class=\"accordion accordion-primary\">\n <div class=\"accordion-item\" v-for=\"prefecture in props.prefectures\">\n <h4 :id=\"`prefecture-${prefecture.id}`\" class=\"accordion-header\">\n <a class=\"collapsed rounded-0 bg-white accordion-button ps-3 size-14 text-decoration-none\"\n data-bs-toggle=\"collapse\" :data-bs-target=\"`#prefecture-item-${prefecture.id}`\" aria-expanded=\"true\"\n :aria-controls=\"`prefecture-item-${prefecture.id}`\">\n {{ prefecture.name }}\n </a>\n </h4>\n <div :id=\"`prefecture-item-${prefecture.id}`\" class=\"accordion-collapse collapse\">\n <div class=\"accordion-body p-0\">\n <div class=\"accordion accordion-primary\">\n <div class=\"accordion-item border-top-0 rounded-0\" v-for=\"children in prefecture.children\"\n :key=\"children.id\">\n <h4 class=\"accordion-header px-3 py-2\">\n <span class=\"text-decoration-none size-14 bg-white ps-3 pe-1 d-flex align-items-center w-100\">\n <input type=\"checkbox\" class=\"form-check-input collapsed checkbox-primary-input w-1d5 h-1d5 mt-0\"\n :id=\"`prefecture-item-input-${prefecture.id}-children-${children.id}`\"\n @change=\"onChangePrefecture(children)\"\n :checked=\"valuesPrefectures.some(item => item.id == children.id)\">\n <label class=\"form-check-label size-14 ms-3\" @click=\"onChangePrefecture(children)\">\n {{ children.name }}\n </label>\n </span>\n </h4>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </template>\n </ModalBase>\n\n <ModalBase is-show-scroll-button ref=\"modalIndustrySP\" element=\"modalIndustryElementSP\" title=\"讌ュ遞ョ繧帝∈縺カ\"\n @addItems=\"addIndustries\">\n <template #body>\n <div id=\"industry-accordion\" class=\"accordion accordion-primary\">\n <div class=\"accordion-item border-top-0 rounded-0\" v-for=\"industry in props.industries\"\n :key=\"industry.id\">\n <h4 class=\"accordion-header px-3 py-2\">\n <span class=\"text-decoration-none size-14 bg-white pe-1 d-flex align-items-center w-100\">\n <input type=\"checkbox\" class=\"form-check-input collapsed checkbox-primary-input w-1d5 h-1d5 mt-0\"\n :id=\"`industry-item-input-${industry.id}`\"\n @change=\"onChooseIndustryCategory(industry)\"\n :checked=\"valuesIndustries.some(item => item.id == industry.id)\">\n <label class=\"form-check-label size-14 ms-3\" @click=\"onChooseIndustryCategory(industry)\">\n {{ industry.name }}\n </label>\n <div class=\"accordion-button collapsed d-contents\" data-bs-toggle=\"collapse\"\n :data-bs-target=\"`#industry-item-${industry.id}-search-sp`\"\n aria-expanded=\"true\"\n :aria-controls=\"`industry-item-${industry.id}-search-sp`\"></div>\n </span>\n </h4>\n <div :id=\"`industry-item-${industry.id}-search-sp`\"\n class=\"accordion-body p-0 collapse\">\n <div class=\"ps-4 pe-3 py-2 border-bottom\" :class=\"{ 'border-top': index == 0 }\"\n v-for=\"(children, index) in industry.children\">\n <input type=\"checkbox\" class=\"form-check-input checkbox-primary-input w-1d5 h-1d5\"\n :id=\"`industry-item-input-${children.id}`\"\n :checked=\"valuesIndustries.some(item => item.children.some(c => c.id == children.id))\"\n @click=\"onChooseIndustry(industry, children)\">\n <label class=\"form-check-label size-14 ms-3\" :for=\"`industry-item-input-${children.id}`\">\n {{ children.name }}\n </label>\n </div>\n </div>\n </div>\n </div>\n </template>\n </ModalBase>\n\n <ModalBase is-show-scroll-button ref=\"modalSkillsSP\" element=\"modalSkillsElementSP\" title=\"繧ケ繧ュ繝ォ繧帝∈縺カ\"\n @addItems=\"addSkills\">\n <template #body>\n <div id=\"skill-accordion\" class=\"accordion accordion-primary\">\n <div class=\"accordion-item border-top-0 rounded-0\" v-for=\"skill in props.skills\"\n :key=\"skill.id\">\n <h4 class=\"accordion-header px-3 py-2\">\n <span class=\"text-decoration-none size-14 bg-white pe-1 d-flex align-items-center w-100\">\n <input type=\"checkbox\" class=\"form-check-input collapsed checkbox-primary-input w-1d5 h-1d5 mt-0\"\n :id=\"`skill-item-input-${skill.id}`\"\n @change=\"onChooseSkillCategory(skill)\"\n :checked=\"valueSkills.some(item => item.id == skill.id)\">\n <label class=\"form-check-label size-14 ms-3\" @click=\"onChooseSkillCategory(skill)\">\n {{ skill.name }}\n </label>\n <div class=\"accordion-button collapsed d-contents\" data-bs-toggle=\"collapse\"\n :data-bs-target=\"`#skill-item-${skill.id}-search-sp`\"\n aria-expanded=\"true\"\n :aria-controls=\"`skill-item-${skill.id}-search-sp`\"></div>\n </span>\n </h4>\n <div :id=\"`skill-item-${skill.id}-search-sp`\"\n class=\"accordion-body p-0 collapse\">\n <div class=\"ps-4 pe-3 py-2 border-bottom\" :class=\"{ 'border-top': index == 0 }\"\n v-for=\"(children, index) in skill.children\">\n <input type=\"checkbox\" class=\"form-check-input checkbox-primary-input w-1d5 h-1d5\"\n :id=\"`skill-item-input-${children.id}`\"\n :checked=\"valueSkills.some(item => item.children.some(c => c.id == children.id))\"\n @click=\"onChooseSkill(skill, children)\">\n <label class=\"form-check-label size-14 ms-3\" :for=\"`skill-item-input-${children.id}`\">\n {{ children.name }}\n </label>\n </div>\n </div>\n </div>\n </div>\n </template>\n </ModalBase>\n</template>\n\n<script setup lang=\"ts\">\nimport _ from 'lodash';\nimport { onMounted, ref, watch, nextTick, PropType } from \"vue\";\nimport { Collapse } from 'bootstrap';\nimport ModalBase from \"@/components/common/ModalBase/index.vue\";\nimport Occupation from '@/components/JobSearch/Occupation.vue';\nimport DesiredJob from '@/components/JobSearch/DesiredJob.vue';\nimport AnnualIncome from '@/components/JobSearch/AnnualIncome.vue';\nimport Industry from '@/components/JobSearch/Industry.vue';\nimport Skill from '@/components/JobSearch/Skill.vue';\nimport { OccupationPrimary, OccupationThirdary } from '@/types/models/occupation';\nimport { PrefectureFourth, PrefecturePrimary, PrefectureSecondary } from '@/types/models/prefecture';\nimport { IndustryType } from '@/types/models/industryType';\nimport { SkillsType } from '@/types/models/skill';\nimport { IncomePrimary } from '@/types/models/income';\nimport { cloneDeep, find, forEach, reject } from 'lodash'\nimport Vue3Autocounter from 'vue3-autocounter';\nimport { CityPrimary } from '@/types/models/city';\nimport { getAgentJobs, getListConditionJobSearch, getTokenAuthAgent } from '@/apis/job.api';\nimport { AuthTokenResponse } from '@/types/pages/job/agent/ResponseAuthToken'\nimport { saveJobSearchCondition } from '@/apis/candidate';\nimport { CANDIDATE_LOGIN_PATH, AGENT_SEARCH_PATH } from '@/constant/routers/path';\nimport { useRoute } from 'vue-router';\nimport { Modal } from 'bootstrap';\nimport router from '@/routers';\n\nconst valuesPrefectures = ref<PrefecturePrimary[]>([]);\nconst valuesOccupations = ref<OccupationThirdary[]>([]);\nconst valuesIndustries = ref<IndustryType[]>([]);\nconst valueSkills = ref<SkillsType[]>([]);\n\nconst title = ref<string | null>(null);\nconst totalConditionSearch = ref<number>(0);\nconst listConditionSearch = ref();\nconst saveJobSearchResult = ref<string | null>(null);\nconst perPage = 30;\nconst searchWord = ref<string | null>(null);\n\nlet prefectureSelected = ref<PrefectureFourth[]>([]);\nlet occupationSelected = ref<OccupationThirdary[]>([]);\nlet industriesSelected = ref<IndustryType[]>([]);\nlet skillSelected = ref<SkillsType[]>([]);\nlet minIncomeSelected = ref<IncomePrimary>();\nlet maxIncomeSelected = ref<IncomePrimary>();\n\nconst modalPrefectureSP = ref<InstanceType<typeof ModalBase> | null>(null);\nconst modalOccupationsSP = ref<InstanceType<typeof ModalBase> | null>(null);\nconst modalIndustrySP = ref<InstanceType<typeof ModalBase> | null>(null);\nconst modalSkillsSP = ref<InstanceType<typeof ModalBase> | null>(null);\nconst modalSaveJobConditionSP = ref<InstanceType<typeof ModalBase> | null>(null);\n\nconst route = useRoute();\nlet resultSearch = ref(0);\n\nonMounted(async () => {\n title.value = getCurrentDate();\n await getListConditionSearch();\n await getParamSearch();\n onChangeResultSearch(false);\n});\n\nwatch(() => route.params, async () => {\n if (route.query.page) {\n title.value = getCurrentDate();\n await getListConditionSearch(); \n await getParamSearch();\n }\n});\n\nconst getCurrentDate = () => {\n const currentDate = new Date();\n const month = String(currentDate.getMonth() + 1).padStart(2, '0');\n const day = String(currentDate.getDate()).padStart(2, '0')\n const time = String(currentDate.getHours()).padStart(2, '0') + ':' + String(currentDate.getMinutes()).padStart(2, '0')\n + ':' + String(currentDate.getSeconds()).padStart(2, '0')\n\n return currentDate.getFullYear() + '/' + month + '/' + day + ' ' + time\n}\n\nconst onOpenModalSaveJobCondition = () => {\n modalSaveJobConditionSP?.value?.onOpen()\n}\n\nconst onOpenModalOccupation = () => {\n modalOccupationsSP?.value?.onOpen()\n}\n\nconst addOccupations = () => {\n occupationSelected.value = cloneDeep(valuesOccupations.value)\n search();\n}\n\nconst onChooseOccupationCategory = (occupationCategory: OccupationThirdary) => {\n const isCurrentlySelected = valuesOccupations.value.some(item => item.id === occupationCategory.id);\n \n if (!isCurrentlySelected) {\n const newOccupation = {\n id: occupationCategory.id,\n name: occupationCategory.name,\n children: []\n };\n\n occupationCategory.children.forEach(child => {\n newOccupation.children.push({\n id: child.id,\n name: child.name\n });\n });\n\n valuesOccupations.value.push(newOccupation);\n } else {\n const index = valuesOccupations.value.findIndex(item => item.id === occupationCategory.id);\n if (index !== -1) {\n valuesOccupations.value.splice(index, 1);\n }\n }\n\n const accordionId = `occupation-item-${occupationCategory.id}-search-sp`;\n const accordionElement = document.getElementById(accordionId);\n if (accordionElement) {\n const collapse = Collapse.getInstance(accordionElement) || new Collapse(accordionElement);\n if (!accordionElement.classList.contains('show')) {\n collapse.show();\n }\n }\n}\n\nconst onChooseOccupation = (occupationCategory: OccupationThirdary, occupation: OccupationThirdary) => {\n if (_.find(valuesOccupations.value, { id: occupationCategory.id })) {\n selectedOccupation(occupationCategory, occupation);\n } else {\n valuesOccupations.value.push({ id: occupationCategory.id, name: occupationCategory.name, children: [] });\n selectedOccupation(occupationCategory, occupation);\n }\n}\n\nconst selectedOccupation = (occupationCategory: OccupationThirdary, occupation: OccupationThirdary) => {\n let occupationCategoryEntry = _.find(valuesOccupations.value, { id: occupationCategory.id });\n if (occupationCategoryEntry) {\n if (_.find(occupationCategoryEntry.children, { id: occupation.id })) {\n occupationCategoryEntry.children = _.reject(occupationCategoryEntry.children, { id: occupation.id });\n } else {\n occupationCategoryEntry.children.push(occupation);\n }\n\n if (occupationCategoryEntry.children.length === 0) {\n valuesOccupations.value = _.reject(valuesOccupations.value, { id: occupationCategory.id });\n\n _.forEach(props.occupations, item => {\n if (item.id === occupationCategory.id) {\n item.selected = false;\n }\n });\n }\n }\n};\n\nconst onRemoveOccupation = (occupationId: number) => {\n valuesOccupations.value = valuesOccupations.value\n .map(item => ({ ...item, children: item.children.filter(child => child.id !== occupationId) }))\n .filter(item => item.children.length > 0)\n occupationSelected.value = cloneDeep(valuesOccupations.value)\n search();\n}\n\nconst onOpenModalPrefecture = () => {\n modalPrefectureSP?.value?.onOpen()\n}\n\nconst onChangePrefecture = (prefecture: PrefectureSecondary) => {\n let checked = false\n if (valuesPrefectures.value.find(item => item.id == prefecture.id)) {\n valuesPrefectures.value = valuesPrefectures.value.filter(item => prefecture.id !== item.id)\n } else {\n checked = true\n valuesPrefectures.value.push({ id: prefecture.id, name: prefecture.name, cities: [] })\n }\n\n props.prefectures.map(item => {\n item.children?.map(child => {\n if (child.id == prefecture.id) {\n child.selected = checked\n }\n })\n })\n}\n\nconst onChangeCity = (prefecture: PrefectureSecondary, city: CityPrimary) => {\n if (find(valuesPrefectures.value, { id: prefecture.id })) {\n selectedCity(prefecture, city);\n } else {\n valuesPrefectures.value.push({ id: prefecture.id, name: prefecture.name, cities: [] });\n selectedCity(prefecture, city);\n }\n}\n\nconst selectedCity = (prefecture: PrefectureSecondary, city: CityPrimary) => {\n let prefectureEntry = find(valuesPrefectures.value, { id: prefecture.id });\n if (prefectureEntry) {\n if (find(prefectureEntry.cities, { id: city.id })) {\n prefectureEntry.cities = reject(prefectureEntry.cities, { id: city.id });\n } else {\n prefectureEntry.cities.push(city);\n }\n\n if (prefectureEntry.cities.length === 0) {\n valuesPrefectures.value = reject(valuesPrefectures.value, { id: prefecture.id });\n\n forEach(props.prefectures, item => {\n forEach(item.children, child => {\n if (child.id === prefecture.id) {\n child.selected = false;\n }\n });\n });\n }\n }\n}\n\nconst onRemovePrefecture = (prefectureId: number) => {\n valuesPrefectures.value = valuesPrefectures.value.filter((item) => { return item.id != prefectureId });\n prefectureSelected.value = cloneDeep(valuesPrefectures.value)\n search();\n}\n\nconst addPrefectures = () => {\n prefectureSelected.value = cloneDeep(valuesPrefectures.value)\n search();\n}\n\nconst onChangeMinIncome = (minIncome: any) => {\n minIncomeSelected.value = minIncome.value\n search();\n}\n\nconst onChangeMaxIncome = (maxIncome: any) => {\n maxIncomeSelected.value = maxIncome.value\n search();\n}\n\nconst onOpenModalIndustry = () => {\n modalIndustrySP?.value?.onOpen()\n}\n\nconst onChooseIndustryCategory = (industryCategory: IndustryType) => {\n const isCurrentlySelected = valuesIndustries.value.some(item => item.id === industryCategory.id);\n \n if (!isCurrentlySelected) {\n const newIndustry = {\n id: industryCategory.id,\n name: industryCategory.name,\n children: []\n };\n \n industryCategory.children.forEach(child => {\n newIndustry.children.push({\n id: child.id,\n name: child.name\n });\n });\n \n valuesIndustries.value.push(newIndustry);\n } else {\n const index = valuesIndustries.value.findIndex(item => item.id === industryCategory.id);\n if (index !== -1) {\n valuesIndustries.value.splice(index, 1);\n }\n }\n \n const accordionId = `industry-item-${industryCategory.id}-search-sp`;\n const accordionElement = document.getElementById(accordionId);\n if (accordionElement) {\n const collapse = Collapse.getInstance(accordionElement) || new Collapse(accordionElement);\n if (!accordionElement.classList.contains('show')) {\n collapse.show();\n }\n } \n}\n\nconst onChooseIndustry = (industryCategory: IndustryType, industry: IndustryType) => {\n if (_.find(valuesIndustries.value, { id: industryCategory.id })) {\n selectedIndustry(industryCategory, industry);\n } else {\n valuesIndustries.value.push({ id: industryCategory.id, name: industryCategory.name, children: [] });\n selectedIndustry(industryCategory, industry);\n }\n}\n\nconst selectedIndustry = (industryCategory: IndustryType, industry: IndustryType) => {\n let industryCategoryEntry = _.find(valuesIndustries.value, { id: industryCategory.id });\n if (industryCategoryEntry) {\n if (_.find(industryCategoryEntry.children, { id: industry.id })) {\n industryCategoryEntry.children = _.reject(industryCategoryEntry.children, { id: industry.id });\n } else {\n industryCategoryEntry.children.push(industry);\n }\n\n if (industryCategoryEntry.children.length === 0) {\n valuesIndustries.value = _.reject(valuesIndustries.value, { id: industryCategory.id });\n\n _.forEach(props.industries, item => {\n if (item.id === industryCategory.id) {\n item.selected = false;\n }\n });\n }\n }\n};\n\nconst onRemoveIndustry = (industryId: number) => {\n valuesIndustries.value = valuesIndustries.value\n .map(item => ({ ...item, children: item.children.filter(child => child.id !== industryId) }))\n .filter(item => item.children.length > 0)\n industriesSelected.value = cloneDeep(valuesIndustries.value)\n search();\n}\n\nconst addIndustries = () => {\n industriesSelected.value = cloneDeep(valuesIndustries.value)\n search();\n}\n\nconst onOpenModalSkill = () => {\n modalSkillsSP?.value?.onOpen();\n}\n\nconst onChooseSkillCategory = (skillCategory: SkillsType) => {\n const isCurrentlySelected = valueSkills.value.some(item => item.id === skillCategory.id);\n \n if (!isCurrentlySelected) {\n const newSkill = {\n id: skillCategory.id,\n name: skillCategory.name,\n children: []\n };\n \n skillCategory.children.forEach(child => {\n newSkill.children.push({\n id: child.id,\n name: child.name\n });\n });\n \n valueSkills.value.push(newSkill);\n } else {\n const index = valueSkills.value.findIndex(item => item.id === skillCategory.id);\n if (index !== -1) {\n valueSkills.value.splice(index, 1);\n }\n }\n \n const accordionId = `skill-item-${skillCategory.id}-search-sp`;\n const accordionElement = document.getElementById(accordionId);\n if (accordionElement) {\n const collapse = Collapse.getInstance(accordionElement) || new Collapse(accordionElement);\n if (!accordionElement.classList.contains('show')) {\n collapse.show();\n }\n } \n}\n\nconst onChooseSkill = (skillCategory: SkillsType, skill: SkillsType) => {\n if (_.find(valueSkills.value, { id: skillCategory.id })) {\n selectedSkill(skillCategory, skill);\n } else {\n valueSkills.value.push({ id: skillCategory.id, name: skillCategory.name, children: [] });\n selectedSkill(skillCategory, skill);\n }\n}\n\nconst selectedSkill = (skillCategory: SkillsType, skill: SkillsType) => {\n let skillCategoryEntry = _.find(valueSkills.value, { id: skillCategory.id });\n if (skillCategoryEntry) {\n if (_.find(skillCategoryEntry.children, { id: skill.id })) {\n skillCategoryEntry.children = _.reject(skillCategoryEntry.children, { id: skill.id });\n } else {\n skillCategoryEntry.children.push(skill);\n }\n\n if (skillCategoryEntry.children.length === 0) {\n valueSkills.value = _.reject(valueSkills.value, { id: skillCategory.id });\n\n _.forEach(props.skills, item => {\n if (item.id === skillCategory.id) {\n item.selected = false;\n }\n });\n }\n }\n};\n\nconst onRemoveSkill = (skillId: number) => {\n valueSkills.value = valueSkills.value\n .map(item => ({ ...item, children: item.children.filter(child => child.id !== skillId) }))\n .filter(item => item.children.length > 0)\n skillSelected.value = cloneDeep(valueSkills.value)\n search();\n}\n\nconst addSkills = () => {\n skillSelected.value = cloneDeep(valueSkills.value)\n search();\n}\n\nconst openModalListJobCondition = async () => {\n await nextTick();\n const listConditionSearchElement = document.getElementById('modalListConditionSearchAgentElement');\n if (listConditionSearchElement) {\n const modal = new Modal(<HTMLElement>listConditionSearchElement);\n modal.show();\n }\n}\n\nconst initialValuesConditionSearch = () => {\n searchWord.value = '';\n prefectureSelected.value = [];\n valuesPrefectures.value = [];\n occupationSelected.value = [];\n valuesOccupations.value = [];\n industriesSelected.value = [];\n valuesIndustries.value = [];\n skillSelected.value = [];\n valueSkills.value = [];\n minIncomeSelected.value = undefined;\n maxIncomeSelected.value = undefined;\n}\n\nconst onClearConditionSearch = () => {\n initialValuesConditionSearch();\n search();\n}\n\nconst onChangeResultSearch = async (initPage: boolean) => {\n const minIncome = props.incomes.find(income => income.id === minIncomeSelected.value)\n const maxIncome = props.incomes.find(income => income.id === maxIncomeSelected.value)\n\n const data = {\n keywords: searchWord.value,\n occupations: occupationSelected.value.flatMap((item) => item.children.map((c) => c.id)),\n locations: prefectureSelected.value.map((item) => item.id),\n annual_min_income: minIncome ? getNumberIncome(minIncome?.display_amount) : null,\n annual_max_income: maxIncome ? getNumberIncome(maxIncome?.display_amount) : null,\n industries: industriesSelected.value.flatMap((item) => item.children.map((c) => c.id)),\n skills: skillSelected.value.flatMap((item) => item.children.map((c) => c.id)),\n sort_by: props.sort\n }\n const params: Record<string, any> = {\n include: ['corporation', 'prefectures', 'hrc_skills', 'hrc_job_types', 'corporation.corporation_industries'],\n 'filter[have_hrc_job_types_any]': data.occupations,\n 'filter[with_prefecture]': data.locations,\n 'filter[have_corporation_industries_any]': data.industries,\n 'filter[have_hrc_skills_any]': data.skills,\n 'filter[contain_keywords_any]': data.keywords?.trim().split(/[\\s縲]+/) || [], // Split whitespace full-width or half-width\n sort: '-' + data.sort_by,\n 'page[size]': perPage,\n 'page[number]': initPage ? undefined : Math.max(Number(route.query.page) || 1, 1)\n }\n if (data.annual_min_income || data.annual_max_income) {\n params['filter[with_wage_range]'] = [\n data.annual_min_income,\n data.annual_max_income\n ]\n }\n const response = await getAgentJobs(params);\n const pageInvalid = Math.max(Number(route.query.page) || 1, 1) > response.data.meta.total_pages\n resultSearch.value = response.data.meta.total_records;\n emit(\"searchJob\", response, data);\n if (window.scrollY > 0) window.scrollTo(0, 0)\n if (pageInvalid) router.push({ path: AGENT_SEARCH_PATH, query: { ...route.query, page: response.data.meta.total_pages } });\n}\n\nconst getListConditionSearch = async () => {\n const response = await getListConditionJobSearch()\n if (response.status == 200 && response?.data?.job_search_conditions) {\n listConditionSearch.value = response?.data?.job_search_conditions.filter(item => item.service_type_flag != false)\n totalConditionSearch.value = listConditionSearch.value.length || 0\n }\n}\n\nconst onSubmitForSearchJob = async () => {\n await getListConditionSearch();\n if (totalConditionSearch.value > 10) {\n setTimeout(() => {\n saveJobSearchResult.value = '';\n }, 3000);\n return saveJobSearchResult.value = 'limited';\n }\n let conditionSearchLocations: any[] = []\n prefectureSelected.value.forEach(item => {\n if (item.cities.length <= 0) return conditionSearchLocations.push({ prefecture_id: item.id })\n item.cities.forEach(city => conditionSearchLocations.push({ prefecture_id: item.id, city_id: city.id }))\n })\n event?.preventDefault();\n const data = {\n platform: true,\n title: title.value || getCurrentDate(),\n keywords: searchWord.value,\n occupations: occupationSelected.value.flatMap((item) => item.children.map((c) => c.id)),\n locations: conditionSearchLocations,\n annual_min_income_id: minIncomeSelected.value,\n annual_max_income_id: maxIncomeSelected.value,\n industries: industriesSelected.value.flatMap((item) => item.children.map((c) => c.id)),\n skills: skillSelected.value.flatMap((item) => item.children.map((c) => c.id)),\n }\n const response = await saveJobSearchCondition(data)\n if (response.status === 200) {\n emit('createJobCondition')\n setTimeout(() => {\n saveJobSearchResult.value = '';\n }, 3000);\n saveJobSearchResult.value = 'success';\n getListConditionSearch();\n }\n else {\n if (response.status === 401) {\n window.location.href = CANDIDATE_LOGIN_PATH\n }\n else {\n emit('createJobCondition')\n setTimeout(() => {\n saveJobSearchResult.value = '';\n }, 3000);\n saveJobSearchResult.value = 'fail';\n getListConditionSearch();\n }\n }\n}\n\nconst emit = defineEmits(['searchJob', 'createJobCondition']);\n\nconst props = defineProps({\n prefectures: {\n type: Array as PropType<PrefecturePrimary[]>,\n required: true\n },\n occupations: {\n type: Array as PropType<OccupationPrimary[]>,\n required: true\n },\n industries: {\n type: Array as PropType<IndustryType[]>,\n required: true\n },\n skills: {\n type: Array as PropType<SkillsType[]>,\n required: true\n },\n sort: {\n type: String,\n required: true\n },\n incomes: {\n type: Array as PropType<IncomePrimary[]>,\n required: true\n }\n})\n\nconst search = async () => {\n const minIncome = props.incomes.find(income => income.id === minIncomeSelected.value)\n const maxIncome = props.incomes.find(income => income.id === maxIncomeSelected.value)\n\n const data = {\n keywords: searchWord.value,\n occupations: occupationSelected.value.flatMap((item) => item.children.map((c) => c.id)),\n locations: prefectureSelected.value.map((item) => item.id),\n annual_min_income: minIncome ? getNumberIncome(minIncome?.display_amount) : null,\n annual_max_income: maxIncome ? getNumberIncome(maxIncome?.display_amount) : null,\n industries: industriesSelected.value.flatMap((item) => item.children.map((c) => c.id)),\n skills: skillSelected.value.flatMap((item) => item.children.map((c) => c.id)),\n }\n\n const page = Math.max(Number(route.query.page) || 1, 1);\n const paramsData = {\n keywords: searchWord.value || undefined,\n job_types: occupationSelected.value.flatMap((item) => item.children.map((c) => c.id)),\n prefectures: prefectureSelected.value?.map(item => item.id),\n city_ids: prefectureSelected.value.flatMap(item => item.cities.map(({ id }) => id)),\n wage_min: minIncomeSelected.value,\n wage_max: maxIncomeSelected.value,\n industries: industriesSelected.value?.flatMap((item) => item.children.map((c) => c.id)),\n skills: skillSelected.value?.flatMap((item) => item.children.map((c) => c.id)),\n agent: true,\n page: page > 1 ? page : undefined\n }\n const params: Record<string, any> = {\n include: ['corporation', 'prefectures', 'hrc_skills', 'hrc_job_types', 'corporation.corporation_industries'],\n 'filter[have_hrc_job_types_any]': data.occupations,\n 'filter[with_prefecture]': data.locations,\n 'filter[have_corporation_industries_any]': data.industries,\n 'filter[have_hrc_skills_any]': data.skills,\n 'filter[contain_keywords_any]': data.keywords?.trim().split(/[\\s縲]+/) || [], // Split whitespace full-width or half-width\n }\n if (data.annual_min_income || data.annual_max_income) {\n params['filter[with_wage_range]'] = [\n data.annual_min_income,\n data.annual_max_income\n ]\n }\n const response = await getAgentJobs(params);\n resultSearch.value = response.data.meta.total_records;\n router.push({ path: AGENT_SEARCH_PATH, query: { ...route.params ,...paramsData } });\n}\n\nconst getParamSearch = async () => {\n if (Object.keys(route.query).length === 0) return search();\n initialValuesConditionSearch();\n searchWord.value = route.query.keywords || null;\n title.value = route.query.title || getCurrentDate();\n getOccupations();\n getDesireLocation();\n getAnnualIncome();\n getIndustries();\n getSkills();\n await search();\n}\n\nconst getDesireLocation = () => {\n if (route.query.prefectures || route.query['prefectures[]']) {\n let prefectureIds: any\n if (route.query.prefectures) {\n prefectureIds = Array.isArray(route.query.prefectures) ? route.query.prefectures : [route.query.prefectures];\n } else {\n prefectureIds = Array.isArray(route.query['prefectures[]']) ? route.query['prefectures[]'] : [route.query['prefectures[]']];\n }\n\n [... new Set(prefectureIds)].forEach(id => {\n const prefecture = props.prefectures.find(prefecture => prefecture.children.some(child => child.id.toString() == id));\n if (prefecture) {\n const prefectureChild = prefecture.children.find(child => child.id.toString() == id);\n const cities = [];\n\n if (route.query.city_ids || route.query['cities[]'] || route.query['cities']) {\n let cityIds: any\n if (route.query.city_ids) {\n cityIds = Array.isArray(route.query.city_ids) ? route.query.city_ids : [route.query.city_ids];\n } else {\n cityIds = Array.isArray(route.query['cities[]']) ? route.query['cities[]'] : [route.query['cities[]']];\n }\n\n cityIds.forEach(cityId => {\n const matchingCity = [...prefectureChild.main_cities, ...prefectureChild.extra_cities].find(city => city.id.toString() == cityId);\n\n if (matchingCity) {\n cities.push(matchingCity);\n }\n });\n }\n\n valuesPrefectures.value.push({ id: prefectureChild.id, name: prefectureChild.name, cities: cities });\n prefectureSelected.value = cloneDeep(valuesPrefectures.value)\n }\n });\n }\n}\n\nconst getOccupations = () => {\n if (route.query.job_types || route.query['job_types[]'] || route.query['job_types']) {\n let occupationIds: any\n if (route.query.job_types) {\n occupationIds = Array.isArray(route.query.job_types) ? route.query.job_types : [route.query.job_types];\n } else {\n occupationIds = Array.isArray(route.query['job_types[]']) ? route.query['job_types[]'] : [route.query['job_types[]']];\n }\n\n if (occupationIds) {\n occupationIds.forEach(id => {\n props.occupations.forEach(occupation => {\n let occupationChild = occupation.children.find(child => child.id.toString() == id);\n\n if (occupationChild) {\n onChooseOccupation(occupation, occupationChild)\n occupationSelected.value = cloneDeep(valuesOccupations.value);\n }\n });\n });\n }\n }\n}\n\nconst getAnnualIncome = () => {\n const minIncomeId = route.query.wage_min\n const maxIncomeId = route.query.wage_max\n\n const minIncome = props.incomes.find(income => income.id.toString() == minIncomeId);\n const maxIncome = props.incomes.find(income => income.id.toString() == maxIncomeId);\n\n if (minIncome) {\n minIncomeSelected.value = minIncome.id\n }\n if (maxIncome) {\n maxIncomeSelected.value = maxIncome.id\n }\n}\n\nconst getIndustries = () => {\n if (route.query.industries || route.query['industries[]'] || route.query['industries']) {\n let industriesId: any\n if (route.query.industries) {\n industriesId = Array.isArray(route.query.industries) ? route.query.industries : [route.query.industries];\n } else {\n industriesId = Array.isArray(route.query['industries[]']) ? route.query['industries[]'] : [route.query['industries[]']];\n }\n\n if (industriesId) {\n industriesId.forEach(id => {\n props.industries.forEach(industry => {\n let industryChild = industry.children?.find(child => child.id.toString() == id);\n\n if (industryChild) {\n onChooseIndustry(industry, industryChild);\n industriesSelected.value = cloneDeep(valuesIndustries.value);\n }\n })\n });\n }\n }\n}\n\nconst getSkills = () => {\n if (route.query.skills || route.query['skills[]'] || route.query['skills']) {\n let skillIds: any\n if (route.query.skills) {\n skillIds = Array.isArray(route.query.skills) ? route.query.skills : [route.query.skills];\n } else {\n skillIds = Array.isArray(route.query['skills[]']) ? route.query['skills[]'] : [route.query['skills[]']];\n }\n\n skillIds.forEach(id => {\n props.skills.forEach(skill => {\n let skillChild = skill.children.find(child => child.id.toString() == id);\n\n if (skillChild) {\n onChooseSkill(skill, skillChild);\n skillSelected.value = cloneDeep(valueSkills.value);\n }\n });\n });\n }\n}\n\nconst getNumberIncome = (income: string) => {\n const numberRegex = /\\d+/;\n const match = income.match(numberRegex);\n\n if (match) {\n const number = parseInt(match[0], 10);\n return number;\n }\n}\n</script>\n","<template>\n <div class=\"modal fade\" id=\"platformAgentModal\" ref=\"modal\">\n <div class=\"modal-dialog modal-dialog-top\">\n <div class=\"modal-content rounded-4 overflow-hidden min-w-md-560x\">\n <div class=\"modal-body p-0\">\n <div class=\"d-flex flex-column\">\n <div class=\"row bg-green-01 mb-2\">\n <div class=\"d-flex justify-content-end pt-2 ms-2 position-absolute\">\n <button role=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\"></button>\n </div>\n <div class=\"d-flex justify-content-center align-items-center mw-sm-90pct ps-sm-4r py-3\">\n <img src=\"@/assets/images/girl-1.png\" alt=\"image\" class=\"img-fluid\" style=\"max-width: 60px;\">\n <h6 class=\"fw-bold text-info mb-0 ms-3 me-3\">繧ュ繝」繝ェ繧「繧ォ繧ヲ繝ウ繧サ繝ェ繝ウ繧ー繧貞女縺代※縺ソ縺セ縺帙s縺具シ�</h6>\n </div>\n </div>\n\n <div class=\"text-start px-3 px-md-4 py-3 color-black-02\">\n <div class=\"px-2\">\n <p>\n 縲檎、セ蜀�SE霆「閨キ繝翫ン繧ィ繝シ繧ク繧ァ繝ウ繝医阪r縺泌茜逕ィ縺�◆縺�縺上→縲∝シ顔、セ繧ィ繝シ繧ク繧ァ繝ウ繝医′縺ゅ↑縺溘�縺皮オ梧ュエ縲√#蟶梧悍譚。莉カ繧偵b縺ィ縺ォ繝槭ャ繝√@縺滓アゆココ繧偵#謠先。医ゅ∪縺溘∵嶌鬘槭�豺サ蜑翫∽コ句燕髱「謗・蟇セ遲悶↑縺ゥ縺ゅ↑縺溘�霆「閨キ謌仙粥縺セ縺ァ繧オ繝昴�繝医@縺ヲ縺�″縺セ縺吶ゅム繧、繝ャ繧ッ繝医し繝シ繝薙せ縺ィ荳ヲ陦後@縺ヲ縺泌茜逕ィ縺ァ縺阪∪縺吶�縺ァ縲√●縺イ縺泌茜逕ィ縺上□縺輔>縲�\n </p>\n <p>縲檎、セ蜀�SE霆「閨キ繝翫ン縲繧ィ繝シ繧ク繧ァ繝ウ繝医阪�隧ウ邏ー縺ォ縺、縺�※縺ッ縺薙■繧�</p>\n <p>窶サ縲檎、セ蜀�SE霆「閨キ繝翫ン縲繧ィ繝シ繧ク繧ァ繝ウ繝医阪�縲√%繧後∪縺ァ縺ョ縺皮オ碁ィ薙d縺泌ク梧悍蜀�ョケ縺ォ繧医▲縺ヲ縺ッ縲∵ョ句ソオ縺ェ縺後i繧オ繝シ繝薙せ縺ョ縺疲署萓帙′縺ァ縺阪↑縺��エ蜷医′縺斐*縺�∪縺吶ゅ≠繧峨°縺倥a縺比コ�価縺上□縺輔>縲�</p>\n <p>縺泌茜逕ィ縺輔l繧句�エ蜷医�蛻ゥ逕ィ隕冗エ�r縺皮「コ隱阪�縺泌酔諢上�荳翫∝茜逕ィ髢句ァ九@縺ヲ縺上□縺輔>縲�</p>\n </div>\n </div>\n\n <div class=\"d-flex justify-content-center pb-5\">\n <a class=\"btn btn-primary rounded px-4 py-2 text-white size-13\" @click=\"redirectToTeaser\">\n 繧ィ繝シ繧ク繧ァ繝ウ繝医し繝シ繝薙せ縺ョ縺皮エケ莉欺n </a>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { TEASER_PATH } from '@/constant/routers/path';\n\nconst redirectToTeaser = () => {\n localStorage.setItem('prePathOfTeaser', `${window.location.pathname}${window.location.search}`);\n window.location.href = TEASER_PATH;\n};\n</script>\n","<template>\n <div v-if=\"!isLoading\">\n <div class=\"placeholder\">\n <div class=\"placeholder-text\"></div>\n </div>\n </div>\n <div class=\"job-search-container row container-fluid mt-5d5 mx-0 mb-md-0 mb-5 gap-3 justify-content-center\" v-else>\n <div class=\"w-317x col-md-4 d-md-flex d-none p-0 align-items-start\">\n <JobSearch @searchJob=\"onChangeResultSearch\" :prefectures=\"prefectures\" :occupations=\"occupations\"\n :industries=\"industries\" :skills=\"skills\" :sort=\"sort\" :incomes=\"incomes\" />\n </div>\n <div class=\"d-md-none d-block\">\n <div class=\"d-flex justify-content-around\">\n <button type=\"button\"\n class=\"btn btn-primary rounded-4x col-6 d-flex justify-content-center align-items-center mw-184x\"\n data-bs-toggle=\"modal\" data-bs-target=\"#jobCondition\">\n <div class=\"flex-grow-1 size-12 lh-12\">讀懃エ「譚。莉カ</div>\n <img src=\"@/assets/images/icons/zoom.svg\" role=\"button\" class=\"border rounded-md-circle border-third p-0d25\"\n data-bs-dismiss=\"modal\" />\n </button>\n </div>\n\n <!-- Modal -->\n <ModalBase isShowAddButton ref=\"modalListConditionSearchAgent\" element=\"modalListConditionSearchAgentElement\"\n title=\"菫晏ュ倥@縺滓、懃エ「譚。莉カ\" modalType=\"mx-4\" headerBackground=\"bg-blue-primary\" btnColseColor=\"btn-close-white\"\n colorText=\"text-white\">\n <template #body>\n <div class=\"text-center bg-grey-05 py-2\">\n <img src=\"@/assets/images/icons/arrow-left-blue.svg\" alt=\"Back icon\">\n <span class=\"ms-2 color-blue-primary cursor-pointer\" data-bs-toggle=\"modal\"\n data-bs-target=\"#jobCondition\">譚。莉カ險ュ螳壹↓謌サ繧�</span>\n </div>\n <div class=\"list-job-container overflow-y-scroll bg-white\">\n <div v-if=\"totalConditionSearch == 0\">\n <p class=\"text-center\">菫晏ュ倥@縺滓、懃エ「譚。莉カ縺ッ縺ゅj縺セ縺帙s</p>\n </div>\n <div class=\"border-bottom px-4\" v-for=\"searchCondition in listConditionSearch\">\n <div class=\"d-flex justify-content-between\">\n <div class=\"d-flex cursor-pointer\" @click=\"onApplySearchCondition(searchCondition)\"\n data-bs-dismiss=\"modal\">\n <img src=\"@/assets/images/icons/arrow_curved_left.svg\" alt=\"Back icon\">\n <p class=\"text-black my-3 mx-2 truncate-text w-16\">{{ searchCondition.title }}</p>\n </div>\n <img src=\"@/assets/images/icons/trash_grey.svg\" alt=\"Trash icon\" class=\"cursor-pointer\"\n @click=\"onOpenModaConditionSearchConfirm(searchCondition.id, searchCondition.title)\">\n </div>\n </div>\n </div>\n </template>\n </ModalBase>\n\n <div class=\"modal fade\" id=\"confirmDeleteSearchCondition\" tabindex=\"-1\" aria-hidden=\"true\">\n <div class=\"modal-dialog\">\n <div class=\"modal-content\">\n <div class=\"d-flex justify-content-end px-3 pt-3\">\n <button role=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\"></button>\n </div>\n <div class=\"modal-body p-0\">\n <div class=\"d-flex justify-content-center p-0\">\n <h6 class=\"m-2 px-4\">�「{{ titleItemSearch }}�」 繧貞炎髯、縺励∪縺吶°��</h6>\n </div>\n <div class=\"h-48x d-flex justify-content-center my-4\">\n <button type=\"button\"\n class=\"btn-center btn-primary bg-white py-2 px-4 color-blue-primary size-12 pe-auto w-8\"\n data-bs-dismiss=\"modal\" aria-label='Close'>\n 繧ュ繝」繝ウ繧サ繝ォ\n </button>\n <button type=\"button\" class=\"btn-center btn-primary py-2 px-4 ms-4 text-white size-12 pe-auto w-8\"\n @click=\"onDeleteSearchCondition(idItemSearch)\" data-bs-dismiss=\"modal\">\n 蜑企勁縺吶k\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"modal fade\" id=\"jobCondition\" tabindex=\"-1\" aria-hidden=\"true\">\n <div class=\"modal-dialog\">\n <div class=\"modal-content\">\n <div class=\"modal-header bg-blue-primary d-flex justify-content-between p-0\">\n <p class=\"m-2 text-white\">讀懃エ「譚。莉カ</p>\n <img src=\"@/assets/image/icon-close-white.svg\" role=\"button\"\n class=\"border rounded-circle border-third p-0d25\" data-bs-dismiss=\"modal\" />\n </div>\n <div class=\"modal-body p-0 no-bounce-x\">\n <JobSearchSP @searchJob=\"onChangeResultSearch\" @createJobCondition=\"onSaveJobCondition\" :sort=\"sort\"\n :prefectures=\"prefectures\" :occupations=\"occupations\" :industries=\"industries\" :skills=\"skills\"\n :incomes=\"incomes\" />\n </div>\n </div>\n </div>\n </div>\n\n </div>\n <div class=\"col-md-6 p-0 mt-3 mt-md-0 flex-grow-1 mw-634x\">\n <div :class=\"`bg-white h-3 d-flex align-items-center mt-md-0 mb-3 position-sticky z-1 job-list-tab ${userLoggedIn ? 'user-logged-in' : ''}`\">\n <a href=\"javascript:void(0);\"\n class=\"col-6 text-center px-0 link-underline link-underline-opacity-0 opacity-50 d-inline-block size-12 fw-bold color-blue-primary menu-list-job d-inline-block\"\n @click=\"redirectToDirectJobs\">\n 繝繧、繝ャ繧ッ繝域アゆココ\n <img src=\"@/assets/images/icons/question.svg\" alt=\"question icon\" class=\"ms-2 mb-1\" data-bs-toggle=\"tooltip\"\n data-bs-offset=\"0, 10\" data-bs-placement=\"bottom\" data-bs-custom-class=\"tooltip-third\" data-bs-html=\"true\"\n data-bs-title=\"縲後ム繧、繝ャ繧ッ繝域アゆココ縲阪�縲∵軸霈峨☆繧倶シ∵・ュ縺ョ豎ゆココ縺ォ豎り�閠�′逶エ謗・蠢懷供縺後〒縺阪k豎ゆココ蠖「蠑上〒縺吶�<br>窶サ繝繧、繝ャ繧ッ繝医し繝シ繝薙せ縺泌茜逕ィ縺ョ譁ケ縺ョ縺ソ縺泌ソ懷供縺後〒縺阪∪縺吶�\">\n </a>\n <a href=\"#\"\n class=\"col-6 text-center px-0 link-underline link-underline-opacity-0 d-inline-block size-12 fw-bold color-blue-primary menu-list-job menu-active d-inline-block\">\n 繧ィ繝シ繧ク繧ァ繝ウ繝域アゆココ\n <img src=\"@/assets/images/icons/question.svg\" alt=\"question icon\" class=\"ms-2 mb-1\" data-bs-toggle=\"tooltip\"\n data-bs-offset=\"0, 10\" data-bs-placement=\"bottom\" data-bs-custom-class=\"tooltip-third\" data-bs-html=\"true\"\n data-bs-title=\"縲後お繝シ繧ク繧ァ繝ウ繝域アゆココ縲阪�縲√い繧、繝�繝輔ぃ繧ッ繝医Μ繝シ縺御シ∵・ュ縺九i萓晞�シ縺輔l謗イ霈峨☆繧区アゆココ縺ォ蠢懷供縺ァ縺阪k豎ゆココ蠖「蠑上〒縺吶�<br>窶サ繧ィ繝シ繧ク繧ァ繝ウ繝医し繝シ繝薙せ縺泌茜逕ィ縺ョ譁ケ縺ョ縺ソ縺泌ソ懷供縺後〒縺阪∪縺吶�\">\n </a>\n </div>\n <h1 class=\"size-16 fw-bold d-md-flex m-0 text-center\">\n {{ h1Title }}\n </h1>\n <div class=\"d-md-flex m-0 text-center\">\n <p class=\"size-14 fw-bold mb-0\">縺薙�譚。莉カ縺ョ豎ゆココ謨ー<span class=\"size-20 px-2\"><vue3-autocounter ref='counter'\n :startAmount='0' :endAmount='totalResult' :duration='1' :autoinit='true'\n @finished='' /></span><span>莉カ</span></p>\n <div class=\"d-flex ms-md-3 justify-content-center order-2\">\n <div class=\"d-flex justify-content-between\">\n <select class=\"form-select select-input-primary w-8 h-2d5 size-14 lh-14\" aria-label=\"sort-job-label\"\n @change=\"onChangeSortDirection\" v-model=\"sort\">\n <option v-for=\"sort in sortCondition\" :value=\"sort.value\">{{ sort.text }}</option>\n </select>\n </div>\n </div>\n </div>\n <div ref=\"inputListJob\" class=\"list-job-search\">\n <div class=\"card w-100 mb-2 border-0 w-22 mt-3 pb-3\" v-for=\"job in jobs\">\n <div class=\"card-body p-0\" :id=\"`job-card-${job.id}`\">\n <div class=\"job-page__body py-3 pe-2 ps-3\">\n <div class=\"size-12 fw-medium\">\n {{ job.company.name }}\n </div>\n <div class=\"job-page__body-title d-flex\">\n <div class=\"col-9 size-18 lh-18 fw-bold text-md-decoration-underline cursor-pointer flex-grow-1\"\n @click=\"onOpenDetailJob(job.id)\">\n {{ job.title }}\n </div>\n <div class=\"d-flex text-end\">\n <div class=\"pe-1\" v-if=\"job.operation_status == 'closed'\">\n <span class=\"tag-gray-01 size-10 lh-10\">蜍滄寔邨ゆコ�</span>\n </div>\n <div class=\"pe-1\" v-if=\"new Date(job.public_date) >= pastDate\">\n <span class=\"tag-pink-01 size-10 lh-10\">譁ー逹</span>\n </div>\n </div>\n </div>\n <div class=\"job-page__body-overview py-3 gap-2\">\n <div>\n <div class=\"d-flex p-0 gap-2 flex-wrap\">\n <div\n class=\"job-page__body-overview__place border border-blue-primary rounded-10x h-1d5 d-flex justify-content-center align-items-center px-2\"\n v-if=\"job.occupation_description && job.occupation_description.length > 0\">\n <img src=\"@/assets/images/icons/ic_occupation.svg\" alt=\"Occupation icon\">\n <span class=\"size-10 ps-1 color-blue-primary\">{{\n truncateString(job.occupation_description.join(', '), 25, '...')\n }}</span>\n </div>\n <div\n class=\"job-page__body-overview__place rounded-10x h-1d5 d-flex justify-content-center align-items-center px-2\"\n v-if=\"job.wage_min || job.wage_max\">\n <img src=\"@/assets/images/icons/ic_income.svg\" alt=\"Income icon\">\n <span class=\"size-10 ps-1\">{{ `${job.wage_min ?\n job.wage_min + '荳��' : ''}\n ~\n ${job.wage_max ? job.wage_max + '荳��' : ''}`}}</span>\n </div>\n <div\n class=\"job-page__body-overview__place border border-blue-primary rounded-10x h-1d5 d-flex justify-content-center align-items-center px-2\"\n v-if=\"job.prefecture_name.length > 0\">\n <img src=\"@/assets/images/icons/ic_round-place-blue.svg\" alt=\"Place icon\">\n <span class=\"size-10 ps-1 color-blue-primary\">{{\n truncateString(job.prefecture_name.join(', '), 25, '...')\n }}</span>\n </div>\n <div\n class=\"job-page__body-overview__place border border-blue-primary rounded-10x h-1d5 d-flex justify-content-center align-items-center px-2\"\n v-if=\"job.industry_name.length > 0\">\n <img src=\"@/assets/images/icons/ic_industry.svg\" alt=\"Industry icon\">\n <span class=\"size-10 ps-1 color-blue-primary\">{{\n truncateString(job.industry_name.join(', '), 35, '...')\n }}</span>\n </div>\n <div v-if=\"job.skill_names.length > 0\"\n class=\"job-page__body-overview__place border border-blue-primary rounded-10x h-1d5 d-flex justify-content-center align-items-center px-2\">\n <img src=\"@/assets/images/icons/gear-white.svg\" alt=\"Skill icon\">\n <span class=\"size-10 ps-1 color-blue-primary\">{{\n truncateString(job.skill_names.join(', '), 25, '...')\n }}</span>\n </div>\n </div>\n </div>\n </div>\n <div class=\"job-page__body-description d-flex flex-column\">\n <div class=\"fw-bold mb-2\">莉穂コ句�螳ケ</div>\n <div v-if=\"isDescriptionLong(job.duties)\">\n <span class=\"job-description\"\n v-html=\"job.isShowFullDescription ? job.duties : truncateHtml(job.duties, 200)\"></span>\n <span @click=\"handleShowHideDescription(job.id)\" class=\"color-grey-text-des cursor-pointer\">\n {{ job.isShowFullDescription ? '謚倥j縺溘◆繧' : '繧ゅ▲縺ィ縺ソ繧�' }}\n </span>\n </div>\n <div v-else>\n <span class=\"job-description\" v-html=\"job.duties\"></span>\n </div>\n </div>\n </div>\n <div class=\"job-search__footer pt-2 d-md-flex justify-content-center\" v-if=\"job.operation_status == 'closed'\">\n <div class=\"d-flex justify-content-center ms-md-3 mt-md-0 mt-2\">\n <button type=\"button\" class=\"btn tag-gray-01 rounded-24 px-5 py-2 size-12\">\n 蜍滄寔邨ゆコ�\n </button>\n </div>\n </div>\n <div class=\"job-search__footer pt-2 d-md-flex justify-content-center\" v-else>\n <div v-if=\"!isDisableConsideration(job)\" class=\"d-flex justify-content-center\">\n <button type=\"button\" class=\"btn bg-grey-05 rounded-24 px-5 py-2 size-12\" @click=\"onFavoriteJob(job)\"\n v-if=\"job.consideration && job.consideration.in_consideration == 'yes'\">\n <img src=\"@/assets/images/icons/checked.svg\" alt=\"checked icon\" class=\"mb-1 me-1\">\n 讀懆ィ惹クュ\n </button>\n <button v-else type=\"button\" class=\"btn btn-outline-secondary rounded-24 px-5 py-2 size-12\"\n :class=\"job.status == 'inactive' ? 'btn-disabled' : ''\" @click=\"onFavoriteJob(job)\">\n <img src=\"@/assets/images/icons/star-border-blue.svg\" alt=\"checked icon\" class=\"mb-1 me-1\">\n 讀懆ィ弱☆繧欺n </button>\n </div>\n <div class=\"d-flex justify-content-center ms-md-3 mt-md-0 mt-2\">\n <button type=\"button\" class=\"btn btn-primary rounded-24 px-5 px-auto py-2 size-12 w-185x\"\n @click=\"onOpenDetailJob(job.id)\">\n 豎ゆココ繧定ヲ九k\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"pagination d-flex justify-content-center mt-3 mx size-12 text-nowrap\">\n <vue-awesome-paginate\n v-model=\"pagy.page\"\n :on-click=\"navigateToPage\"\n :total-items=\"pagy.count\"\n :items-per-page=\"30\"\n :max-pages-shown=\"screenWidth <= 768 ? getMaxVisiblePagesSP() : getMaxVisiblePages()\"\n :show-ending-buttons=\"screenWidth <= 768 ? false : true\"\n :show-breakpoint-buttons=\"false\"\n :hide-prev-next-when-ends=\"true\"\n first-page-content=\"譛蛻昴∈\"\n last-page-content=\"譛蠕後∈\"\n >\n <template #prev-button>\n <a class=\"page-link cursor-pointer w-2 h-2 d-flex justify-content-center align-items-center border-0 rounded-4x\" aria-label=\"previous\">\n <img src=\"@/assets/images/icons/paginate-angle-left.svg\" alt=\"\">\n </a>\n </template>\n\n <template #next-button>\n <a class=\"page-link cursor-pointer w-2 h-2 d-flex justify-content-center align-items-center border-0 rounded-4x\" aria-label=\"next\">\n <img src=\"@/assets/images/icons/paginate-angle-right.svg\" alt=\"\">\n </a>\n </template>\n </vue-awesome-paginate>\n </div>\n </div>\n\n <div class=\"col-md-2 mb-md-0 mb-5 w-250x px-0\" v-if=\"jobViewHistory.length\">\n <div class=\"bg-white-primary w-100 border border-third rounded\">\n <div class=\"company-information overflow-y-scroll\">\n <div class=\"company-information__header border-bottom border-third py-3\">\n <h2 class=\"text-center size-14 color-blue-primary mb-0\">髢イ隕ァ螻・豁エ</h2>\n </div>\n <div class=\"company-information__body border-bottom size-12 px-2\" v-for=\"job in jobViewHistory\">\n <a class=\"size-12 p-3 border-bottom link-info text-black text-decoration-none cursor-pointer\"\n target=\"_blank\" rel=\"noopener noreferrer\" :href=\"`/jobs/${job.jobId}?agent=true`\">\n <h4 class=\"fw-bold size-12 text-decoration-underline\">{{ job.title }}</h4>\n <div class=\"d-block p-0 gap-2\">\n <div\n class=\"job-page__body-overview__place rounded-10x h-1d5 d-flex align-items-center px-2\"\n v-if=\"job.occupation != ''\">\n <img src=\"@/assets/images/icons/ic_occupation.svg\" alt=\"Occupation icon\">\n <span class=\"size-10 ps-1\">{{ truncateString(job.occupation, 25, '...') }}</span>\n </div>\n <div\n class=\"job-page__body-overview__place rounded-10x h-1d5 d-flex align-items-center px-2\"\n v-if=\"job.income != ''\">\n <img src=\"@/assets/images/icons/ic_income.svg\" alt=\"Income icon\">\n <span class=\"size-10 ps-1\">{{ job.income }}</span>\n </div>\n <div\n class=\"job-page__body-overview__place rounded-10x h-1d5 d-flex align-items-center px-2\"\n v-if=\"job.place != ''\">\n <img src=\"@/assets/images/icons/ic_round-place-blue.svg\" alt=\"Place icon\">\n <span class=\"size-10 ps-1\">{{ truncateString(job.place, 25, '...') }}</span>\n </div>\n <div\n class=\"job-page__body-overview__place rounded-10x h-1d5 d-flex align-items-center px-2\"\n v-if=\"job.industry != ''\">\n <img src=\"@/assets/images/icons/ic_industry.svg\" alt=\"Industry icon\">\n <span class=\"size-10 ps-1\">{{ truncateString(job.industry, 25, '...') }}</span>\n </div>\n <div v-if=\"job.skill != ''\"\n class=\"job-page__body-overview__place rounded-10x h-1d5 d-flex align-items-center px-2\">\n <img src=\"@/assets/images/icons/gear-white.svg\" alt=\"Skill icon\">\n <span class=\"size-10 ps-1\">{{ truncateString(job.skill, 25, '...') }}</span>\n </div>\n </div>\n </a>\n </div>\n </div>\n </div>\n </div>\n </div>\n <Agent/>\n <ScrollToTopButton />\n</template>\n\n<script setup lang=\"ts\">\nimport { onBeforeUnmount, onMounted, ref, watch, nextTick, computed } from \"vue\"\nimport JobSearch from \"@/pages/candidate/job/agent/JobSearch.vue\"\nimport JobSearchSP from \"@/pages/candidate/job/agent/JobSearchSP.vue\";\nimport { PaginationType } from \"@/types/models/PaginationType\";\nimport { createAgentConsideration, deleteConditionJobSearch, getAgentJobs, getListConditionJobSearch, updateAgentConsideration } from \"@/apis/job.api\";\nimport { getIncomes, getIndustries, getOccupations, getPrefectures, getSkills } from \"@/apis/candidate\";\nimport { PrefecturePrimary } from \"@/types/models/prefecture\";\nimport { OccupationPrimary } from \"@/types/models/occupation\";\nimport { IndustryType } from \"@/types/models/industryType\";\nimport { SkillsType } from \"@/types/models/skill\";\nimport Vue3Autocounter from 'vue3-autocounter';\nimport { truncateString } from \"@/utils/string\";\nimport { IncomePrimary } from \"@/types/models/income\";\nimport { SearchConditionType } from \"@/types/models/searchConditionType\";\nimport { Modal, Tooltip } from \"bootstrap\";\nimport ModalBase from \"@/components/common/ModalBase/index.vue\";\nimport { AGENT_SEARCH_PATH, SEARCH_PATH, CANDIDATE_SIGN_UP_PATH } from \"@/constant/routers/path\";\nimport Agent from \"@/components/common/PlatformModal/Agent.vue\";\nimport router from '@/routers';\nimport { useRoute } from 'vue-router';\nimport { useHead } from '@vueuse/head';\nimport ScrollToTopButton from \"@/components/ScrollToTopButton.vue\";\nconst route = useRoute();\n\nconst prefectures = ref<PrefecturePrimary[]>([]);\nconst occupations = ref<OccupationPrimary[]>([]);\nconst incomes = ref<IncomePrimary[]>([]);\nconst industries = ref<IndustryType[]>([]);\nconst skills = ref<SkillsType[]>([]);\nconst isLoading = ref<boolean>(false);\nconst screenWidth = ref<number>(window.innerWidth);\nconst totalConditionSearch = ref(0);\nconst listConditionSearch = ref();\nconst idItemSearch = ref(0);\nconst titleItemSearch = ref('');\nconst platform = ref();\nconst jobViewHistory = ref();\nconst userLoggedIn = ref(false);\n\nconst modalListConditionSearchAgent = ref<InstanceType<typeof ModalBase> | null>(null);\nconst modalElement = ref();\n\nconst updateScreenWidth = () => {\n screenWidth.value = window.innerWidth;\n};\n\nconst initPagination = {\n count: null,\n from: null,\n to: null,\n next: null,\n prev: null,\n page: null,\n pages: null,\n}\n\nconst initialData = {\n search_word: null,\n occupations: null,\n locations: null,\n annual_min_income: null,\n annual_max_income: null,\n industries: null,\n skills: null,\n}\nconst currentDate = new Date()\nconst pastDate = new Date(currentDate);\npastDate.setDate(currentDate.getDate() - 7);\n\nconst pagy = ref<PaginationType>(initPagination);\nconst jobs = ref();\nconst data = ref(initialData);\nconst totalResult = ref();\nconst inputListJob = ref(null);\nconst jobSearchContainer = ref(null);\nconst perPage = 30;\n\nconst updateJobSearchPosition = () => {\n if (jobSearchContainer.value && inputListJob.value) {\n const containerRect = jobSearchContainer.value.getBoundingClientRect();\n const listRect = inputListJob.value.getBoundingClientRect();\n const jobSearch = jobSearchContainer.value.querySelector('.job-search');\n const listConditionSearch = jobSearchContainer.value.querySelector('.list-condition-search')\n\n if (jobs.value.length <= 1) {\n jobSearch?.style.setProperty('position', 'static', 'important');\n listConditionSearch?.style.setProperty('position', 'static', 'important');\n return;\n }\n\n if (jobSearch) {\n if (containerRect.top <= 0) {\n const maxTop = listRect.bottom - jobSearch.offsetHeight;\n const newTop = Math.min(100, maxTop);\n\n jobSearch.style.position = 'fixed';\n jobSearch.style.top = `${newTop}px`;\n jobSearch.style.width = `${containerRect.width}px`;\n } else {\n jobSearch.style.position = 'static';\n }\n }\n }\n};\n\nconst handleScroll = () => {\n requestAnimationFrame(updateJobSearchPosition);\n};\n\nonMounted(async () => {\n await getAllData();\n await getListConditionSearch();\n getJobs();\n window.addEventListener(\"resize\", updateScreenWidth);\n nextTick(() => {\n updateJobSearchPosition();\n window.addEventListener('scroll', handleScroll);\n window.addEventListener('resize', updateJobSearchPosition);\n new Tooltip(document.body, {\n selector: \"[data-bs-toggle='tooltip']\",\n customClass: 'tooltip-third'\n });\n });\n jobViewHistory.value = JSON.parse(localStorage.recentlyJob || '[]');\n \n // 繝ュ繧ー繧、繝ウ繝√ぉ繝�け\n const token = localStorage.getItem('access_token');\n userLoggedIn.value = token && token.length > 0;\n\n useHead({\n title,\n meta: [\n {\n name: 'description',\n content: description\n },\n {\n name: 'keywords',\n content: keywords\n },\n {\n property: 'og:site_name',\n content: \"遉セ蜀�SE霆「閨キ繝翫ン\"\n },\n {\n property: 'og:image',\n content: \"https://se-navi.jp/ogp_se.webp\"\n },\n {\n property: 'og:title',\n content: title\n },\n {\n property: 'og:description',\n content: description\n },\n {\n property: 'og:url',\n content: window.location.href\n },\n {\n property: 'twitter:image',\n content: \"https://se-navi.jp/ogp_se.webp\"\n },\n {\n name: 'twitter:title',\n content: title\n },\n {\n name: 'twitter:description',\n content: description\n }\n ]\n });\n});\n\nonBeforeUnmount(() => {\n window.removeEventListener(\"resize\", updateScreenWidth);\n useHead({\n title: '',\n meta: []\n });\n});\n\nconst updateMetaTag = () => {\n const existingMeta = document.querySelector('meta[name=\"robots\"]');\n if (existingMeta) {\n document.head.removeChild(existingMeta);\n }\n\n if (jobs.value.length === 0) {\n const meta = document.createElement('meta');\n meta.name = \"robots\";\n meta.content = \"noindex\";\n document.head.appendChild(meta);\n }\n};\n\nwatch(() => jobs.value, () => {\n updateMetaTag();\n});\nlet isUpdatingPage = false;\nwatch(() => route.query.page, () => {\n if (!isUpdatingPage) {\n getJobs();\n }\n});\n\nconst onOpenModaConditionSearchConfirm = (id: number, title: string) => {\n idItemSearch.value = id;\n titleItemSearch.value = title;\n modalElement.value = new Modal(<HTMLElement>document.getElementById('confirmDeleteSearchCondition'));\n modalElement.value.show();\n}\n\nconst onOpenModalPlatform = () => {\n document.querySelectorAll('.modal-backdrop').forEach(backdrop => backdrop.remove());\n modalElement.value = new Modal(<HTMLElement>document.getElementById('platformAgentModal'));\n modalElement.value.show();\n}\n\nconst onCloseModal = async (element: string) => {\n const modalElementDOM = document.getElementById(element);\n modalElementDOM?.classList.remove('show');\n modalElementDOM.style.display = 'none';\n modalElementDOM?.removeAttribute('aria-modal');\n modalElementDOM?.setAttribute('aria-hidden', 'true');\n document.querySelectorAll('.modal-backdrop').forEach(backdrop => backdrop.remove());\n await nextTick();\n document.body.removeAttribute('style');\n}\n\nconst sortCondition = ref([\n { text: '譁ー逹鬆�', value: 'publication_date_senavi' },\n { text: '蟷エ蜿朱��', value: 'wage_max' },\n]);\nconst sort = ref('publication_date_senavi');\n\nconst getJobs = async () => { \n const minIncome = incomes.value.find(income => income.id === Number(route.query.wage_min))\n const maxIncome = incomes.value.find(income => income.id === Number(route.query.wage_max))\n const currentPage = Math.max(Number(route.query.page) || 1, 1);\n const params: Record<string, any> = {\n include: ['corporation', 'prefectures', 'hrc_skills', 'hrc_job_types', 'corporation.corporation_industries'],\n 'filter[have_hrc_job_types_any]': route.query.job_types,\n 'filter[with_prefecture]': route.query.prefectures,\n 'filter[have_corporation_industries_any]': route.query.industries,\n 'filter[have_hrc_skills_any]': route.query.skills,\n 'filter[contain_keywords_any]': route.query.keywords?.trim().split(/[\\s縲]+/) || [], // Split whitespace full-width or half-width\n sort: '-' + sort.value,\n 'page[size]': perPage,\n 'page[number]': currentPage\n }\n if (minIncome || maxIncome) {\n params['filter[with_wage_range]'] = [\n minIncome ? getNumberIncome(minIncome?.display_amount) : null,\n maxIncome ? getNumberIncome(maxIncome?.display_amount) : null\n ]\n }\n \n const response = await getAgentJobs(params);\n const pageInvalid = currentPage + 1 > response.data.meta.total_pages\n if (response.status === 200) {\n jobs.value = response.data.jobs;\n platform.value = response.data.platform;\n totalResult.value = response.data.meta.total_records;\n pagy.value = {\n count: totalResult.value,\n from: 1,\n to: 4,\n page: currentPage,\n pages: response.data.meta.total_pages,\n prev: (currentPage || 1) - 1,\n next: pageInvalid ? null : (currentPage || 1) + 1,\n }\n isLoading.value = true;\n }\n\n if (pageInvalid) {\n isUpdatingPage = true;\n router.push({ path: AGENT_SEARCH_PATH, query: { ...route.query, page: currentPage === 1 ? undefined : currentPage } });\n isUpdatingPage = false;\n }\n}\n\nconst emit = defineEmits(['click'])\n\nconst onChangeResultSearch = (resultSearch: any, dataSearch: any) => {\n jobs.value = resultSearch.data.jobs;\n data.value = dataSearch;\n totalResult.value = resultSearch.data.meta.total_records;\n const currentPage = Math.max(Number(route.query.page) || 1, 1)\n const pageInvalid = currentPage + 1 > resultSearch.data.meta.total_pages\n pagy.value = {\n count: totalResult.value,\n from: 1,\n to: 4,\n page: currentPage,\n pages: resultSearch.data.meta.total_pages,\n prev: (currentPage || 1) - 1,\n next: pageInvalid ? null : (currentPage || 1) + 1,\n }\n const paramsUrl = { ...route.query, page: undefined, keywords: dataSearch.keywords };\n router.push({ path: AGENT_SEARCH_PATH, query: paramsUrl });\n}\n\nconst onChangeSortDirection = async () => {\n const params: Record<string, any> = {\n include: ['corporation', 'prefectures', 'hrc_skills', 'hrc_job_types', 'corporation.corporation_industries'],\n 'filter[have_hrc_job_types_any]': data.value.occupations,\n 'filter[with_prefecture]': data.value.locations,\n 'filter[have_corporation_industries_any]': data.value.industries,\n 'filter[have_hrc_skills_any]': data.value.skills,\n 'filter[contain_keywords_any]': data.value.keywords?.trim().split(/[\\s縲]+/) || [], // Split whitespace full-width or half-width\n sort: '-' + sort.value,\n 'page[size]': perPage,\n 'page[number]': pagy.value.page,\n }\n if (data.value.annual_min_income || data.value.annual_max_income) {\n params['filter[with_wage_range]'] = [\n data.value.annual_min_income,\n data.value.annual_max_income\n ]\n }\n const response = await getAgentJobs(params);\n const currentPage = Math.max(Number(route.query.page) || 1, 1)\n const pageInvalid = currentPage + 1 > response.data.meta.total_pages\n if (response.status == 200) {\n jobs.value = response.data.jobs;\n totalResult.value = response.data.meta.total_records;\n pagy.value = {\n count: totalResult.value,\n from: 1,\n to: 4,\n page: pagy.value.page,\n pages: response.data.meta.total_pages,\n prev: (currentPage || 1) - 1,\n next: pageInvalid ? null : (currentPage || 1) + 1,\n };\n totalResult.value = pagy.value.count;\n }\n}\n\nconst onApplySearchCondition = (searchCondition: SearchConditionType) => {\n const data = {\n title: searchCondition?.title,\n keywords: searchCondition?.candidate_saved_job_search_condition_freeword?.free_word,\n job_types: searchCondition?.candidate_saved_job_search_condition_occupations?.map(item => item.occupation_id),\n prefectures: searchCondition?.candidate_saved_job_search_condition_locations?.map(item => item.prefecture_id),\n city_ids: searchCondition?.candidate_saved_job_search_condition_locations?.map(item => item.city_id),\n wage_min: searchCondition?.annual_min_income_id || '',\n wage_max: searchCondition?.annual_max_income_id || '',\n industries: searchCondition?.candidate_saved_job_search_condition_industries?.map(item => item.industry_id),\n skills: searchCondition?.candidate_saved_job_search_condition_skills?.map(item => item.skill_id),\n agent: \"true\",\n page: Math.max(Number(route.query.page) || 1, 1)\n }\n modalElement.value = new Modal(<HTMLElement>document.getElementById('jobCondition'));\n modalElement.value.show();\n router.push({ path: AGENT_SEARCH_PATH, query: data });\n}\n\nconst getListConditionSearch = async () => {\n const response = await getListConditionJobSearch()\n if (response.status == 200 && response?.data?.job_search_conditions) {\n listConditionSearch.value = response?.data?.job_search_conditions.filter(item => item.service_type_flag != false)\n totalConditionSearch.value = listConditionSearch?.value?.length\n }\n}\n\nconst onDeleteSearchCondition = async (id: number) => {\n const response = await deleteConditionJobSearch(id)\n if (response.status == 200) {\n const inputSaveJobAvailable = document.getElementById('save-job-available');\n const inputSaveJobUnavailable = document.getElementById('save-job-unavailable')\n await getListConditionSearch();\n if (totalConditionSearch.value < 10 && inputSaveJobAvailable && inputSaveJobUnavailable) {\n inputSaveJobAvailable.classList.toggle('d-none');\n inputSaveJobAvailable.classList.toggle('d-block');\n inputSaveJobUnavailable.classList.toggle('d-none');\n inputSaveJobUnavailable.classList.toggle('d-block');\n }\n }\n}\n\nconst onSaveJobCondition = () => {\n getListConditionSearch();\n}\n\nconst getNumberIncome = (income: string) => {\n const numberRegex = /\\d+/;\n const match = income.match(numberRegex);\n\n if (match) {\n const number = parseInt(match[0], 10);\n return number;\n }\n}\n\nconst onOpenDetailJob = (jobId: number) => {\n const url = `/jobs/${jobId}?agent=true`;\n window.open(url, '_blank');\n}\n\nconst navigateToPage = async (page: number) => {\n const params: Record<string, any> = {\n include: ['corporation', 'prefectures', 'hrc_skills', 'hrc_job_types', 'corporation.corporation_industries'],\n 'filter[have_hrc_job_types_any]': data.value.occupations,\n 'filter[with_prefecture]': data.value.locations,\n 'filter[have_corporation_industries_any]': data.value.industries,\n 'filter[have_hrc_skills_any]': data.value.skills,\n 'filter[contain_keywords_any]': data.value.keywords?.trim().split(/[\\s縲]+/) || [], // Split whitespace full-width or half-width\n sort: '-' + sort.value,\n 'page[size]': perPage,\n 'page[number]': page,\n }\n if (data.value.annual_min_income || data.value.annual_max_income) {\n params['filter[with_wage_range]'] = [\n data.value.annual_min_income,\n data.value.annual_max_income\n ]\n }\n const response = await getAgentJobs(params);\n const pageInvalid = page + 1 > response.data.meta.total_pages\n if (response.status == 200) {\n if (window.scrollY > 0) window.scrollTo(0, 0)\n jobs.value = response.data.jobs;\n totalResult.value = response.data.meta.total_records;\n pagy.value = {\n count: totalResult.value,\n from: 1,\n to: 4,\n page: page,\n pages: response.data.meta.total_pages,\n prev: page - 1,\n next: pageInvalid ? null : page + 1,\n }\n isLoading.value = true;\n }\n const paramsUrl = { ...route.query, page: pagy.value.page };\n router.push({ path: AGENT_SEARCH_PATH, query: paramsUrl });\n}\n\nconst onFavoriteJob = async (job: any) => {\n if (!userLoggedIn.value) {\n window.location.href = CANDIDATE_SIGN_UP_PATH;\n return;\n }\n\n if (platform.value === 'direct') {\n onOpenModalPlatform();\n return;\n }\n\n job.consideration ? await updateFavoriteJob(job) : await createFavoriteJob(job);\n}\n\nconst createFavoriteJob = async (job: any) => {\n const response = await await createAgentConsideration(job.id);\n if (response.status == 200) {\n getJobs();\n }\n};\n\nconst updateFavoriteJob = async (job: any) => {\n const response = await updateAgentConsideration(job.id);\n if (response.status == 200) {\n getJobs();\n }\n};\n\nconst isAllParamsNull = (): boolean => {\n const urlParams = new URLSearchParams(window.location.search);\n const excludedParams = ['page', 'agent'];\n\n excludedParams.forEach(param => urlParams.delete(param));\n const remainingParams = Object.fromEntries(urlParams);\n\n return Object.keys(remainingParams).length === 0;\n};\n\nconst isParamsSearchEmpty = computed(() => {\n return isAllParamsNull();\n});\n\n// Get data\n\nconst getAllData = async () => {\n await Promise.all([getPrefecturesData(), getOccupationsData(),\n getIndustryData(), getSkillsData(), getIncomesData()]);\n};\n\nconst getPrefecturesData = async () => {\n const response = await getPrefectures();\n if (response.status === 200) {\n prefectures.value = response.data;\n }\n};\n\nconst getOccupationsData = async () => {\n const response = await getOccupations();\n if (response.status === 200) {\n occupations.value = response.data;\n }\n};\n\nconst getIncomesData = async () => {\n const response = await getIncomes();\n if (response.status === 200) {\n incomes.value = response.data;\n }\n}\n\nconst getIndustryData = async () => {\n const response = await getIndustries();\n if (response.status === 200) {\n industries.value = response.data;\n }\n}\n\nconst getSkillsData = async () => {\n const response = await getSkills();\n if (response.status === 200) {\n // 繧ィ繝シ繧ク繧ァ繝ウ繝医�繝シ繧ク縺ョ蝣エ蜷医~遉セ蜀�SE`繧ォ繝�ざ繝ェ繝シ縺ョ繧ケ繧ュ繝ォ縺ッ讀懃エ「鬆�岼縺ォ陦ィ遉コ縺励↑縺Ыn skills.value = response.data.filter((category: { id: number }) => category.id !== 31001);\n }\n}\n\nconst stripHtmlTags = (html: string) => {\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = html;\n return tempDiv.textContent || tempDiv.innerText || '';\n};\n\nconst isDescriptionLong = (jobDescription: string ) => {\n const plainText = stripHtmlTags(jobDescription);\n return plainText.length > 200;\n};\n\nconst handleShowHideDescription = (jobId: number) => {\n const jobIndex = jobs.value.findIndex(item => item.id == jobId)\n jobs.value[jobIndex].isShowFullDescription = !jobs.value[jobIndex].isShowFullDescription;\n if (!jobs.value[jobIndex].isShowFullDescription) {\n const cardJobElement = document.getElementById(`job-card-${jobId}`)\n cardJobElement?.scrollIntoView(true)\n }\n}\n\nconst redirectToDirectJobs = () => {\n const urlParams = new URLSearchParams(window.location.search);\n urlParams.delete('agent');\n urlParams.delete('page');\n if (urlParams.has('wage_min')) {\n const value = urlParams.get('wage_min') || '';\n urlParams.delete('wage_min');\n urlParams.set('min_annual_income', value);\n }\n if (urlParams.has('wage_max')) {\n const value = urlParams.get('wage_max') || '';\n urlParams.delete('wage_max');\n urlParams.set('max_annual_income', value);\n }\n window.location.href = `${SEARCH_PATH}&${urlParams.toString()}`;\n}\n\nconst isDisableConsideration = (job: any) => {\n if (!job.consideration) return false;\n\n return (job.consideration.current_stage_id != 0 && job.consideration.current_stage_id != 2)\n}\n\nconst truncateHtml = (html: string, maxLength: number) => {\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = html;\n\n let truncatedText = '';\n let currentLength = 0;\n\n const traverseNodes = (node) => {\n if (currentLength >= maxLength) return;\n\n if (node.nodeType === Node.TEXT_NODE) {\n const text = node.textContent;\n const remainingLength = maxLength - currentLength;\n\n if (text.length > remainingLength) {\n truncatedText += text.slice(0, remainingLength) + '...';\n currentLength = maxLength;\n } else {\n truncatedText += text;\n currentLength += text.length;\n }\n } else if (node.nodeType === Node.ELEMENT_NODE) {\n const clonedNode = node.cloneNode(false);\n for (let child of node.childNodes) {\n traverseNodes(child);\n if (currentLength >= maxLength) break;\n }\n if (currentLength < maxLength) {\n truncatedText += clonedNode.outerHTML;\n }\n }\n };\n\n traverseNodes(tempDiv);\n return truncatedText;\n};\n\nconst getParentCategoryName = (ids: string | string[], items: any[]) => {\n if (!ids || !items) return ''\n\n // 驟榊�縺ァ縺ェ縺��エ蜷医�驟榊�縺ォ螟画鋤\n const idArray = Array.isArray(ids) ? ids : [ids]\n const idNums = idArray.map(id => parseInt(id, 10))\n\n // 隕ェ繧ォ繝�ざ繝ェ縺ョ繝√ぉ繝�け\n for (const parent of items) {\n if (parent.children) {\n const childIds = parent.children.map(child => child.id)\n const hasAllChildren = childIds.every(id => idNums.includes(id))\n const hasOnlyChildren = idNums.every(id => childIds.includes(id))\n \n if (hasAllChildren && hasOnlyChildren) {\n return parent.name\n }\n }\n }\n\n // 蜊倅ク縺ョID縺ョ蝣エ蜷医�蜃ヲ逅�\n if (idArray.length === 1) {\n const idNum = idNums[0]\n let found = null\n\n items.forEach(parent => {\n if (parent.id === idNum) {\n found = parent\n }\n if (parent.children) {\n const child = parent.children.find(child => child.id === idNum)\n if (child) {\n found = child\n }\n }\n })\n \n return found ? found.name : ''\n }\n\n return ''\n}\n\nconst getOccupationName = computed(() => \n getParentCategoryName(route.query.job_types, occupations.value)\n)\n\nconst getIndustryName = computed(() => \n getParentCategoryName(route.query.industries, industries.value)\n)\n\nconst getSkillName = computed(() => \n getParentCategoryName(route.query.skills, skills.value)\n)\n\nconst getPrefectureName = computed(() => \n getParentCategoryName(route.query.prefectures, prefectures.value)\n)\n\nconst getDisplayName = computed(() => {\n if (route.query.job_types?.length > 0 && getOccupationName.value) return getOccupationName.value;\n if (route.query.industries?.length > 0 && getIndustryName.value) return getIndustryName.value;\n if (route.query.skills?.length > 0 && getSkillName.value) return getSkillName.value;\n if (route.query.prefectures?.length > 0 && getPrefectureName.value) return getPrefectureName.value;\n if (route.query.keywords) return `繧ュ繝シ繝ッ繝シ繝会シ�${route.query.keywords}`;\n return '';\n});\n\nconst h1Title = computed(() => {\n const name = getDisplayName.value;\n return name ? `${name}縺ョ遉セ蜀�SE 霆「閨キ繝サ豎ゆココ` : '縺吶∋縺ヲ縺ョ遉セ蜀�SE 霆「閨キ繝サ豎ゆココ';\n});\n\nconst getPageTitle = (name: string) => {\n return name ? `${name}縺ョ遉セ蜀�SE 霆「閨キ繝サ豎ゆココ�廬T霆「閨キ繧ィ繝シ繧ク繧ァ繝ウ繝医�繧ュ繝」繝ェ繧「逶ク隲� - 遉セ蜀�SE霆「閨キ繝翫ン` \n : '遉セ蜀�SE豎ゆココ謨ー5,000莉カ莉・荳翫∫、セ蜀�SE 霆「閨キ繝サ豎ゆココ讀懃エ「荳隕ァ�� 遉セ蜀�SE霆「閨キ繝翫ン'\n}\n\nconst getPageDescription = (name: string) => {\n return name ? `${name}縺ョIT霆「閨キ繝サ豎ゆココ諠��ア繝壹�繧ク縲�IT蟆る摩縺ョ繧ュ繝」繝ェ繧「繧ウ繝ウ繧オ繝ォ繧ソ繝ウ繝医′譛驕ゥ縺ェ豎ゆココ繧堤エケ莉九ょョ牙ソ��繧ィ繝シ繧ク繧ァ繝ウ繝域アゆココ縺ァ霆「閨キ繧偵し繝昴�繝医ら、セ蜀�SE縺ォ迚ケ蛹悶@縺溘く繝」繝ェ繧「謾ッ謠エ繧オ繝シ繝薙せ縲檎、セ蜀�SE霆「閨キ繝翫ン縲阪A\n : '遉セ蜀�SE豎ゆココ謨ー5,000莉カ莉・荳翫∫、セ蜀�SE 霆「閨キ繝サ豎ゆココ讀懃エ「荳隕ァ�� 遉セ蜀�SE霆「閨キ繝翫ン'\n}\n\nconst getMaxVisiblePages = () => {\n if (pagy.value.page <= 6) return Math.min(5 + pagy.value.page - 1, 9);\n if (pagy.value.page >= pagy.value.pages - 5) return Math.min(5 + (pagy.value.pages - pagy.value.page), 9);\n return 9;\n}\n\nconst getMaxVisiblePagesSP = () => {\n const paginationDiv = document.querySelector('.pagination');\n\n // 繝壹�繧ク縺�1~3縺ョ譎ゅ�pagination繧ッ繝ゥ繧ケ縺ョdiv驟堺ク九↓縺ゅkback-button繧ッ繝ゥ繧ケ繧呈戟縺」縺溘�繧ソ繝ウ縺ォd-none繧ッ繝ゥ繧ケ繧定カウ縺兔n if (pagy.value.page >= 1 && pagy.value.page <= 3) {\n const backButton = paginationDiv?.querySelector('.back-button');\n if (backButton) {\n backButton.classList.add('d-none');\n }\n }\n\n // pagy.value.pages-pagy.value.page縺�1莉・荳九�譎ゅ�pagination繧ッ繝ゥ繧ケ縺ョdiv驟堺ク九↓縺ゅknext-button繧ッ繝ゥ繧ケ繧呈戟縺」縺溘�繧ソ繝ウ縺ォd-none繧ッ繝ゥ繧ケ繧定カウ縺兔n if (pagy.value.pages - pagy.value.page <= 1) {\n const nextButton = paginationDiv?.querySelector('.next-button');\n if (nextButton) {\n nextButton.classList.add('d-none');\n }\n }\n \n if (pagy.value.page >= 4 && pagy.value.pages - pagy.value.page >= 2) return 3;\n return 4;\n}\n\nconst title = computed(() => {\n return getPageTitle(getDisplayName.value);\n});\n\nconst description = computed(() => {\n return getPageDescription(getDisplayName.value);\n});\n\nconst keywords = computed(() => {\n const baseKeywords = '遉セ蜀�SE,霆「閨キ,豎ゆココ,IT霆「閨キ,繧ィ繝シ繧ク繧ァ繝ウ繝�'\n return getDisplayName.value ? `${getDisplayName.value},${baseKeywords}` : baseKeywords;\n});\n\nwatch([title, description], ([newTitle, newDescription]) => {\n // 繝。繧ソ繧ソ繧ー縺ョ譖エ譁ー縺ッuseHead縺ァ閾ェ蜍慕噪縺ォ陦後o繧後k縺溘a縲√%縺薙〒縺ッ菴輔b縺励↑縺Ыn});\n\nwatch(() => route.query, (newQuery) => {\n // 繝ォ繝シ繝医け繧ィ繝ェ縺ョ螟画峩縺ッuseHead縺ァ閾ェ蜍慕噪縺ォ蜃ヲ逅�&繧後k縺溘a縲√%縺薙〒縺ッ菴輔b縺励↑縺Ыn}, { deep: true });\n\nuseHead({\n title,\n meta: [\n {\n name: 'description',\n content: description\n },\n {\n name: 'keywords',\n content: keywords\n },\n {\n property: 'og:site_name',\n content: \"遉セ蜀�SE霆「閨キ繝翫ン\"\n },\n {\n property: 'og:image',\n content: \"https://se-navi.jp/ogp_se.webp\"\n },\n {\n property: 'og:title',\n content: title\n },\n {\n property: 'og:description',\n content: description\n },\n {\n property: 'og:url',\n content: window.location.href\n },\n {\n property: 'twitter:image',\n content: \"https://se-navi.jp/ogp_se.webp\"\n },\n {\n name: 'twitter:title',\n content: title\n },\n {\n name: 'twitter:description',\n content: description\n }\n ]\n})\n</script>\n<style lang=\"scss\">\n.no-bounce-x {\n @media screen and (max-width: 767px) {\n overflow-y: auto;\n overflow-x: hidden;\n }\n}\n</style>\n","<template>\n <div>\n <JobDirect v-if=\"isDirect\" />\n <JobAgent v-else-if=\"isAgent\" />\n </div>\n</template>\n<script setup lang=\"ts\">\nimport { onMounted, ref } from \"vue\"\nimport JobDirect from \"@/pages/candidate/job/direct/Index.vue\"\nimport JobAgent from \"@/pages/candidate/job/agent/AgentSearch.vue\"\nimport { useRoute } from \"vue-router\";\nconst route = useRoute();\nconst isDirect = ref(false);\nconst isAgent = ref(false);\n\nonMounted(() => {\n isDirect.value = route.query.direct === 'true';\n isAgent.value = route.query.agent === 'true';\n if(isDirect.value == false && isAgent.value == false) return isAgent.value = true\n})\n\n</script>\n"],"names":["_imports_0$1","_imports_1$2","_imports_2","_imports_3","_imports_5","_imports_6","_imports_7","_imports_8","_imports_9","_imports_10","_imports_11","_imports_12","_imports_14","_imports_0","_imports_1$1","selectEmployment","employment","emit","valuesPrefectures","ref","valuesOccupations","valuesIndustries","valueSkills","valueJobFeatures","searchWord","title","prefectureSelected","occupationSelected","industriesSelected","skillSelected","jobFeatureSelected","employmentSelected","minIncomeSelected","maxIncomeSelected","prefectureAccordionSelected","KANTO_ID","modalPrefecture","modalOccupations","modalIndustry","modalSkills","modalJobFeatures","route","useRoute","resultSearch","listConditionSearch","totalConditionSearch","modalElement","isListSearchEnable","isScrolled","isScrolledBottom","idItemSearch","titleItemSearch","saveJobSearchResult","onMounted","getCurrentDate","getListConditionSearch","getParamSearch","onChangeResultSearch","watchEffect","props","prefectureChildrens","computed","prefecturesFound","prefecture","currentDate","month","day","time","onOpenModaConditionSearchConfirm","id","nextTick","confirmDeleteElement","Collapse","toggleConditionSearchStatus","onChangeSearchWord","search","onOpenModalOccupation","_a","addOccupations","cloneDeep","onChooseOccupationCategory","occupation","event","item","index","newOccupation","child","accordionId","accordionElement","collapse","onChooseOccupation","parent","parentCategory","childIndex","parentIndex","onRemoveOccupation","occupationId","onOpenModalPrefecture","onChangePrefecture","checked","onRemovePrefecture","prefectureId","addPrefectures","onChangeMinIncome","minIncome","onChangeMaxIncome","maxIncome","onOpenModalIndustry","onChooseIndustryCategory","industry","newIndustry","onChooseIndustry","industryCategory","_","selectedIndustry","industryCategoryEntry","onRemoveIndusty","industryId","addIndustries","onOpenModalSkill","onChooseSkillCategory","skill","newSkill","onChooseSkill","skillCategory","selectedSkill","skillCategoryEntry","onRemoveSkill","skillId","addSkills","onCheckEmployment","onOpenModalJobFeature","onChooseJobFeatureCategory","jobFeature","newJobFeature","onChooseJobFeature","jobFeatureCategory","selectedJobFeature","jobFeatureCategoryEntry","onRemoveJobFeature","addJobFeature","initialValuesConditionSearch","onClearConditionSearch","initPage","data","c","response","getJobSearch","onDeleteSearchCondition","deleteConditionJobSearch","page","paramsData","_b","_c","_d","_e","router","SEARCH_PATH","getListConditionJobSearch","onSubmitForSearchJob","conditionSearchLocations","city","saveJobSearchCondition","onApplySearchCondition","searchCondition","occupationChild","prefectureIds","cityIds","prefectureChild","cities","cityId","matchingCity","industryChild","skillChild","employmentType","jobFeatureChild","getOccupations","getAnnualIncome","getIndustries","getSkills","getJobFeatures","getEmploymentTypes","getDesireLocation","occupationIds","minIncomeId","maxIncomeId","income","industriesId","skillIds","jobFeatureIds","employmentTypeIds","modalPrefectureSP","modalOccupationsSP","modalIndustrySP","modalSkillsSP","modalJobFeaturesSP","modalSaveJobConditionSP","watch","onOpenModalSaveJobCondition","occupationCategory","selectedOccupation","occupationCategoryEntry","onRemoveIndustry","CANDIDATE_LOGIN_PATH","getJobTypes","job_types","_imports_1","SwiperCore","Navigation","Pagination","_sfc_main","defineComponent","jobs","Swiper","_hoisted_1","_createElementVNode","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_13","_hoisted_14","_hoisted_2","_openBlock","_createElementBlock","_Fragment","_renderList","_ctx","job","_toDisplayString","_hoisted_12","_hoisted_7","_hoisted_15","_hoisted_16","value","Modal","$props","_normalizeClass","$options","_renderSlot","args","redirectToServiceDirect","redirectUrl","WELCOME_GUIDE_PATH","welcomeModal","modalListConditionSearch","prefectures","occupations","incomes","industries","skills","jobFeatures","employmentTypes","isLoading","screenWidth","inputListJob","jobSearchContainer","platform","userLoggedIn","updateScreenWidth","initPagination","initialData","pastDate","pagy","relatedJobs","jobViewHistory","prefectureName","totalResult","updateJobSearchPosition","containerRect","listRect","jobSearch","maxTop","newTop","handleScroll","updateMetaTag","existingMeta","meta","getAllData","getJobs","Tooltip","error","token","onUnmounted","onBeforeUnmount","isAllParamsNull","urlParams","param","remainingParams","sortCondition","sort","params","onFavoriteJob","CANDIDATE_SIGN_UP_PATH","showAgentModal","updateFavoriteJob","createFavoriteJob","createJobProposition","updateJobProposition","dataSearch","paramsUrl","onChangeSortDirection","navigateToPage","onSaveJobCondition","getPrefecturesData","getOccupationsData","getIndustryData","getSkillsData","getJobFeatureData","getIncomesData","getEmploymentTypesData","getPrefectures","getIncomes","getJobFeature","inputSaveJobAvailable","inputSaveJobUnavailable","_f","_g","_h","onOpenModalSearchJob","stripHtmlTags","html","tempDiv","isDescriptionLong","jobDescription","handleShowHideDescription","jobId","jobIndex","cardJobElement","redirectToAgentJobs","AGENT_SEARCH_PATH","closeWelcomeModal","truncateHtml","maxLength","truncatedText","currentLength","traverseNodes","node","text","remainingLength","clonedNode","getParentCategoryName","ids","items","idArray","idNums","idNum","childIds","allSelectedIdsAreChildren","allChildrenAreSelected","getMaxVisiblePages","getMaxVisiblePagesSP","getOccupationName","getIndustryName","getSkillName","getPrefectureName","getDisplayName","h1Title","name","getPageTitle","getPageDescription","description","keywords","baseKeywords","useHead","_imports_4","perPage","getNumberIncome","getAgentJobs","pageInvalid","numberRegex","match","redirectToTeaser","TEASER_PATH","modalListConditionSearchAgent","isUpdatingPage","onOpenModalPlatform","backdrop","currentPage","onOpenDetailJob","url","createAgentConsideration","updateAgentConsideration","category","redirectToDirectJobs","isDisableConsideration","hasAllChildren","hasOnlyChildren","found","paginationDiv","backButton","nextButton","newTitle","newDescription","newQuery","isDirect","isAgent"],"mappings":"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"}