95 lines
2.4 KiB
TypeScript
95 lines
2.4 KiB
TypeScript
import { IPlatformSDK } from "../core/IPlatformSDK";
|
||||
|
|
import { logger } from "db://assets/Scripts/Main/Common/Logger";
|
|||
|
|
|
|||
|
|
export class WebSDK implements IPlatformSDK {
|
|||
|
|
constructor() {}
|
|||
|
|
init(cb?: Function): void {
|
|||
|
|
logger.log("Web平台初始化");
|
|||
|
|
cb && cb();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 登录
|
|||
|
|
login(cb?: Function): void {
|
|||
|
|
cb && cb({ code: "Web" });
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 获取用户信息
|
|||
|
|
getUserInfo(
|
|||
|
|
cb: (info: { nickName: string; avatarUrl: string }) => void
|
|||
|
|
): void {
|
|||
|
|
cb({ nickName: "小明", avatarUrl: "avatar.png" });
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 检查平台权限
|
|||
|
|
checkPermission(scope: string, cb: (granted: boolean) => void): void {
|
|||
|
|
cb(true);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//region 复制到剪贴板
|
|||
|
|
/**复制文本到剪贴板 */
|
|||
|
|
copyToClipboard(text: string, cb?: Function) {
|
|||
|
|
logger.log("web 复制到剪贴板:", text);
|
|||
|
|
|
|||
|
|
if (navigator.clipboard && window.isSecureContext) {
|
|||
|
|
// 使用现代的 Clipboard API
|
|||
|
|
navigator.clipboard
|
|||
|
|
.writeText(text)
|
|||
|
|
.then(() => {
|
|||
|
|
logger.log("web 复制成功 (Clipboard API)");
|
|||
|
|
cb && cb(true);
|
|||
|
|
})
|
|||
|
|
.catch((err) => {
|
|||
|
|
logger.log("web 复制失败 (Clipboard API):", err);
|
|||
|
|
this.fallbackCopyToClipboard(text, cb);
|
|||
|
|
});
|
|||
|
|
} else {
|
|||
|
|
// 使用兼容性方案
|
|||
|
|
this.fallbackCopyToClipboard(text, cb);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
/**兼容性复制方案 */
|
|||
|
|
private fallbackCopyToClipboard(text: string, cb?: Function) {
|
|||
|
|
const textArea = document.createElement("textarea");
|
|||
|
|
textArea.value = text;
|
|||
|
|
|
|||
|
|
// 避免滚动到底部
|
|||
|
|
textArea.style.top = "0";
|
|||
|
|
textArea.style.left = "0";
|
|||
|
|
textArea.style.position = "fixed";
|
|||
|
|
textArea.style.opacity = "0";
|
|||
|
|
|
|||
|
|
document.body.appendChild(textArea);
|
|||
|
|
textArea.focus();
|
|||
|
|
textArea.select();
|
|||
|
|
|
|||
|
|
try {
|
|||
|
|
const successful = document.execCommand("copy");
|
|||
|
|
if (successful) {
|
|||
|
|
logger.log("web 复制成功 (fallback)");
|
|||
|
|
cb && cb(true);
|
|||
|
|
} else {
|
|||
|
|
logger.log("web 复制失败 (fallback)");
|
|||
|
|
cb && cb(false);
|
|||
|
|
}
|
|||
|
|
} catch (err) {
|
|||
|
|
logger.log("web 复制异常 (fallback):", err);
|
|||
|
|
cb && cb(false);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
document.body.removeChild(textArea);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 客服功能是否可用
|
|||
|
|
kefuSupport(): boolean {
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 打开客服会话
|
|||
|
|
openKefu(): void {}
|
|||
|
|
|
|||
|
|
// 获取设备分辨率
|
|||
|
|
getWindowSize(): { width: number; height: number } {
|
|||
|
|
return { width: 720, height: 1280 };
|
|||
|
|
}
|
|||
|
|
}
|