LocationDemo.vue 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316
  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. // 从后端获取签名参数
  121. let res = await actCategoryService.getSignature();
  122. console.log('res', res);
  123. // 初始化参数
  124. const appId = 'wxa79f618dcaf992f7';
  125. const timestamp = res.timestamp;
  126. const nonceStr = res.nonceStr;
  127. const signature = res.signature;
  128. // 确保参数成功赋值后执行 wx.config
  129. if (timestamp && nonceStr && signature) {
  130. wx.config({
  131. debug: false, // 开启调试模式
  132. appId: appId, // 必填,公众号的唯一标识
  133. timestamp: timestamp, // 必填,生成签名的时间戳
  134. nonceStr: nonceStr, // 必填,生成签名的随机串
  135. signature: signature, // 必填,签名
  136. jsApiList: ['getLocation', 'chooseImage', 'uploadImage', 'getLocalImgData', 'downloadImage'] // 必填,需要使用的JS接口列表
  137. });
  138. wx.ready(function () {
  139. // 可以在这里调用其他API
  140. wx.openLocation({
  141. latitude: 0, // 纬度,浮点数,范围为90 ~ -90
  142. longitude: 0, // 经度,浮点数,范围为180 ~ -180。
  143. name: '', // 位置名
  144. address: '', // 地址详情说明
  145. scale: 1, // 地图缩放级别,整型值,范围从1~28。默认为最大
  146. infoUrl: '' // 在查看位置界面底部显示的超链接,可点击跳转
  147. });
  148. wx.checkJsApi({
  149. jsApiList: ['chooseImage', 'previewImage', 'uploadImage', 'downloadImage'],
  150. success: function (res) {
  151. if (res.checkResult.getLocation === true) {
  152. wxChooseImage();
  153. }
  154. }
  155. });
  156. });
  157. wx.error(function (res) {
  158. // config信息验证失败会执行error函数
  159. console.log('验证失败:', res);
  160. });
  161. } else {
  162. console.error('获取签名参数失败,无法配置 wx.config');
  163. }
  164. } catch (error) {
  165. console.error('初始化微信JS-SDK失败:', error);
  166. }
  167. },
  168. getLocation() {
  169. wx.getLocation({
  170. type: 'wgs84', // 默认为wgs84的gps坐标,如果要返回火星坐标,可传入'gcj02'
  171. success: (res)=> {
  172. let latitude = res.latitude; // 纬度,浮点数,范围为90 ~ -90
  173. let longitude = res.longitude; // 经度,浮点数,范围为180 ~ -180。
  174. console.log('纬度:', latitude, '经度:', longitude);
  175. // 处理你的逻辑
  176. this.inputForm.latitude = res.latitude
  177. this.inputForm.longitude = res.longitude
  178. console.log('纬度:', this.inputForm, '经度:', this.longitude);
  179. },
  180. fail: function (err) {
  181. // 调用失败
  182. console.error('获取位置失败:', err);
  183. }
  184. });
  185. },
  186. chooseImage(){
  187. wx.chooseImage({
  188. count: 1, // 最多可以选择的图片张数,默认9
  189. sizeType: ['original', 'compressed'], // original 原图,compressed 压缩图,默认二者都有
  190. sourceType: ['album', 'camera'], // album 从相册选图,camera 使用相机,默认二者都有
  191. success: function (res) {
  192. let localIds = res.localIds; // 返回选定照片的本地ID列表(手机上操作就是手机端的ID列表,是一个数组),localId可以作为img标签的src属性显示图片
  193. wx.uploadImage({
  194. localId: localIds[0], // 需要上传的图片的本地ID,由chooseImage接口获得
  195. isShowProgressTips: 1, // 默认为1,显示进度提示
  196. success: function (result) {
  197. let serverId = result.serverId; // 返回图片的服务器端ID
  198. // 可以将serverId传给后台,用于存放在自己服务器上
  199. }
  200. });
  201. },
  202. fail: function() {},
  203. complete: function() {}
  204. });
  205. },
  206. wxChooseImage() {
  207. wx.chooseImage({
  208. success: function(res) {
  209. var localId = res.localIds;
  210. function upload() {
  211. //图片上传
  212. wx.uploadImage({
  213. localId: localId[i],
  214. success: function(res) {
  215. var serverId = res.serverIdl;
  216. //图片上传完成之后,进行图片的下载,图片上传完成之后会返回一个在腾讯服务器的存放的图片的ID--->serverId
  217. wx.downloadImage({
  218. serverId: res.serverId, // 需要下载的图片的服务器端ID,由uploadImage接口获得
  219. isShowProgressTips: 1, // 默认为1,显示进度提示
  220. success: function (res) {
  221. var localId = res.localId; // 返回图片下载后的本地ID
  222. //通过下载的本地的ID获取的图片的base64数据,通过对数据的转换进行图片的保存
  223. wx.getLocalImgData({
  224. localId: localId, // 图片的localID
  225. success: function (res) {
  226. var localData = res.localData; // localData是图片的base64数据,可以用img标签显示
  227. //通过ajax来将base64数据转换成图片保存在本地
  228. $.ajax({
  229. });
  230. }
  231. });
  232. }
  233. });
  234. },
  235. fail: function(res) {
  236. }
  237. });
  238. }
  239. }
  240. });
  241. },
  242. boxClick () {
  243. this.show = true
  244. },
  245. goToFilm (sourceType) {
  246. this.show = false
  247. let _this = this
  248. console.log(sourceType);
  249. wx.chooseImage({
  250. count: 1, // 默认9
  251. sizeType: ['compressed'], // 可以指定是原图还是压缩图,默认二者都有 ['original', 'compressed']
  252. sourceType: sourceType, // 可以指定来源是相册还是相机,默认二者都有 ['album', 'camera']
  253. success: (res) => {
  254. var localIds = res.localIds;// 返回选定照片的本地ID列表,localId可以作为img标签的src属性显示图片
  255. var localId=localIds[0];
  256. wx.uploadImage({
  257. localId: localId,// 需要上传的图片的本地ID,由chooseImage接口获得
  258. isShowProgressTips: 1,// 默认为1,显示进度提示
  259. success: function (res) {
  260. var serverId = res.serverId;// 返回图片的服务器端ID
  261. wx.getLocalImgData({
  262. localId: localId,// 图片的localID
  263. success: function (res) {
  264. var localData = res.localData;// localData是图片的base64数据,可以用img标签显示
  265. _this.img1 = localData
  266. console.log('img1',_this.img1)
  267. }
  268. });
  269. }
  270. })
  271. // this.timer = window.setTimeout(() => {
  272. // wx.uploadImage({
  273. // localId: localId, // 需要上传的图片的本地ID,由chooseImage接口获得
  274. // isShowProgressTips: 1, // 默认为1,显示进度提示
  275. // success: (res) => {
  276. // let serverId = res.serverId; // 返回图片的服务器端ID
  277. //
  278. //
  279. // }
  280. // })
  281. // }, 100);
  282. },
  283. fail: (err) => {
  284. console.log('chooseImage失败', err);
  285. },
  286. complete: () => {
  287. console.log('chooseImage接口调用完成');
  288. }
  289. });
  290. },
  291. }
  292. }
  293. </script>
  294. <style>
  295. </style>