85 lines
3.4 KiB
HTML
85 lines
3.4 KiB
HTML
<!doctype html>
|
|
<html lang="en">
|
|
<head>
|
|
<title>签字</title>
|
|
<meta charset="UTF-8" />
|
|
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, viewport-fit=cover" />
|
|
|
|
<script src="${base!}/assets/platform/plugins/vue/vue.js"></script>
|
|
<script src="${base!}/assets/platform/plugins/vue-http-loader/httpVueLoader.js"></script>
|
|
<script src="${base!}/assets/platform/plugins/smooth-signature/index.umd.min.js"></script>
|
|
<script src="${base!}/assets/platform/plugins/axios/axios.js"></script>
|
|
</head>
|
|
<body>
|
|
<div id="app">
|
|
<signature @save="save"></signature>
|
|
</div>
|
|
</body>
|
|
<script nonce="${cspNonce!}">
|
|
new Vue({
|
|
el: "#app",
|
|
components: {
|
|
signature: httpVueLoader("/components/plugins/sysSignature/index.vue?v=" + new Date().getTime())
|
|
},
|
|
data() {
|
|
return {}
|
|
},
|
|
methods: {
|
|
save(signature) {
|
|
const id = new URLSearchParams(window.location.search).get("id")
|
|
const origin = new URLSearchParams(window.location.search).get("origin")
|
|
if (!id && !origin) {
|
|
alert("参数错误")
|
|
return
|
|
}
|
|
|
|
const file = this.base64ToFile(signature, "signature.png")
|
|
|
|
const formData = new FormData()
|
|
formData.append("file", file)
|
|
formData.append("id", id)
|
|
formData.append("origin", origin)
|
|
|
|
const method = origin === "user" ? "/update" : "/saveSignature"
|
|
|
|
axios
|
|
.post("/platform/signature" + method, formData, {
|
|
headers: {
|
|
"Content-Type": "multipart/form-data"
|
|
}
|
|
})
|
|
.then((res) => {
|
|
return res.data
|
|
})
|
|
.then((res) => {
|
|
if (res.code === 0) {
|
|
alert("保存成功")
|
|
} else {
|
|
alert("保存失败")
|
|
}
|
|
})
|
|
},
|
|
base64ToFile(base64Data, filename) {
|
|
// 将base64的数据部分提取出来
|
|
const parts = base64Data.split(";base64,")
|
|
const contentType = parts[0].split(":")[1]
|
|
const raw = window.atob(parts[1])
|
|
const rawLength = raw.length
|
|
const uInt8Array = new Uint8Array(rawLength)
|
|
|
|
for (let i = 0; i < rawLength; ++i) {
|
|
uInt8Array[i] = raw.charCodeAt(i)
|
|
}
|
|
|
|
// 使用Blob对象创建File对象
|
|
const blob = new Blob([uInt8Array], { type: contentType })
|
|
blob.lastModifiedDate = new Date()
|
|
blob.name = filename
|
|
return new File([blob], filename, { type: contentType })
|
|
}
|
|
}
|
|
})
|
|
</script>
|
|
</html>
|