157ccc5dd9df9358f62a2f753668f21bec1c90ee..d0bcfd0184f67458e3b612bddffdd8ba8b9a7915
2025-09-01 wupengfei
feat: 签约
d0bcfd 对比 | 目录
2025-09-01 wupengfei
feat: 签约
ae1705 对比 | 目录
2025-09-01 wupengfei
feat: 签约
022ae7 对比 | 目录
2025-09-01 wupengfei
feat: 签约
cfa728 对比 | 目录
3个文件已添加
22个文件已修改
289 ■■■■ 已修改文件
apps/bMiniApp/config/dev.js 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/bMiniApp/config/prod.js 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/bMiniApp/src/app.config.ts 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/bMiniApp/src/constants/router.ts 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/bMiniApp/src/subpackages/flexJobManage/flexJobDetailFromManage/InnerPage.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/bMiniApp/src/subpackages/flexJobManage/flexJobManage/InnerPage.vue 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/bMiniApp/src/subpackages/flexJobManage/flexJobManageExtraPage/flexJobManageExtraPage.config.ts 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/bMiniApp/src/subpackages/flexJobManage/flexJobManageExtraPage/flexJobManageExtraPage.vue 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/bMiniApp/src/subpackages/flexJobManage/flexJobSign/InnerPage.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/cMiniApp/src/subpackages/authentication/authenticationRealName/InnerPage.vue 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/cMiniApp/src/subpackages/login/loginByForm/verificationCodeLoginForm.vue 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/cMiniApp/src/subpackages/mine/mineAgreementSignDetail/InnerPage.vue 27 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/cMiniApp/src/subpackages/task/companyDetail/companyDetail.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/cMiniApp/src/subpackages/task/components/CompanyDesc.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/cMiniApp/src/subpackages/task/components/CompanyInfo.vue 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/cMiniApp/src/subpackages/task/taskDetail/InnerPage.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/cMiniApp/types/global.d.ts 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/constants/apiEnum.ts 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/constants/enterpriseEmployee.ts 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/services/apiV2/enterpriseEmployee.ts 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/services/apiV2/enterpriseWallet.ts 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/services/apiV2/index.ts 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/services/apiV2/typings.d.ts 103 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/utils/common.ts 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/utils/message.tsx 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/bMiniApp/config/dev.js
@@ -6,6 +6,8 @@
    BASE_URL: '"http://localhost:53780"',
    BASE_URL_JX: '"https://api.jx818.com"',
    APP_ENV: '"development"',
    OSS_URL: '"https://waterdroptest2.oss-cn-hangzhou.aliyuncs.com/"',
    WEMAP_KEY: 'T2UBZ-N563J-ZCHFF-XDOXN-VCH7S-CJB2T',
  },
apps/bMiniApp/config/prod.js
@@ -6,6 +6,8 @@
    OSS_URL: '"https://parkmanagement.oss-cn-hangzhou.aliyuncs.com"',
    APP_ENV: '"production"',
    WEMAP_KEY: 'DYRBZ-ZGPCF-X3OJN-N2AA3-JWUCE-HEBXJ',
  },
  defineConstants: {},
apps/bMiniApp/src/app.config.ts
@@ -117,6 +117,7 @@
        'flexJobManage/flexJobManage',
        'flexJobDetailFromManage/flexJobDetailFromManage',
        'flexJobSign/flexJobSign',
        'flexJobManageExtraPage/flexJobManageExtraPage',
      ],
    },
  ],
apps/bMiniApp/src/constants/router.ts
@@ -17,6 +17,7 @@
  flexJobManage = '/subpackages/flexJobManage/flexJobManage/flexJobManage',
  flexJobDetailFromManage = '/subpackages/flexJobManage/flexJobDetailFromManage/flexJobDetailFromManage',
  flexJobSign = '/subpackages/flexJobManage/flexJobSign/flexJobSign',
  flexJobManageExtraPage = '/subpackages/flexJobManage/flexJobManageExtraPage/flexJobManageExtraPage',
  // userInfo = '/subpackages/setting/userInfo/userInfo',
  // setting = '/subpackages/setting/setting/setting',
apps/bMiniApp/src/subpackages/flexJobManage/flexJobDetailFromManage/InnerPage.vue
@@ -80,7 +80,7 @@
  try {
    await Message.confirm({ message: '确定要解约吗?' });
    let params: API.StopElectronSignCommand = {
      id: enterpriseEmployeeInfo.value?.id,
      ids: [enterpriseEmployeeInfo.value?.id],
    };
    let res = await enterpriseEmployeeServices.stopElectronSign(params);
    if (res) {
apps/bMiniApp/src/subpackages/flexJobManage/flexJobManage/InnerPage.vue
@@ -44,7 +44,7 @@
              @click.stop="handleUnsign(item)"
              >解约</nut-button
            >
            <nut-button type="primary" @click.stop="checkContract">查看合约</nut-button>
            <nut-button type="primary" @click.stop="checkContract(item)">查看合约</nut-button>
          </template>
          <nut-button
            v-else-if="
@@ -72,7 +72,7 @@
} from '@12333/constants';
import * as enterpriseEmployeeServices from '@12333/services/apiV2/enterpriseEmployee';
import Taro from '@tarojs/taro';
import { Message } from '@12333/utils';
import { Message, setOSSLink } from '@12333/utils';
defineOptions({
  name: 'InnerPage',
@@ -103,7 +103,12 @@
  }
);
function checkContract() {}
function checkContract(item: API.GetEnterpriseEmployeesQueryResultItem) {
  const encodedUrl = encodeURIComponent(setOSSLink(item.contractUrl));
  Taro.navigateTo({
    url: `${RouterPath.flexJobManageExtraPage}?url=${encodedUrl}`,
  });
}
function goDetail(item: API.GetEnterpriseEmployeesQueryResultItem) {
  Taro.navigateTo({
@@ -115,7 +120,7 @@
  try {
    await Message.confirm({ message: '确定要解约吗?' });
    let params: API.StopElectronSignCommand = {
      id: item.id,
      ids: [item.id],
    };
    let res = await enterpriseEmployeeServices.stopElectronSign(params);
    if (res) {
apps/bMiniApp/src/subpackages/flexJobManage/flexJobManageExtraPage/flexJobManageExtraPage.config.ts
New file
@@ -0,0 +1,3 @@
export default definePageConfig({
  disableScroll: true,
});
apps/bMiniApp/src/subpackages/flexJobManage/flexJobManageExtraPage/flexJobManageExtraPage.vue
New file
@@ -0,0 +1,17 @@
<template>
  <web-view :src="urlLink" />
</template>
<script setup lang="ts">
import Taro from '@tarojs/taro';
defineOptions({
  name: 'flexJobManageExtraPage',
});
const router = Taro.useRouter();
const url = (router.params.url as string) ?? '';
const urlLink = computed(() => decodeURIComponent(url));
</script>
apps/bMiniApp/src/subpackages/flexJobManage/flexJobSign/InnerPage.vue
@@ -85,7 +85,7 @@
async function handleInvite() {
  try {
    let params: API.InviteElectronSignCommand = {
      id: enterpriseEmployeeId,
      ids: [enterpriseEmployeeId],
      contractTemplateId: checkedId.value,
    };
    let res = await enterpriseEmployeeServices.inviteElectronSign(params);
apps/cMiniApp/src/subpackages/authentication/authenticationRealName/InnerPage.vue
@@ -107,6 +107,7 @@
  name: 'InnerPage',
});
const { userDetail } = useUser();
const router = Taro.useRouter();
const type = router.params?.type ?? '';
@@ -115,7 +116,7 @@
  identityBackImg: [] as FileItem[],
  name: '',
  identity: '',
  phoneNumber: '',
  phoneNumber: userDetail.value?.contactPhoneNumber,
  verifyCode: '',
});
apps/cMiniApp/src/subpackages/login/loginByForm/verificationCodeLoginForm.vue
@@ -72,12 +72,19 @@
});
async function onGetCaptcha() {
  await authServices.sendLoginOrRegisterVerifyCode(
  const res = await authServices.sendLoginOrRegisterVerifyCode(
    {
      phoneNumber: form.phoneNumber,
    },
    { showLoading: false }
    { showLoading: false, getResponse: true }
  );
  if (res && process.env.APP_ENV === 'staging') {
    // @ts-ignore
    form.verificationCode = res?.data?.extras?.code ?? '';
  }
  // @ts-ignore
  return res?.data?.data;
}
async function handleLogin() {
apps/cMiniApp/src/subpackages/mine/mineAgreementSignDetail/InnerPage.vue
@@ -10,7 +10,7 @@
            ></MineAgreementSignDetailItem>
            <MineAgreementSignDetailItem
              label="协议状态"
              :detail="EnumTaskUserSignContractStatusText[detail?.userSignContractStatus]"
              :detail="EnumTaskUserSignContractStatusSignText[detail?.userSignContractStatus]"
            ></MineAgreementSignDetailItem>
          </template>
        </MineAgreementSignDetailCard>
@@ -73,10 +73,11 @@
import MineAgreementSignDetailItem from './MineAgreementSignDetailItem.vue';
import * as enterpriseEmployeeServices from '@12333/services/apiV2/enterpriseEmployee';
import {
  EnumElectronSignAccess,
  EnumTaskUserSignContractStatus,
  EnumTaskUserSignContractStatusText,
  EnumTaskUserSignContractStatusSignText,
} from '@12333/constants';
import { format, Message } from '@12333/utils';
import { format, hiddenPhone, Message, setOSSLink } from '@12333/utils';
import Taro from '@tarojs/taro';
defineOptions({
@@ -112,16 +113,21 @@
function checkAgreement() {
  if (detail?.value?.userSignContractStatus === EnumTaskUserSignContractStatus.Wait) {
    goToSign();
  } else {
    const encodedUrl = encodeURIComponent(detail?.value?.contractUrl);
  }
  if (
    detail?.value?.userSignContractStatus === EnumTaskUserSignContractStatus.Stop ||
    detail?.value?.userSignContractStatus === EnumTaskUserSignContractStatus.Pass
  ) {
    const encodedUrl = encodeURIComponent(setOSSLink(detail?.value?.contractUrl));
    Taro.navigateTo({
      url: `${RouterPath.mineAgreementSignDetail}?url=${encodedUrl}`,
      url: `${RouterPath.mineAgreementSignExtraPage}?url=${encodedUrl}`,
    });
  }
}
const goToSign = useAccessReal(async () => {
  try {
    // if (detail.value?.contractTemplateAccess === EnumElectronSignAccess.BestSign) {
    let params: API.PersonalUserElectronSignCommand = {
      id: id,
    };
@@ -130,6 +136,15 @@
      const encodedUrl = encodeURIComponent(res.signContractLongUrl);
      Taro.navigateTo({ url: `${RouterPath.mineAgreementSignExtraPage}?url=${encodedUrl}` });
    }
    // }
    // if (detail.value?.contractTemplateAccess === EnumElectronSignAccess.AlipaySign) {
    //   Message.confirm({
    //     message: `签约短信已发送至您${hiddenPhone(
    //       detail.value?.contactPhoneNumber
    //     )}的手机,请及时查看并签约`,
    //     showCancelBtn: false,
    //   });
    // }
  } catch (error) {}
});
Taro.useDidShow(() => {
apps/cMiniApp/src/subpackages/task/companyDetail/companyDetail.vue
@@ -7,6 +7,7 @@
          :showArrow="false"
          :enterpriseName="enterpriseDetail?.enterpriseName ?? ''"
          :taskCount="enterpriseDetail?.taskCount ?? 0"
          :isReal="enterpriseDetail?.isReal ?? false"
        ></CompanyDesc>
      </ContentView>
      <div style="flex: 1; min-height: 0">
apps/cMiniApp/src/subpackages/task/components/CompanyDesc.vue
@@ -4,7 +4,7 @@
      <div class="taskDetail-company-title">{{ enterpriseName }}</div>
      <RectRight v-if="showArrow" :size="8" class="taskDetail-company-arrow" />
    </div>
    <div class="taskDetail-company-info" v-if="isCertified">
    <div class="taskDetail-company-info" v-if="isReal">
      <img :src="IconSafe" class="safe-company-info-icon" />
      <div class="taskDetail-company-info-text">已认证 | {{ taskCount }}个岗位在招</div>
    </div>
@@ -26,7 +26,7 @@
type Props = {
  showArrow?: boolean;
  isCertified?: boolean;
  isReal?: boolean;
  enterpriseName?: string;
  taskCount?: number;
  /**
apps/cMiniApp/src/subpackages/task/components/CompanyInfo.vue
@@ -1,6 +1,6 @@
<template>
  <ContentScrollView style="background-color: transparent">
    <div v-if="isCertified" class="companyInfo-info-wrapper">
    <div v-if="enterpriseDetail?.isReal" class="companyInfo-info-wrapper">
      <div class="companyInfo-info-item">
        <div class="companyInfo-info-item-label">企业名称</div>
        <div class="companyInfo-info-item-content">{{ enterpriseDetail?.enterpriseName }}</div>
@@ -53,11 +53,6 @@
};
const props = withDefaults(defineProps<Props>(), {});
/**
 * TODO 企业是否认证 注册资本
 */
const isCertified = ref(false);
const { enterpriseDetail } = useEnterpriseDetail({ id: toRef(props, 'enterpriseId') });
</script>
apps/cMiniApp/src/subpackages/task/taskDetail/InnerPage.vue
@@ -92,6 +92,7 @@
            @click="goCompanyDetail"
            :enterpriseName="detail?.enterpriseName ?? ''"
            :taskCount="detail?.taskCount ?? 0"
            :isReal="detail?.isReal ?? false"
          ></CompanyDesc>
        </CellChunk>
      </Cell>
apps/cMiniApp/types/global.d.ts
@@ -39,7 +39,7 @@
    TARO_ENV: 'weapp' | 'swan' | 'alipay' | 'h5' | 'rn' | 'tt' | 'quickapp' | 'qq' | 'jd'
    NODE_ENV: 'development' | 'production';
    APP_ENV: 'staging';
    APP_ENV: 'staging'| 'development' | 'production';
    BASE_URL: string;
    TEST_BASE_URL: string;
packages/constants/apiEnum.ts
@@ -227,10 +227,12 @@
  UserServerUserResume = 13,
  /**企业信息 */
  UserServerEnterprise = 14,
  /**企业钱包 */
  UserServerEnterpriseWallet = 15,
  /**灵工信息 */
  UserServerEnterpriseEmployee = 15,
  UserServerEnterpriseEmployee = 16,
  /**电子签 */
  ElectronSignServerElectronSign = 16,
  ElectronSignServerElectronSign = 17,
}
/** 资源请求方式 */
packages/constants/enterpriseEmployee.ts
@@ -1,4 +1,8 @@
import { EnumTaskUserHireStatus, EnumTaskUserSignContractStatus } from './apiEnum';
import {
  EnumElectronSignAccess,
  EnumTaskUserHireStatus,
  EnumTaskUserSignContractStatus,
} from './apiEnum';
import { Colors } from './enum';
export const EnumTaskUserHireStatusText = {
@@ -23,5 +27,10 @@
  [EnumTaskUserSignContractStatus.Wait]: '待签约',
  [EnumTaskUserSignContractStatus.Pass]: '已签约',
  [EnumTaskUserSignContractStatus.Refuse]: '已拒签',
  [EnumTaskUserSignContractStatus.Stop]: '已解约',
  [EnumTaskUserSignContractStatus.Stop]: '已终止',
};
export const EnumElectronSignAccessText = {
  [EnumElectronSignAccess.BestSign]: '上上签',
  [EnumElectronSignAccess.AlipaySign]: '支付宝信任签',
};
packages/services/apiV2/enterpriseEmployee.ts
@@ -130,7 +130,7 @@
  body: API.InviteElectronSignCommand,
  options?: API.RequestConfig
) {
  return request<string>('/api/user/enterpriseEmployee/inviteElectronSign', {
  return request<number>('/api/user/enterpriseEmployee/inviteElectronSign', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json-patch+json',
@@ -163,7 +163,7 @@
  body: API.StopElectronSignCommand,
  options?: API.RequestConfig
) {
  return request<string>('/api/user/enterpriseEmployee/stopElectronSign', {
  return request<number>('/api/user/enterpriseEmployee/stopElectronSign', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json-patch+json',
packages/services/apiV2/enterpriseWallet.ts
New file
@@ -0,0 +1,48 @@
/* eslint-disable */
// @ts-ignore
import { request } from '@/utils/request';
/** 支付宝资金二级商户KYB代进件 POST /api/user/enterpriseWallet/alipayFundExpandindirectCreate */
export async function alipayFundExpandindirectCreate(
  body: API.AlipayFundExpandindirectCreateCommand,
  options?: API.RequestConfig
) {
  return request<boolean>('/api/user/enterpriseWallet/alipayFundExpandindirectCreate', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json-patch+json',
    },
    data: body,
    ...(options || {}),
  });
}
/** 资金二级商户KYB代进件状态通知接口 POST /api/user/enterpriseWallet/alipayFundExpandindirectCreateNotify */
export async function alipayFundExpandindirectCreateNotify(
  body: API.AlipayFundExpandindirectCreateNotifyCommand,
  options?: API.RequestConfig
) {
  return request<boolean>('/api/user/enterpriseWallet/alipayFundExpandindirectCreateNotify', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json-patch+json',
    },
    data: body,
    ...(options || {}),
  });
}
/** 支付宝用户授权协议签约通知 POST /api/user/enterpriseWallet/alipayUserAgreementPageSignNotify */
export async function alipayUserAgreementPageSignNotify(
  body: API.AlipayUserAgreementPageSignNotifyQuery,
  options?: API.RequestConfig
) {
  return request<boolean>('/api/user/enterpriseWallet/alipayUserAgreementPageSignNotify', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json-patch+json',
    },
    data: body,
    ...(options || {}),
  });
}
packages/services/apiV2/index.ts
@@ -11,6 +11,7 @@
import * as task from './task';
import * as dictionary from './dictionary';
import * as electronSign from './electronSign';
import * as enterpriseWallet from './enterpriseWallet';
import * as userResume from './userResume';
import * as auth from './auth';
import * as taskCheckReceive from './taskCheckReceive';
@@ -28,6 +29,7 @@
  task,
  dictionary,
  electronSign,
  enterpriseWallet,
  userResume,
  auth,
  taskCheckReceive,
packages/services/apiV2/typings.d.ts
@@ -3,6 +3,92 @@
    [key: string]: any;
  }
  interface AlipayFundExpandindirectCreateCommand {
    /** 产品码 */
    productCode?: string;
    /** 场景码 */
    bizScene?: string;
    /** 外部单号 */
    outBizNo?: string;
    /** 二级商户信息-标识 */
    identity?: string;
    /** 二级商户信息-标识类型 */
    identityType?: string;
    /** 二级商户信息-姓名 */
    name?: string;
    /** 业务类型 */
    bizType?: string;
    /** 原进件单id */
    originalOrderId?: string;
    /** 资金记账本的业务场景 */
    sceneCode?: string;
    /** 转账场景说明 */
    sceneDirections?: string;
    /** 转账场景截图 */
    sceneImage?: string;
    /** 商户行业资质图片或协议文本 */
    sceneQualificationImage?: string;
    sitesInfo?: AlipayFundExpandindirectCreateCommandSites;
  }
  interface AlipayFundExpandindirectCreateCommandSites {
    website?: string;
    app?: string;
    gongzh?: string;
    qita?: string;
    xchengxU_ZHI?: string;
  }
  interface AlipayFundExpandindirectCreateNotifyCommand {
    /** 通知ID */
    notify_id?: string;
    /** 消息发送时的服务端时间 */
    utc_timestamp?: string;
    /** 消息接口名称 */
    msg_method?: string;
    /** 消息接受方的应用id */
    app_id?: string;
    /** 版本号(1.1版本为标准消息) */
    version?: string;
    /** 消息报文 */
    biz_content?: string;
    /** 签名 */
    sign?: string;
    /** 签名类型 */
    sign_type?: string;
    /** 编码集,该字符集为验签和解密所需要的字符集 */
    charset?: string;
  }
  interface AlipayUserAgreementPageSignNotifyQuery {
    /** 协议产品码,商户和支付宝签约时确定,不同业务场景对应不同的签约产品码。 */
    personal_product_code?: string;
    /** 当前签约的协议场景。 */
    sign_scene?: string;
    /** NORMAL    协议当前状态 1. TEMP:暂存,协议未生效过; 2. NORMAL:正常; 3. STOP:暂停 */
    status?: string;
    /** 用户签约的支付宝账号对应的支付宝唯一用户号。 以2088开头的16位纯数字组成。 */
    alipay_user_id?: string;
    /** 支付宝系统中用以唯一标识用户签约记录的编号。 */
    agreement_no?: string;
    /** 支付宝代扣协议的实际签约时间,格式为yyyy-MM-dd HH:mm:ss。 */
    sign_time?: string;
    /** 用户在商户网站的登录账号,如果商户接口中未传,则不会返回 */
    external_logon_id?: string;
    /** 支付宝分配给开发者的应用Id */
    app_id?: string;
    /** 支付宝分配给商户的应用Id */
    auth_app_id?: string;
    /** 代扣协议中标示用户的唯一签约号(确保在商户系统中唯一)。 */
    external_agreement_no?: string;
    /** 用户代扣协议的实际生效时间,格式为yyyy-MM-dd HH:mm:ss。 */
    valid_time?: string;
    /** 返回脱敏的支付宝账号。 */
    alipay_logon_id?: string;
    /** 用户签约成功通知类型 */
    notify_type?: string;
  }
  interface APIcheckHealthParams {
    /** 健康校验 */
    request?: CheckHealthQuery;
@@ -605,10 +691,12 @@
    UserServerUserResume = 13,
    /**企业信息 */
    UserServerEnterprise = 14,
    /**企业钱包 */
    UserServerEnterpriseWallet = 15,
    /**灵工信息 */
    UserServerEnterpriseEmployee = 15,
    UserServerEnterpriseEmployee = 16,
    /**电子签 */
    ElectronSignServerElectronSign = 16,
    ElectronSignServerElectronSign = 17,
  }
  enum EnumResourceMethod {
@@ -2727,6 +2815,8 @@
    enterpriseSignContractStatus?: EnumTaskUserSignContractStatus;
    /** 企业签约时间 */
    enterpriseSignContractTime?: string;
    /** 电子合同 */
    contractUrl?: string;
  }
  type GetEnterpriseLoginInfoQuery = Record<string, any>;
@@ -3215,6 +3305,8 @@
    avatar?: string;
    /** 姓名 */
    name?: string;
    /** 手机号 */
    contactPhoneNumber?: string;
    /** 是否实名 */
    isReal?: boolean;
    realMethod?: EnumUserRealMethod;
@@ -3229,6 +3321,7 @@
  interface GetPersonalUserElectronSignQueryResult {
    /** 合同编号 */
    contractCode?: string;
    contractTemplateAccess?: EnumElectronSignAccess;
    userSignContractStatus?: EnumTaskUserSignContractStatus;
    /** 签约方信息-员工-姓名 */
    name?: string;
@@ -3236,6 +3329,8 @@
    identityType?: string;
    /** 签约方信息-员工-证件号码 */
    identity?: string;
    /** 签约方信息-员工-手机号 */
    contactPhoneNumber?: string;
    /** 签约方信息-员工-签约时间 */
    userSignContractTime?: string;
    /** 签约方信息-公司主体-主体类型 */
@@ -4128,7 +4223,7 @@
  interface InviteElectronSignCommand {
    /** 灵工Id */
    id?: string;
    ids?: string[];
    /** 合同模板Id */
    contractTemplateId?: string;
  }
@@ -4764,7 +4859,7 @@
  interface StopElectronSignCommand {
    /** 灵工Id */
    id?: string;
    ids?: string[];
  }
  interface SubmitCheckReceiveTaskCommand {
packages/utils/common.ts
@@ -135,3 +135,8 @@
  if (!realIDNumber) return '';
  return realIDNumber.replace(/^(\d+)(.{6})$/, '$1******');
};
export const hiddenPhone = (phone: string) => {
  if (!phone) return '';
  return phone.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2');
};
packages/utils/message.tsx
@@ -25,11 +25,17 @@
  title?: string;
  message?: string | VNode;
  confirmText?: string;
  showCancelBtn?: boolean;
};
export class Message {
  static confirm(options: ConfirmOptions = {}) {
    const { title = '提示', message = '确定要删除该数据吗?', confirmText = '确认' } = options;
    const {
      title = '提示',
      message = '确定要删除该数据吗?',
      confirmText = '确认',
      showCancelBtn = true,
    } = options;
    return new Promise((resolve, reject) => {
      Portal.add((key) => {
        return (
@@ -42,6 +48,7 @@
                  title={title}
                  visible={open.value}
                  content={message}
                  showCancelBtn={showCancelBtn}
                  onCancel={() => {
                    onClose();
                    reject();