LocationDemo.vue 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318
  1. <template>
  2. <view>
  3. <u--form :model="inputForm" labelWidth="100px" class="u-form" labelPosition="left"
  4. ref="inputForm">
  5. <u-form-item label="地理位置" prop="actualDrawerEmailAddress"
  6. :rules="[
  7. ]">
  8. <view class="button-container">
  9. <button @click="getLocation">获取位置</button>
  10. </view>
  11. </u-form-item>
  12. <u-form-item label="经度" prop="longitude" borderBottom>
  13. <u--input v-model="inputForm.longitude" clearable></u--input>
  14. </u-form-item>
  15. <u-form-item label="纬度" prop="latitude" borderBottom>
  16. <u--input v-model="inputForm.latitude" clearable></u--input>
  17. </u-form-item>
  18. <!-- <div class="container">-->
  19. <!-- <van-popup v-model="show" round position="bottom" :style="{ height: '30%' }">-->
  20. <!-- <button class="clickBtn" @click="goToFilm('camera')">拍摄</button>-->
  21. <!-- <button class="clickBtn" @click="goToFilm('album')">从相册选择</button>-->
  22. <!-- </van-popup>-->
  23. <!-- <div class="img_box">-->
  24. <!-- <div class="left_box" @click="boxClick">-->
  25. <!-- <u&#45;&#45;image width="150" height="75" :src="img1" />-->
  26. <!-- </div>-->
  27. <!-- </div>-->
  28. <!-- </div>-->
  29. <view class="u-demo-block__content">
  30. <view class="u-page__upload-item">
  31. <u-upload
  32. :fileList="fileList1"
  33. @afterRead="afterRead"
  34. @delete="deletePic"
  35. name="1"
  36. multiple
  37. :maxCount="10"
  38. ></u-upload>
  39. </view>
  40. </view>
  41. </u--form>
  42. </view>
  43. </template>
  44. <!--<script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>-->
  45. <script>
  46. import actCategoryService from "@/api/flowable/actCategoryService"
  47. import wx from 'weixin-js-sdk';
  48. import UImage from "../../../uni_modules/uview-ui/components/u--image/u--image";
  49. export default {
  50. name: 'LocationComponent',
  51. components: {UImage},
  52. mounted() {
  53. this.getConfig()
  54. },
  55. data () {
  56. return {
  57. fileList1: [],
  58. inputForm:{
  59. latitude:'',
  60. longitude:'',
  61. files:[]
  62. },
  63. show: false,//是否弹窗
  64. img1: '',
  65. img2: 'https://img01.yzcdn.cn/vant/cat.jpeg',
  66. imgFlag: '',//点击的是哪张图片
  67. timer: null
  68. }
  69. },
  70. methods: {
  71. // 删除图片
  72. deletePic(event) {
  73. this[`fileList${event.name}`].splice(event.index, 1)
  74. },
  75. // 新增图片
  76. async afterRead(event) {
  77. // 当设置 mutiple 为 true 时, file 为数组格式,否则为对象格式
  78. let lists = [].concat(event.file)
  79. let fileListLen = this[`fileList${event.name}`].length
  80. lists.map((item) => {
  81. this[`fileList${event.name}`].push({
  82. ...item,
  83. status: 'uploading',
  84. message: '上传中'
  85. })
  86. })
  87. for (let i = 0; i < lists.length; i++) {
  88. // const result = await this.uploadFilePromise(lists[i].url)
  89. let item = this[`fileList${event.name}`][fileListLen]
  90. this[`fileList${event.name}`].splice(fileListLen, 1, Object.assign(item, {
  91. status: 'success',
  92. message: '',
  93. url: lists[i].url
  94. }))
  95. fileListLen++
  96. }
  97. },
  98. uploadFilePromise(url) {
  99. return new Promise((resolve, reject) => {
  100. let a = uni.uploadFile({
  101. url: 'http://www.example.com/upload', // 仅为示例,非真实的接口地址
  102. filePath: url,
  103. name: 'file',
  104. formData: {
  105. user: 'test'
  106. },
  107. success: (res) => {
  108. setTimeout(() => {
  109. resolve(res.data.data)
  110. }, 1000)
  111. }
  112. });
  113. })
  114. },
  115. getConfig() {
  116. this.initWeixin();
  117. },
  118. async initWeixin() {
  119. try {
  120. let urlData = window.location.href.split('#')[0]
  121. console.log('123',urlData)
  122. // 从后端获取签名参数
  123. let res = await actCategoryService.getSignature(urlData);
  124. console.log('res', res);
  125. // 初始化参数
  126. const appId = 'wx96885ba58675d910';
  127. const timestamp = res.timestamp;
  128. const nonceStr = res.nonceStr;
  129. const signature = res.signature;
  130. // 确保参数成功赋值后执行 wx.config
  131. if (timestamp && nonceStr && signature) {
  132. wx.config({
  133. debug: false, // 开启调试模式
  134. appId: appId, // 必填,公众号的唯一标识
  135. timestamp: timestamp, // 必填,生成签名的时间戳
  136. nonceStr: nonceStr, // 必填,生成签名的随机串
  137. signature: signature, // 必填,签名
  138. jsApiList: ['getLocation', 'chooseImage', 'uploadImage', 'getLocalImgData', 'downloadImage'] // 必填,需要使用的JS接口列表
  139. });
  140. wx.ready(function () {
  141. // 可以在这里调用其他API
  142. wx.openLocation({
  143. latitude: 0, // 纬度,浮点数,范围为90 ~ -90
  144. longitude: 0, // 经度,浮点数,范围为180 ~ -180。
  145. name: '', // 位置名
  146. address: '', // 地址详情说明
  147. scale: 1, // 地图缩放级别,整型值,范围从1~28。默认为最大
  148. infoUrl: '' // 在查看位置界面底部显示的超链接,可点击跳转
  149. });
  150. wx.checkJsApi({
  151. jsApiList: ['chooseImage', 'previewImage', 'uploadImage', 'downloadImage'],
  152. success: function (res) {
  153. if (res.checkResult.getLocation === true) {
  154. wxChooseImage();
  155. }
  156. }
  157. });
  158. });
  159. wx.error(function (res) {
  160. // config信息验证失败会执行error函数
  161. console.log('验证失败:', res);
  162. });
  163. } else {
  164. console.error('获取签名参数失败,无法配置 wx.config');
  165. }
  166. } catch (error) {
  167. console.error('初始化微信JS-SDK失败:', error);
  168. }
  169. },
  170. getLocation() {
  171. wx.getLocation({
  172. type: 'wgs84', // 默认为wgs84的gps坐标,如果要返回火星坐标,可传入'gcj02'
  173. success: (res)=> {
  174. let latitude = res.latitude; // 纬度,浮点数,范围为90 ~ -90
  175. let longitude = res.longitude; // 经度,浮点数,范围为180 ~ -180。
  176. console.log('纬度:', latitude, '经度:', longitude);
  177. // 处理你的逻辑
  178. this.inputForm.latitude = res.latitude
  179. this.inputForm.longitude = res.longitude
  180. console.log('纬度:', this.inputForm, '经度:', this.longitude);
  181. },
  182. fail: function (err) {
  183. // 调用失败
  184. console.error('获取位置失败:', err);
  185. }
  186. });
  187. },
  188. chooseImage(){
  189. wx.chooseImage({
  190. count: 1, // 最多可以选择的图片张数,默认9
  191. sizeType: ['original', 'compressed'], // original 原图,compressed 压缩图,默认二者都有
  192. sourceType: ['album', 'camera'], // album 从相册选图,camera 使用相机,默认二者都有
  193. success: function (res) {
  194. let localIds = res.localIds; // 返回选定照片的本地ID列表(手机上操作就是手机端的ID列表,是一个数组),localId可以作为img标签的src属性显示图片
  195. wx.uploadImage({
  196. localId: localIds[0], // 需要上传的图片的本地ID,由chooseImage接口获得
  197. isShowProgressTips: 1, // 默认为1,显示进度提示
  198. success: function (result) {
  199. let serverId = result.serverId; // 返回图片的服务器端ID
  200. // 可以将serverId传给后台,用于存放在自己服务器上
  201. }
  202. });
  203. },
  204. fail: function() {},
  205. complete: function() {}
  206. });
  207. },
  208. wxChooseImage() {
  209. wx.chooseImage({
  210. success: function(res) {
  211. var localId = res.localIds;
  212. function upload() {
  213. //图片上传
  214. wx.uploadImage({
  215. localId: localId[i],
  216. success: function(res) {
  217. var serverId = res.serverIdl;
  218. //图片上传完成之后,进行图片的下载,图片上传完成之后会返回一个在腾讯服务器的存放的图片的ID--->serverId
  219. wx.downloadImage({
  220. serverId: res.serverId, // 需要下载的图片的服务器端ID,由uploadImage接口获得
  221. isShowProgressTips: 1, // 默认为1,显示进度提示
  222. success: function (res) {
  223. var localId = res.localId; // 返回图片下载后的本地ID
  224. //通过下载的本地的ID获取的图片的base64数据,通过对数据的转换进行图片的保存
  225. wx.getLocalImgData({
  226. localId: localId, // 图片的localID
  227. success: function (res) {
  228. var localData = res.localData; // localData是图片的base64数据,可以用img标签显示
  229. //通过ajax来将base64数据转换成图片保存在本地
  230. $.ajax({
  231. });
  232. }
  233. });
  234. }
  235. });
  236. },
  237. fail: function(res) {
  238. }
  239. });
  240. }
  241. }
  242. });
  243. },
  244. boxClick () {
  245. this.show = true
  246. },
  247. goToFilm (sourceType) {
  248. this.show = false
  249. let _this = this
  250. console.log(sourceType);
  251. wx.chooseImage({
  252. count: 1, // 默认9
  253. sizeType: ['compressed'], // 可以指定是原图还是压缩图,默认二者都有 ['original', 'compressed']
  254. sourceType: sourceType, // 可以指定来源是相册还是相机,默认二者都有 ['album', 'camera']
  255. success: (res) => {
  256. var localIds = res.localIds;// 返回选定照片的本地ID列表,localId可以作为img标签的src属性显示图片
  257. var localId=localIds[0];
  258. wx.uploadImage({
  259. localId: localId,// 需要上传的图片的本地ID,由chooseImage接口获得
  260. isShowProgressTips: 1,// 默认为1,显示进度提示
  261. success: function (res) {
  262. var serverId = res.serverId;// 返回图片的服务器端ID
  263. wx.getLocalImgData({
  264. localId: localId,// 图片的localID
  265. success: function (res) {
  266. var localData = res.localData;// localData是图片的base64数据,可以用img标签显示
  267. _this.img1 = localData
  268. console.log('img1',_this.img1)
  269. }
  270. });
  271. }
  272. })
  273. // this.timer = window.setTimeout(() => {
  274. // wx.uploadImage({
  275. // localId: localId, // 需要上传的图片的本地ID,由chooseImage接口获得
  276. // isShowProgressTips: 1, // 默认为1,显示进度提示
  277. // success: (res) => {
  278. // let serverId = res.serverId; // 返回图片的服务器端ID
  279. //
  280. //
  281. // }
  282. // })
  283. // }, 100);
  284. },
  285. fail: (err) => {
  286. console.log('chooseImage失败', err);
  287. },
  288. complete: () => {
  289. console.log('chooseImage接口调用完成');
  290. }
  291. });
  292. },
  293. }
  294. }
  295. </script>
  296. <style>
  297. </style>