From 2e18c1477942ea6df0592807051e78bd192a75b2 Mon Sep 17 00:00:00 2001
From: zhengyiming <540361168@qq.com>
Date: 星期四, 21 八月 2025 15:11:28 +0800
Subject: [PATCH] fix: 签约
---
types/global.d.ts | 3
src/views/AgreementManage/AgreementManageList.vue | 13 +
.eslintrc-auto-import.json | 2
src/services/api/typings.d.ts | 199 ++++++++++++++++++++++++++--
src/services/api/index.ts | 8
src/utils/common/pdf.ts | 77 +++++++++++
index.html | 1
src/services/api/electronSign.ts | 35 +++++
src/utils/common/index.ts | 1
auto-imports.d.ts | 7
src/constants/electronSign.ts | 6
src/constants/apiEnum.ts | 12 +
src/services/api/ocrUtils.ts | 43 +++++-
13 files changed, 379 insertions(+), 28 deletions(-)
diff --git a/.eslintrc-auto-import.json b/.eslintrc-auto-import.json
index 6e203f6..af838e5 100644
--- a/.eslintrc-auto-import.json
+++ b/.eslintrc-auto-import.json
@@ -35,6 +35,7 @@
"EnumPersonalFreeTime": true,
"EnumPersonalJobSeekingStatus": true,
"EnumPersonalRealMethod": true,
+ "EnumPersonalUserRealStatus": true,
"EnumRealAccess": true,
"EnumResourceController": true,
"EnumResourceMethod": true,
@@ -114,6 +115,7 @@
"SubModuleTitle": true,
"SubModuleType": true,
"TempFolderPath": true,
+ "TemplateEditDataItem": true,
"ThemeColorItem": true,
"ThemeColorName": true,
"ThemeColors": true,
diff --git a/auto-imports.d.ts b/auto-imports.d.ts
index fbab021..982efca 100644
--- a/auto-imports.d.ts
+++ b/auto-imports.d.ts
@@ -39,6 +39,7 @@
const EnumPersonalFreeTime: typeof import('./src/constants/apiEnum')['EnumPersonalFreeTime']
const EnumPersonalJobSeekingStatus: typeof import('./src/constants/apiEnum')['EnumPersonalJobSeekingStatus']
const EnumPersonalRealMethod: typeof import('./src/constants/apiEnum')['EnumPersonalRealMethod']
+ const EnumPersonalUserRealStatus: typeof import('./src/constants/apiEnum')['EnumPersonalUserRealStatus']
const EnumRealAccess: typeof import('./src/constants/apiEnum')['EnumRealAccess']
const EnumResourceController: typeof import('./src/constants/apiEnum')['EnumResourceController']
const EnumResourceMethod: typeof import('./src/constants/apiEnum')['EnumResourceMethod']
@@ -220,7 +221,7 @@
export type { Component, Slot, Slots, ComponentPublicInstance, ComputedRef, DirectiveBinding, ExtractDefaultPropTypes, ExtractPropTypes, ExtractPublicPropTypes, InjectionKey, PropType, Ref, MaybeRef, MaybeRefOrGetter, VNode, WritableComputedRef } from 'vue'
import('vue')
// @ts-ignore
- export type { EnumBillingMethod, EnumClientType, EnumContractTemplateStatus, EnumContractTemplateValueRecorder, EnumContractTemplateValueType, EnumDataSource, EnumDbAuditOperate, EnumElectronSignAccess, EnumEnterpriseRealMethod, EnumMenuType, EnumMenuVisitLevel, EnumOcrAccess, EnumPagedListOrder, EnumPayAccess, EnumPersonalFreeTime, EnumPersonalJobSeekingStatus, EnumPersonalRealMethod, EnumRealAccess, EnumResourceController, EnumResourceMethod, EnumRoleWebApiDataPower, EnumSettlementCycle, EnumSmsAccess, EnumTaskCheckReceiveStatus, EnumTaskRecommendStatus, EnumTaskReleaseStatus, EnumTaskSettlementStatus, EnumTaskStatus, EnumTaskUserArrangeStatus, EnumTaskUserHireStatus, EnumTaskUserSignContractStatus, EnumTaskUserSubmitCheckReceiveStatus, EnumUserGender, EnumUserRealMethod, EnumUserStatus, EnumUserType, GetPersonalApplyTaskInfosQueryStatus, GetPersonalHireTaskInfosQueryStatus, GetTaskInfoQueryResultApplyButton, GetTaskInfoQueryResultHireButton, EnumBillingMethod, EnumClientType, EnumContractTemplateStatus, EnumContractTemplateValueRecorder, EnumContractTemplateValueType, EnumDataSource, EnumDbAuditOperate, EnumElectronSignAccess, EnumEnterpriseRealMethod, EnumMenuType, EnumMenuVisitLevel, EnumOcrAccess, EnumPagedListOrder, EnumPayAccess, EnumPersonalFreeTime, EnumPersonalJobSeekingStatus, EnumPersonalRealMethod, EnumRealAccess, EnumResourceController, EnumResourceMethod, EnumRoleWebApiDataPower, EnumSettlementCycle, EnumSmsAccess, EnumTaskCheckReceiveStatus, EnumTaskRecommendStatus, EnumTaskReleaseStatus, EnumTaskSettlementStatus, EnumTaskStatus, EnumTaskUserArrangeStatus, EnumTaskUserHireStatus, EnumTaskUserSignContractStatus, EnumTaskUserSubmitCheckReceiveStatus, EnumUserGender, EnumUserRealMethod, EnumUserStatus, EnumUserType, GetPersonalApplyTaskInfosQueryStatus, GetPersonalHireTaskInfosQueryStatus, GetTaskInfoQueryResultApplyButton, GetTaskInfoQueryResultHireButton } from './src/constants/apiEnum'
+ export type { EnumBillingMethod, EnumClientType, EnumContractTemplateStatus, EnumContractTemplateValueRecorder, EnumContractTemplateValueType, EnumDataSource, EnumDbAuditOperate, EnumElectronSignAccess, EnumEnterpriseRealMethod, EnumMenuType, EnumMenuVisitLevel, EnumOcrAccess, EnumPagedListOrder, EnumPayAccess, EnumPersonalFreeTime, EnumPersonalJobSeekingStatus, EnumPersonalRealMethod, EnumPersonalUserRealStatus, EnumRealAccess, EnumResourceController, EnumResourceMethod, EnumRoleWebApiDataPower, EnumSettlementCycle, EnumSmsAccess, EnumTaskCheckReceiveStatus, EnumTaskRecommendStatus, EnumTaskReleaseStatus, EnumTaskSettlementStatus, EnumTaskStatus, EnumTaskUserArrangeStatus, EnumTaskUserHireStatus, EnumTaskUserSignContractStatus, EnumTaskUserSubmitCheckReceiveStatus, EnumUserGender, EnumUserRealMethod, EnumUserStatus, EnumUserType, GetPersonalApplyTaskInfosQueryStatus, GetPersonalHireTaskInfosQueryStatus, GetTaskInfoQueryResultApplyButton, GetTaskInfoQueryResultHireButton, EnumBillingMethod, EnumClientType, EnumContractTemplateStatus, EnumContractTemplateValueRecorder, EnumContractTemplateValueType, EnumDataSource, EnumDbAuditOperate, EnumElectronSignAccess, EnumEnterpriseRealMethod, EnumMenuType, EnumMenuVisitLevel, EnumOcrAccess, EnumPagedListOrder, EnumPayAccess, EnumPersonalFreeTime, EnumPersonalJobSeekingStatus, EnumPersonalRealMethod, EnumPersonalUserRealStatus, EnumRealAccess, EnumResourceController, EnumResourceMethod, EnumRoleWebApiDataPower, EnumSettlementCycle, EnumSmsAccess, EnumTaskCheckReceiveStatus, EnumTaskRecommendStatus, EnumTaskReleaseStatus, EnumTaskSettlementStatus, EnumTaskStatus, EnumTaskUserArrangeStatus, EnumTaskUserHireStatus, EnumTaskUserSignContractStatus, EnumTaskUserSubmitCheckReceiveStatus, EnumUserGender, EnumUserRealMethod, EnumUserStatus, EnumUserType, GetPersonalApplyTaskInfosQueryStatus, GetPersonalHireTaskInfosQueryStatus, GetTaskInfoQueryResultApplyButton, GetTaskInfoQueryResultHireButton } from './src/constants/apiEnum'
import('./src/constants/apiEnum')
// @ts-ignore
export type { CategoryCode, IdentityCodeEnum, EducationCodeEnum, CertificateTypeCodeEnum, WelfareCodeEnum } from './src/constants/dic'
@@ -228,6 +229,9 @@
// @ts-ignore
export type { EditorType, EditorType } from './src/constants/editor'
import('./src/constants/editor')
+ // @ts-ignore
+ export type { TemplateEditDataItem } from './src/constants/electronSign'
+ import('./src/constants/electronSign')
// @ts-ignore
export type { AreaType, AreaType } from './src/constants/enum'
import('./src/constants/enum')
@@ -281,6 +285,7 @@
readonly EnumPersonalFreeTime: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumPersonalFreeTime']>
readonly EnumPersonalJobSeekingStatus: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumPersonalJobSeekingStatus']>
readonly EnumPersonalRealMethod: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumPersonalRealMethod']>
+ readonly EnumPersonalUserRealStatus: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumPersonalUserRealStatus']>
readonly EnumRealAccess: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumRealAccess']>
readonly EnumResourceController: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumResourceController']>
readonly EnumResourceMethod: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumResourceMethod']>
diff --git a/index.html b/index.html
index e19dc37..cb5e9d0 100644
--- a/index.html
+++ b/index.html
@@ -9,6 +9,7 @@
<meta name="referrer" content="no-referrer" />
<title><%- title %></title>
<link rel="stylesheet" href="<%- subMenuIconCssPath %>" />
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.11.338/pdf.min.js"></script>
<script>
window.process = {};
</script>
diff --git a/src/constants/apiEnum.ts b/src/constants/apiEnum.ts
index b91d90e..687a584 100644
--- a/src/constants/apiEnum.ts
+++ b/src/constants/apiEnum.ts
@@ -159,6 +159,18 @@
Face = 30,
}
+/** 涓汉鐢ㄦ埛瀹炲悕鐘舵�� */
+export enum EnumPersonalUserRealStatus {
+ /**鏈疄鍚� */
+ UnReal = 0,
+ /**鏍¢獙涓� */
+ Checking = 10,
+ /**瀹炲悕澶辫触 */
+ Fail = 99,
+ /**宸插疄鍚� */
+ Real = 100,
+}
+
/** 瀹炲悕閫氶亾 */
export enum EnumRealAccess {
/**涓婁笂绛� */
diff --git a/src/constants/electronSign.ts b/src/constants/electronSign.ts
index 54174d4..4577c54 100644
--- a/src/constants/electronSign.ts
+++ b/src/constants/electronSign.ts
@@ -2,3 +2,9 @@
[EnumContractTemplateStatus.Wait]: '寰呭埗鐗�',
[EnumContractTemplateStatus.Completed]: '宸插埗鐗�',
};
+
+export type TemplateEditDataItem = {
+ path: string;
+ width: number;
+ height: number;
+};
diff --git a/src/services/api/electronSign.ts b/src/services/api/electronSign.ts
index b649bcb..7e0325b 100644
--- a/src/services/api/electronSign.ts
+++ b/src/services/api/electronSign.ts
@@ -86,6 +86,26 @@
);
}
+/** 鏌ヨ涓汉瀹炲悕缁撴灉 GET /api/user/electronSign/getPersonalUserRealResult */
+export async function getPersonalUserRealResult(
+ // 鍙犲姞鐢熸垚鐨凱aram绫诲瀷 (闈瀊ody鍙傛暟swagger榛樿娌℃湁鐢熸垚瀵硅薄)
+ params: API.APIgetPersonalUserRealResultParams,
+ options?: API.RequestConfig
+) {
+ return request<API.GetPersonalUserRealResultQueryResult>(
+ '/api/user/electronSign/getPersonalUserRealResult',
+ {
+ method: 'GET',
+ params: {
+ ...params,
+ request: undefined,
+ ...params['request'],
+ },
+ ...(options || {}),
+ }
+ );
+}
+
/** 涓汉浜鸿劯瀹炲悕璁よ瘉 POST /api/user/electronSign/personalUserFaceReal */
export async function personalUserFaceReal(
body: API.PersonalUserFaceRealCommand,
@@ -131,6 +151,21 @@
});
}
+/** 鍚堝悓鍒剁増 POST /api/user/electronSign/saveContractTemplateValues */
+export async function saveContractTemplateValues(
+ body: API.SaveContractTemplateValuesCommand,
+ options?: API.RequestConfig
+) {
+ return request<string>('/api/user/electronSign/saveContractTemplateValues', {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json-patch+json',
+ },
+ data: body,
+ ...(options || {}),
+ });
+}
+
/** 鍙戦�佷釜浜轰笁瑕佺礌瀹炲悕鐭俊 POST /api/user/electronSign/sendPersonalUserIdentity3RealSms */
export async function sendPersonalUserIdentity3RealSms(
body: API.SendPersonalUserIdentity3RealSmsCommand,
diff --git a/src/services/api/index.ts b/src/services/api/index.ts
index 39390a8..2973753 100644
--- a/src/services/api/index.ts
+++ b/src/services/api/index.ts
@@ -6,15 +6,15 @@
import * as user from './user';
import * as role from './role';
import * as enterprise from './enterprise';
+import * as electronSign from './electronSign';
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';
@@ -23,15 +23,15 @@
user,
role,
enterprise,
+ electronSign,
resource,
task,
- ocrUtils,
dictionary,
userResume,
auth,
taskCheckReceive,
- electronSign,
taskUser,
+ ocrUtils,
menu,
logRecords,
fileUtils,
diff --git a/src/services/api/ocrUtils.ts b/src/services/api/ocrUtils.ts
index 4601bae..75d1669 100644
--- a/src/services/api/ocrUtils.ts
+++ b/src/services/api/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/src/services/api/typings.d.ts b/src/services/api/typings.d.ts
index 04356b2..9b8595f 100644
--- a/src/services/api/typings.d.ts
+++ b/src/services/api/typings.d.ts
@@ -98,17 +98,6 @@
url?: string;
}
- interface APIgetLicenseOcrParams {
- /** 閫氶亾 */
- access?: EnumOcrAccess;
- /** 鍦烘櫙 */
- scene?: string;
- /** 閾炬帴鍦板潃 */
- url?: string;
- /** 鏄惁涓轰簯瀛樺偍鐩稿鍦板潃 */
- isOssUrl?: boolean;
- }
-
interface APIgetMenuParams {
/** Id */
id?: string;
@@ -128,6 +117,11 @@
interface APIgetPersonalLoginInfoParams {
/** 鏌ヨ涓汉鐢ㄦ埛鐧诲綍淇℃伅 */
request?: GetPersonalLoginInfoQuery;
+ }
+
+ interface APIgetPersonalUserRealResultParams {
+ /** 鏌ヨ涓汉瀹炲悕缁撴灉 */
+ request?: GetPersonalUserRealResultQuery;
}
interface APIgetResourceFieldsParams {
@@ -242,6 +236,28 @@
address?: string;
/** 缁忚惀鑼冨洿 */
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 {
@@ -485,6 +501,17 @@
Identity4 = 20,
/**鍒疯劯璁よ瘉 */
Face = 30,
+ }
+
+ enum EnumPersonalUserRealStatus {
+ /**鏈疄鍚� */
+ UnReal = 0,
+ /**鏍¢獙涓� */
+ Checking = 10,
+ /**瀹炲悕澶辫触 */
+ Fail = 99,
+ /**宸插疄鍚� */
+ Real = 100,
}
enum EnumRealAccess {
@@ -1026,6 +1053,42 @@
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;
+ /** 閿欒淇℃伅 */
+ msg?: any;
+ /** 闄勫姞鏁版嵁 */
+ extras?: any;
+ /** 鏃堕棿鎴� */
+ timestamp?: number;
+ }
+
interface FriendlyResultGetLicenseOcrCommandResult {
/** 璺熻釜Id */
traceId?: string;
@@ -1160,6 +1223,24 @@
/** 閿欒鐮� */
errorCode?: string;
data?: GetPersonalUserInfosQueryResult;
+ /** 鎵ц鎴愬姛 */
+ success?: boolean;
+ /** 閿欒淇℃伅 */
+ msg?: any;
+ /** 闄勫姞鏁版嵁 */
+ extras?: any;
+ /** 鏃堕棿鎴� */
+ timestamp?: number;
+ }
+
+ interface FriendlyResultGetPersonalUserRealResultQueryResult {
+ /** 璺熻釜Id */
+ traceId?: string;
+ /** 鐘舵�佺爜 */
+ code?: number;
+ /** 閿欒鐮� */
+ errorCode?: string;
+ data?: GetPersonalUserRealResultQueryResult;
/** 鎵ц鎴愬姛 */
success?: boolean;
/** 閿欒淇℃伅 */
@@ -2103,6 +2184,10 @@
name?: string;
/** 妯℃澘 */
file?: string;
+ /** 鍒剁増妯℃澘鐓х墖 */
+ templateEditData?: string;
+ /** 鍒剁増鍙橀噺JSON */
+ templateJsonData?: string;
/** 涓氬姟缂栫爜 */
code?: string;
access?: EnumElectronSignAccess;
@@ -2582,6 +2667,48 @@
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 {
/** 鍦板潃 */
url?: string;
@@ -2989,6 +3116,41 @@
hireTime?: string;
/** 鏈�杩戠绾︽椂闂� */
signContractTime?: string;
+ }
+
+ type GetPersonalUserRealResultQuery = Record<string, any>;
+
+ interface GetPersonalUserRealResultQueryResult {
+ /** 鏄惁瀹炲悕 */
+ isReal?: boolean;
+ /** 瀹炲悕鏃堕棿 */
+ realTime?: string;
+ realMethod?: EnumUserRealMethod;
+ /** 濮撳悕 */
+ name?: string;
+ /** 鎵嬫満鍙� */
+ phoneNumber?: string;
+ /** 韬唤璇佸彿 */
+ identity?: string;
+ /** 韬唤璇佷汉鍍忛潰 */
+ identityImg?: string;
+ /** 韬唤璇佸浗寰介潰 */
+ identityBackImg?: string;
+ gender?: EnumUserGender;
+ /** 鐢熸棩 */
+ birthday?: string;
+ /** 骞撮緞 */
+ age?: number;
+ /** 閾惰鍗″彿 */
+ bankCard?: string;
+ /** 閾惰鍗$収鐗� */
+ bankCardImg?: string;
+ realAccess?: EnumRealAccess;
+ realStatus?: EnumPersonalUserRealStatus;
+ /** 瀹炲悕澶辫触娑堟伅 */
+ realFailMessage?: string;
+ /** 浜鸿劯瀹炲悕璁よ瘉鍦板潃 */
+ faceRealUrl?: string;
}
interface GetResourceFieldsQueryResultItem {
@@ -3850,18 +4012,27 @@
name: string;
/** 妯℃澘 */
file: string;
+ /** 鍒剁増妯℃澘鐓х墖 */
+ templateEditData?: string;
/** 涓氬姟缂栫爜 */
code?: string;
access?: EnumElectronSignAccess;
/** 妯℃澘Id */
templateId?: string;
- /** 鍙橀噺 */
- values?: SaveContractTemplateCommandValue[];
/** Id */
id?: string;
}
- interface SaveContractTemplateCommandValue {
+ interface SaveContractTemplateValuesCommand {
+ /** 妯℃澘Id */
+ id: string;
+ /** 鍒剁増鍙橀噺JSON */
+ templateJsonData?: string;
+ /** 鍙橀噺 */
+ values: SaveContractTemplateValuesCommandItem[];
+ }
+
+ interface SaveContractTemplateValuesCommandItem {
/** Id */
id?: string;
type?: EnumContractTemplateValueType;
diff --git a/src/utils/common/index.ts b/src/utils/common/index.ts
index b03c034..481d8d9 100644
--- a/src/utils/common/index.ts
+++ b/src/utils/common/index.ts
@@ -15,3 +15,4 @@
export * from './categoryUtils';
export * from './encrypt';
export * from './deepClone';
+export * from './pdf';
diff --git a/src/utils/common/pdf.ts b/src/utils/common/pdf.ts
new file mode 100644
index 0000000..671cfc3
--- /dev/null
+++ b/src/utils/common/pdf.ts
@@ -0,0 +1,77 @@
+import { BoleOss, Message } from '@bole-core/core';
+import { RichEditorUtils } from '@bole-core/components';
+import { OssManager } from '../oss';
+import { ElLoading } from 'element-plus';
+
+pdfjsLib.GlobalWorkerOptions.workerSrc =
+ 'https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.11.338/pdf.worker.js';
+
+export async function resolvePdfByUrl(url: string) {
+ let pdf = await pdfjsLib.getDocument(url).promise;
+
+ return pdf;
+}
+
+export type ConvertPdfToImageItem = BoleOss.PutObjectResult & {
+ width: number;
+ height: number;
+};
+
+export async function convertPdfToImage(pdfUrl: string) {
+ let loadingInstance: ReturnType<typeof ElLoading.service>;
+ try {
+ loadingInstance = ElLoading.service({
+ fullscreen: true,
+ lock: false,
+ background: 'transparent',
+ });
+ const pdf = await resolvePdfByUrl(pdfUrl);
+ let tasks: Promise<ConvertPdfToImageItem>[] = [];
+ for (let i = 0; i < pdf.numPages; i++) {
+ const page = await pdf.getPage(i + 1);
+ const viewport = page.getViewport({ scale: 1 });
+ tasks.push(
+ new Promise(async (resolve, reject) => {
+ try {
+ let base64 = await generateBase64ByPage(page);
+ let file = RichEditorUtils.base64ToFile(base64);
+ let res = await OssManager.asyncUpload({
+ file: file,
+ });
+ resolve({
+ ...res,
+ width: viewport.width,
+ height: viewport.height,
+ });
+ } catch (error) {
+ reject(error);
+ }
+ })
+ );
+ }
+ return Promise.all(tasks);
+ } catch (error) {
+ Message.errorMessage(error);
+ throw new Error(error);
+ } finally {
+ if (loadingInstance) {
+ loadingInstance.close();
+ }
+ }
+}
+
+async function generateBase64ByPage(page) {
+ const viewport = page.getViewport({ scale: 1 });
+ let canvas = document.createElement('canvas');
+ const context = canvas.getContext('2d');
+ canvas.height = viewport.height;
+ canvas.width = viewport.width;
+ const renderContext = {
+ canvasContext: context,
+ viewport: viewport,
+ };
+ await page.render(renderContext).promise;
+ let base64 = canvas.toDataURL('image/png');
+ canvas = null;
+ return base64;
+}
diff --git a/src/views/AgreementManage/AgreementManageList.vue b/src/views/AgreementManage/AgreementManageList.vue
index 30c260f..4ad2f3b 100644
--- a/src/views/AgreementManage/AgreementManageList.vue
+++ b/src/views/AgreementManage/AgreementManageList.vue
@@ -79,7 +79,7 @@
} from '@bole-core/components';
import { AgreementbManageColumns } from './constants';
import { EnumContractTemplateStatus, EnumContractTemplateStatusText } from '@/constants';
-import { downloadFileByUrl, format, setOSSLink } from '@/utils';
+import { convertPdfToImage, downloadFileByUrl, format, setOSSLink } from '@/utils';
import { ModelValueType } from 'element-plus';
import * as electronSignServices from '@/services/api/electronSign';
import TemplateAddDialog from './components/TemplateAddDialog.vue';
@@ -198,9 +198,20 @@
async function handleAddOrEdit() {
try {
+ let pdfToImage = await convertPdfToImage(editForm.url?.[0].url);
let params: API.SaveContractTemplateCommand = {
name: editForm.name,
file: editForm.url[0]?.path ?? '',
+ templateEditData: JSON.stringify(
+ pdfToImage.map(
+ (x) =>
+ ({
+ path: x.path,
+ width: x.width,
+ height: x.height,
+ } as TemplateEditDataItem)
+ )
+ ),
};
let res = await electronSignServices.saveContractTemplate(params);
if (res) {
diff --git a/types/global.d.ts b/types/global.d.ts
index 4a7ea86..cf9f33c 100644
--- a/types/global.d.ts
+++ b/types/global.d.ts
@@ -15,6 +15,9 @@
};
lastBuildTime: string;
};
+
+ const pdfjsLib: any;
+
interface Window {
webkitCancelAnimationFrame: (handle: number) => void;
mozCancelAnimationFrame: (handle: number) => void;
--
Gitblit v1.9.1