正在显示
6 个修改的文件
包含
184 行增加
和
16 行删除
@@ -2,6 +2,7 @@ var path = require('path') | @@ -2,6 +2,7 @@ var path = require('path') | ||
2 | var utils = require('./utils') | 2 | var utils = require('./utils') |
3 | var config = require('../config') | 3 | var config = require('../config') |
4 | var vueLoaderConfig = require('./vue-loader.conf') | 4 | var vueLoaderConfig = require('./vue-loader.conf') |
5 | +var webpack=require('webpack') | ||
5 | 6 | ||
6 | function resolve(dir) { | 7 | function resolve(dir) { |
7 | return path.join(__dirname, '..', dir) | 8 | return path.join(__dirname, '..', dir) |
@@ -65,5 +66,12 @@ module.exports = { | @@ -65,5 +66,12 @@ module.exports = { | ||
65 | ], | 66 | ], |
66 | } | 67 | } |
67 | ] | 68 | ] |
68 | - } | 69 | + }, |
70 | + plugins: [ | ||
71 | + new webpack.ProvidePlugin({ | ||
72 | + $:"jquery", | ||
73 | + jQuery:"jquery", | ||
74 | + "windows.jQuery":"jquery" | ||
75 | + }) | ||
76 | + ] | ||
69 | } | 77 | } |
@@ -5485,6 +5485,12 @@ | @@ -5485,6 +5485,12 @@ | ||
5485 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", | 5485 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", |
5486 | "dev": true | 5486 | "dev": true |
5487 | }, | 5487 | }, |
5488 | + "jquery": { | ||
5489 | + "version": "3.4.1", | ||
5490 | + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.4.1.tgz", | ||
5491 | + "integrity": "sha512-36+AdBzCL+y6qjw5Tx7HgzeGCzC81MDDgaUP8ld2zhx58HdqXGoBd+tHdrBMiyjGQs0Hxs/MLZTu/eHNJJuWPw==", | ||
5492 | + "dev": true | ||
5493 | + }, | ||
5488 | "js-base64": { | 5494 | "js-base64": { |
5489 | "version": "2.5.1", | 5495 | "version": "2.5.1", |
5490 | "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.5.1.tgz", | 5496 | "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.5.1.tgz", |
@@ -58,6 +58,7 @@ | @@ -58,6 +58,7 @@ | ||
58 | "function-bind": "^1.0.2", | 58 | "function-bind": "^1.0.2", |
59 | "html-webpack-plugin": "^2.28.0", | 59 | "html-webpack-plugin": "^2.28.0", |
60 | "http-proxy-middleware": "^0.19.1", | 60 | "http-proxy-middleware": "^0.19.1", |
61 | + "jquery": "^3.4.1", | ||
61 | "json-loader": "^0.5.4", | 62 | "json-loader": "^0.5.4", |
62 | "mockjs": "^1.0.1-beta3", | 63 | "mockjs": "^1.0.1-beta3", |
63 | "node-sass": "^4.5.0", | 64 | "node-sass": "^4.5.0", |
src/api/socket.js
0 → 100644
1 | +// import axios from "axios"; | ||
2 | +// let base = 'empt-location/userPayOrder'; | ||
3 | +// var socket; | ||
4 | +// | ||
5 | +// function openSocket(orderNum) { | ||
6 | +// console.log(orderNum); | ||
7 | +// if(typeof(WebSocket) == "undefined") { | ||
8 | +// console.log("您的浏览器不支持WebSocket"); | ||
9 | +// }else{ | ||
10 | +// console.log("您的浏览器支持WebSocket"); | ||
11 | +// //实现化WebSocket对象,指定要连接的服务器地址与端口 建立连接 | ||
12 | +// //等同于socket = new WebSocket("ws://localhost:8888/xxxx/im/25"); | ||
13 | +// //var socketUrl="${request.contextPath}/im/"+$("#userId").val(); | ||
14 | +// var socketUrl="http://localhost:10003/imserver/"+orderNum; | ||
15 | +// socketUrl=socketUrl.replace("https","ws").replace("http","ws"); | ||
16 | +// console.log(socketUrl); | ||
17 | +// if(socket!=null){ | ||
18 | +// socket.close(); | ||
19 | +// socket=null; | ||
20 | +// } | ||
21 | +// socket = new WebSocket(socketUrl); | ||
22 | +// //打开事件 | ||
23 | +// socket.onopen = function() { | ||
24 | +// console.log("websocket已打开"); | ||
25 | +// //socket.send("这是来自客户端的消息" + location.href + new Date()); | ||
26 | +// }; | ||
27 | +// //获得消息事件 | ||
28 | +// socket.onmessage = function(msg) { | ||
29 | +// | ||
30 | +// console.log(msg.data); | ||
31 | +// return msg; | ||
32 | +// //发现消息进入 开始处理前端触发逻辑 | ||
33 | +// }; | ||
34 | +// //关闭事件 | ||
35 | +// socket.onclose = function() { | ||
36 | +// console.log("websocket已关闭"); | ||
37 | +// }; | ||
38 | +// //发生了错误事件 | ||
39 | +// socket.onerror = function() { | ||
40 | +// console.log("websocket发生了错误"); | ||
41 | +// } | ||
42 | +// } | ||
43 | +// } | ||
44 | +// function sendMessage() { | ||
45 | +// if(typeof(WebSocket) == "undefined") { | ||
46 | +// console.log("您的浏览器不支持WebSocket"); | ||
47 | +// }else { | ||
48 | +// console.log("您的浏览器支持WebSocket"); | ||
49 | +// console.log('{"toUserId":"'+$("#toUserId").val()+'","contentText":"'+$("#contentText").val()+'"}'); | ||
50 | +// socket.send('{"toUserId":"'+$("#toUserId").val()+'","contentText":"'+$("#contentText").val()+'"}'); | ||
51 | +// } | ||
52 | +// } | ||
53 | +// | ||
54 | +// | ||
55 | +// export default { | ||
56 | +// openSocket | ||
57 | +// } | ||
58 | + | ||
59 | +const WSS_URL = `ws://localhost:10003/imserver` | ||
60 | +let Socket = '' | ||
61 | +let setIntervalWesocketPush = null | ||
62 | + | ||
63 | +/**建立连接 */ | ||
64 | +export function createSocket() { | ||
65 | + var socketUrl="http://localhost:10003/imserver"; | ||
66 | + socketUrl=socketUrl.replace("https","ws").replace("http","ws"); | ||
67 | + | ||
68 | + console.log(socketUrl); | ||
69 | + if (!Socket) { | ||
70 | + console.log('建立websocket连接') | ||
71 | + Socket = new WebSocket(socketUrl) | ||
72 | + Socket.onopen = onopenWS | ||
73 | + Socket.onmessage = onmessageWS | ||
74 | + Socket.onerror = onerrorWS | ||
75 | + Socket.onclose = oncloseWS | ||
76 | + } else { | ||
77 | + console.log('websocket已连接') | ||
78 | + } | ||
79 | +} | ||
80 | +/**打开WS之后发送心跳 */ | ||
81 | +export function onopenWS() { | ||
82 | + sendPing() //发送心跳 | ||
83 | +} | ||
84 | +/**连接失败重连 */ | ||
85 | +export function onerrorWS() { | ||
86 | + clearInterval(setIntervalWesocketPush) | ||
87 | + Socket.close() | ||
88 | + createSocket() //重连 | ||
89 | +} | ||
90 | +/**WS数据接收统一处理 */ | ||
91 | +export function onmessageWS(e) { | ||
92 | + console.log(e.data); | ||
93 | + window.dispatchEvent(new CustomEvent('onmessageWS', { | ||
94 | + detail: { | ||
95 | + data: e | ||
96 | + } | ||
97 | + })) | ||
98 | +} | ||
99 | +/**发送数据 | ||
100 | + * @param eventType | ||
101 | + */ | ||
102 | +export function sendWSPush(eventTypeArr) { | ||
103 | + const obj = { | ||
104 | + appId: 'airShip', | ||
105 | + cover: 0, | ||
106 | + event: eventTypeArr | ||
107 | + } | ||
108 | + if (Socket !== null && Socket.readyState === 3) { | ||
109 | + Socket.close() | ||
110 | + createSocket() //重连 | ||
111 | + } else if (Socket.readyState === 1) { | ||
112 | + Socket.send(JSON.stringify(obj)) | ||
113 | + } else if (Socket.readyState === 0) { | ||
114 | + setTimeout(() => { | ||
115 | + Socket.send(JSON.stringify(obj)) | ||
116 | + }, 3000) | ||
117 | + } | ||
118 | +} | ||
119 | +/**关闭WS */ | ||
120 | +export function oncloseWS() { | ||
121 | + clearInterval(setIntervalWesocketPush) | ||
122 | + console.log('websocket已断开') | ||
123 | +} | ||
124 | +/**发送心跳 */ | ||
125 | +export function sendPing() { | ||
126 | + Socket.send('ping') | ||
127 | + setIntervalWesocketPush = setInterval(() => { | ||
128 | + Socket.send('ping') | ||
129 | + }, 5000) | ||
130 | +} |
@@ -12,6 +12,7 @@ import Mock from './mock' | @@ -12,6 +12,7 @@ import Mock from './mock' | ||
12 | import i18n from './lang' | 12 | import i18n from './lang' |
13 | import 'font-awesome/css/font-awesome.min.css' | 13 | import 'font-awesome/css/font-awesome.min.css' |
14 | import ElementUI from 'element-ui' | 14 | import ElementUI from 'element-ui' |
15 | +import $ from 'jquery' | ||
15 | 16 | ||
16 | //定义一个全局过滤器实现日期格式化 | 17 | //定义一个全局过滤器实现日期格式化 |
17 | Vue.filter('datefmt',function(input,fmtstring){ | 18 | Vue.filter('datefmt',function(input,fmtstring){ |
@@ -20,7 +21,8 @@ Vue.filter('datefmt',function(input,fmtstring){ | @@ -20,7 +21,8 @@ Vue.filter('datefmt',function(input,fmtstring){ | ||
20 | 21 | ||
21 | }); | 22 | }); |
22 | 23 | ||
23 | - | 24 | +import * as socketApi from './api/socket' |
25 | +Vue.prototype.socketApi = socketApi | ||
24 | 26 | ||
25 | Vue.config.productionTip = false | 27 | Vue.config.productionTip = false |
26 | Mock.bootstrap(); | 28 | Mock.bootstrap(); |
@@ -67,7 +67,7 @@ | @@ -67,7 +67,7 @@ | ||
67 | <el-input type="number" style="width:200px" oninput ="value=value.replace(/[^0-9.]/g,'')" v-model.number="waterForm.payFees"></el-input> | 67 | <el-input type="number" style="width:200px" oninput ="value=value.replace(/[^0-9.]/g,'')" v-model.number="waterForm.payFees"></el-input> |
68 | </el-form-item> | 68 | </el-form-item> |
69 | <el-form-item v-else label="充值金额" prop="payFees"> | 69 | <el-form-item v-else label="充值金额" prop="payFees"> |
70 | - <el-input type="number" style="width: 802px" oninput ="value=value.replace(/[^0-9]/g,'')" v-model.number="waterForm.payFees"></el-input> | 70 | + <el-input type="number" style="width: 802px" oninput ="value=value.replace(/[^0-9.]/g,'')" v-model.number="waterForm.payFees"></el-input> |
71 | </el-form-item> | 71 | </el-form-item> |
72 | </el-col> | 72 | </el-col> |
73 | </el-form> | 73 | </el-form> |
@@ -90,24 +90,24 @@ | @@ -90,24 +90,24 @@ | ||
90 | </el-main> | 90 | </el-main> |
91 | </el-container> | 91 | </el-container> |
92 | </template> | 92 | </template> |
93 | -<style scoped> | ||
94 | - | ||
95 | -</style> | ||
96 | <script> | 93 | <script> |
97 | - import loginUserInfo from '@/api/base' | 94 | + import loginUserInfo from '@/api/base'; |
98 | import {getList, add, qrCode} from '../../api/empt/userPayOrder'; | 95 | import {getList, add, qrCode} from '../../api/empt/userPayOrder'; |
99 | - import ElCol from "element-ui/packages/col/src/col" | 96 | + import ElCol from "element-ui/packages/col/src/col"; |
100 | // import QRCode from 'qrcodejs2' | 97 | // import QRCode from 'qrcodejs2' |
101 | - import Vue from 'vue' | ||
102 | - import VueQriously from 'vue-qriously' | 98 | + import Vue from 'vue'; |
99 | + import VueQriously from 'vue-qriously'; | ||
100 | + import {createSocket, sendWSPush, onmessageWS} from "../../api/socket"; | ||
103 | Vue.use(VueQriously) | 101 | Vue.use(VueQriously) |
102 | + import ElButton from "../../../node_modules/element-ui/packages/button/src/button.vue"; | ||
104 | export default { | 103 | export default { |
105 | components: {ElCol}, | 104 | components: {ElCol}, |
105 | + components: {ElButton}, | ||
106 | data() { | 106 | data() { |
107 | return{ | 107 | return{ |
108 | loading:false, | 108 | loading:false, |
109 | filters:{ | 109 | filters:{ |
110 | - roomNumber:'' | 110 | + roomNumber:'三号楼一层卫生间' |
111 | }, | 111 | }, |
112 | electricityForm:{ | 112 | electricityForm:{ |
113 | overdraftthreshold:'', | 113 | overdraftthreshold:'', |
@@ -139,7 +139,8 @@ | @@ -139,7 +139,8 @@ | ||
139 | shuibiao:'', | 139 | shuibiao:'', |
140 | dianbiao:'', | 140 | dianbiao:'', |
141 | dialogVisible:false, | 141 | dialogVisible:false, |
142 | - Qrcode: '' | 142 | + Qrcode: '', |
143 | + resultMsg:'' | ||
143 | } | 144 | } |
144 | }, | 145 | }, |
145 | methods:{ | 146 | methods:{ |
@@ -201,16 +202,37 @@ | @@ -201,16 +202,37 @@ | ||
201 | this.$refs.waterForm.validate((valid) => { | 202 | this.$refs.waterForm.validate((valid) => { |
202 | if (valid) { | 203 | if (valid) { |
203 | this.$confirm('确认充值吗?', '提示', {}).then(() => { | 204 | this.$confirm('确认充值吗?', '提示', {}).then(() => { |
204 | - this.waterForm.realName = loginUserInfo.username; | ||
205 | - console.log(loginUserInfo.username) | 205 | + this.waterForm.realName = JSON.parse(sessionStorage.getItem('user')).username; |
206 | let para = Object.assign({}, this.waterForm); | 206 | let para = Object.assign({}, this.waterForm); |
207 | this.loading=true; | 207 | this.loading=true; |
208 | qrCode(para).then((res) => { | 208 | qrCode(para).then((res) => { |
209 | this.addLoading = false; | 209 | this.addLoading = false; |
210 | if (res.data.code == 200) { | 210 | if (res.data.code == 200) { |
211 | this.dialogVisible=true; | 211 | this.dialogVisible=true; |
212 | - this.Qrcode = res.data.data; | 212 | + this.Qrcode = res.data.url; |
213 | this.loading=false; | 213 | this.loading=false; |
214 | + // var socket_ = openSocket.openSocket(res.data.data.orderNum); | ||
215 | + createSocket(); | ||
216 | + | ||
217 | + // 监听ws数据响应 | ||
218 | + const getDataFunc = function(e) { | ||
219 | + console.log(e.detail.data.data) | ||
220 | + console.log(res.data.data.orderNumber) | ||
221 | + console.log(e.detail.data.data.orderNumber) | ||
222 | + if (e.detail.data.data!==undefined){ | ||
223 | + let resultMessage = JSON.parse(e.detail.data.data); | ||
224 | + if(resultMessage.orderNumber===res.data.data.orderNumber){ | ||
225 | + if (resultMessage.success === "Y"){ | ||
226 | + this.dialogVisible=false; | ||
227 | + alert("支付成功") | ||
228 | + }else { | ||
229 | + this.dialogVisible=false; | ||
230 | + alert("支付失败") | ||
231 | + } | ||
232 | + } | ||
233 | + } | ||
234 | + } | ||
235 | + window.addEventListener('onmessageWS', getDataFunc) | ||
214 | }else { | 236 | }else { |
215 | this.$message({ | 237 | this.$message({ |
216 | message: '网络异常', | 238 | message: '网络异常', |
@@ -223,7 +245,6 @@ | @@ -223,7 +245,6 @@ | ||
223 | }); | 245 | }); |
224 | }, | 246 | }, |
225 | }, | 247 | }, |
226 | - | ||
227 | mounted(){ | 248 | mounted(){ |
228 | 249 | ||
229 | } | 250 | } |
-
请 注册 或 登录 后发表评论