zhengyiming
2025-02-13 98bc9c89f7ef814b13bec06fa7b2737a3b51a44e
fix: task
15个文件已修改
2个文件已添加
335 ■■■■ 已修改文件
apps/bMiniApp/src/styles/nut.scss 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/cMiniApp/project.private.config.json 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/cMiniApp/src/hooks/task.ts 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/cMiniApp/src/pages/home/HomeQueryMenuView.vue 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/cMiniApp/src/pages/home/index.vue 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/cMiniApp/src/styles/nut.scss 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/cMiniApp/src/subpackages/curriculum/expectPosition/InnerPage.vue 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/cMiniApp/src/subpackages/curriculum/expectPosition/expectPosition.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/cMiniApp/src/subpackages/curriculum/mineCurriculumVitae/InnerPage.vue 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/cMiniApp/src/subpackages/curriculum/mineJobIntention/InnerPage.vue 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/cMiniApp/src/subpackages/curriculum/mineJobIntention/mineJobIntention.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/cMiniApp/src/subpackages/task/taskDetail/InnerPage.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/components/src/AreaTreeSelect/PositionSelectView.vue 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/components/src/Input/CommonInputField.vue 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/components/src/Menu/QueryMenuView.vue 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/components/src/Tag/JobTagList.vue 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/components/src/index.ts 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/bMiniApp/src/styles/nut.scss
@@ -104,6 +104,10 @@
      .nut-form-item__label {
        margin-right: 0;
      }
      .nut-form-item__body {
        width: 100%;
      }
    }
  }
apps/cMiniApp/project.private.config.json
@@ -9,6 +9,20 @@
        "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": "",
apps/cMiniApp/src/hooks/task.ts
@@ -12,11 +12,15 @@
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 () {
@@ -49,6 +53,7 @@
  return {
    searchValue,
    queryState,
    DefaultQueryState,
    handleSearch,
    infiniteLoadingProps,
  };
apps/cMiniApp/src/pages/home/HomeQueryMenuView.vue
@@ -1,5 +1,5 @@
<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>
@@ -27,10 +27,15 @@
// 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">
apps/cMiniApp/src/pages/home/index.vue
@@ -46,6 +46,7 @@
            <HomeQueryMenuView
              v-model:gender="queryState.gender"
              @close="handleMenuSelectClose"
              @reset="handleMenuSelectReset"
            ></HomeQueryMenuView>
          </MenuItem>
        </Menu>
@@ -79,7 +80,8 @@
const userStore = useUserStore();
const { searchValue, queryState, handleSearch, infiniteLoadingProps } = useTaskList();
const { searchValue, queryState, handleSearch, infiniteLoadingProps, DefaultQueryState } =
  useTaskList();
function goCitySelect() {
  Taro.navigateTo({
@@ -99,6 +101,9 @@
function handleMenuSelectClose() {
  selectItem.value?.toggle?.();
}
function handleMenuSelectReset() {
  Object.assign(queryState, { ...DefaultQueryState });
}
function goTaskDetail(item: API.FrontOrderList) {
  Taro.navigateTo({
apps/cMiniApp/src/styles/nut.scss
@@ -104,6 +104,10 @@
      .nut-form-item__label {
        margin-right: 0;
      }
      .nut-form-item__body {
        width: 100%;
      }
    }
  }
apps/cMiniApp/src/subpackages/curriculum/expectPosition/InnerPage.vue
@@ -1,13 +1,92 @@
<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>
apps/cMiniApp/src/subpackages/curriculum/expectPosition/expectPosition.vue
@@ -1,5 +1,5 @@
<template>
  <PageLayout class="expectPosition-page-wrapper" :title="'期望岗位'">
  <PageLayout class="expectPosition-page-wrapper" :title="'期望岗位'" has-border>
    <InnerPage></InnerPage>
  </PageLayout>
</template>
apps/cMiniApp/src/subpackages/curriculum/mineCurriculumVitae/InnerPage.vue
@@ -46,12 +46,7 @@
        </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="空闲时间">
@@ -93,7 +88,7 @@
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';
@@ -241,24 +236,6 @@
    .mine-curriculum-intention-job {
      align-items: flex-start;
      .mine-curriculum-intention-job-content {
        display: inline-flex;
        flex-wrap: wrap;
        .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;
          margin-right: 16px;
          margin-bottom: 14px;
        }
      }
    }
    .mine-curriculum-intention-bold {
apps/cMiniApp/src/subpackages/curriculum/mineJobIntention/InnerPage.vue
@@ -2,11 +2,14 @@
  <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
@@ -31,9 +34,10 @@
<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',
@@ -59,8 +63,22 @@
}
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>
apps/cMiniApp/src/subpackages/curriculum/mineJobIntention/mineJobIntention.vue
@@ -1,5 +1,5 @@
<template>
  <PageLayout class="index-page-wrapper" :title="'求职意向'" has-border>
  <PageLayout class="mineJobIntention-page-wrapper" :title="'求职意向'" has-border>
    <InnerPage></InnerPage>
  </PageLayout>
</template>
apps/cMiniApp/src/subpackages/task/taskDetail/InnerPage.vue
@@ -76,7 +76,7 @@
        openType="share"
      ></PageFooterAction>
      <PageFooterAction :icon="IconPhone" text="手机" :isFlex="false"></PageFooterAction>
      <PageFooterBtn type="primary">报名</PageFooterBtn>
      <PageFooterBtn type="primary">报名(5人已报名)</PageFooterBtn>
    </PageFooter>
  </LoadingLayout>
</template>
packages/components/src/AreaTreeSelect/PositionSelectView.vue
New file
@@ -0,0 +1,78 @@
<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>
packages/components/src/Input/CommonInputField.vue
New file
@@ -0,0 +1,39 @@
<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>
packages/components/src/Menu/QueryMenuView.vue
@@ -10,7 +10,7 @@
          :color="Colors.Info"
          @click="handleCancel"
        >
          取消
          {{ cancelText }}
        </nut-button>
        <nut-button shape="square" type="primary" @click="handleConfirm">确认</nut-button>
      </div>
@@ -25,12 +25,17 @@
  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() {
@@ -38,7 +43,7 @@
}
function handleConfirm() {
  emit('close');
  emit('confirm');
}
</script>
packages/components/src/Tag/JobTagList.vue
@@ -4,6 +4,10 @@
    <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>
@@ -19,4 +23,21 @@
<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>
packages/components/src/index.ts
@@ -26,3 +26,6 @@
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';