Merge branch 'master' of http://120.26.58.240:8888/r/flexJobMiniApp
| | |
| | | .nut-form-item__label { |
| | | margin-right: 0; |
| | | } |
| | | |
| | | .nut-form-item__body { |
| | | width: 100%; |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | "miniprogram": { |
| | | "list": [ |
| | | { |
| | | "name": "期望岗位", |
| | | "pathName": "subpackages/curriculum/expectPosition/expectPosition", |
| | | "query": "", |
| | | "launchMode": "default", |
| | | "scene": null |
| | | }, |
| | | { |
| | | "name": "我的简历", |
| | | "pathName": "subpackages/curriculum/mineCurriculumVitae/mineCurriculumVitae", |
| | | "query": "", |
| | | "launchMode": "default", |
| | | "scene": null |
| | | }, |
| | | { |
| | | "name": "求职意向", |
| | | "pathName": "subpackages/curriculum/mineJobIntention/mineJobIntention", |
| | | "query": "", |
| | |
| | | export function useTaskList() { |
| | | const searchValue = ref(''); |
| | | |
| | | const DefaultQueryState = { |
| | | gender: '' as any as Gender, |
| | | }; |
| | | |
| | | const queryState = reactive({ |
| | | searchValueTrim: '', |
| | | orderType: HomeOrderType.Recommend, |
| | | gender: '' as any as Gender, |
| | | companyId: '', |
| | | ...DefaultQueryState, |
| | | }); |
| | | |
| | | const handleSearch = _.debounce(function () { |
| | |
| | | return { |
| | | searchValue, |
| | | queryState, |
| | | DefaultQueryState, |
| | | handleSearch, |
| | | infiniteLoadingProps, |
| | | }; |
| | |
| | | <template> |
| | | <QueryMenuView @close="emit('close')"> |
| | | <QueryMenuView @close="handleReset" @confirm="emit('close')" cancelText="重置"> |
| | | <div class="home-query-menu-view"> |
| | | <QueryMenuItem title="结算方式"> |
| | | <ProRadio v-model="gender" :value-enum="GenderText" show-all-btn></ProRadio> |
| | |
| | | // const props = withDefaults(defineProps<Props>(), {}); |
| | | |
| | | const emit = defineEmits<{ |
| | | (e: 'reset'): void; |
| | | (e: 'close'): void; |
| | | }>(); |
| | | |
| | | const gender = defineModel<number | string>('gender'); |
| | | |
| | | function handleReset() { |
| | | emit('reset'); |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss"> |
| | |
| | | <HomeQueryMenuView |
| | | v-model:gender="queryState.gender" |
| | | @close="handleMenuSelectClose" |
| | | @reset="handleMenuSelectReset" |
| | | ></HomeQueryMenuView> |
| | | </MenuItem> |
| | | </Menu> |
| | |
| | | |
| | | const userStore = useUserStore(); |
| | | |
| | | const { searchValue, queryState, handleSearch, infiniteLoadingProps } = useTaskList(); |
| | | const { searchValue, queryState, handleSearch, infiniteLoadingProps, DefaultQueryState } = |
| | | useTaskList(); |
| | | |
| | | function goCitySelect() { |
| | | Taro.navigateTo({ |
| | |
| | | function handleMenuSelectClose() { |
| | | selectItem.value?.toggle?.(); |
| | | } |
| | | function handleMenuSelectReset() { |
| | | Object.assign(queryState, { ...DefaultQueryState }); |
| | | } |
| | | |
| | | function goTaskDetail(item: API.FrontOrderList) { |
| | | Taro.navigateTo({ |
| | |
| | | .nut-form-item__label { |
| | | margin-right: 0; |
| | | } |
| | | |
| | | .nut-form-item__body { |
| | | width: 100%; |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | <template> |
| | | <div>InnerPage</div> |
| | | <ContentView :paddingH="false" class="expect-position-view"> |
| | | <PositionSelectView v-model="positionList" /> |
| | | </ContentView> |
| | | <PageFooter> |
| | | <div class="expect-position-page-footer"> |
| | | <div class="expect-position-select-wrapper" v-if="positionList.length > 0"> |
| | | <div class="expect-position-select-item" v-for="(item, index) in positionList" :key="index"> |
| | | <div class="expect-position-select-item-text">{{ item }}</div> |
| | | <div class="expect-position-select-item-icon-wrapper"> |
| | | <Close :size="8" class="expect-position-select-item-icon" /> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <PageFooterBtn type="primary">保存</PageFooterBtn> |
| | | </div> |
| | | </PageFooter> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import { PositionSelectView } from '@12333/components'; |
| | | import { Close } from '@nutui/icons-vue-taro'; |
| | | import { size } from 'lodash'; |
| | | |
| | | defineOptions({ |
| | | name: 'InnerPage', |
| | | }); |
| | | |
| | | const positionList = ref([]); |
| | | </script> |
| | | |
| | | <style lang="scss"> |
| | | @import '@/styles/common.scss'; |
| | | |
| | | .expectPosition-page-wrapper { |
| | | .expect-position-view { |
| | | flex: 1; |
| | | min-height: 0; |
| | | |
| | | .nut-category { |
| | | height: 100%; |
| | | } |
| | | } |
| | | |
| | | .expect-position-page-footer { |
| | | width: 100%; |
| | | padding: 0 boleGetCssVar('size', 'body-padding-h'); |
| | | |
| | | .page-footer-btn { |
| | | margin: 0; |
| | | width: 100%; |
| | | } |
| | | |
| | | .expect-position-select-wrapper { |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | margin-bottom: 40px; |
| | | column-gap: 16px; |
| | | row-gap: 24px; |
| | | padding-top: 24px; |
| | | |
| | | .expect-position-select-item { |
| | | display: flex; |
| | | align-items: center; |
| | | padding: 0 28px; |
| | | height: 64px; |
| | | border-radius: 32px; |
| | | background-color: #f6faff; |
| | | |
| | | .expect-position-select-item-text { |
| | | font-weight: 400; |
| | | font-size: 24px; |
| | | color: #536077; |
| | | line-height: 24px; |
| | | } |
| | | |
| | | .expect-position-select-item-icon-wrapper { |
| | | padding: 8px; |
| | | padding-right: 0; |
| | | padding-left: 30px; |
| | | display: flex; |
| | | align-items: center; |
| | | } |
| | | |
| | | .expect-position-select-item-icon { |
| | | color: boleGetCssVar('text-color', 'secondary'); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | </style> |
| | |
| | | <template> |
| | | <PageLayout class="expectPosition-page-wrapper" :title="'期望岗位'"> |
| | | <PageLayout class="expectPosition-page-wrapper" :title="'期望岗位'" has-border> |
| | | <InnerPage></InnerPage> |
| | | </PageLayout> |
| | | </template> |
| | |
| | | </div> |
| | | <MineAgreementSignDetailItem label="期望岗位" class="mine-curriculum-intention-job"> |
| | | <template #detail> |
| | | <div class="mine-curriculum-intention-job-content"> |
| | | <div class="mine-curriculum-intention-job-item">客房服务员</div> |
| | | <div class="mine-curriculum-intention-job-item">客房服务员</div> |
| | | <div class="mine-curriculum-intention-job-item">客房服务员</div> |
| | | <div class="mine-curriculum-intention-job-item">客房服务员</div> |
| | | </div> |
| | | <JobTagList /> |
| | | </template> |
| | | </MineAgreementSignDetailItem> |
| | | <MineAgreementSignDetailItem label="空闲时间"> |
| | |
| | | import { useUserStore } from '@/stores/modules/user'; |
| | | import { useIsLogin } from '@/hooks'; |
| | | import MineAgreementSignDetailItem from '../../mine/mineAgreementSignDetail/MineAgreementSignDetailItem.vue'; |
| | | import { List, ListItem } from '@12333/components'; |
| | | import { List, ListItem, JobTagList } from '@12333/components'; |
| | | import { RouterPath } from '@/constants'; |
| | | import IconArrow from '@/assets/setting/icon-arrow.png'; |
| | | import IconAuth from '@/assets/mine/icon-auth.png'; |
| | |
| | | <ContentScrollView :paddingH="false"> |
| | | <nut-form :model-value="form" ref="formRef" :rules="rules"> |
| | | <nut-form-item label="期望岗位:" class="bole-form-item" prop="job" label-position="top"> |
| | | <ChooseInputWithPicker |
| | | <!-- <ChooseInputWithPicker |
| | | v-model="form.job" |
| | | placeholder="请选择期望岗位" |
| | | :value-enum="TaskStatusText" |
| | | /> |
| | | /> --> |
| | | <CommonInputField class="job-common-input-field" @click="goExpectPosition"> |
| | | <JobTagList /> |
| | | </CommonInputField> |
| | | </nut-form-item> |
| | | <nut-form-item label="空闲时间:" class="bole-form-item" prop="job"> |
| | | <ChooseInputWithPicker |
| | |
| | | |
| | | <script setup lang="ts"> |
| | | import { FormRules } from '@nutui/nutui-taro/dist/types/__VUE/form/types'; |
| | | import { ChooseInputWithPicker } from '@12333/components'; |
| | | import { ChooseInputWithPicker, JobTagList, CommonInputField } from '@12333/components'; |
| | | import { TaskStatusText, TaskStatus } from '@/constants'; |
| | | import { useUser } from '@/hooks'; |
| | | import Taro from '@tarojs/taro'; |
| | | |
| | | defineOptions({ |
| | | name: 'InnerPage', |
| | |
| | | } |
| | | |
| | | function confirm() {} |
| | | |
| | | function goExpectPosition() { |
| | | Taro.navigateTo({ |
| | | url: `${RouterPath.expectPosition}`, |
| | | }); |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss"> |
| | | @import '@/styles/common.scss'; |
| | | |
| | | .mineJobIntention-page-wrapper { |
| | | .job-common-input-field { |
| | | .common-input-field-icon { |
| | | margin-top: 13px; |
| | | } |
| | | } |
| | | } |
| | | </style> |
| | |
| | | openType="share" |
| | | ></PageFooterAction> |
| | | <PageFooterAction :icon="IconPhone" text="手机" :isFlex="false"></PageFooterAction> |
| | | <PageFooterBtn type="primary">报名</PageFooterBtn> |
| | | <PageFooterBtn type="primary">报名(5人已报名)</PageFooterBtn> |
| | | </PageFooter> |
| | | </LoadingLayout> |
| | | </template> |
New file |
| | |
| | | <template> |
| | | <Category :category="provinceList" @change="change" class="position-select-view"> |
| | | <CategoryPane :max="max" :categoryChild="categoryChild" :multiple="multiple" v-model="model"> |
| | | </CategoryPane> |
| | | </Category> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import { useAllAreaList } from '@12333/hooks'; |
| | | import Category from './Category.vue'; |
| | | import CategoryPane from './CategoryPane.vue'; |
| | | import { reactive, computed, watch } from 'vue'; |
| | | |
| | | defineOptions({ |
| | | name: 'PositionSelectView', |
| | | }); |
| | | |
| | | type Props = { |
| | | multiple?: boolean; |
| | | max?: number; |
| | | }; |
| | | |
| | | const props = withDefaults(defineProps<Props>(), { |
| | | multiple: true, |
| | | }); |
| | | |
| | | const model = defineModel<number[]>(); |
| | | |
| | | const state = reactive({ |
| | | provinceIndex: 0, |
| | | }); |
| | | |
| | | const { areaTreeList } = useAllAreaList(); |
| | | |
| | | const provinceList = computed(() => areaTreeList.value.map((x) => ({ ...x, name: x.areaName }))); |
| | | |
| | | const categoryChild = computed(() => { |
| | | if (!provinceList.value.length) { |
| | | return []; |
| | | } |
| | | return provinceList.value[state.provinceIndex].children.map((x) => ({ |
| | | ...x, |
| | | name: x.areaName, |
| | | value: x.areaCode, |
| | | })); |
| | | }); |
| | | |
| | | const change = (index: number) => { |
| | | state.provinceIndex = index; |
| | | }; |
| | | </script> |
| | | |
| | | <style lang="scss"> |
| | | @import '@/styles/common.scss'; |
| | | |
| | | .position-select-view { |
| | | .nut-category__cateList { |
| | | height: 100%; |
| | | |
| | | & > .h5-div { |
| | | height: 100%; |
| | | overflow-y: auto; |
| | | } |
| | | |
| | | .nut-category__cateList-scroll { |
| | | height: 100%; |
| | | width: auto; |
| | | } |
| | | } |
| | | |
| | | .nut-category-pane { |
| | | height: 100%; |
| | | overflow-y: auto; |
| | | flex: 1; |
| | | min-width: 0; |
| | | } |
| | | } |
| | | </style> |
New file |
| | |
| | | <template> |
| | | <div class="common-input-field-wrapper"> |
| | | <div class="common-input-field"> |
| | | <slot></slot> |
| | | </div> |
| | | <RectRight :size="12" class="common-input-field-icon" /> |
| | | </div> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import { RectRight } from '@nutui/icons-vue-taro'; |
| | | |
| | | defineOptions({ |
| | | name: 'CommonInputField', |
| | | }); |
| | | |
| | | // type Props = {}; |
| | | |
| | | // const props = withDefaults(defineProps<Props>(), {}); |
| | | </script> |
| | | |
| | | <style lang="scss"> |
| | | @import '@/styles/common.scss'; |
| | | |
| | | .common-input-field-wrapper { |
| | | display: flex; |
| | | width: 100%; |
| | | |
| | | .common-input-field { |
| | | flex: 1; |
| | | min-width: 0; |
| | | } |
| | | |
| | | .common-input-field-icon { |
| | | margin-left: 18px; |
| | | color: boleGetCssVar('text-color', 'primary'); |
| | | } |
| | | } |
| | | </style> |
| | |
| | | :color="Colors.Info" |
| | | @click="handleCancel" |
| | | > |
| | | 取消 |
| | | {{ cancelText }} |
| | | </nut-button> |
| | | <nut-button shape="square" type="primary" @click="handleConfirm">确认</nut-button> |
| | | </div> |
| | |
| | | name: 'QueryMenuView', |
| | | }); |
| | | |
| | | // type Props = {}; |
| | | type Props = { |
| | | cancelText?: string; |
| | | }; |
| | | |
| | | // const props = withDefaults(defineProps<Props>(), {}); |
| | | const props = withDefaults(defineProps<Props>(), { |
| | | cancelText: '取消', |
| | | }); |
| | | |
| | | const emit = defineEmits<{ |
| | | (e: 'close'): void; |
| | | (e: 'confirm'): void; |
| | | }>(); |
| | | |
| | | function handleCancel() { |
| | |
| | | } |
| | | |
| | | function handleConfirm() { |
| | | emit('close'); |
| | | emit('confirm'); |
| | | } |
| | | </script> |
| | | |
| | |
| | | <div class="mine-curriculum-intention-job-item">客房服务员</div> |
| | | <div class="mine-curriculum-intention-job-item">客房服务员</div> |
| | | <div class="mine-curriculum-intention-job-item">客房服务员</div> |
| | | <div class="mine-curriculum-intention-job-item">客房服务员</div> |
| | | <div class="mine-curriculum-intention-job-item">客房服务员</div> |
| | | <div class="mine-curriculum-intention-job-item">客房服务员</div> |
| | | <div class="mine-curriculum-intention-job-item">客房服务员</div> |
| | | </div> |
| | | </template> |
| | | |
| | |
| | | |
| | | <style lang="scss"> |
| | | @import '@/styles/common.scss'; |
| | | |
| | | .mine-curriculum-intention-job-content { |
| | | display: inline-flex; |
| | | flex-wrap: wrap; |
| | | gap: 16px; |
| | | |
| | | .mine-curriculum-intention-job-item { |
| | | font-size: 20px; |
| | | color: boleGetCssVar('color', 'primary'); |
| | | padding: 6px 16px; |
| | | background-color: #edf2ff; |
| | | border-radius: 4px; |
| | | display: inline-flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | } |
| | | } |
| | | </style> |
| | |
| | | export { default as QueryMenuItem } from './Menu/QueryMenuItem.vue'; |
| | | export { default as ProRadio } from './Form/ProRadio.vue'; |
| | | export { default as Calendar } from './Calendar/Calendar.vue'; |
| | | export { default as JobTagList } from './Tag/JobTagList.vue'; |
| | | export { default as CommonInputField } from './Input/CommonInputField.vue'; |
| | | export { default as PositionSelectView } from './AreaTreeSelect/PositionSelectView.vue'; |