index.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370
  1. <template>
  2. <view>
  3. <!-- <web-view src="http://61.177.40.178:8000" @message="handleMessage" id="myWebview"></web-view> -->
  4. <!-- <web-view src="http://192.168.0.145:4200" @message="handleMessage" id="myWebview"></web-view> -->
  5. <web-view src="http://120.192.74.74:7500" @message="handleMessage" id="myWebview"></web-view>
  6. <!-- <button @click="downloadFile">点击下载文件</button> -->
  7. </view>
  8. </template>
  9. <!-- -->
  10. <!-- <script src="../../js/uni-webview"></script> -->
  11. <script>
  12. // import {hmScanCode, ScanOptions, ScanResult} from '@/uni_modules/lime-scan';
  13. // const scanner = uni.requireNativePlugin('Ba-Scanner')
  14. const scanner = uni.requireNativePlugin('Ba-Scanner')
  15. export default {
  16. data() {
  17. return {
  18. result: '',
  19. }
  20. },
  21. onReady() {
  22. },
  23. onLaunch() {
  24. },
  25. onLoad: function() {
  26. },
  27. methods: {
  28. handleMessage(evt) {
  29. console.log('原始信息:' + evt)
  30. console.log('接收到的消息:' + JSON.stringify(evt));
  31. if (evt) {
  32. // let data={};
  33. let data = JSON.parse(evt.detail.data);
  34. console.log('json解析:' + JSON.stringify(data));
  35. if (data && data.content && data.title && data.content != '' && data.title != '') {
  36. uni.createPushMessage({
  37. content: data.content, // 推送内容
  38. title: data.title, // 推送标题
  39. sound: "system",
  40. success: function(res) {
  41. console.log('推送成功', res);
  42. },
  43. fail: function(err) {
  44. console.log('推送失败', err);
  45. }
  46. });
  47. } else if (data && data.type && data.type == 'file' && data.url && data.url != '' && data.fileName &&
  48. data.fileName != '' && data.token && data.token != '') {
  49. //判断是否为post请求
  50. let isPost = false;
  51. try {
  52. let urlType = data.urlType;
  53. let postRequest = data.postRequest;
  54. if (urlType == 'POST') {
  55. isPost = true;
  56. }
  57. } catch (e) {
  58. isPost = false;
  59. }
  60. let url = data.url;
  61. let fileName = data.fileName;
  62. let token = data.token;
  63. if (!isPost) {
  64. console.log("移动端文件下载通用方式")
  65. console.log('url:' + url);
  66. this.downloadFile(url, fileName, token);
  67. } else {
  68. let postRequest = data.postRequest;
  69. this.downloadPostFile(url, fileName, token, postRequest)
  70. }
  71. } else if (data && data.type && data.type == 'scanCode') {
  72. this.currentWebView = plus.webview.currentWebview();
  73. console.log('66666', this.currentWebView);
  74. // this.scancode();
  75. // this.scan();
  76. this.onscan();
  77. } else {
  78. return;
  79. }
  80. }
  81. },
  82. // downloadFile(url) {
  83. // uni.downloadFile({
  84. // url: url,
  85. // success: function(res) {
  86. // if (res.statusCode === 200) {
  87. // console.log('下载成功:' + JSON.stringify(res));
  88. // uni.saveFile({
  89. // tempFilePath: res.tempFilePath,
  90. // success: function(res) {
  91. // var savedFilePath = res.savedFilePath;
  92. // console.log("download:" + savedFilePath)
  93. // uni.openDocument({
  94. // filePath: savedFilePath
  95. // });
  96. // }
  97. // });
  98. // }
  99. // }
  100. // });
  101. // },
  102. // scancode
  103. scancode() {
  104. // 支付宝扫码——需付费(可免费试用3月)
  105. // var mpaasScanModule = uni.requireNativePlugin("Mpaas-Scan-Module");
  106. // mpaasScanModule.mpaasScan({
  107. // // 扫码识别类型,参数可多选,qrCode、barCode,不设置,默认识别所有
  108. // 'scanType': ['qrCode', 'barCode'],
  109. // // 是否隐藏相册,默认false不隐藏
  110. // 'hideAlbum': false
  111. // },
  112. // (ret) => {
  113. // if (ret.resp_code == '1000') {
  114. // console.log('条码内容:' + ret.resp_result);
  115. // console.log('11', new Date());
  116. // uni.hideLoading();
  117. // let sendMsg;
  118. // if (ret.resp_result == null) {
  119. // // console.log('12');
  120. // sendMsg = '{}';
  121. // } else if (typeof ret.resp_result === 'object') {
  122. // // console.log('34');
  123. // sendMsg = ret.resp_result;
  124. // } else {
  125. // if (ret.resp_result.includes('http') || !ret.resp_result.includes("{")) {
  126. // sendMsg = '{}';
  127. // // console.log('56');
  128. // } else {
  129. // sendMsg = ret.resp_result;
  130. // // console.log('78');
  131. // }
  132. // }
  133. // console.log('sendMsg', sendMsg);
  134. // console.log('1212',plus.webview);
  135. // console.log('3232',plus.webview.all());
  136. // setTimeout(()=>{
  137. // plus.webview.getDisplayWebview()[0].evalJS(`window.postJS(${sendMsg})`);
  138. // },500)
  139. // }
  140. // if (ret.resp_code == '10') {
  141. // setTimeout(()=>{
  142. // plus.webview.currentWebview().evalJS(`window.postJS('fail')`);
  143. // },500)
  144. // }
  145. // if (ret.resp_code == '11') {
  146. // setTimeout(()=>{
  147. // plus.webview.currentWebview().evalJS(`window.postJS('{}')`);
  148. // },500)
  149. // }
  150. // // uni.showModal({
  151. // // title: "弹窗标题",
  152. // // // 返回值中,resp_code 表示返回结果值,10:用户取消,11:其他错误,1000:成功
  153. // // // 返回值中,resp_message 表示返回结果信息
  154. // // // 返回值中,resp_result 表示扫码结果,只有成功才会有返回
  155. // // content: JSON.stringify(ret),
  156. // // showCancel: false,
  157. // // confirmText: "确定"
  158. // // })
  159. // })
  160. // uni.showLoading({
  161. // title:"...",
  162. // mask:true
  163. // })
  164. console.log('10', new Date());
  165. // 官方推荐扫码api(识别率较低)
  166. // uni.scanCode({
  167. // onlyFromCamera: true,
  168. // scanType: ['qrCode'],
  169. // success: function(res) {
  170. // console.log('条码类型:' + res.scanType);
  171. // console.log('条码内容:' + res.result);
  172. // console.log('11', new Date());
  173. // uni.hideLoading();
  174. // let sendMsg;
  175. // if (res.result == null) {
  176. // // console.log('12');
  177. // sendMsg = '{}';
  178. // } else if (typeof res.result === 'object') {
  179. // // console.log('34');
  180. // sendMsg = res.result;
  181. // } else {
  182. // if (res.result.includes('http') || !res.result.includes("{")) {
  183. // sendMsg = '{}';
  184. // // console.log('56');
  185. // } else {
  186. // sendMsg = res.result;
  187. // // console.log('78');
  188. // }
  189. // }
  190. // console.log('sendMsg', sendMsg);
  191. // plus.webview.getDisplayWebview()[0].evalJS(`window.postJS(${sendMsg})`);
  192. // // try{
  193. // // JSON.parse(JSON.stringify(res.result));
  194. // // console.log('45');
  195. // // plus.webview.getDisplayWebview()[0].evalJS(`window.postJS(${res.result})`);
  196. // // }catch(e){
  197. // // //TODO handle the exception
  198. // // console.log('e',e);
  199. // // plus.webview.getDisplayWebview()[0].evalJS(`window.postJS('{}')`);
  200. // // }
  201. // },
  202. // fail: function(res) {
  203. // plus.webview.getDisplayWebview()[0].evalJS(`window.postJS('fail')`);
  204. // }
  205. // });
  206. // this.onScan();
  207. },
  208. //扫码
  209. onscan() { //默认界面(支持自定义界面)
  210. scanner.onScan({
  211. isContinuous: false,
  212. barcodeFormats: ["QR Code"],
  213. scanTimeSpace: 2000,
  214. isShowVibrate: true,
  215. isShowBeep: false,
  216. zoom: true,
  217. isShowToast: false,
  218. hintText:"",
  219. },
  220. (ret) => {
  221. console.log(ret)
  222. if (ret.code == "success") {
  223. let sendMsg;
  224. if (ret.result === null) {
  225. sendMsg = '{}'
  226. } else if (typeof ret.result === 'object') {
  227. sendMsg = ret.result;
  228. } else {
  229. if (ret.result.includes('http') || !ret.result.includes("{")) {
  230. sendMsg = '{}';
  231. // console.log('56');
  232. } else {
  233. sendMsg = ret.result;
  234. // console.log('78');
  235. }
  236. }
  237. setTimeout(()=>{
  238. plus.webview.getDisplayWebview()[0].evalJS(`window.postJS(${sendMsg})`);
  239. },500)
  240. } else {
  241. // setTimeout()
  242. plus.webview.getDisplayWebview()[0].evalJS(`window.postJS('fail')`);
  243. // console.log('8888',plus.webview.currentWebview());
  244. }
  245. });
  246. },
  247. downloadFile(_url, _name, _token) {
  248. uni.downloadFile({
  249. url: _url, //文件链接
  250. // header: {
  251. // "token": _token
  252. // },
  253. success: (res) => {
  254. if (res.statusCode === 200) {
  255. console.log("res:", res)
  256. uni.saveFile({
  257. tempFilePath: res.tempFilePath,
  258. success: function(res) {
  259. var savedFilePath = res.savedFilePath;
  260. let lastSlashIndex = savedFilePath.lastIndexOf("/");
  261. let name_index = _name.lastIndexOf('.');
  262. let fileName = _name.slice(0, name_index) + Date.now() + _name
  263. .slice(name_index, _name.length)
  264. var newFilePath = savedFilePath.slice(0, lastSlashIndex + 1) +
  265. fileName;
  266. console.log("download:" + savedFilePath)
  267. console.log('修改之后的文件路径:' + newFilePath)
  268. //修改名称
  269. plus.io.resolveLocalFileSystemURL(savedFilePath, entry => {
  270. entry.getParent(_oldFile => {
  271. entry.moveTo(_oldFile, '/' + fileName,
  272. newFilePath => {
  273. console.log('文件名称替换完成');
  274. // console.log('000',newFilePath.fullPath);
  275. })
  276. })
  277. })
  278. setTimeout(() => {
  279. uni.openDocument({
  280. filePath: newFilePath,
  281. success() {
  282. console.log('打开成功');
  283. },
  284. fail() {
  285. console.log('打开失败');
  286. }
  287. });
  288. }, 1000)
  289. }
  290. });
  291. }
  292. },
  293. fail: (err) => {
  294. uni.showToast({
  295. icon: 'none',
  296. mask: true,
  297. title: '失败请重新下载',
  298. });
  299. },
  300. })
  301. },
  302. downloadPostFile(_url, _name, _token, _data) {
  303. let name_index = _name.lastIndexOf('.');
  304. let fileName = "_doc/uniapp_save/" + _name.slice(0, name_index) + Date.now() + _name
  305. .slice(name_index, _name.length);
  306. console.log('文件路径:' + fileName)
  307. var dtask = plus.downloader.createDownload(_url, {
  308. filename: fileName, //利用保存路径,实现下载文件的重命名
  309. method: 'POST',
  310. data: _data
  311. }, function(d, status) {
  312. console.log("d====>", d)
  313. console.log("status====>", status)
  314. //d为下载的文件对象
  315. if (status == 200) {
  316. // var fileSaveUrl = plus.io.convertLocalFileSystemURL(d.filename);
  317. plus.runtime.openFile(d.filename); //选择软件打开文件
  318. } else {
  319. //下载失败
  320. plus.downloader.clear(); //清除下载任务
  321. reject({
  322. data: d,
  323. status
  324. })
  325. }
  326. })
  327. dtask.setRequestHeader("token", _token)
  328. dtask.setRequestHeader("Content-Type", "application/json")
  329. dtask.start(); //执行下载
  330. },
  331. }
  332. }
  333. </script>
  334. <style>
  335. </style>