From b6cd12914a60f09260efdbc889015ddfda676de6 Mon Sep 17 00:00:00 2001
From: zhengyiming <540361168@qq.com>
Date: 星期五, 22 八月 2025 09:41:40 +0800
Subject: [PATCH] Merge branch 'master' of http://120.26.58.240:8888/r/flexJobMiniApp

---
 apps/cMiniApp/src/subpackages/task/taskCheckDetail/InnerPage.vue                  |   32 ++
 apps/cMiniApp/src/subpackages/mine/mineAgreementSign/InnerPage.vue                |   33 -
 packages/services/apiV2/ocrUtils.ts                                               |   43 ++
 apps/bMiniApp/.eslintrc-auto-import.json                                          |    3 
 apps/cMiniApp/src/subpackages/wallet/unboundBankCard/InnerPage.vue                |    7 
 apps/cMiniApp/src/subpackages/authentication/extraPage/extraPage.vue              |    5 
 apps/cMiniApp/src/subpackages/mine/mineAgreementSignDetail/InnerPage.vue          |    2 
 apps/bMiniApp/auto-imports.d.ts                                                   |    1 
 apps/cMiniApp/src/subpackages/wallet/mineWallet/InnerPage.vue                     |   21 
 apps/cMiniApp/src/subpackages/wallet/mineWallet/mineWallet.vue                    |    2 
 apps/cMiniApp/src/subpackages/task/taskDetail/InnerPage.vue                       |   13 
 packages/components/src/Card/MineAgreementSignCard.vue                            |   35 -
 apps/cMiniApp/src/hooks/access.ts                                                 |   12 
 apps/cMiniApp/src/subpackages/authentication/authenticationRealName/InnerPage.vue |   26 +
 packages/services/apiV2/index.ts                                                  |    4 
 apps/cMiniApp/src/subpackages/mine/mineAgreementSign/mineAgreementSign.vue        |    2 
 apps/cMiniApp/src/subpackages/wallet/incomeDetail/incomeDetail.vue                |    2 
 packages/services/apiV2/electronSign.ts                                           |   99 +++++++
 apps/cMiniApp/src/subpackages/wallet/incomeDetail/InnerPage.vue                   |   11 
 packages/services/apiV2/typings.d.ts                                              |  384 ++++++++++++++++++++++++++
 packages/constants/apiEnum.ts                                                     |   34 ++
 packages/hooks/identify.ts                                                        |   41 +-
 22 files changed, 692 insertions(+), 120 deletions(-)

diff --git a/apps/bMiniApp/.eslintrc-auto-import.json b/apps/bMiniApp/.eslintrc-auto-import.json
index be7295f..8d2ca3b 100644
--- a/apps/bMiniApp/.eslintrc-auto-import.json
+++ b/apps/bMiniApp/.eslintrc-auto-import.json
@@ -120,6 +120,7 @@
     "EnumTaskStatus": true,
     "EnumUserGender": true,
     "EnumUserStatus": true,
-    "EnumUserType": true
+    "EnumUserType": true,
+    "useAccessAuthentication": true
   }
 }
diff --git a/apps/bMiniApp/auto-imports.d.ts b/apps/bMiniApp/auto-imports.d.ts
index 92fbd7a..a16c0b0 100644
--- a/apps/bMiniApp/auto-imports.d.ts
+++ b/apps/bMiniApp/auto-imports.d.ts
@@ -91,6 +91,7 @@
   const toValue: typeof import('vue')['toValue']
   const triggerRef: typeof import('vue')['triggerRef']
   const unref: typeof import('vue')['unref']
+  const useAccessAuthentication: typeof import('./src/hooks/access')['useAccessAuthentication']
   const useAccessLogin: typeof import('./src/hooks/access')['useAccessLogin']
   const useAttrs: typeof import('vue')['useAttrs']
   const useAuth: typeof import('./src/hooks/user')['useAuth']
diff --git a/apps/cMiniApp/src/hooks/access.ts b/apps/cMiniApp/src/hooks/access.ts
index 1631ceb..66a110b 100644
--- a/apps/cMiniApp/src/hooks/access.ts
+++ b/apps/cMiniApp/src/hooks/access.ts
@@ -24,12 +24,20 @@
   return _fn as T;
 }
 
-export function useAccessReal<T extends (...args: any[]) => any>(fn: T) {
+type UseAccessRealOptions = {
+  message?: string;
+};
+
+export function useAccessReal<T extends (...args: any[]) => any>(
+  fn: T,
+  options: UseAccessRealOptions = { message: '璇峰墠寰�瀹炲悕璁よ瘉' }
+) {
+  const { message } = options;
   const { isCertified } = useUser();
 
   const _fn = useAccessLogin((...args2) => {
     if (!isCertified.value) {
-      Message.confirm({ message: '璇峰墠寰�瀹炲悕璁よ瘉' }).then(() => {
+      Message.confirm({ message: message }).then(() => {
         Taro.navigateTo({
           url: `${RouterPath.authenticationHome}`,
         });
diff --git a/apps/cMiniApp/src/subpackages/authentication/authenticationRealName/InnerPage.vue b/apps/cMiniApp/src/subpackages/authentication/authenticationRealName/InnerPage.vue
index f1c3fe3..277373a 100644
--- a/apps/cMiniApp/src/subpackages/authentication/authenticationRealName/InnerPage.vue
+++ b/apps/cMiniApp/src/subpackages/authentication/authenticationRealName/InnerPage.vue
@@ -10,6 +10,7 @@
               :limitFileSize="10"
               class="bole-uploader nopaddingtop"
               @my-success="handleFrontImgUrlChange"
+              @delete="handleFrontImgUrlDelete"
             >
               <template #upload-icon>
                 <div class="photograph-wrapper">
@@ -99,6 +100,8 @@
 import { FormRules } from '@nutui/nutui-taro/dist/types/__VUE/form/types';
 import { FormValidator } from '@12333/utils';
 import Taro from '@tarojs/taro';
+import { userCredentialVerifyOcrIDCard } from '@12333/hooks';
+import { EnumOcrAccess } from '@12333/constants';
 
 defineOptions({
   name: 'InnerPage',
@@ -150,16 +153,18 @@
 }
 
 function handleFrontImgUrlChange(response: FileItem) {
-  // userCredentialVerifyOcrIDCard(response, {
-  //   onSuccess(res) {
-  //     if (res.realName) form.legalPersonName = res.realName;
-  //     if (res.idcardNum) form.legalPersonIdNumber = res.idcardNum;
-  //   },
-  // });
+  userCredentialVerifyOcrIDCard({
+    response: response,
+    access: EnumOcrAccess.Baidu,
+    isOssUrl: true,
+    onSuccess(res) {
+      if (res.model?.name) form.name = res.model?.name;
+      if (res.model?.identity) form.identity = res.model?.identity;
+    },
+  });
 }
 
 function handleSubmit() {
-  console.log('type: ', type);
   if (!formRef.value) return;
   formRef.value.validate().then(({ valid, errors }: any) => {
     if (valid) {
@@ -209,6 +214,13 @@
     }
   } catch (error) {}
 }
+
+function handleFrontImgUrlDelete({ files, fileList, index }) {
+  if (fileList?.length === 0) {
+    form.name = '';
+    form.identity = '';
+  }
+}
 </script>
 
 <style lang="scss">
diff --git a/apps/cMiniApp/src/subpackages/authentication/extraPage/extraPage.vue b/apps/cMiniApp/src/subpackages/authentication/extraPage/extraPage.vue
index 72ae572..b6db03c 100644
--- a/apps/cMiniApp/src/subpackages/authentication/extraPage/extraPage.vue
+++ b/apps/cMiniApp/src/subpackages/authentication/extraPage/extraPage.vue
@@ -1,6 +1,5 @@
 <template>
-  <!-- web-view 缁勪欢鐢ㄤ簬鍔犺浇澶栭儴閾炬帴 -->
-  <web-view :src="urla" />
+  <web-view :src="urlLink" />
 </template>
 
 <script setup lang="ts">
@@ -14,5 +13,5 @@
 
 const url = (router.params.url as string) ?? '';
 
-const urla = computed(() => decodeURIComponent(url));
+const urlLink = computed(() => decodeURIComponent(url));
 </script>
diff --git a/apps/cMiniApp/src/subpackages/mine/mineAgreementSign/InnerPage.vue b/apps/cMiniApp/src/subpackages/mine/mineAgreementSign/InnerPage.vue
index 7909b96..a2a8fdd 100644
--- a/apps/cMiniApp/src/subpackages/mine/mineAgreementSign/InnerPage.vue
+++ b/apps/cMiniApp/src/subpackages/mine/mineAgreementSign/InnerPage.vue
@@ -19,13 +19,7 @@
     :key="queryState.mineAgreementSignType"
   >
     <template #renderItem="{ item }">
-      <MineAgreementSignCard @click="goDetail">
-        <template #actions>
-          <div class="task-card-actions-text" :style="{ color: TaskStatusColor[10] }">
-            {{ TaskStatusText[10] }}
-          </div>
-        </template>
-      </MineAgreementSignCard>
+      <MineAgreementSignCard @click="goDetail"> </MineAgreementSignCard>
     </template>
   </InfiniteLoading>
 </template>
@@ -33,10 +27,10 @@
 <script setup lang="ts">
 import { MineAgreementSignCard, ProTabs, ProTabPane } from '@12333/components';
 import { useUserStore } from '@/stores/modules/user';
-import { TaskStatusText, TaskStatusColor, TaskStatus } from '@/constants';
+import { TaskStatus } from '@/constants';
 import { useInfiniteLoading } from '@12333/hooks';
-import { OrderInputType } from '@12333/constants';
-import * as flexWorkerServices from '@12333/services/api/FlexWorker';
+import { EnumPagedListOrder } from '@12333/constants';
+import * as taskServices from '@12333/services/apiV2/task';
 import Taro from '@tarojs/taro';
 
 defineOptions({
@@ -55,20 +49,16 @@
       pageModel: {
         rows: 20,
         page: pageParam,
-        orderInput: [
-          queryState.mineAgreementSignType === TaskStatus.All
-            ? { property: 'creationTime', order: OrderInputType.Desc }
-            : { property: 'lastShelfTime', order: OrderInputType.Desc },
-        ],
+        orderInput: [{ property: 'id', order: EnumPagedListOrder.Desc }],
       },
     };
 
-    return flexWorkerServices.getFlexTaskByArrange(params, {
+    return taskServices.getPersonalHireTaskInfos(params, {
       showLoading: false,
     });
   },
   {
-    queryKey: ['flexWorkerServices/getFlexTaskByArrange', queryState],
+    queryKey: ['taskServices/getPersonalHireTaskInfos', queryState],
   }
 );
 
@@ -82,10 +72,7 @@
 <style lang="scss">
 @import '@/styles/common.scss';
 
-.mineAgreementSign-page-wrapper {
-  .task-card-actions-text {
-    font-size: 24px;
-    line-height: 42px;
-  }
-}
+// .mineAgreementSign-page-wrapper {
+//
+// }
 </style>
diff --git a/apps/cMiniApp/src/subpackages/mine/mineAgreementSign/mineAgreementSign.vue b/apps/cMiniApp/src/subpackages/mine/mineAgreementSign/mineAgreementSign.vue
index cbb5fe1..3bf5d51 100644
--- a/apps/cMiniApp/src/subpackages/mine/mineAgreementSign/mineAgreementSign.vue
+++ b/apps/cMiniApp/src/subpackages/mine/mineAgreementSign/mineAgreementSign.vue
@@ -1,5 +1,5 @@
 <template>
-  <PageLayoutWithBg class="mineAgreementSign-page-wrapper" :title="'鍗忚绛剧害'" developing>
+  <PageLayoutWithBg class="mineAgreementSign-page-wrapper" :title="'鍗忚绛剧害'">
     <InnerPage></InnerPage>
   </PageLayoutWithBg>
 </template>
diff --git a/apps/cMiniApp/src/subpackages/mine/mineAgreementSignDetail/InnerPage.vue b/apps/cMiniApp/src/subpackages/mine/mineAgreementSignDetail/InnerPage.vue
index 0382b05..cd161c7 100644
--- a/apps/cMiniApp/src/subpackages/mine/mineAgreementSignDetail/InnerPage.vue
+++ b/apps/cMiniApp/src/subpackages/mine/mineAgreementSignDetail/InnerPage.vue
@@ -93,7 +93,7 @@
 
 const userStore = useUserStore();
 
-function goToSign() {}
+const goToSign = useAccessReal(() => {});
 </script>
 
 <style lang="scss">
diff --git a/apps/cMiniApp/src/subpackages/task/taskCheckDetail/InnerPage.vue b/apps/cMiniApp/src/subpackages/task/taskCheckDetail/InnerPage.vue
index 66fd069..3c3f8db 100644
--- a/apps/cMiniApp/src/subpackages/task/taskCheckDetail/InnerPage.vue
+++ b/apps/cMiniApp/src/subpackages/task/taskCheckDetail/InnerPage.vue
@@ -23,10 +23,10 @@
       </template>
     </InfiniteLoading>
   </ContentScrollView>
-  <!-- <div class="taskCheckDetail-tips-wrapper">
+  <div class="taskCheckDetail-tips-wrapper" v-if="!isBindBankCard">
     <div class="taskCheckDetail-tips-text">鎮ㄥ皻鏈粦瀹氶摱琛屽崱锛屾殏鏃舵棤娉曠粨绠楁湇鍔¤垂</div>
-    <div class="taskCheckDetail-tips-btn">绔嬪嵆缁戝畾閾惰鍗′俊鎭�</div>
-  </div> -->
+    <div class="taskCheckDetail-tips-btn" @click="goBindBankCard">绔嬪嵆缁戝畾閾惰鍗′俊鎭�</div>
+  </div>
 </template>
 
 <script setup lang="ts">
@@ -43,6 +43,18 @@
 const id = route.params?.id as string;
 
 const { infiniteLoadingProps } = useCheckReceiveTaskUserSubmits({ id: id });
+
+const isBindBankCard = computed(
+  () =>
+    infiniteLoadingProps.value?.listData?.pages?.[0]?.objectData?.enterpriseEmployeeUser
+      ?.isBindBankCard
+);
+
+function goBindBankCard() {
+  Taro.navigateTo({
+    url: `${RouterPath.unboundBankCard}`,
+  });
+}
 </script>
 
 <style lang="scss">
@@ -56,5 +68,19 @@
     margin-bottom: 16px;
     color: boleGetCssVar('text-color', 'primary');
   }
+
+  .taskCheckDetail-tips-wrapper {
+    text-align: center;
+    font-size: 24px;
+    line-height: 32px;
+
+    .taskCheckDetail-tips-text {
+      color: boleGetCssVar('text-color', 'secondary');
+    }
+
+    .taskCheckDetail-tips-btn {
+      color: boleGetCssVar('color', 'primary');
+    }
+  }
 }
 </style>
diff --git a/apps/cMiniApp/src/subpackages/task/taskDetail/InnerPage.vue b/apps/cMiniApp/src/subpackages/task/taskDetail/InnerPage.vue
index a10ccc6..58fd1fc 100644
--- a/apps/cMiniApp/src/subpackages/task/taskDetail/InnerPage.vue
+++ b/apps/cMiniApp/src/subpackages/task/taskDetail/InnerPage.vue
@@ -121,7 +121,12 @@
         :isFlex="false"
         @click="handleCall"
       ></PageFooterAction>
-      <PageFooterBtn v-if="from === 'sign'" type="primary" disabled>
+      <PageFooterBtn
+        v-if="from === 'sign'"
+        type="primary"
+        :disabled="detail?.applyButton === GetTaskInfoQueryResultApplyButton.WaitHire"
+        @click="handleSign"
+      >
         {{ GetTaskInfoQueryResultApplyButtonText[detail.applyButton] }}
       </PageFooterBtn>
       <PageFooterBtn
@@ -176,6 +181,7 @@
   GetPersonalHireTaskInfosQueryStatusColor,
   GetTaskInfoQueryResultHireButtonText,
   GetTaskInfoQueryResultHireButton,
+  GetTaskInfoQueryResultApplyButton,
 } from '@12333/constants';
 import { useAccessLogin } from '@/hooks';
 
@@ -275,6 +281,11 @@
     url: `${RouterPath.taskSubmitCheck}?id=${id}`,
   });
 }
+function handleSign() {
+  // Taro.navigateTo({
+  //   url: `${RouterPath}?id=${id}`,
+  // });
+}
 
 function goMap() {
   Taro.openLocation({
diff --git a/apps/cMiniApp/src/subpackages/wallet/incomeDetail/InnerPage.vue b/apps/cMiniApp/src/subpackages/wallet/incomeDetail/InnerPage.vue
index b33d8d1..93e590f 100644
--- a/apps/cMiniApp/src/subpackages/wallet/incomeDetail/InnerPage.vue
+++ b/apps/cMiniApp/src/subpackages/wallet/incomeDetail/InnerPage.vue
@@ -9,6 +9,7 @@
             format="YYYY骞碝鏈�"
             :max-date="nowDate"
           />
+          <IconFont name="triangle-down" class="income-detail-time-picker-icon"></IconFont>
         </div>
       </template>
     </IncomeDetailListItem>
@@ -25,6 +26,7 @@
 <script setup lang="ts">
 import { List, IncomeDetailListItem, ChooseInputWithDatePicker } from '@12333/components';
 import { useUserStore } from '@/stores/modules/user';
+import { IconFont } from '@nutui/icons-vue-taro';
 import Taro from '@tarojs/taro';
 import dayjs from 'dayjs';
 
@@ -50,9 +52,12 @@
 
 .incomeDetail-page-wrapper {
   .income-detail-time-picker {
+    position: relative;
+
     .nut-input {
       border-bottom: none;
       padding: 0;
+      width: 100%;
 
       .input-text {
         font-size: 20px;
@@ -64,6 +69,12 @@
         display: none;
       }
     }
+
+    .income-detail-time-picker-icon {
+      position: absolute;
+      top: 12px;
+      left: 220px;
+    }
   }
 }
 </style>
diff --git a/apps/cMiniApp/src/subpackages/wallet/incomeDetail/incomeDetail.vue b/apps/cMiniApp/src/subpackages/wallet/incomeDetail/incomeDetail.vue
index b8b35c9..9141308 100644
--- a/apps/cMiniApp/src/subpackages/wallet/incomeDetail/incomeDetail.vue
+++ b/apps/cMiniApp/src/subpackages/wallet/incomeDetail/incomeDetail.vue
@@ -1,5 +1,5 @@
 <template>
-  <PageLayout class="incomeDetail-page-wrapper" :title="'鏀跺叆鏄庣粏'" developing>
+  <PageLayout class="incomeDetail-page-wrapper" :title="'鏀跺叆鏄庣粏'">
     <InnerPage></InnerPage>
   </PageLayout>
 </template>
diff --git a/apps/cMiniApp/src/subpackages/wallet/mineWallet/InnerPage.vue b/apps/cMiniApp/src/subpackages/wallet/mineWallet/InnerPage.vue
index 28ae10b..bae21d2 100644
--- a/apps/cMiniApp/src/subpackages/wallet/mineWallet/InnerPage.vue
+++ b/apps/cMiniApp/src/subpackages/wallet/mineWallet/InnerPage.vue
@@ -21,7 +21,7 @@
   name: 'InnerPage',
 });
 
-const userStore = useUserStore();
+const { isCertified } = useUser();
 
 const isBinding = ref(false);
 
@@ -30,16 +30,15 @@
     url: `${RouterPath.incomeDetail}`,
   });
 }
-function goBankBind() {
-  // Message.confirm({ message: '瀹屾垚瀹炲悕璁よ瘉鍚庢墠鍙繘琛岄摱琛屽崱缁戝畾' }).then(() => {
-  //   Taro.navigateTo({
-  //     url: `${RouterPath.authenticationHome}`,
-  //   });
-  // });
-  Taro.navigateTo({
-    url: `${isBinding.value ? RouterPath.bindBankCard : RouterPath.unboundBankCard}`,
-  });
-}
+
+const goBankBind = useAccessReal(
+  () => {
+    Taro.navigateTo({
+      url: `${isBinding.value ? RouterPath.bindBankCard : RouterPath.unboundBankCard}`,
+    });
+  },
+  { message: '瀹屾垚瀹炲悕璁よ瘉鍚庢墠鍙繘琛岄摱琛屽崱缁戝畾' }
+);
 </script>
 
 <style lang="scss">
diff --git a/apps/cMiniApp/src/subpackages/wallet/mineWallet/mineWallet.vue b/apps/cMiniApp/src/subpackages/wallet/mineWallet/mineWallet.vue
index 1d0382e..2a730f7 100644
--- a/apps/cMiniApp/src/subpackages/wallet/mineWallet/mineWallet.vue
+++ b/apps/cMiniApp/src/subpackages/wallet/mineWallet/mineWallet.vue
@@ -1,5 +1,5 @@
 <template>
-  <PageLayout class="mineWallet-page-wrapper" :title="'鎴戠殑閽卞寘'" developing>
+  <PageLayout class="mineWallet-page-wrapper" :title="'鎴戠殑閽卞寘'">
     <InnerPage></InnerPage>
   </PageLayout>
 </template>
diff --git a/apps/cMiniApp/src/subpackages/wallet/unboundBankCard/InnerPage.vue b/apps/cMiniApp/src/subpackages/wallet/unboundBankCard/InnerPage.vue
index fd5fbd0..f458fa7 100644
--- a/apps/cMiniApp/src/subpackages/wallet/unboundBankCard/InnerPage.vue
+++ b/apps/cMiniApp/src/subpackages/wallet/unboundBankCard/InnerPage.vue
@@ -51,10 +51,10 @@
 import { VerificationCodeBusinessType } from '@12333/constants';
 import * as commonServices from '@12333/services/api/Common';
 import Taro from '@tarojs/taro';
-import { useQuery } from '@tanstack/vue-query';
+import { useQuery, useQueryClient } from '@tanstack/vue-query';
 
 const userResumeServices = {};
-
+const queryClient = useQueryClient();
 defineOptions({
   name: 'InnerPage',
 });
@@ -124,6 +124,9 @@
           Taro.navigateTo({
             url: `${RouterPath.mineCurriculumVitae}`,
           });
+          queryClient.invalidateQueries([
+            'taskCheckReceiveServices/getCheckReceiveTaskUserSubmits',
+          ]);
         },
       });
     }
diff --git a/packages/components/src/Card/MineAgreementSignCard.vue b/packages/components/src/Card/MineAgreementSignCard.vue
index 406d63e..87d8e5e 100644
--- a/packages/components/src/Card/MineAgreementSignCard.vue
+++ b/packages/components/src/Card/MineAgreementSignCard.vue
@@ -4,20 +4,17 @@
       <div class="task-card-title">瀹佹尝浜哄姏鏃犲咖浜哄姏璧勬簮鏈夐檺鍏徃</div>
     </div>
     <div class="task-card-footer">
-      <div class="task-card-left">
-        <div class="task-card-time">2024.11.20 - 2025.11.19</div>
+      <div class="task-card-actions" :style="{ color: '#FF4D4F' }">
+        {{ '寰呯绾�' }}
       </div>
-      <div class="task-card-actions">
-        <slot name="actions">
-          <nut-button type="primary">鎶ュ悕</nut-button>
-        </slot>
-      </div>
+      <img :src="IconArrow" class="task-card-arrow" />
     </div>
   </div>
 </template>
 
 <script setup lang="ts">
 import { CommonTaskCardProps } from './card';
+import IconArrow from '@/assets/setting/icon-arrow.png';
 
 defineOptions({
   name: 'MineAgreementSignCard',
@@ -54,30 +51,18 @@
     }
   }
 
-  .task-card-time {
-    font-size: 24px;
-    color: boleGetCssVar('text-color', 'secondary');
-    line-height: 36px;
-    margin-bottom: 6px;
-  }
-
   .task-card-footer {
     display: flex;
     align-items: center;
-
-    .task-card-left {
-      flex: 1;
-      min-width: 0;
-      display: flex;
-      align-items: center;
-    }
+    justify-content: space-between;
 
     .task-card-actions {
-      --nut-button-default-font-size: 24px;
+      font-size: 24px;
+    }
 
-      .nut-button {
-        height: 26px;
-      }
+    .task-card-arrow {
+      width: 24px;
+      height: 24px;
     }
   }
 }
diff --git a/packages/constants/apiEnum.ts b/packages/constants/apiEnum.ts
index bd24f08..b91d90e 100644
--- a/packages/constants/apiEnum.ts
+++ b/packages/constants/apiEnum.ts
@@ -21,6 +21,32 @@
   Wxmp = 20,
 }
 
+/** 鍚堝悓鍒剁増鐘舵�� */
+export enum EnumContractTemplateStatus {
+  /**寰呭埗鐗� */
+  Wait = 10,
+  /**宸插畬鎴� */
+  Completed = 20,
+}
+
+/** 鍚堝悓妯℃澘鍙橀噺 */
+export enum EnumContractTemplateValueRecorder {
+  /**鍙戜欢浜� */
+  Creator = 10,
+  /**绛剧讲浜� */
+  Signer = 20,
+}
+
+/** 鍚堝悓妯℃澘鍙橀噺绫诲瀷 */
+export enum EnumContractTemplateValueType {
+  /**鏂囨湰 */
+  Text = 10,
+  /**绛剧讲 */
+  Sign = 20,
+  /**鏃ユ湡 */
+  Date = 30,
+}
+
 /** 鏁版嵁鏉ユ簮 */
 export enum EnumDataSource {
   /**818 */
@@ -37,6 +63,14 @@
   Deleted = 30,
 }
 
+/** 鐢靛瓙绛� */
+export enum EnumElectronSignAccess {
+  /**涓婁笂绛� */
+  BestSign = 10,
+  /**鏀粯瀹濅俊浠荤 */
+  AlipaySign = 20,
+}
+
 /** 浼佷笟瀹炲悕鏂瑰紡 */
 export enum EnumEnterpriseRealMethod {
   /**浼佷笟涓夎绱� */
diff --git a/packages/hooks/identify.ts b/packages/hooks/identify.ts
index a96f9d4..230cb63 100644
--- a/packages/hooks/identify.ts
+++ b/packages/hooks/identify.ts
@@ -1,4 +1,6 @@
+import { EnumOcrAccess } from '@12333/constants';
 import * as accountServices from '@12333/services/api/Account';
+import * as ocrUtilsServices from '@12333/services/apiV2/ocrUtils';
 import { FileItem } from '@nutui/nutui-taro/dist/types/__VUE/uploader/type';
 import _ from 'lodash';
 
@@ -23,21 +25,26 @@
   } catch (error) {}
 }
 
-// type UserCredentialVerifyOcrIDCardOptions = {
-//   onSuccess?: (res: API.UserCredentialVerifyOcrIDCardResponse) => any;
-// };
+type UserCredentialVerifyOcrIDCardOptions = {
+  access?: EnumOcrAccess;
+  scene?: string;
+  isOssUrl?: boolean;
+  response?: FileItem;
+  onSuccess?: (res: API.GetIdentityFrontOcrCommandResult) => any;
+};
 
-// export async function userCredentialVerifyOcrIDCard(
-//   response: FileItem,
-//   options: UserCredentialVerifyOcrIDCardOptions = {}
-// ) {
-//   try {
-//     if (response?.url) {
-//       const { onSuccess } = options;
-//       let res = await commonServices.userCredentialVerifyOcrIDCard({
-//         identityImageUrl: response.url,
-//       });
-//       onSuccess?.(res);
-//     }
-//   } catch (error) {}
-// }
+export async function userCredentialVerifyOcrIDCard(
+  options: UserCredentialVerifyOcrIDCardOptions = {}
+) {
+  try {
+    const { onSuccess, access, isOssUrl, response, scene } = options;
+    if (response?.path) {
+      let res = await ocrUtilsServices.getIdentityFrontOcr({
+        access: access,
+        url: response.path,
+        isOssUrl: isOssUrl,
+      });
+      onSuccess?.(res);
+    }
+  } catch (error) {}
+}
diff --git a/packages/services/apiV2/electronSign.ts b/packages/services/apiV2/electronSign.ts
index 77c1101..b649bcb 100644
--- a/packages/services/apiV2/electronSign.ts
+++ b/packages/services/apiV2/electronSign.ts
@@ -17,6 +17,75 @@
   });
 }
 
+/** 鏌ヨ鍚堝悓妯℃澘璇︽儏 GET /api/user/electronSign/getContractTemplate */
+export async function getContractTemplate(
+  // 鍙犲姞鐢熸垚鐨凱aram绫诲瀷 (闈瀊ody鍙傛暟swagger榛樿娌℃湁鐢熸垚瀵硅薄)
+  params: API.APIgetContractTemplateParams,
+  options?: API.RequestConfig
+) {
+  return request<API.GetContractTemplateQueryResult>('/api/user/electronSign/getContractTemplate', {
+    method: 'GET',
+    params: {
+      ...params,
+    },
+    ...(options || {}),
+  });
+}
+
+/** 鏌ヨ杩愯惀绔崗璁鐞嗗垎椤靛垪琛ㄦ暟鎹� POST /api/user/electronSign/getContractTemplateEnterprises */
+export async function getContractTemplateEnterprises(
+  body: API.GetContractTemplateEnterprisesQuery,
+  options?: API.RequestConfig
+) {
+  return request<API.GetContractTemplateEnterprisesQueryResult>(
+    '/api/user/electronSign/getContractTemplateEnterprises',
+    {
+      method: 'POST',
+      headers: {
+        'Content-Type': 'application/json-patch+json',
+      },
+      data: body,
+      ...(options || {}),
+    }
+  );
+}
+
+/** 鏌ヨ浼佷笟鍚堝悓妯℃澘鏃ュ織鍒嗛〉鍒楄〃鏁版嵁 POST /api/user/electronSign/getEnterpriseContractTemplateLogs */
+export async function getEnterpriseContractTemplateLogs(
+  body: API.GetEnterpriseContractTemplateLogsQuery,
+  options?: API.RequestConfig
+) {
+  return request<API.GetEnterpriseContractTemplateLogsQueryResult>(
+    '/api/user/electronSign/getEnterpriseContractTemplateLogs',
+    {
+      method: 'POST',
+      headers: {
+        'Content-Type': 'application/json-patch+json',
+      },
+      data: body,
+      ...(options || {}),
+    }
+  );
+}
+
+/** 鏌ヨ浼佷笟鍚堝悓妯℃澘鍒嗛〉鍒楄〃鏁版嵁 POST /api/user/electronSign/getEnterpriseContractTemplates */
+export async function getEnterpriseContractTemplates(
+  body: API.GetEnterpriseContractTemplatesQuery,
+  options?: API.RequestConfig
+) {
+  return request<API.GetEnterpriseContractTemplatesQueryResult>(
+    '/api/user/electronSign/getEnterpriseContractTemplates',
+    {
+      method: 'POST',
+      headers: {
+        'Content-Type': 'application/json-patch+json',
+      },
+      data: body,
+      ...(options || {}),
+    }
+  );
+}
+
 /** 涓汉浜鸿劯瀹炲悕璁よ瘉 POST /api/user/electronSign/personalUserFaceReal */
 export async function personalUserFaceReal(
   body: API.PersonalUserFaceRealCommand,
@@ -47,6 +116,21 @@
   });
 }
 
+/** 淇濆瓨鍚堝悓妯℃澘 POST /api/user/electronSign/saveContractTemplate */
+export async function saveContractTemplate(
+  body: API.SaveContractTemplateCommand,
+  options?: API.RequestConfig
+) {
+  return request<string>('/api/user/electronSign/saveContractTemplate', {
+    method: 'POST',
+    headers: {
+      'Content-Type': 'application/json-patch+json',
+    },
+    data: body,
+    ...(options || {}),
+  });
+}
+
 /** 鍙戦�佷釜浜轰笁瑕佺礌瀹炲悕鐭俊 POST /api/user/electronSign/sendPersonalUserIdentity3RealSms */
 export async function sendPersonalUserIdentity3RealSms(
   body: API.SendPersonalUserIdentity3RealSmsCommand,
@@ -61,3 +145,18 @@
     ...(options || {}),
   });
 }
+
+/** 绂佺敤鍚堝悓妯℃澘 PUT /api/user/electronSign/setIsDisabledContractTemplate */
+export async function setIsDisabledContractTemplate(
+  body: API.SetIsDisabledContractTemplateCommand,
+  options?: API.RequestConfig
+) {
+  return request<number>('/api/user/electronSign/setIsDisabledContractTemplate', {
+    method: 'PUT',
+    headers: {
+      'Content-Type': 'application/json-patch+json',
+    },
+    data: body,
+    ...(options || {}),
+  });
+}
diff --git a/packages/services/apiV2/index.ts b/packages/services/apiV2/index.ts
index 39390a8..2145001 100644
--- a/packages/services/apiV2/index.ts
+++ b/packages/services/apiV2/index.ts
@@ -8,13 +8,13 @@
 import * as enterprise from './enterprise';
 import * as resource from './resource';
 import * as task from './task';
-import * as ocrUtils from './ocrUtils';
 import * as dictionary from './dictionary';
 import * as userResume from './userResume';
 import * as auth from './auth';
 import * as taskCheckReceive from './taskCheckReceive';
 import * as electronSign from './electronSign';
 import * as taskUser from './taskUser';
+import * as ocrUtils from './ocrUtils';
 import * as menu from './menu';
 import * as logRecords from './logRecords';
 import * as fileUtils from './fileUtils';
@@ -25,13 +25,13 @@
   enterprise,
   resource,
   task,
-  ocrUtils,
   dictionary,
   userResume,
   auth,
   taskCheckReceive,
   electronSign,
   taskUser,
+  ocrUtils,
   menu,
   logRecords,
   fileUtils,
diff --git a/packages/services/apiV2/ocrUtils.ts b/packages/services/apiV2/ocrUtils.ts
index 4601bae..75d1669 100644
--- a/packages/services/apiV2/ocrUtils.ts
+++ b/packages/services/apiV2/ocrUtils.ts
@@ -2,17 +2,44 @@
 // @ts-ignore
 import { request } from '@/utils/request';
 
-/** 鏂囧瓧璇嗗埆钀ヤ笟鎵х収 GET /api/common/ocrUtils/getLicenseOcr */
-export async function getLicenseOcr(
-  // 鍙犲姞鐢熸垚鐨凱aram绫诲瀷 (闈瀊ody鍙傛暟swagger榛樿娌℃湁鐢熸垚瀵硅薄)
-  params: API.APIgetLicenseOcrParams,
+/** 鏂囧瓧璇嗗埆韬唤璇佽儗闈� POST /api/common/ocrUtils/getIdentityBackOcr */
+export async function getIdentityBackOcr(
+  body: API.GetIdentityBackOcrCommand,
   options?: API.RequestConfig
 ) {
-  return request<API.GetLicenseOcrCommandResult>('/api/common/ocrUtils/getLicenseOcr', {
-    method: 'GET',
-    params: {
-      ...params,
+  return request<API.GetIdentityBackOcrCommandResult>('/api/common/ocrUtils/getIdentityBackOcr', {
+    method: 'POST',
+    headers: {
+      'Content-Type': 'application/json-patch+json',
     },
+    data: body,
+    ...(options || {}),
+  });
+}
+
+/** 鏂囧瓧璇嗗埆韬唤璇佹闈� POST /api/common/ocrUtils/getIdentityFrontOcr */
+export async function getIdentityFrontOcr(
+  body: API.GetIdentityFrontOcrCommand,
+  options?: API.RequestConfig
+) {
+  return request<API.GetIdentityFrontOcrCommandResult>('/api/common/ocrUtils/getIdentityFrontOcr', {
+    method: 'POST',
+    headers: {
+      'Content-Type': 'application/json-patch+json',
+    },
+    data: body,
+    ...(options || {}),
+  });
+}
+
+/** 鏂囧瓧璇嗗埆钀ヤ笟鎵х収 POST /api/common/ocrUtils/getLicenseOcr */
+export async function getLicenseOcr(body: API.GetLicenseOcrCommand, options?: API.RequestConfig) {
+  return request<API.GetLicenseOcrCommandResult>('/api/common/ocrUtils/getLicenseOcr', {
+    method: 'POST',
+    headers: {
+      'Content-Type': 'application/json-patch+json',
+    },
+    data: body,
     ...(options || {}),
   });
 }
diff --git a/packages/services/apiV2/typings.d.ts b/packages/services/apiV2/typings.d.ts
index 584f731..31ee0fb 100644
--- a/packages/services/apiV2/typings.d.ts
+++ b/packages/services/apiV2/typings.d.ts
@@ -29,6 +29,11 @@
     date?: string;
   }
 
+  interface APIgetContractTemplateParams {
+    /** 妯℃澘Id */
+    id?: string;
+  }
+
   interface APIgetCurrentLogierMenuParams {
     /** Id */
     id?: string;
@@ -91,17 +96,6 @@
   interface APIgetFileUrlParams {
     /** 鍦板潃 */
     url?: string;
-  }
-
-  interface APIgetLicenseOcrParams {
-    /** 閫氶亾 */
-    access?: EnumOcrAccess;
-    /** 鍦烘櫙 */
-    scene?: string;
-    /** 閾炬帴鍦板潃 */
-    url?: string;
-    /** 鏄惁涓轰簯瀛樺偍鐩稿鍦板潃 */
-    isOssUrl?: boolean;
   }
 
   interface APIgetMenuParams {
@@ -239,6 +233,28 @@
     mainBusiness?: string;
   }
 
+  interface BaiduOcrIdentityBackResultModel {
+    /** 澶辨晥鏃ユ湡 */
+    expiryDate?: string;
+    /** 绛惧彂鏈哄叧 */
+    issueAuthority?: string;
+    /** 绛惧彂鏃ユ湡 */
+    issueDate?: string;
+  }
+
+  interface BaiduOcrIdentityFrontResultModel {
+    name?: string;
+    /** 韬唤璇佸彿 */
+    identity?: string;
+    gender?: EnumUserGender;
+    /** 鐢熸棩 */
+    birthday?: string;
+    /** 姘戞棌 */
+    nation?: string;
+    /** 浣忓潃 */
+    address?: string;
+  }
+
   interface BindWxmpUserInfoCommand {
     /** 璁块棶浠ょ墝 */
     accessToken: string;
@@ -359,6 +375,29 @@
     Wxmp = 20,
   }
 
+  enum EnumContractTemplateStatus {
+    /**寰呭埗鐗� */
+    Wait = 10,
+    /**宸插畬鎴� */
+    Completed = 20,
+  }
+
+  enum EnumContractTemplateValueRecorder {
+    /**鍙戜欢浜� */
+    Creator = 10,
+    /**绛剧讲浜� */
+    Signer = 20,
+  }
+
+  enum EnumContractTemplateValueType {
+    /**鏂囨湰 */
+    Text = 10,
+    /**绛剧讲 */
+    Sign = 20,
+    /**鏃ユ湡 */
+    Date = 30,
+  }
+
   enum EnumDataSource {
     /**818 */
     HumanResources = 10,
@@ -371,6 +410,13 @@
     Modified = 20,
     /**鍒犻櫎 */
     Deleted = 30,
+  }
+
+  enum EnumElectronSignAccess {
+    /**涓婁笂绛� */
+    BestSign = 10,
+    /**鏀粯瀹濅俊浠荤 */
+    AlipaySign = 20,
   }
 
   enum EnumEnterpriseRealMethod {
@@ -775,6 +821,42 @@
     timestamp?: number;
   }
 
+  interface FriendlyResultGetContractTemplateEnterprisesQueryResult {
+    /** 璺熻釜Id */
+    traceId?: string;
+    /** 鐘舵�佺爜 */
+    code?: number;
+    /** 閿欒鐮� */
+    errorCode?: string;
+    data?: GetContractTemplateEnterprisesQueryResult;
+    /** 鎵ц鎴愬姛 */
+    success?: boolean;
+    /** 閿欒淇℃伅 */
+    msg?: any;
+    /** 闄勫姞鏁版嵁 */
+    extras?: any;
+    /** 鏃堕棿鎴� */
+    timestamp?: number;
+  }
+
+  interface FriendlyResultGetContractTemplateQueryResult {
+    /** 璺熻釜Id */
+    traceId?: string;
+    /** 鐘舵�佺爜 */
+    code?: number;
+    /** 閿欒鐮� */
+    errorCode?: string;
+    data?: GetContractTemplateQueryResult;
+    /** 鎵ц鎴愬姛 */
+    success?: boolean;
+    /** 閿欒淇℃伅 */
+    msg?: any;
+    /** 闄勫姞鏁版嵁 */
+    extras?: any;
+    /** 鏃堕棿鎴� */
+    timestamp?: number;
+  }
+
   interface FriendlyResultGetDbAuditLogsQueryResult {
     /** 璺熻釜Id */
     traceId?: string;
@@ -783,6 +865,42 @@
     /** 閿欒鐮� */
     errorCode?: string;
     data?: GetDbAuditLogsQueryResult;
+    /** 鎵ц鎴愬姛 */
+    success?: boolean;
+    /** 閿欒淇℃伅 */
+    msg?: any;
+    /** 闄勫姞鏁版嵁 */
+    extras?: any;
+    /** 鏃堕棿鎴� */
+    timestamp?: number;
+  }
+
+  interface FriendlyResultGetEnterpriseContractTemplateLogsQueryResult {
+    /** 璺熻釜Id */
+    traceId?: string;
+    /** 鐘舵�佺爜 */
+    code?: number;
+    /** 閿欒鐮� */
+    errorCode?: string;
+    data?: GetEnterpriseContractTemplateLogsQueryResult;
+    /** 鎵ц鎴愬姛 */
+    success?: boolean;
+    /** 閿欒淇℃伅 */
+    msg?: any;
+    /** 闄勫姞鏁版嵁 */
+    extras?: any;
+    /** 鏃堕棿鎴� */
+    timestamp?: number;
+  }
+
+  interface FriendlyResultGetEnterpriseContractTemplatesQueryResult {
+    /** 璺熻釜Id */
+    traceId?: string;
+    /** 鐘舵�佺爜 */
+    code?: number;
+    /** 閿欒鐮� */
+    errorCode?: string;
+    data?: GetEnterpriseContractTemplatesQueryResult;
     /** 鎵ц鎴愬姛 */
     success?: boolean;
     /** 閿欒淇℃伅 */
@@ -909,6 +1027,42 @@
     /** 閿欒鐮� */
     errorCode?: string;
     data?: GetExceptionLogsQueryResult;
+    /** 鎵ц鎴愬姛 */
+    success?: boolean;
+    /** 閿欒淇℃伅 */
+    msg?: any;
+    /** 闄勫姞鏁版嵁 */
+    extras?: any;
+    /** 鏃堕棿鎴� */
+    timestamp?: number;
+  }
+
+  interface FriendlyResultGetIdentityBackOcrCommandResult {
+    /** 璺熻釜Id */
+    traceId?: string;
+    /** 鐘舵�佺爜 */
+    code?: number;
+    /** 閿欒鐮� */
+    errorCode?: string;
+    data?: GetIdentityBackOcrCommandResult;
+    /** 鎵ц鎴愬姛 */
+    success?: boolean;
+    /** 閿欒淇℃伅 */
+    msg?: any;
+    /** 闄勫姞鏁版嵁 */
+    extras?: any;
+    /** 鏃堕棿鎴� */
+    timestamp?: number;
+  }
+
+  interface FriendlyResultGetIdentityFrontOcrCommandResult {
+    /** 璺熻釜Id */
+    traceId?: string;
+    /** 鐘舵�佺爜 */
+    code?: number;
+    /** 閿欒鐮� */
+    errorCode?: string;
+    data?: GetIdentityFrontOcrCommandResult;
     /** 鎵ц鎴愬姛 */
     success?: boolean;
     /** 閿欒淇℃伅 */
@@ -1959,6 +2113,66 @@
     addressName?: string;
   }
 
+  interface GetContractTemplateEnterprisesQuery {
+    /** 鍏抽敭瀛� */
+    keywords?: string;
+    status?: EnumContractTemplateStatus;
+    pageModel?: PagedListQueryPageModel;
+  }
+
+  interface GetContractTemplateEnterprisesQueryResult {
+    pageModel?: PagedListQueryResultPageModel;
+    /** 鏁版嵁 */
+    data?: GetContractTemplateEnterprisesQueryResultItem[];
+  }
+
+  interface GetContractTemplateEnterprisesQueryResultItem {
+    /** 浼佷笟Id */
+    id?: string;
+    /** 浼佷笟鍏ㄧО */
+    enterpriseName?: string;
+    /** 鑱旂郴浜� */
+    contacts?: string;
+    /** 鑱旂郴鐢佃瘽 */
+    contactPhoneNumber?: string;
+    /** 鍚堝悓鏁� */
+    total?: number;
+    /** 寰呭埗鐗� */
+    waitCount?: number;
+  }
+
+  interface GetContractTemplateQueryResult {
+    /** 妯℃澘Id */
+    id?: string;
+    /** 浼佷笟Id */
+    enterpriseId?: string;
+    /** 妯℃澘鍚嶇О */
+    name?: string;
+    /** 妯℃澘 */
+    file?: string;
+    /** 涓氬姟缂栫爜 */
+    code?: string;
+    access?: EnumElectronSignAccess;
+    /** 妯℃澘Id */
+    templateId?: string;
+    /** 鍙橀噺 */
+    values?: GetContractTemplateQueryResultValue[];
+  }
+
+  interface GetContractTemplateQueryResultValue {
+    /** 鍙橀噺Id */
+    id?: string;
+    type?: EnumContractTemplateValueType;
+    recorder?: EnumContractTemplateValueRecorder;
+    userType?: EnumUserType;
+    /** 鍙橀噺鍚嶇О */
+    label?: string;
+    /** 鍙橀噺浠g爜 */
+    name?: string;
+    /** 鏄惁蹇呭~ */
+    required?: boolean;
+  }
+
   type GetCurrentLogierMenusQuery = Record<string, any>;
 
   interface GetDbAuditLogsQuery {
@@ -2102,6 +2316,74 @@
     sort?: number;
     /** 鏄惁绂佺敤 */
     isDisabled?: boolean;
+  }
+
+  interface GetEnterpriseContractTemplateLogsQuery {
+    /** 妯℃澘Id */
+    id?: string;
+    pageModel?: PagedListQueryPageModel;
+  }
+
+  interface GetEnterpriseContractTemplateLogsQueryResult {
+    pageModel?: PagedListQueryResultPageModel;
+    /** 鏁版嵁 */
+    data?: GetEnterpriseContractTemplateLogsQueryResultItem[];
+  }
+
+  interface GetEnterpriseContractTemplateLogsQueryResultItem {
+    /** 璺熻釜Id */
+    traceId?: string;
+    /** 鎿嶄綔浜� */
+    createdUser?: string;
+    /** 鎿嶄綔鏃堕棿 */
+    createdTime?: string;
+    operate?: EnumDbAuditOperate;
+    /** 鎿嶄綔鍐呭 */
+    content?: string[];
+  }
+
+  interface GetEnterpriseContractTemplatesQuery {
+    /** 浼佷笟Id */
+    enterpriseId?: string;
+    /** 鍏抽敭瀛� */
+    keywords?: string;
+    status?: EnumContractTemplateStatus;
+    /** 瀹㈡埛涓婁紶鏃堕棿-璧峰 */
+    createdTimeBegin?: string;
+    /** 瀹㈡埛涓婁紶鏃堕棿-鎴 */
+    createdTimeEnd?: string;
+    /** 鍒剁増鏃堕棿-璧峰 */
+    completedTimeBegin?: string;
+    /** 鍒剁増鏃堕棿-鎴 */
+    completedTimeEnd?: string;
+    pageModel?: PagedListQueryPageModel;
+  }
+
+  interface GetEnterpriseContractTemplatesQueryResult {
+    pageModel?: PagedListQueryResultPageModel;
+    /** 鏁版嵁 */
+    data?: GetEnterpriseContractTemplatesQueryResultItem[];
+  }
+
+  interface GetEnterpriseContractTemplatesQueryResultItem {
+    /** 妯℃澘Id */
+    id?: string;
+    /** 妯℃澘鍚嶇О */
+    name?: string;
+    /** 瀹㈡埛涓婁紶鏃堕棿 */
+    createdTime?: string;
+    /** 妯℃澘Id */
+    templateId?: string;
+    access?: EnumElectronSignAccess;
+    /** 涓氬姟缂栫爜 */
+    code?: string;
+    /** 妯℃澘 */
+    file?: string;
+    status?: EnumContractTemplateStatus;
+    /** 鍒剁増鏃堕棿 */
+    completedTime?: string;
+    /** 鎿嶄綔浜� */
+    operator?: string;
   }
 
   interface GetEnterpriseElectronSignSettingQueryResult {
@@ -2345,6 +2627,48 @@
     createdUser?: GetResourceLogsQueryResultItemCreatedUser;
     /** 鍒涘缓鏃堕棿 */
     createdTime?: string;
+  }
+
+  interface GetIdentityBackOcrCommand {
+    access?: EnumOcrAccess;
+    /** 鍦烘櫙 */
+    scene?: string;
+    /** 閾炬帴鍦板潃 */
+    url?: string;
+    /** 鏄惁涓轰簯瀛樺偍鐩稿鍦板潃 */
+    isOssUrl?: boolean;
+  }
+
+  interface GetIdentityBackOcrCommandResult {
+    /** 鍦板潃 */
+    url?: string;
+    model?: BaiduOcrIdentityBackResultModel;
+  }
+
+  interface GetIdentityFrontOcrCommand {
+    access?: EnumOcrAccess;
+    /** 鍦烘櫙 */
+    scene?: string;
+    /** 閾炬帴鍦板潃 */
+    url?: string;
+    /** 鏄惁涓轰簯瀛樺偍鐩稿鍦板潃 */
+    isOssUrl?: boolean;
+  }
+
+  interface GetIdentityFrontOcrCommandResult {
+    /** 鍦板潃 */
+    url?: string;
+    model?: BaiduOcrIdentityFrontResultModel;
+  }
+
+  interface GetLicenseOcrCommand {
+    access?: EnumOcrAccess;
+    /** 鍦烘櫙 */
+    scene?: string;
+    /** 閾炬帴鍦板潃 */
+    url?: string;
+    /** 鏄惁涓轰簯瀛樺偍鐩稿鍦板潃 */
+    isOssUrl?: boolean;
   }
 
   interface GetLicenseOcrCommandResult {
@@ -3608,6 +3932,38 @@
     id?: string;
   }
 
+  interface SaveContractTemplateCommand {
+    /** 浼佷笟Id锛堣繍钀ョ淇濆瓨鏃讹級 */
+    enterpriseId?: string;
+    /** 妯℃澘鍚嶇О */
+    name: string;
+    /** 妯℃澘 */
+    file: string;
+    /** 涓氬姟缂栫爜 */
+    code?: string;
+    access?: EnumElectronSignAccess;
+    /** 妯℃澘Id */
+    templateId?: string;
+    /** 鍙橀噺 */
+    values?: SaveContractTemplateCommandValue[];
+    /** Id */
+    id?: string;
+  }
+
+  interface SaveContractTemplateCommandValue {
+    /** Id */
+    id?: string;
+    type?: EnumContractTemplateValueType;
+    recorder?: EnumContractTemplateValueRecorder;
+    userType?: EnumUserType;
+    /** 鍙橀噺鍚嶇О */
+    label?: string;
+    /** 鍙橀噺浠g爜 */
+    name?: string;
+    /** 鏄惁蹇呭~ */
+    required?: boolean;
+  }
+
   interface SaveDictionaryCategoryCommand {
     /** 缂栧彿 */
     code: string;
@@ -3975,6 +4331,12 @@
     smsCost?: number;
   }
 
+  interface SetIsDisabledContractTemplateCommand {
+    ids?: string[];
+    /** 鏄惁宸茬鐢� */
+    isDisabled?: boolean;
+  }
+
   interface SetMenuSwitchCommand {
     /** Id */
     ids?: string[];

--
Gitblit v1.9.1