wupengfei
4 天以前 676578f3be736ef109d1c8a15da265a62c66ba04
feat: 接口对接
16个文件已修改
188 ■■■■■ 已修改文件
apps/cMiniApp/.eslintrc-auto-import.json 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/cMiniApp/auto-imports.d.ts 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/cMiniApp/project.config.json 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/cMiniApp/project.private.config.json 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/cMiniApp/src/hooks/user.ts 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/cMiniApp/src/pages/home/index.vue 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/cMiniApp/src/subpackages/curriculum/editMineInfo/InnerPage.vue 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/cMiniApp/src/subpackages/curriculum/mineCertificate/InnerPage.vue 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/cMiniApp/src/subpackages/curriculum/mineCertificateAddOrEdit/InnerPage.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/cMiniApp/src/subpackages/curriculum/mineCurriculumVitae/InnerPage.vue 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/cMiniApp/src/subpackages/curriculum/mineDetailedInfo/InnerPage.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/cMiniApp/src/subpackages/curriculum/mineJobIntention/InnerPage.vue 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/cMiniApp/src/subpackages/curriculum/mineWorkExperience/InnerPage.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/cMiniApp/src/subpackages/mine/mineCollectTask/InnerPage.vue 25 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/cMiniApp/src/subpackages/task/taskDetail/InnerPage.vue 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/components/src/Card/TaskCard.vue 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/cMiniApp/.eslintrc-auto-import.json
@@ -109,6 +109,7 @@
    "useSwitchTab": true,
    "useTaskList": true,
    "useUser": true,
    "useUserResume": true
    "useUserResume": true,
    "useUpdateResume": true
  }
}
apps/cMiniApp/auto-imports.d.ts
@@ -91,6 +91,7 @@
  const useSlots: typeof import('vue')['useSlots']
  const useSwitchTab: typeof import('./src/hooks/router')['useSwitchTab']
  const useTemplateRef: typeof import('vue')['useTemplateRef']
  const useUpdateResume: typeof import('./src/hooks/user')['useUpdateResume']
  const useUser: typeof import('./src/hooks/user')['useUser']
  const useUserResume: typeof import('./src/hooks/user')['useUserResume']
  const watch: typeof import('vue')['watch']
@@ -203,6 +204,7 @@
    readonly useSlots: UnwrapRef<typeof import('vue')['useSlots']>
    readonly useSwitchTab: UnwrapRef<typeof import('./src/hooks/router')['useSwitchTab']>
    readonly useTemplateRef: UnwrapRef<typeof import('vue')['useTemplateRef']>
    readonly useUpdateResume: UnwrapRef<typeof import('./src/hooks/user')['useUpdateResume']>
    readonly useUser: UnwrapRef<typeof import('./src/hooks/user')['useUser']>
    readonly useUserResume: UnwrapRef<typeof import('./src/hooks/user')['useUserResume']>
    readonly watch: UnwrapRef<typeof import('vue')['watch']>
apps/cMiniApp/project.config.json
@@ -3,8 +3,8 @@
    "description": "",
    "setting": {
        "urlCheck": false,
        "es6": true,
        "enhance": true,
        "es6": false,
        "enhance": false,
        "postcss": false,
        "preloadBackgroundData": false,
        "minified": false,
apps/cMiniApp/project.private.config.json
@@ -77,6 +77,20 @@
                    "query": "",
                    "launchMode": "default",
                    "scene": null
                },
                {
                    "name": "",
                    "pathName": "subpackages/task/taskDetail/taskDetail",
                    "query": "id=04c75425-e783-4dbf-0f16-08ddd626b756",
                    "launchMode": "default",
                    "scene": null
                },
                {
                    "name": "",
                    "pathName": "subpackages/curriculum/mineCurriculumVitae/mineCurriculumVitae",
                    "query": "",
                    "launchMode": "default",
                    "scene": null
                }
            ]
        }
apps/cMiniApp/src/hooks/user.ts
@@ -2,7 +2,7 @@
import Taro from '@tarojs/taro';
import { object2query, LocationUtils } from '@12333/utils';
import { ParkOrHRStatus, UserCertificationFrontStatus } from '@12333/constants';
import { useQuery } from '@tanstack/vue-query';
import { useQuery, useQueryClient } from '@tanstack/vue-query';
import { MaybeRef } from 'vue';
import { useRefeshDidShow } from '@12333/hooks/infiniteLoading';
import * as userResumeServices from '@12333/services/apiV2/userResume';
@@ -117,3 +117,20 @@
    refetch,
  };
}
export function useUpdateResume() {
  const queryClient = useQueryClient();
  const updateUserResumeCredentials = () => {
    return queryClient.invalidateQueries(['userResumeServices/getUserResumeCredentials']);
  };
  const updateUserResume = () => {
    return queryClient.invalidateQueries(['userResumeServices/getUserResume']);
  };
  return {
    updateUserResumeCredentials,
    updateUserResume,
  };
}
apps/cMiniApp/src/pages/home/index.vue
@@ -57,7 +57,7 @@
      :key="queryState.orderType"
    >
      <template #renderItem="{ item }">
        <TaskCard @click="goTaskDetail(item)" v-bind="item" @apply="goTaskApply(item)" />
        <TaskCard @click="goTaskDetail(item)" v-bind="item" />
      </template>
    </InfiniteLoading>
  </PageLayoutWithBg>
@@ -65,8 +65,6 @@
<script setup lang="ts">
import { useUser } from '@/hooks';
import { useUserStore } from '@/stores/modules/user';
import { RectDown, Location2 } from '@nutui/icons-vue-taro';
import Taro from '@tarojs/taro';
import { setLocationCity } from '@/utils';
import _ from 'lodash';
apps/cMiniApp/src/subpackages/curriculum/editMineInfo/InnerPage.vue
@@ -54,6 +54,8 @@
  name: 'InnerPage',
});
const { updateUserResume } = useUpdateResume();
const eventChannel = useEventChannel();
const { dictionaryDataList: identityList } = useDictionaryDataSelect({
@@ -145,7 +147,7 @@
      Message.success('保存成功', {
        onClosed() {
          goBack();
          eventChannel.emit('updateResume', { content: true });
          updateUserResume();
        },
      });
    }
apps/cMiniApp/src/subpackages/curriculum/mineCertificate/InnerPage.vue
@@ -21,18 +21,9 @@
import { RouterPath } from '@/constants';
import * as userResumeServices from '@12333/services/apiV2/userResume';
import { useQuery } from '@tanstack/vue-query';
import { useEvent } from 'senin-mini/hooks';
defineOptions({
  name: 'InnerPage',
});
useEvent('updateResume', function (data: { content: boolean }) {
  if (data.content) {
    refetch({
      type: 'inactive',
    });
  }
});
const {
apps/cMiniApp/src/subpackages/curriculum/mineCertificateAddOrEdit/InnerPage.vue
@@ -78,7 +78,7 @@
const router = Taro.useRouter();
const id = router.params?.id as string;
const isEdit = computed(() => !!id);
const queryClient = useQueryClient();
const { updateUserResumeCredentials } = useUpdateResume();
const { dictionaryDataList: certificateTypeList } = useDictionaryDataSelect({
  categoryCode: CategoryCode.CertificateType,
@@ -173,7 +173,7 @@
      Message.success(isEdit.value ? '编辑成功' : '添加成功', {
        onClosed() {
          goBack();
          queryClient.invalidateQueries(['userResumeServices/getUserResumeCredentials']);
          updateUserResumeCredentials();
        },
      });
    }
apps/cMiniApp/src/subpackages/curriculum/mineCurriculumVitae/InnerPage.vue
@@ -125,7 +125,6 @@
import IconPhone from '@/assets/mine/icon-phone.png';
import Taro from '@tarojs/taro';
import { setOSSLink } from '@12333/utils';
import { useEvent } from 'senin-mini/hooks';
defineOptions({
  name: 'InnerPage',
@@ -140,16 +139,15 @@
function goPage(routeName: string) {
  Taro.navigateTo({
    url: routeName,
    events: {
      updateResume(data: { content: boolean }) {
        console.log('content: ', data.content);
        if (data.content) {
          refetch({
            type: 'inactive',
          });
        }
      },
    },
    // events: {
    //   updateResume(data: { content: boolean }) {
    //     if (data.content) {
    //       refetch({
    //         type: 'inactive',
    //       });
    //     }
    //   },
    // },
  });
}
function goEditMineInfo() {
apps/cMiniApp/src/subpackages/curriculum/mineDetailedInfo/InnerPage.vue
@@ -38,7 +38,7 @@
  name: 'InnerPage',
});
const { refetch: userResumeRefetch } = useUserResume();
const { updateUserResume } = useUpdateResume();
const {
  isLoading,
@@ -81,7 +81,7 @@
      Message.success('保存成功', {
        onClosed() {
          goBack();
          userResumeRefetch({ type: 'inactive' });
          updateUserResume();
        },
      });
    }
apps/cMiniApp/src/subpackages/curriculum/mineJobIntention/InnerPage.vue
@@ -48,13 +48,12 @@
import { Message } from '@12333/utils';
import { useQuery } from '@tanstack/vue-query';
import { goBack } from '@/utils';
import { useEventChannel } from 'senin-mini/hooks';
defineOptions({
  name: 'InnerPage',
});
const eventChannel = useEventChannel();
const { updateUserResume } = useUpdateResume();
const { dictionaryDataList: positionList } = useDictionaryDataSelect({
  categoryCode: CategoryCode.Position,
@@ -131,7 +130,7 @@
      Message.success('保存成功', {
        onClosed() {
          goBack();
          eventChannel.emit('updateResume', { content: true });
          updateUserResume();
        },
      });
    }
apps/cMiniApp/src/subpackages/curriculum/mineWorkExperience/InnerPage.vue
@@ -24,7 +24,7 @@
  name: 'InnerPage',
});
const { refetch: userResumeRefetch } = useUserResume();
const { updateUserResume } = useUpdateResume();
const form = reactive({
  workSeniority: '',
@@ -64,7 +64,7 @@
      Message.success('保存成功', {
        onClosed() {
          goBack();
          userResumeRefetch({ type: 'inactive' });
          updateUserResume();
        },
      });
    }
apps/cMiniApp/src/subpackages/mine/mineCollectTask/InnerPage.vue
@@ -16,34 +16,15 @@
<script setup lang="ts">
import { TaskCard } from '@12333/components';
import { useUserStore } from '@/stores/modules/user';
import { useInfiniteLoading } from '@12333/hooks';
import { OrderInputType } from '@12333/constants';
import * as flexWorkerServices from '@12333/services/api/FlexWorker';
import { useTaskList } from '@12333/hooks';
defineOptions({
  name: 'InnerPage',
});
const userStore = useUserStore();
const { infiniteLoadingProps } = useInfiniteLoading(
  ({ pageParam }) => {
    let params: API.GetFlexTaskListInput = {
      pageModel: {
        rows: 20,
        page: pageParam,
        orderInput: [{ property: 'creationTime', order: OrderInputType.Desc }],
      },
    };
    return flexWorkerServices.getFlexTaskByArrange(params, {
      showLoading: false,
const { infiniteLoadingProps } = useTaskList({
  defaultQueryMenuState: {},
    });
  },
  {
    queryKey: ['flexWorkerServices/getFlexTaskByArrange'],
  }
);
</script>
<style lang="scss">
apps/cMiniApp/src/subpackages/task/taskDetail/InnerPage.vue
@@ -6,6 +6,7 @@
          <img
            :src="detail.isCollected ? IconAttentioActive : IconAttention"
            class="taskDetail-attention-icon"
            @click="handleAttention"
          />
        </template>
        <div class="taskDetail-time">
@@ -100,9 +101,17 @@
        :isFlex="false"
        openType="share"
      ></PageFooterAction>
      <PageFooterAction :icon="IconPhone" text="手机" :isFlex="false"></PageFooterAction>
      <PageFooterBtn v-if="detail.releaseStatus === EnumTaskReleaseStatus.InProcess" type="primary"
        >报名(5人已报名)</PageFooterBtn
      <PageFooterAction
        :icon="IconPhone"
        text="手机"
        :isFlex="false"
        @click="handleCall"
      ></PageFooterAction>
      <PageFooterBtn
        v-if="detail.releaseStatus === EnumTaskReleaseStatus.InProcess"
        type="primary"
        @click="handleApply"
        >{{ `报名(${detail?.applyCount ?? 0}人已报名)` }}</PageFooterBtn
      >
      <PageFooterBtn v-if="detail.releaseStatus === EnumTaskReleaseStatus.Stopped" color="#999999"
        >已停止</PageFooterBtn
@@ -115,6 +124,7 @@
import Taro from '@tarojs/taro';
import { useQuery } from '@tanstack/vue-query';
import * as taskServices from '@12333/services/apiV2/task';
import * as taskUserServices from '@12333/services/apiV2/taskUser';
import { useToggle } from 'senin-mini/hooks';
import { TaskPrice, TaskDetailWelfareItem } from '@12333/components';
import IconAttention from '@/assets/task/icon-attention.png';
@@ -127,7 +137,7 @@
import './taskDetail.scss';
import CompanyDesc from '../components/CompanyDesc.vue';
import dayjs from 'dayjs';
import { TaskUtils, toThousand, setOSSLink } from '@12333/utils';
import { TaskUtils, toThousand, setOSSLink, Message } from '@12333/utils';
import {
  EnumSettlementCycleText,
  BillingMethodEnumUnit,
@@ -182,4 +192,48 @@
    });
  }
});
const handleApply = useAccessLogin(async () => {
  try {
    let params: API.ApplyTaskCommand = {
      ids: [taskId],
    };
    let res = await taskUserServices.applyTask(params);
    if (res) {
      Message.success('报名成功', {
        onClosed() {
          refetch({ type: 'inactive' });
        },
      });
    }
  } catch (error) {}
});
const handleAttention = useAccessLogin(async () => {
  try {
    await Message.confirm({
      message: `确定${detail.value?.isCollected ? '取消收藏' : '收藏'}吗?`,
    });
    let params: API.CollectTaskCommand = {
      ids: [taskId],
      isCollect: !detail.value?.isCollected,
    };
    let res = await taskUserServices.collectTask(params);
    if (res) {
      Message.success('操作成功', {
        onClosed() {
          refetch({ type: 'inactive' });
        },
      });
    }
  } catch (error) {}
});
const handleCall = useAccessLogin(() => {
  if (detail.value.contactPhoneNumber) {
    Taro.makePhoneCall({
      phoneNumber: detail.value.contactPhoneNumber,
    });
  }
});
</script>
packages/components/src/Card/TaskCard.vue
@@ -37,10 +37,7 @@
      </div>
      <div class="task-card-actions" v-if="showActions">
        <slot name="actions">
          <nut-button
            v-if="releaseStatus === EnumTaskReleaseStatus.InProcess"
            type="primary"
            @click.stop="emit('apply', id)"
          <nut-button v-if="releaseStatus === EnumTaskReleaseStatus.InProcess" type="primary"
            >报名</nut-button
          >
        </slot>