@@ -1,7 +1,7 @@ | |||||
<!-- | <!-- | ||||
* @Date: 2022-01-19 10:08:58 | * @Date: 2022-01-19 10:08:58 | ||||
* @LastEditors: JinxChen | * @LastEditors: JinxChen | ||||
* @LastEditTime: 2022-06-17 16:41:20 | |||||
* @LastEditTime: 2022-08-31 16:39:10 | |||||
* @FilePath: \AntpayFrontEnd\README.md | * @FilePath: \AntpayFrontEnd\README.md | ||||
* @description: 项目说明文档 | * @description: 项目说明文档 | ||||
--> | --> | ||||
@@ -120,4 +120,17 @@ feature | |||||
`2022.06.17` | `2022.06.17` | ||||
feature | feature | ||||
- PointInRing | - PointInRing | ||||
- 增加 圆形或者marker拖拽 | |||||
- 增加 圆形或者marker拖拽 | |||||
### v1.0.8 | |||||
`2022.07.21` | |||||
feature | |||||
- websocket-demo | |||||
- 增加 一个websocket的demo | |||||
`2022.08.31` | |||||
feature | |||||
- html-canvas-demo | |||||
- 增加 一个htmlCanvas2demo |
@@ -11,6 +11,7 @@ | |||||
"@vant/area-data": "^1.2.2", | "@vant/area-data": "^1.2.2", | ||||
"axios": "^0.26.0", | "axios": "^0.26.0", | ||||
"core-js": "^3.6.5", | "core-js": "^3.6.5", | ||||
"html2canvas": "^1.4.1", | |||||
"nprogress": "^0.2.0", | "nprogress": "^0.2.0", | ||||
"vant": "^2.12.39", | "vant": "^2.12.39", | ||||
"vue": "^2.6.11", | "vue": "^2.6.11", | ||||
@@ -4163,6 +4164,14 @@ | |||||
"node": ">=0.10.0" | "node": ">=0.10.0" | ||||
} | } | ||||
}, | }, | ||||
"node_modules/base64-arraybuffer": { | |||||
"version": "1.0.2", | |||||
"resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", | |||||
"integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==", | |||||
"engines": { | |||||
"node": ">= 0.6.0" | |||||
} | |||||
}, | |||||
"node_modules/base64-js": { | "node_modules/base64-js": { | ||||
"version": "1.5.1", | "version": "1.5.1", | ||||
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", | ||||
@@ -6006,6 +6015,14 @@ | |||||
"node": ">4" | "node": ">4" | ||||
} | } | ||||
}, | }, | ||||
"node_modules/css-line-break": { | |||||
"version": "2.1.0", | |||||
"resolved": "https://registry.npmjs.org/css-line-break/-/css-line-break-2.1.0.tgz", | |||||
"integrity": "sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==", | |||||
"dependencies": { | |||||
"utrie": "^1.0.2" | |||||
} | |||||
}, | |||||
"node_modules/css-loader": { | "node_modules/css-loader": { | ||||
"version": "3.6.0", | "version": "3.6.0", | ||||
"resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.6.0.tgz", | "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.6.0.tgz", | ||||
@@ -9010,6 +9027,18 @@ | |||||
"object-assign": "^4.0.1" | "object-assign": "^4.0.1" | ||||
} | } | ||||
}, | }, | ||||
"node_modules/html2canvas": { | |||||
"version": "1.4.1", | |||||
"resolved": "https://registry.npmjs.org/html2canvas/-/html2canvas-1.4.1.tgz", | |||||
"integrity": "sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==", | |||||
"dependencies": { | |||||
"css-line-break": "^2.1.0", | |||||
"text-segmentation": "^1.0.3" | |||||
}, | |||||
"engines": { | |||||
"node": ">=8.0.0" | |||||
} | |||||
}, | |||||
"node_modules/htmlparser2": { | "node_modules/htmlparser2": { | ||||
"version": "6.1.0", | "version": "6.1.0", | ||||
"resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", | "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", | ||||
@@ -17375,6 +17404,14 @@ | |||||
"node": ">=6" | "node": ">=6" | ||||
} | } | ||||
}, | }, | ||||
"node_modules/text-segmentation": { | |||||
"version": "1.0.3", | |||||
"resolved": "https://registry.npmjs.org/text-segmentation/-/text-segmentation-1.0.3.tgz", | |||||
"integrity": "sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==", | |||||
"dependencies": { | |||||
"utrie": "^1.0.2" | |||||
} | |||||
}, | |||||
"node_modules/text-table": { | "node_modules/text-table": { | ||||
"version": "0.2.0", | "version": "0.2.0", | ||||
"resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", | ||||
@@ -18085,6 +18122,14 @@ | |||||
"node": ">= 0.4.0" | "node": ">= 0.4.0" | ||||
} | } | ||||
}, | }, | ||||
"node_modules/utrie": { | |||||
"version": "1.0.2", | |||||
"resolved": "https://registry.npmjs.org/utrie/-/utrie-1.0.2.tgz", | |||||
"integrity": "sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==", | |||||
"dependencies": { | |||||
"base64-arraybuffer": "^1.0.2" | |||||
} | |||||
}, | |||||
"node_modules/uuid": { | "node_modules/uuid": { | ||||
"version": "3.4.0", | "version": "3.4.0", | ||||
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", | ||||
@@ -22819,6 +22864,11 @@ | |||||
} | } | ||||
} | } | ||||
}, | }, | ||||
"base64-arraybuffer": { | |||||
"version": "1.0.2", | |||||
"resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", | |||||
"integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==" | |||||
}, | |||||
"base64-js": { | "base64-js": { | ||||
"version": "1.5.1", | "version": "1.5.1", | ||||
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", | ||||
@@ -24328,6 +24378,14 @@ | |||||
"timsort": "^0.3.0" | "timsort": "^0.3.0" | ||||
} | } | ||||
}, | }, | ||||
"css-line-break": { | |||||
"version": "2.1.0", | |||||
"resolved": "https://registry.npmjs.org/css-line-break/-/css-line-break-2.1.0.tgz", | |||||
"integrity": "sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==", | |||||
"requires": { | |||||
"utrie": "^1.0.2" | |||||
} | |||||
}, | |||||
"css-loader": { | "css-loader": { | ||||
"version": "3.6.0", | "version": "3.6.0", | ||||
"resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.6.0.tgz", | "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.6.0.tgz", | ||||
@@ -26693,6 +26751,15 @@ | |||||
} | } | ||||
} | } | ||||
}, | }, | ||||
"html2canvas": { | |||||
"version": "1.4.1", | |||||
"resolved": "https://registry.npmjs.org/html2canvas/-/html2canvas-1.4.1.tgz", | |||||
"integrity": "sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==", | |||||
"requires": { | |||||
"css-line-break": "^2.1.0", | |||||
"text-segmentation": "^1.0.3" | |||||
} | |||||
}, | |||||
"htmlparser2": { | "htmlparser2": { | ||||
"version": "6.1.0", | "version": "6.1.0", | ||||
"resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", | "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", | ||||
@@ -33438,6 +33505,14 @@ | |||||
"require-main-filename": "^2.0.0" | "require-main-filename": "^2.0.0" | ||||
} | } | ||||
}, | }, | ||||
"text-segmentation": { | |||||
"version": "1.0.3", | |||||
"resolved": "https://registry.npmjs.org/text-segmentation/-/text-segmentation-1.0.3.tgz", | |||||
"integrity": "sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==", | |||||
"requires": { | |||||
"utrie": "^1.0.2" | |||||
} | |||||
}, | |||||
"text-table": { | "text-table": { | ||||
"version": "0.2.0", | "version": "0.2.0", | ||||
"resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", | ||||
@@ -34021,6 +34096,14 @@ | |||||
"integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", | ||||
"dev": true | "dev": true | ||||
}, | }, | ||||
"utrie": { | |||||
"version": "1.0.2", | |||||
"resolved": "https://registry.npmjs.org/utrie/-/utrie-1.0.2.tgz", | |||||
"integrity": "sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==", | |||||
"requires": { | |||||
"base64-arraybuffer": "^1.0.2" | |||||
} | |||||
}, | |||||
"uuid": { | "uuid": { | ||||
"version": "3.4.0", | "version": "3.4.0", | ||||
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", | ||||
@@ -15,6 +15,7 @@ | |||||
"@vant/area-data": "^1.2.2", | "@vant/area-data": "^1.2.2", | ||||
"axios": "^0.26.0", | "axios": "^0.26.0", | ||||
"core-js": "^3.6.5", | "core-js": "^3.6.5", | ||||
"html2canvas": "^1.4.1", | |||||
"nprogress": "^0.2.0", | "nprogress": "^0.2.0", | ||||
"vant": "^2.12.39", | "vant": "^2.12.39", | ||||
"vue": "^2.6.11", | "vue": "^2.6.11", | ||||
@@ -1,11 +1,11 @@ | |||||
/* | /* | ||||
* @Date: 2021-11-20 10:26:39 | * @Date: 2021-11-20 10:26:39 | ||||
* @LastEditors: JinxChen | * @LastEditors: JinxChen | ||||
* @LastEditTime: 2022-06-17 16:40:14 | |||||
* @LastEditTime: 2022-07-21 16:41:11 | |||||
* @FilePath: \AntpayFrontEnd\src\config\models.js | * @FilePath: \AntpayFrontEnd\src\config\models.js | ||||
* @description: | * @description: | ||||
*/ | */ | ||||
export const VERSION_MODEL = '1.0.7'; //版本号 | |||||
export const VERSION_MODEL = '1.0.8'; //版本号 | |||||
export const IMAGE_URL = { | export const IMAGE_URL = { | ||||
production: 'http://zfb.ssjlai.com/web/', | production: 'http://zfb.ssjlai.com/web/', | ||||
test: 'http://zfb.ssjlai.com/web/', | test: 'http://zfb.ssjlai.com/web/', | ||||
@@ -1,7 +1,7 @@ | |||||
/* | /* | ||||
* @Date: 2022-01-19 10:08:26 | * @Date: 2022-01-19 10:08:26 | ||||
* @LastEditors: JinxChen | * @LastEditors: JinxChen | ||||
* @LastEditTime: 2022-05-11 14:24:34 | |||||
* @LastEditTime: 2022-08-31 16:16:31 | |||||
* @FilePath: \AntpayFrontEnd\src\router\index.js | * @FilePath: \AntpayFrontEnd\src\router\index.js | ||||
* @description: | * @description: | ||||
*/ | */ | ||||
@@ -34,7 +34,10 @@ const routes = [ | |||||
// 高德地图测试demo | // 高德地图测试demo | ||||
{ path: '/gaode-point-in-ring', name: 'gaode-point-in-ring', component: resolve => require(['@/views/gaode-demo/PointInRing'], resolve),}, | { path: '/gaode-point-in-ring', name: 'gaode-point-in-ring', component: resolve => require(['@/views/gaode-demo/PointInRing'], resolve),}, | ||||
// webSocketDemo | |||||
{ path: '/websocket-demo', name: 'websocket-demo', component: resolve => require(['@/views/websocket/websocket-demo'], resolve),}, | |||||
// htmlCnavas demo | |||||
{ path: '/html-canvas-demo', name: 'html-canvas-demo', component: resolve => require(['@/views/htmlCanvas/htmlCanvasDemo'], resolve),}, | |||||
]; | ]; | ||||
@@ -0,0 +1,96 @@ | |||||
<!-- | |||||
* @Date: 2022-08-31 16:13:39 | |||||
* @LastEditors: JinxChen | |||||
* @LastEditTime: 2022-08-31 16:37:14 | |||||
* @FilePath: \AntpayFrontEnd\src\views\htmlCanvas\htmlCanvasDemo.vue | |||||
* @description: | |||||
--> | |||||
<template> | |||||
<div class="htmlCanvas"> | |||||
<van-button type="info" @click="onCreatPoster">生成海报</van-button> | |||||
<van-button type="info" @click="onSavePoster">保存海报</van-button> | |||||
<div id="poster" class="posterView"> | |||||
<p>2421144211414</p> | |||||
</div> | |||||
<!-- 生成海报提示 --> | |||||
<div id="result" class="result" v-show="isShowResultImg"></div> | |||||
</div> | |||||
</template> | |||||
<script> | |||||
import html2canvas from 'html2canvas'; | |||||
export default { | |||||
name:'', | |||||
data(){ | |||||
return { | |||||
isShowResultImg: false | |||||
} | |||||
}, | |||||
methods: { | |||||
onCreatPoster() { | |||||
this.isShowResultImg = true; | |||||
let options = { | |||||
useCORS: true, | |||||
ignoreElements:false, | |||||
scale: 7, //dpi 设置默认值,提高图片分辨率 | |||||
}; | |||||
let docItme = document.querySelector('#poster'); | |||||
html2canvas(docItme, options) | |||||
.then(canvas => { | |||||
let url = canvas.toDataURL('image/png') //将canvas转成base64图片格式 | |||||
document.querySelector('#result').innerHTML = | |||||
`<img src="${url}" alt="海报" width="100%" height="100%">` | |||||
}) | |||||
}, | |||||
onSavePoster() { | |||||
let that = this; | |||||
// let dpi = window.devicePixelRatio || 2 | |||||
this.$dialog.confirm({ | |||||
title: '温馨提示', | |||||
message: '是否保存ICCID截图' | |||||
}).then(() => { | |||||
that.downImage(); | |||||
}) | |||||
}, | |||||
downImage() { | |||||
let options = { | |||||
useCORS:true, // 使用跨域 | |||||
scale:6, | |||||
ignoreElements:(ele) =>{ //忽略的dom元素,保存海报就不会显示这个元素内容 | |||||
if(ele.id === 'name'){ | |||||
return true | |||||
} | |||||
} | |||||
}; | |||||
html2canvas(document.querySelector('#poster'),options).then(canvas=>{ | |||||
canvas.toBlob(function(blob){ | |||||
var a = document.createElement('a') | |||||
var url = window.URL.createObjectURL(blob) | |||||
var filename = '海报.png' | |||||
a.href = url | |||||
a.download = filename | |||||
a.click() | |||||
// 当图片文件加载完成释放这个url | |||||
window.URL.revokeObjectURL(url) | |||||
}) | |||||
}) | |||||
} | |||||
} | |||||
} | |||||
</script> | |||||
<style scoped lang="scss"> | |||||
.htmlCanvas { | |||||
.posterView { | |||||
height: 40px; | |||||
width: 100%; | |||||
display: flex; | |||||
justify-content: center; | |||||
align-items: center; | |||||
p { | |||||
margin: 5px; | |||||
font-size: 24px; | |||||
} | |||||
} | |||||
} | |||||
</style> |
@@ -0,0 +1,120 @@ | |||||
<!-- | |||||
* @Date: 2022-07-21 14:16:12 | |||||
* @LastEditors: JinxChen | |||||
* @LastEditTime: 2022-08-09 15:11:38 | |||||
* @FilePath: \AntpayFrontEnd\src\views\websocket\websocket-demo.vue | |||||
* @description: websocket 测试demo | |||||
--> | |||||
<template> | |||||
<div class="websocket-container"> | |||||
<van-field v-model="socketData" label="socket数据" type="textarea" rows="1" autosize /> | |||||
<van-button type="info" @click="onStartConnect">开始连接</van-button> | |||||
<van-button type="danger" @click="onStopConnect">停止连接</van-button> | |||||
</div> | |||||
</template> | |||||
<script> | |||||
export default { | |||||
name: 'websocket-demo', | |||||
data(){ | |||||
return { | |||||
wsUrl: 'ws://id.ssjlai.com/realtime_pos/api/WebSocket/Acceptor', | |||||
websock: '', | |||||
socketData: '', | |||||
} | |||||
}, | |||||
created() {}, | |||||
destroyed() { | |||||
this.websocketClose(); //离开路由之后断开websocket连接 | |||||
}, | |||||
methods: { | |||||
// 开始连接 | |||||
onStartConnect() { | |||||
this.initWebsocket(); | |||||
}, | |||||
// 关闭连接 | |||||
onStopConnect() { | |||||
this.websocketClose() | |||||
}, | |||||
// 初始化websocket连接 | |||||
initWebsocket() { | |||||
this.$toast.loading({ | |||||
message: '开始连接websocket', | |||||
}) | |||||
if(typeof(WebSocket) === "undefined"){ | |||||
this.$dialog.confirm({ | |||||
title: '出错了', | |||||
message: '您的浏览器不支持websocket' | |||||
}) | |||||
}else{ | |||||
// 实例化socket | |||||
this.websock = new WebSocket(this.wsUrl); | |||||
// 获取webSocket返回的信息 | |||||
this.websock.onmessage = this.websocketOnMessage; | |||||
// 打开连接 | |||||
this.websock.onopen = this.websocketOnOpen; | |||||
// 连接出错 | |||||
this.websock.onerror = this.websocketOnError; | |||||
// 关闭连接 | |||||
this.websock.onclose = this.websocketClose; | |||||
} | |||||
}, | |||||
// 打开websocket | |||||
websocketOnOpen() { | |||||
//连接建立之后执行send方法发送数据 | |||||
let actions = '864316050104798'; | |||||
this.websocketsend(actions); | |||||
this.$toast.loading({ | |||||
message: '开始连接websocket', | |||||
}) | |||||
console.log("开始连接"); | |||||
}, | |||||
// websocket出错 | |||||
websocketOnError() { | |||||
//失败重连 | |||||
//this.initWebSocket(); | |||||
this.$toast.clear(); | |||||
let that = this; | |||||
this.$dialog.confirm({ | |||||
title: '出错了', | |||||
message: '是否重新连接websocket' | |||||
}).then(() => { | |||||
that.initWebsocket(); | |||||
}).catch(() => { | |||||
that.websocketClose(); | |||||
}) | |||||
}, | |||||
// 关闭websocket连接 | |||||
websocketClose(e) { | |||||
this.websock.close(); | |||||
if(e) { | |||||
console.log('断开连接',e); | |||||
}; | |||||
console.log("关闭连接"); | |||||
}, | |||||
// 数据接收 | |||||
websocketOnMessage(e) { | |||||
//this.$toast.clear(); | |||||
const redata = JSON.parse(e.data); | |||||
console.log("获取到的数:;", redata); | |||||
}, | |||||
// 发送数据 | |||||
websocketsend(data){//数据发送 | |||||
this.websock.send(data); | |||||
}, | |||||
} | |||||
} | |||||
</script> | |||||
<style scoped lang="scss"> | |||||
.websocket-container { | |||||
height: 100vh; | |||||
width: 100%; | |||||
display: flex; | |||||
justify-content: center; | |||||
align-items: center; | |||||
flex-direction: column; | |||||
padding: 0 20px; | |||||
} | |||||
</style> |