zhengyiming
7 天以前 e04675d672d91138bc6eb4e7823f011f0fec6511
fix: 任务详情
1个文件已添加
14个文件已修改
352 ■■■■■ 已修改文件
apps/cMiniApp/project.private.config.json 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/cMiniApp/src/constants/app.ts 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/cMiniApp/src/subpackages/task/companyDetail/companyDetail.vue 36 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/cMiniApp/src/subpackages/task/components/CompanyDesc.vue 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/cMiniApp/src/subpackages/task/components/CompanyInfo.vue 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/cMiniApp/src/subpackages/task/components/CompanyTaskList.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/cMiniApp/src/subpackages/task/taskDetail/InnerPage.vue 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/constants/apiEnum.ts 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/hooks/enterprise.ts 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/hooks/index.ts 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/services/apiV2/auth.ts 23 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/services/apiV2/index.ts 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/services/apiV2/task.ts 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/services/apiV2/typings.d.ts 145 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
types/api.d.ts 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/cMiniApp/project.private.config.json
@@ -9,6 +9,13 @@
        "miniprogram": {
            "list": [
                {
                    "name": "公司详情",
                    "pathName": "subpackages/task/companyDetail/companyDetail",
                    "query": "id=f775538f-985c-4d51-7985-08ddd5c71bbf",
                    "launchMode": "default",
                    "scene": null
                },
                {
                    "name": "任务详情",
                    "pathName": "subpackages/task/taskDetail/taskDetail",
                    "query": "id=04c75425-e783-4dbf-0f16-08ddd626b756",
apps/cMiniApp/src/constants/app.ts
@@ -1,6 +1,6 @@
import { EnumUserType, EnumClientType } from '@12333/constants';
export const AppLocalConfig = {
  userType: EnumUserType.Operation,
  userType: EnumUserType.Enterprise,
  clientType: EnumClientType.PcWeb,
};
apps/cMiniApp/src/subpackages/task/companyDetail/companyDetail.vue
@@ -2,7 +2,12 @@
  <PageLayoutWithBg class="companyDetail-page-wrapper" title="公司详情" :need-auth="false">
    <LoadingLayout :loading="isLoading" :error="isError" :loadError="refetch">
      <ContentView>
        <CompanyDesc style="background-color: #fff" :showArrow="false"></CompanyDesc>
        <CompanyDesc
          style="background-color: #fff"
          :showArrow="false"
          :enterpriseName="enterpriseDetail?.enterpriseName ?? ''"
          :taskCount="enterpriseDetail?.taskCount ?? 0"
        ></CompanyDesc>
      </ContentView>
      <ProTabs
        v-model="tab"
@@ -17,7 +22,7 @@
          <CompanyTaskList />
        </ProTabPane>
        <ProTabPane :title="`企业信息`" pane-key="2">
          <CompanyInfo />
          <CompanyInfo :enterpriseId="enterpriseId" />
        </ProTabPane>
      </ProTabs>
    </LoadingLayout>
@@ -26,41 +31,20 @@
<script setup lang="ts">
import Taro from '@tarojs/taro';
import { useQuery } from '@tanstack/vue-query';
import * as flexWorkerServices from '@12333/services/api/FlexWorker';
import CompanyDesc from '../components/CompanyDesc.vue';
import CompanyTaskList from '../components/CompanyTaskList.vue';
import CompanyInfo from '../components/CompanyInfo.vue';
import { ProTabs, ProTabPane } from '@12333/components';
import { useEnterpriseDetail } from '@12333/hooks';
defineOptions({
  name: 'companyDetail',
});
const router = Taro.useRouter();
const companyId = router.params?.id ?? '';
const enterpriseId = router.params?.id ?? '';
const tab = ref('1');
const {
  isLoading,
  isError,
  data: detail,
  refetch,
} = useQuery({
  queryKey: ['flexWorkerServices/getOrdeForDetail', companyId],
  queryFn: async () => {
    return await flexWorkerServices.getOrdeForDetail(
      { id: companyId },
      {
        showLoading: false,
      }
    );
  },
  placeholderData: () => ({} as API.OrderInfoDto),
});
const { isLoading, isError, enterpriseDetail, refetch } = useEnterpriseDetail({ id: enterpriseId });
</script>
<style lang="scss">
@import '@/styles/common.scss';
</style>
apps/cMiniApp/src/subpackages/task/components/CompanyDesc.vue
@@ -4,9 +4,12 @@
      <div class="taskDetail-company-title">{{ enterpriseName }}</div>
      <RectRight v-if="showArrow" :size="8" class="taskDetail-company-arrow" />
    </div>
    <div class="taskDetail-company-info">
    <div class="taskDetail-company-info" v-if="isCertified">
      <img :src="IconSafe" class="safe-company-info-icon" />
      <div class="taskDetail-company-info-text">已认证 | {{ taskCount }}个岗位在招</div>
    </div>
    <div class="taskDetail-company-info" v-else>
      <div class="taskDetail-company-info-text danger">未认证</div>
    </div>
  </div>
</template>
@@ -21,6 +24,7 @@
type Props = {
  showArrow?: boolean;
  isCertified?: boolean;
  enterpriseName?: string;
  taskCount?: number;
  /**
@@ -80,6 +84,10 @@
      flex: 1;
      min-width: 0;
      @include ellipsis;
      &.danger {
        color: boleGetCssVar('color', 'danger');
      }
    }
  }
}
apps/cMiniApp/src/subpackages/task/components/CompanyInfo.vue
@@ -3,11 +3,11 @@
    <div v-if="isCertified" class="companyInfo-info-wrapper">
      <div class="companyInfo-info-item">
        <div class="companyInfo-info-item-label">企业名称</div>
        <div class="companyInfo-info-item-content">江西君润商务服务有限公司</div>
        <div class="companyInfo-info-item-content">{{ enterpriseDetail.enterpriseName }}</div>
      </div>
      <div class="companyInfo-info-item">
        <div class="companyInfo-info-item-label">统一社会信用代码</div>
        <div class="companyInfo-info-item-content">420902197910211010</div>
        <div class="companyInfo-info-item-content">{{ enterpriseDetail.societyCreditCode }}</div>
      </div>
      <div class="companyInfo-info-item">
        <div class="companyInfo-info-item-label">注册资本</div>
@@ -43,12 +43,24 @@
<script setup lang="ts">
import IconNoCertified from '@/assets/task/icon-no-certified.png';
import { useEnterpriseDetail } from '@12333/hooks';
defineOptions({
  name: 'CompanyInfo',
});
const isCertified = ref(true);
type Props = {
  enterpriseId?: string;
};
const props = withDefaults(defineProps<Props>(), {});
/**
 * TODO 企业是否认证 注册资本
 */
const isCertified = ref(false);
const { enterpriseDetail } = useEnterpriseDetail({ id: toRef(props, 'enterpriseId') });
</script>
<style lang="scss">
apps/cMiniApp/src/subpackages/task/components/CompanyTaskList.vue
@@ -1,7 +1,7 @@
<template>
  <InfiniteLoading scrollViewClassName="common-infinite-scroll-list" v-bind="infiniteLoadingProps">
    <template #renderItem="{ item }">
      <TaskCard @click="goTaskDetail(item)" />
      <TaskCard @click="goTaskDetail(item)" v-bind="item" />
    </template>
  </InfiniteLoading>
</template>
@@ -17,7 +17,7 @@
const { queryState, infiniteLoadingProps } = useTaskList();
function goTaskDetail(item: API.GetFlexTaskListOutput) {
function goTaskDetail(item: API.GetTaskInfosQueryResultItem) {
  Taro.navigateTo({
    url: `${RouterPath.taskDetail}?id=${item.id}`,
  });
apps/cMiniApp/src/subpackages/task/taskDetail/InnerPage.vue
@@ -43,7 +43,7 @@
            <TaskDetailWelfareItem
              v-for="benefit in detail.benefits"
              :key="benefit.benefitCode"
              :icon="IconAttentioActive"
              :icon="setOSSLink(benefit.benefitField2)"
              :text="benefit.benefitContent"
            />
          </div>
@@ -127,7 +127,7 @@
import './taskDetail.scss';
import CompanyDesc from '../components/CompanyDesc.vue';
import dayjs from 'dayjs';
import { TaskUtils, toThousand } from '@12333/utils';
import { TaskUtils, toThousand, setOSSLink } from '@12333/utils';
import {
  EnumSettlementCycleText,
  BillingMethodEnumUnit,
@@ -176,8 +176,10 @@
});
const goCompanyDetail = useAccessLogin(() => {
  Taro.navigateTo({
    url: `${RouterPath.companyDetail}?id=${taskId}`,
  });
  if (detail.value.enterpriseId) {
    Taro.navigateTo({
      url: `${RouterPath.companyDetail}?id=${detail.value.enterpriseId}`,
    });
  }
});
</script>
packages/constants/apiEnum.ts
@@ -125,20 +125,6 @@
  AliyunSms = 10,
}
/** 短信模板类型 */
export enum EnumSmsTemplateType {
  /**登录 */
  Login = 0,
  /**注册 */
  Register = 1,
  /**修改密码 */
  UpdatePassword = 2,
  /**绑定手机号码 */
  BindPhoneNumber = 3,
  /**修改手机号码 */
  UpdatePhoneNumber = 4,
}
/** 任务结算状态 */
export enum EnumTaskCheckReceiveStatus {
  /**待验收 */
packages/hooks/enterprise.ts
New file
@@ -0,0 +1,29 @@
import { useQuery, useQueryClient } from '@tanstack/vue-query';
import * as enterpriseServices from '@12333/services/apiV2/enterprise';
import { MaybeRef, unref } from 'vue';
type UseEnterpriseDetailOptions = {
  id: MaybeRef<string>;
};
export function useEnterpriseDetail({ id }: UseEnterpriseDetailOptions) {
  const { data, refetch, isLoading, isError } = useQuery({
    queryKey: ['enterpriseServices/getEnterprise', id],
    queryFn: async () => {
      return await enterpriseServices.getEnterprise(
        { id: unref(id) },
        {
          showLoading: false,
        }
      );
    },
    placeholderData: () => ({} as API.GetEnterpriseQueryResult),
  });
  return {
    enterpriseDetail: data,
    refetch,
    isLoading,
    isError,
  };
}
packages/hooks/index.ts
@@ -4,3 +4,4 @@
export * from './dic';
export * from './setting';
export * from './identify';
export * from './enterprise';
packages/services/apiV2/auth.ts
@@ -53,7 +53,7 @@
/** 密码登录 POST /api/user/auth/passwordLogin */
export async function passwordLogin(body: API.PasswordLoginCommand, options?: API.RequestConfig) {
  return request<API.PasswordLoginCommandCallback>('/api/user/auth/passwordLogin', {
  return request<API.LoginCommandCallback>('/api/user/auth/passwordLogin', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json-patch+json',
@@ -63,9 +63,24 @@
  });
}
/** 发送验证码 POST /api/user/auth/sendVerifyCode */
export async function sendVerifyCode(body: API.SendVerifyCodeCommand, options?: API.RequestConfig) {
  return request<string>('/api/user/auth/sendVerifyCode', {
/** 发送登录或注册短信 POST /api/user/auth/sendLoginOrRegisterVerifyCode */
export async function sendLoginOrRegisterVerifyCode(
  body: API.SendLoginOrRegisterVerifyCodeCommand,
  options?: API.RequestConfig
) {
  return request<string>('/api/user/auth/sendLoginOrRegisterVerifyCode', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json-patch+json',
    },
    data: body,
    ...(options || {}),
  });
}
/** 短信登录 POST /api/user/auth/smsLogin */
export async function smsLogin(body: API.SmsLoginCommand, options?: API.RequestConfig) {
  return request<API.LoginCommandCallback>('/api/user/auth/smsLogin', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json-patch+json',
packages/services/apiV2/index.ts
@@ -2,21 +2,21 @@
/* eslint-disable */
// API 更新时间:
// API 唯一标识:
import * as dictionary from './dictionary';
import * as menu from './menu';
import * as enterprise from './enterprise';
import * as task from './task';
import * as auth from './auth';
import * as user from './user';
import * as role from './role';
import * as resource from './resource';
import * as user from './user';
import * as dictionary from './dictionary';
import * as auth from './auth';
import * as task from './task';
import * as enterprise from './enterprise';
import * as role from './role';
import * as menu from './menu';
export default {
  dictionary,
  menu,
  enterprise,
  task,
  auth,
  user,
  role,
  resource,
  user,
  dictionary,
  auth,
  task,
  enterprise,
  role,
  menu,
};
packages/services/apiV2/task.ts
@@ -19,17 +19,14 @@
/** 查询任务分页列表 POST /api/flexjob/task/getTaskInfos */
export async function getTaskInfos(body: API.GetTaskInfosQuery, options?: API.RequestConfig) {
  return request<API.PagedListQueryResultGetTaskInfosQueryResultItem>(
    '/api/flexjob/task/getTaskInfos',
    {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json-patch+json',
      },
      data: body,
      ...(options || {}),
    }
  );
  return request<API.GetTaskInfosQueryResult>('/api/flexjob/task/getTaskInfos', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json-patch+json',
    },
    data: body,
    ...(options || {}),
  });
}
/** 保存任务 POST /api/flexjob/task/saveTaskInfo */
packages/services/apiV2/typings.d.ts
@@ -235,19 +235,6 @@
    AliyunSms = 10,
  }
  enum EnumSmsTemplateType {
    /**登录 */
    Login = 0,
    /**注册 */
    Register = 1,
    /**修改密码 */
    UpdatePassword = 2,
    /**绑定手机号码 */
    BindPhoneNumber = 3,
    /**修改手机号码 */
    UpdatePhoneNumber = 4,
  }
  enum EnumTaskCheckReceiveStatus {
    /**待验收 */
    Wait = 10,
@@ -422,6 +409,24 @@
    /** 错误码 */
    errorCode?: string;
    data?: GetTaskInfoQueryResult;
    /** 执行成功 */
    success?: boolean;
    /** 错误信息 */
    msg?: any;
    /** 附加数据 */
    extras?: any;
    /** 时间戳 */
    timestamp?: number;
  }
  interface FriendlyResultGetTaskInfosQueryResult {
    /** 跟踪Id */
    traceId?: string;
    /** 状态码 */
    code?: number;
    /** 错误码 */
    errorCode?: string;
    data?: GetTaskInfosQueryResult;
    /** 执行成功 */
    success?: boolean;
    /** 错误信息 */
@@ -621,6 +626,24 @@
    timestamp?: number;
  }
  interface FriendlyResultLoginCommandCallback {
    /** 跟踪Id */
    traceId?: string;
    /** 状态码 */
    code?: number;
    /** 错误码 */
    errorCode?: string;
    data?: LoginCommandCallback;
    /** 执行成功 */
    success?: boolean;
    /** 错误信息 */
    msg?: any;
    /** 附加数据 */
    extras?: any;
    /** 时间戳 */
    timestamp?: number;
  }
  interface FriendlyResultPagedListQueryResultGetDictionaryCategoriesQueryResultItem {
    /** 跟踪Id */
    traceId?: string;
@@ -701,42 +724,6 @@
    /** 错误码 */
    errorCode?: string;
    data?: PagedListQueryResultGetRolesQueryResultItem;
    /** 执行成功 */
    success?: boolean;
    /** 错误信息 */
    msg?: any;
    /** 附加数据 */
    extras?: any;
    /** 时间戳 */
    timestamp?: number;
  }
  interface FriendlyResultPagedListQueryResultGetTaskInfosQueryResultItem {
    /** 跟踪Id */
    traceId?: string;
    /** 状态码 */
    code?: number;
    /** 错误码 */
    errorCode?: string;
    data?: PagedListQueryResultGetTaskInfosQueryResultItem;
    /** 执行成功 */
    success?: boolean;
    /** 错误信息 */
    msg?: any;
    /** 附加数据 */
    extras?: any;
    /** 时间戳 */
    timestamp?: number;
  }
  interface FriendlyResultPasswordLoginCommandCallback {
    /** 跟踪Id */
    traceId?: string;
    /** 状态码 */
    code?: number;
    /** 错误码 */
    errorCode?: string;
    data?: PasswordLoginCommandCallback;
    /** 执行成功 */
    success?: boolean;
    /** 错误信息 */
@@ -1155,7 +1142,7 @@
    /** 企业Id */
    enterpriseId?: string;
    /** 企业全称 */
    enterpriseName?: string;
    enterpriseEnterpriseName?: string;
    /** 在招岗位数量 */
    taskCount?: number;
    /** 任务名称 */
@@ -1204,7 +1191,9 @@
  interface GetTaskInfoQueryResultBenefit {
    /** 福利编号 */
    benefitCode?: string;
    /** 福利 */
    /** 福利图标 */
    benefitField2?: string;
    /** 福利名称 */
    benefitContent?: string;
  }
@@ -1219,6 +1208,8 @@
    pageModel?: PagedListQueryPageModel;
    /** 关键字(任务名称) */
    keywords?: string;
    /** 企业Id */
    enterpriseId?: string;
    /** 发布时间-开始 */
    beginTime?: string;
    /** 发布时间-结束 */
@@ -1232,6 +1223,24 @@
    status?: EnumTaskStatus;
    releaseStatus?: EnumTaskReleaseStatus;
    recommendStatus?: EnumTaskRecommendStatus;
  }
  interface GetTaskInfosQueryResult {
    pageModel?: PagedListQueryResultPageModel;
    /** 数据 */
    data?: GetTaskInfosQueryResultItem[];
    count?: GetTaskInfosQueryResultCount;
  }
  interface GetTaskInfosQueryResultCount {
    /** 待安排数量 */
    waitAssignCount?: number;
    /** 已安排数量 */
    completedAssignCount?: number;
    /** 发布中数量 */
    inProcessReleaseCount?: number;
    /** 已停止数量 */
    stoppedReleaseCount?: number;
  }
  interface GetTaskInfosQueryResultItem {
@@ -1294,6 +1303,13 @@
  type GetUserResumeQueryResult = Record<string, any>;
  interface LoginCommandCallback {
    /** 用户访问令牌 */
    accessToken?: string;
    /** 刷新令牌 */
    refreshToken?: string;
  }
  interface PagedListQueryPageModel {
    /** 行数 */
    rows?: number;
@@ -1339,12 +1355,6 @@
    data?: GetRolesQueryResultItem[];
  }
  interface PagedListQueryResultGetTaskInfosQueryResultItem {
    pageModel?: PagedListQueryResultPageModel;
    /** 数据 */
    data?: GetTaskInfosQueryResultItem[];
  }
  interface PagedListQueryResultPageModel {
    /** 行数 */
    rows?: number;
@@ -1365,13 +1375,6 @@
    password: string;
    type?: EnumUserType;
    clientType?: EnumClientType;
  }
  interface PasswordLoginCommandCallback {
    /** 用户访问令牌 */
    accessToken?: string;
    /** 刷新令牌 */
    refreshToken?: string;
  }
  interface SaveDictionaryCategoryCommand {
@@ -1642,10 +1645,9 @@
    data?: any;
  }
  interface SendVerifyCodeCommand {
  interface SendLoginOrRegisterVerifyCodeCommand {
    /** 手机号码 */
    phoneNumber?: string;
    templateCode?: EnumSmsTemplateType;
    phoneNumber: string;
  }
  interface SetDictionaryDataIsDisabledCommand {
@@ -1722,5 +1724,14 @@
    status?: EnumUserStatus;
  }
  interface SmsLoginCommand {
    /** 手机号码 */
    phoneNumber: string;
    /** 验证码 */
    verifyCode: string;
    type?: EnumUserType;
    clientType?: EnumClientType;
  }
  type SyncHumanResourcesAreaDictionaryDataCommand = Record<string, any>;
}
types/api.d.ts
@@ -49,4 +49,8 @@
    id?: string
    quickQuery?: string
  }
  interface GetTaskInfoQueryResult{
    enterpriseName?:string
  }
}