添加"结束编辑"按钮,点击后调用 WPS SDK 的 destroy() 方法销毁文档,释放 WPS 服务器资源。
在执行前弹出确认对话框:
⚠️ 结束编辑
确定要结束编辑吗?这将销毁 WPS 文档,未保存的修改将丢失。
[取消] [确定]
destroy() 方法wpsInstance 实例const handleEndEdit = async () => {
if (!wpsInstance) {
ElMessage.warning('WPS 编辑器未初始化');
return;
}
// 1. 确认对话框
await ElMessageBox.confirm(
'确定要结束编辑吗?这将销毁 WPS 文档,未保存的修改将丢失。',
'结束编辑',
{
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}
);
try {
endingEdit.value = true;
// 2. 显示加载提示
const loadingMsg = ElMessage({
message: '正在结束编辑...',
duration: 0,
showClose: false
});
// 3. 调用 WPS SDK 的销毁方法
if (wpsInstance.destroy) {
await wpsInstance.destroy();
}
// 4. 清空实例
wpsInstance = null;
// 5. 关闭加载提示
loadingMsg.close();
// 6. 显示成功提示
ElMessage.success('编辑已结束,文档已销毁');
// 7. 关闭对话框
setTimeout(() => {
dialogVisible.value = false;
}, 1000);
} catch (err) {
// 错误处理...
} finally {
endingEdit.value = false;
}
};
用户点击"结束编辑"
↓
显示确认对话框
↓
用户确认
↓
显示加载提示:"正在结束编辑..."
↓
调用 wpsInstance.destroy()
↓
WPS 销毁文档(释放服务器资源)
↓
清空 wpsInstance = null
↓
关闭加载提示
↓
显示成功提示:"编辑已结束,文档已销毁"
↓
1 秒后关闭对话框
↓
完成!
┌─────────────────────────────────────┐
│ 📄 文档名称.docx │
│ │
│ [🖼️ 复制签名] │
└─────────────────────────────────────┘
┌─────────────────────────────────────┐
│ 📄 文档名称.docx │
│ │
│ [🖼️ 复制签名] [⭕ 结束编辑] │
└─────────────────────────────────────┘
wpsInstance.destroy(): Promise<void>
功能:
返回:
// 基本用法
await wpsInstance.destroy();
// 带错误处理
try {
await wpsInstance.destroy();
console.log('文档已销毁');
} catch (err) {
console.error('销毁失败:', err);
}
// 检查方法是否存在
if (wpsInstance.destroy) {
await wpsInstance.destroy();
} else {
console.warn('destroy 方法不存在');
}
审核文档
↓
提交审核结果
↓
点击"结束编辑"
↓
销毁 WPS 文档
↓
关闭对话框
打开文档编辑
↓
发现不需要编辑
↓
点击"结束编辑"
↓
销毁 WPS 文档
↓
关闭对话框
长时间编辑
↓
暂时不需要编辑
↓
点击"结束编辑"
↓
释放 WPS 服务器资源
↓
需要时重新打开
⚠️ 结束编辑
确定要结束编辑吗?这将销毁 WPS 文档,未保存的修改将丢失。
[取消] [确定]
重要提示:
ℹ️ 正在结束编辑...
显示时机:
✅ 编辑已结束,文档已销毁
显示时机:
if (!wpsInstance) {
ElMessage.warning('WPS 编辑器未初始化');
return;
}
if (wpsInstance.destroy) {
await wpsInstance.destroy();
} else {
console.warn('destroy 方法不存在');
}
catch (err) {
console.error('[WPS] 结束编辑失败:', err);
// 即使失败也尝试清空实例
wpsInstance = null;
ElMessage.warning('结束编辑可能未完全成功: ' + err.message);
// 仍然关闭对话框
setTimeout(() => {
dialogVisible.value = false;
}, 1000);
}
try {
await ElMessageBox.confirm(...);
} catch {
// 用户点击取消,直接返回
return;
}
watch(dialogVisible, (val) => {
if (!val) {
// 销毁编辑器
destroyWpsEditor();
}
});
行为:
destroyWpsEditor() 函数const handleEndEdit = async () => {
// 调用 WPS SDK 的 destroy 方法
await wpsInstance.destroy();
// 清空实例
wpsInstance = null;
// 关闭对话框
dialogVisible.value = false;
};
行为:
destroy() 方法调用 destroy():1-2 秒
清空实例:< 0.1 秒
关闭对话框:1 秒延迟
总计:2-3 秒
减少延迟:
// 不需要等待 1 秒
// setTimeout(() => {
// dialogVisible.value = false;
// }, 1000);
// 立即关闭
dialogVisible.value = false;
并行操作:
// 同时销毁和显示提示
await Promise.all([
wpsInstance.destroy(),
ElMessage.success('编辑已结束')
]);
[WPS] 开始结束编辑
[WPS] 调用 destroy 方法
[WPS] destroy 方法调用成功
[WPS] 结束编辑成功
失败日志:
[WPS] 开始结束编辑
[WPS] 调用 destroy 方法
[WPS] 结束编辑失败: Error: ...
答:可以,重新打开对话框会重新初始化 WPS 编辑器。
答:是的,结束编辑会销毁文档,未保存的修改将丢失。
答:
答:通常 2-3 秒,取决于网络速度。
答:即使失败,也会清空前端实例并关闭对话框。
答:不可以,销毁后无法恢复。
防止误操作:
await ElMessageBox.confirm(
'确定要结束编辑吗?这将销毁 WPS 文档,未保存的修改将丢失。',
'结束编辑',
{ type: 'warning' }
);
确保编辑器已初始化:
if (!wpsInstance) {
ElMessage.warning('WPS 编辑器未初始化');
return;
}
即使失败也清理资源:
catch (err) {
// 即使失败也尝试清空实例
wpsInstance = null;
// 仍然关闭对话框
dialogVisible.value = false;
}
1. 确认操作
2. 调用 wpsInstance.destroy()
3. 清空实例
4. 关闭对话框
点击"结束编辑" → 确认 → 等待 2-3 秒 → 对话框关闭
现在用户可以通过"结束编辑"按钮主动销毁 WPS 文档,释放服务器资源!