实现 Vue 3 + e签宝电子合同签署功能,需要使用 e签宝提供的实际 SDK 或 API。
e签宝通常提供针对不同平台(如 Web、Android、iOS)的 SDK,而 Web 端一般通过 WebView 或直接使用嵌入式 iframe 来加载合同签署页面。
下面举个 🌰 说明:
前提条件
1、获取 e签宝 API 接口:首先需要从 e签宝获取 API 密钥、签署链接、合同模板和签署所需的相关接口。
2、后端支持:e签宝的 API 需要通过后端服务器调用,因此需要后端来处理签署请求,生成签署链接,处理回调等操作。
步骤 1:后端生成签署链接
假设已经通过后端 API 调用 e签宝的接口,生成了一个合同签署的链接。给前端提供该链接,前端将使用这个链接加载合同签署页面。
以下是一个假设的后端接口:
- 生成签署链接的后端接口:/api/generate-signature-link
- 该接口会返回一个签署 URL,前端将通过该 URL 在 iframe 中加载签署页面。
接口返回结果示例:
{
"status": "success",
"data": {
"signUrl": "https://e-signature.example.com/contract-sign?contractId=12345&userId=67890"
}
}
步骤 2:前端实现 Vue 3 项目
1、创建 Vue 3 项目:如果还没有创建项目,可以使用 Vite 创建一个新的 Vue 项目
npm create vite@latest my-e-sign-app --template vue
cd my-e-sign-app
npm install
npm install element-plus
2、创建 ESignature.vue 组件:这是展示合同签署页面的 Vue 组件。
<template>
<div class="e-signature">
<h2>电子合同签署</h2>
<!-- 选择合同 -->
<el-select v-model="selectedDocument" placeholder="请选择合同" style="width: 200px;">
<el-option
v-for="doc in documents"
:key="doc.id"
:label="doc.name"
:value="doc.url"
/>
</el-select>
<!-- 显示合同内容 -->
<div v-if="selectedDocument" class="contract-container">
<iframe
v-bind:src="selectedDocument"
width="100%"
height="600px"
frameborder="0"
></iframe>
</div>
<div class="sign-result">
<el-button @click="handleSign" type="primary">开始签署</el-button>
<p v-if="signResult">签署结果: {{ signResult }}</p>
</div>
</div>
</template>
<script setup>
import { ref } from 'vue';
const documents = ref([
{ id: 1, name: '合同1', url: 'https://e-signature.example.com/contract-sign?contractId=12345&userId=67890' },
{ id: 2, name: '合同2', url: 'https://e-signature.example.com/contract-sign?contractId=12346&userId=67891' },
]);
// 当前选中的合同 URL
const selectedDocument = ref('');
// 签署结果
const signResult = ref('');
// 开始签署的处理函数
const handleSign = async () => {
try {
const response = await fetch('/api/generate-signature-link');
const result = await response.json();
if (result.status === 'success') {
selectedDocument.value = result.data.signUrl;
signResult.value = '合同加载中...';
} else {
signResult.value = '签署链接获取失败';
}
} catch (error) {
signResult.value = '发生错误: ' + error.message;
}
};
</script>
<style scoped>
.e-signature {
margin: 20px;
}
.contract-container {
margin-top: 20px;
border: 1px solid #ddd;
padding: 10px;
}
.sign-result {
margin-top: 20px;
}
</style>
步骤 3:在 App.vue 中使用 ESignature.vue 组件
<template>
<div id="app">
<ESignature />
</div>
</template>
<script setup>
import ESignature from './components/ESignature.vue';
</script>
<style>
@import "~element-plus/packages/theme-chalk/src/base.scss";
</style>
步骤 4:后端实现生成签署链接
伪代码简单实现一下后端处理逻辑
// 假设已经有 e签宝的 API 密钥和其他必要信息
const E_SIGN_API_URL = 'https://api.esign.com/generate-signature-link';
const API_KEY = 'E_SIGN_API_KEY';
// 生成签署链接
app.get('/api/generate-signature-link', async (req, res) => {
try {
const response = await fetch(E_SIGN_API_URL, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${API_KEY}`,
},
body: JSON.stringify({
contractId: '12345', // 合同 ID
userId: '67890', // 用户 ID
}),
});
const result = await response.json();
if (result.status === 'success') {
res.json({
status: 'success',
data: { signUrl: result.data.signUrl },
});
} else {
res.json({
status: 'error',
message: 'Failed to generate signature link',
});
}
} catch (error) {
res.status(500).json({ status: 'error', message: error.message });
}
});
app.listen(3000, () => {
console.log('Server running on http://localhost:3000');
});
步骤 5:运行项目
启动前端服务:
npm run dev
结果展示:
总结
通过上述步骤,可以实现一个真实的电子合同签署流程:
1、前端通过调用后端接口获取真实的签署链接。
2、使用 iframe 将签署页面嵌入到 Vue 组件中。
3、用户可以通过点击按钮触发签署过程,后端会生成签署链接,前端加载合同签署页面。