金诚优选前端代码
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

994 lines
29 KiB

  1. <template>
  2. <view>
  3. <view id="find">
  4. <view class="search-box">
  5. <view class="search">
  6. <view class="iconfont icon-sousuo"></view>
  7. <input type="text" placeholder="搜索关键词" @input="changeKeywords" @confirm="jumpfind" />
  8. </view>
  9. </view>
  10. <view class="banner" v-if="banner.length">
  11. <swiper indicator-dots="true" autoplay="true" circular="true" style="height: 180px">
  12. <swiper-item v-for="(item, index) in banner" :key="index" @tap="jumpSearch" :data-key="item.keywords">
  13. <image :src="item.img"></image>
  14. </swiper-item>
  15. </swiper>
  16. </view>
  17. <view class="menu-box">
  18. <view class="navbar">
  19. <view class="item" :class="activeIndex == 0? 'active' : ''" @tap="tabClick" data-index="0" style="flex: .5">
  20. <span>全部</span>
  21. </view>
  22. <view class="item" :class="activeIndex == index+1 ? 'active' : ''" @tap="tabClick" v-for="(item, index) in conditions.categories" :key="index" v-if="index < 2" :data-index="index+1" :data-id="item.id">
  23. <span>{{item.name}}</span>
  24. </view>
  25. <view class="item" :class="activeIndex == 3 ? 'active' : ''" @tap="moreClick" style="flex: .8">
  26. <span>更多
  27. <view class="iconfont icon-jiantou"></view>
  28. </span>
  29. </view>
  30. <view class="item" @tap="filterClick" style="flex: .5">
  31. <span>筛选
  32. <view class="iconfont icon-filter"></view>
  33. </span>
  34. </view>
  35. </view>
  36. <!-- 点击更多弹出-->
  37. <view class="more-list" v-if="isMore && conditions.categories.length">
  38. <view class="item" :class="item.id == category_id ? 'active' : ''" v-for="(item, index) in conditions.categories" :key="index" @tap="changeCategories" :data-index="index" :data-id="item.id">{{item.name}}</view>
  39. </view>
  40. </view>
  41. <view class="content-box" v-if="init">
  42. <view v-if="list[0].length">
  43. <view v-for="(items, idx) in list" :key="idx" >
  44. <view class="something__box" v-for="(item, index) in items" :key="index" >
  45. <view class="li-item">
  46. <view class="something__item">
  47. <view class="item__user">
  48. <view class="user__img">
  49. <image :src="item.avatar"></image>
  50. </view>
  51. <view class="user__title">
  52. <view class="title__box">
  53. <view class="title__title">
  54. <span>{{item.nick_name}}</span>
  55. </view>
  56. </view>
  57. <!--<view class="title__stick">
  58. <i class="iconfont icon&#45;&#45;zhidingtuijian"></i>
  59. </view>-->
  60. </view>
  61. </view>
  62. <view class="item__content">
  63. <view class="item__title" @tap="copyText" :data-txt="item.description">
  64. {{item.description}}
  65. </view>
  66. <!--<view class="read__more" bindtap="more">
  67. {{text}}
  68. </view>-->
  69. <view class="item__list" v-if="item.img_list.length==1">
  70. <!--如果图片长度为1显示一张-->
  71. <view class="img">
  72. <image mode="widthFix" :src="item.img_list[0]"></image>
  73. </view>
  74. <!-- <view class="list__li">
  75. <view style="background: url('https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1524827781748&di=d50541539b9b5f3850170d97854fc380&imgtype=0&src=http%3A%2F%2Fwww.pp3.cn%2Fuploads%2F201704%2F20170815006.jpg'); background-position: center;background-repeat: no-repeat;background-size: cover;">
  76. <span></span>
  77. </view>
  78. </view>-->
  79. </view>
  80. <view class="item__list" v-else>
  81. <view class="list__li" v-for="(i, imgkey) in item.img_list" :key="imgkey" @tap="preImage" :data-index="index" :data-idx="idx" :data-url="i">
  82. <view :style="'background: url(' + i + '); background-position: center;background-repeat: no-repeat;background-size: cover;'">
  83. <span></span>
  84. </view>
  85. </view>
  86. </view>
  87. <view class="time-txet">{{item.created_at}}</view>
  88. <view class="tags" v-if="item.tags_list">
  89. <view class="tag-item" v-for="(tag, n) in item.tags_list" :key="n">{{tag}}</view>
  90. </view>
  91. <view class="goods-box" v-if="item.goods" @tap="jumpDetail" :data-id="item.goods.id">
  92. <view class="left-box">
  93. <image :src="item.goods.img"></image>
  94. </view>
  95. <view class="right-box">
  96. <view class="name">
  97. {{item.goods.name}}
  98. </view>
  99. <view class="money"> {{item.goods.sell_price}}</view>
  100. </view>
  101. </view>
  102. </view>
  103. </view>
  104. <view class="bottom-btn mx-1px-top">
  105. <view class="btn" :class="item.is_favorite ? 'active' : ''" :data-islike="item.is_favorite" @tap="favoriteClick" :data-index="index" :data-idx="idx" :data-id="item.id">
  106. <span class="iconfont icon-Group3"></span>
  107. <block v-if="item.is_favorite">已收藏</block>
  108. <block v-else>收藏</block>
  109. </view>
  110. <view class="btn" @tap="downloadImgs" :data-urls="item.img_list">
  111. <span class="iconfont icon-Group5"></span>
  112. 下载
  113. </view>
  114. </view>
  115. </view>
  116. <!--<view class="index__end" wx:if="{{page == total_pages}}">
  117. 已经全部加载完毕
  118. </view>-->
  119. </view>
  120. </view>
  121. </view>
  122. <view v-else class="no-data">暂无数据</view>
  123. </view>
  124. <view class="maks" v-if="isMore" @tap="moreClick"></view>
  125. <!-- 筛选-->
  126. <view class="filter-box" v-if="isFitter" @tap="filterClick">
  127. <view class="content" @tap.stop="jumpClose">
  128. <view class="select" v-if="conditions.brands.length">
  129. <view class="topic">
  130. 品牌
  131. <span>单选</span>
  132. </view>
  133. <view class="list">
  134. <view class="item" :class="index == brandIndex ? 'active' : ''" v-for="(item, index) in conditions.brands" :key="index" @tap.stop="radioBrand" :data-id="item.id" :data-name="item.name" :data-index="index">
  135. {{item.name}}
  136. </view>
  137. </view>
  138. </view>
  139. <view class="select" v-if="conditions.tags.length">
  140. <view class="topic">
  141. 推荐标签
  142. <span>最多选2个</span>
  143. </view>
  144. <view class="list">
  145. <view class="item" :class="item.isChoose == true ? 'active':''" v-for="(item, index) in conditions.tags" :key="index" @tap.stop="checkboxTag" :data-index="index" :data-id="item.id" :data-name="item.name" :data-isChoose="item.isChoose">
  146. {{item.name}}
  147. </view>
  148. </view>
  149. </view>
  150. <view class="btn-box">
  151. <view class="btn reset" @tap.stop="reset">重置</view>
  152. <view class="btn confirm" @tap.stop="confirm">确定</view>
  153. </view>
  154. </view>
  155. </view>
  156. <view class="menu-box flex-menu-box" :hidden="isHidden">
  157. <view class="navbar">
  158. <view class="item" :class="activeIndex == 0? 'active' : ''" @tap="tabClick" data-index="0" style="flex: .5">
  159. <span>全部</span>
  160. </view>
  161. <view class="item" :class="activeIndex == index+1 ? 'active' : ''" @tap="tabClick" v-for="(item, index) in conditions.categories" :key="index" v-if="index < 2" :data-index="index+1" :data-id="item.id">
  162. <span>{{item.name}}</span>
  163. </view>
  164. <view class="item" :class="activeIndex == 3 ? 'active' : ''" @tap="moreClick" style="flex: .8">
  165. <span>更多
  166. <view class="iconfont icon-jiantou"></view>
  167. </span>
  168. </view>
  169. <view class="item" @tap="filterClick" style="flex: .5">
  170. <span>筛选
  171. <view class="iconfont icon-filter"></view>
  172. </span>
  173. </view>
  174. </view>
  175. <!-- 点击更多弹出-->
  176. <view class="more-list" v-if="isMore && conditions.categories.length">
  177. <view class="item" :class="item.id == category_id ? 'active' : ''" v-for="(item, index) in conditions.categories" :key="index" @tap="changeCategories" :data-index="index" :data-id="item.id">{{item.name}}</view>
  178. </view>
  179. </view>
  180. </view>
  181. </view>
  182. </template>
  183. <script>
  184. //import { config, pageLogin, getUrl, sandBox, cookieStorage, writePhotosAlbum } from '../../../lib/myapp.js';
  185. import {pageLogin, getUrl,writePhotosAlbum} from '@/common/js/utils.js';
  186. import permision from "@/common/js/permission.js"
  187. let a;
  188. export default {
  189. data() {
  190. return {
  191. banner: [],
  192. conditions: '',
  193. //筛选条件
  194. list: [],
  195. more: true,
  196. page: '',
  197. init: false,
  198. isFitter: false,
  199. brandIndex: -1,
  200. brandItem: '',
  201. tagItem: [],
  202. category_id: '',
  203. //分类id
  204. activeIndex: 0,
  205. isMore: false,
  206. category_index: -1,
  207. isFavorite: false,
  208. tagIds: [],
  209. isTab: true,
  210. keywords: '',
  211. isHidden: true
  212. };
  213. },
  214. //下拉刷新
  215. onReachBottom() {
  216. if (this.more) {
  217. let page = this.page + 1;
  218. let brand_id = this.brandItem.id || '';
  219. let tags = '';
  220. let arr = [];
  221. if (this.tagItem.length) {
  222. this.tagItem.forEach(val => {
  223. arr.push(val.id);
  224. });
  225. tags = arr.join(',');
  226. }
  227. this.getContentList(page, brand_id, this.category_id, tags);
  228. } else {
  229. wx.showToast({
  230. image: '../../../static/error.png',
  231. title: '再拉也没有啦'
  232. });
  233. }
  234. },
  235. onShow() {
  236. if (a) {
  237. a = false;
  238. return;
  239. }
  240. this.getBanners();
  241. this.getConditions();
  242. this.getContentList(1, '', '', '');
  243. },
  244. onLoad() {},
  245. components: {},
  246. props: {},
  247. methods: {
  248. changeKeywords(e) {
  249. this.setData({
  250. keywords: e.detail.value
  251. });
  252. },
  253. // 监听滑动
  254. onPageScroll(e) {
  255. let scrollTop = e.scrollTop;
  256. if (scrollTop > 300) {
  257. this.setData({
  258. isHidden: false
  259. });
  260. } else {
  261. this.setData({
  262. isHidden: true
  263. });
  264. }
  265. },
  266. //点击分类
  267. tabClick(e) {
  268. this.setData({
  269. init: false
  270. });
  271. let index = e.currentTarget.dataset.index;
  272. let id = e.currentTarget.dataset.id || '';
  273. this.setData({
  274. activeIndex: index,
  275. category_id: id
  276. });
  277. let brand_id = this.brandItem.id || '';
  278. let tags = '';
  279. let arr = [];
  280. if (this.tagItem.length) {
  281. this.tagItem.forEach(val => {
  282. arr.push(val.id);
  283. });
  284. tags = arr.join(',');
  285. }
  286. this.getContentList(1, brand_id, this.category_id, tags, true);
  287. },
  288. //复制文案
  289. copyText(e) {
  290. let txt = e.currentTarget.dataset.txt;
  291. wx.setClipboardData({
  292. data: txt,
  293. success() {
  294. wx.showToast({
  295. title: "复制成功"
  296. });
  297. }
  298. });
  299. },
  300. //点击更多
  301. moreClick() {
  302. this.setData({
  303. isMore: !this.isMore
  304. });
  305. },
  306. changeCategories(e) {
  307. this.setData({
  308. init: false
  309. });
  310. let id = e.currentTarget.dataset.id;
  311. let index = e.currentTarget.dataset.index;
  312. if (this.conditions.categories.length >= 2) {
  313. if (index >= 2) {
  314. this.setData({
  315. activeIndex: 3
  316. });
  317. } else {
  318. this.setData({
  319. activeIndex: index + 1
  320. });
  321. }
  322. }
  323. this.setData({
  324. category_id: id,
  325. category_index: index
  326. });
  327. let brand_id = this.brandItem.id || '';
  328. let tags = '';
  329. let arr = [];
  330. if (this.tagItem.length) {
  331. this.tagItem.forEach(val => {
  332. arr.push(val.id);
  333. });
  334. tags = arr.join(',');
  335. }
  336. this.moreClick();
  337. this.getContentList(1, brand_id, this.category_id, tags, true);
  338. },
  339. //获取轮播图
  340. getBanners() {
  341. wx.showLoading({
  342. title: "加载中",
  343. mask: true
  344. });
  345. this.$http.get({
  346. api: 'api/discover/banners'
  347. }).then(res => {
  348. if (res.statusCode == 200) {
  349. res = res.data;
  350. if (res.status) {
  351. // this.setData({
  352. // banner: res.data.banners
  353. // });
  354. this.banner=res.data.banners;
  355. } else {
  356. wx.showModal({
  357. content: res.message || '请求失败',
  358. showCancel: false
  359. });
  360. }
  361. } else {
  362. wx.showModal({
  363. content: res.message || '请求失败',
  364. showCancel: false
  365. });
  366. }
  367. // this.setData({
  368. // show: false
  369. // });
  370. this.show=false;
  371. wx.hideLoading();
  372. }).catch(rej => {
  373. wx.hideLoading();
  374. wx.showModal({
  375. content: res.message || '请求失败',
  376. showCancel: false
  377. });
  378. });
  379. },
  380. jumpDetail(e) {
  381. let id = e.currentTarget.dataset.id;
  382. wx.navigateTo({
  383. url: `/pages/store/detail/detail?id=${id}`
  384. });
  385. },
  386. //获取筛选条件
  387. getConditions() {
  388. wx.showLoading({
  389. title: "加载中",
  390. mask: true
  391. });
  392. this.$http.get({
  393. api: 'api/discover/conditions'
  394. }).then(res => {
  395. if (res.statusCode == 200) {
  396. res = res.data;
  397. if (res.status) {
  398. if (res.data.tags && res.data.tags.length) {
  399. res.data.tags.forEach(val => {
  400. val.isChoose = false;
  401. });
  402. }
  403. this.setData({
  404. conditions: res.data
  405. });
  406. } else {
  407. wx.showModal({
  408. content: res.message || '请求失败',
  409. showCancel: false
  410. });
  411. }
  412. } else {
  413. wx.showModal({
  414. content: res.message || '请求失败',
  415. showCancel: false
  416. });
  417. }
  418. // this.setData({
  419. // show: false
  420. // });
  421. this.show=false;
  422. wx.hideLoading();
  423. }).catch(rej => {
  424. wx.hideLoading();
  425. wx.showModal({
  426. content: res.message || '请求失败',
  427. showCancel: false
  428. });
  429. });
  430. },
  431. //获取文章列表
  432. getContentList(page, brand_id, category_id, tags, is_tab) {
  433. wx.showLoading({
  434. title: "加载中",
  435. mask: true
  436. });
  437. let token = this.$cookieStorage.get('user_token') || '';
  438. let tagList = '';
  439. if (tags) {
  440. tagList = tags.split(',').sort(function (a, b) {
  441. return a - b;
  442. }).join(',');
  443. }
  444. this.$http.get({
  445. api: 'api/discover/content/list',
  446. data: {
  447. page: page,
  448. brand_id: brand_id,
  449. category_id: category_id,
  450. tags: tagList
  451. },
  452. header: {
  453. Authorization: token
  454. }
  455. }).then(res => {
  456. if (res.statusCode == 200) {
  457. res = res.data;
  458. if (res.status) {
  459. if (is_tab) {
  460. this.setData({
  461. list: []
  462. });
  463. }
  464. let pages = res.meta.pagination;
  465. let current_page = pages.current_page;
  466. let total_pages = pages.total_pages;
  467. this.setData({
  468. //[`list[${page - 1}]`]: res.data,
  469. more: current_page < total_pages,
  470. page: current_page,
  471. init: true
  472. });
  473. this.list[page -1]=res.data;
  474. } else {
  475. wx.showModal({
  476. content: res.message || '请求失败',
  477. showCancel: false
  478. });
  479. }
  480. } else {
  481. wx.showModal({
  482. content: res.message || '请求失败',
  483. showCancel: false
  484. });
  485. }
  486. // this.setData({
  487. // show: false
  488. // });
  489. this.show=false;
  490. wx.hideLoading();
  491. }).catch(rej => {
  492. wx.hideLoading();
  493. wx.showModal({
  494. content: res.message || '请求失败',
  495. showCancel: false
  496. });
  497. });
  498. },
  499. //点击筛选
  500. filterClick() {
  501. this.setData({
  502. isFitter: !this.isFitter
  503. });
  504. },
  505. radioBrand(e) {
  506. let index = e.currentTarget.dataset.index;
  507. let id = e.currentTarget.dataset.id;
  508. let name = e.currentTarget.dataset.name;
  509. this.setData({
  510. brandIndex: index,
  511. brandItem: {
  512. id:id,
  513. name:name
  514. }
  515. });
  516. },
  517. checkboxTag(e) {
  518. let tags = this.conditions.tags; //渲染的数据
  519. let index = e.currentTarget.dataset.index;
  520. let item = {
  521. id:e.currentTarget.dataset.id,
  522. name:e.currentTarget.dataset.name,
  523. isChoose:e.currentTarget.dataset.isChoose
  524. };
  525. let tagItem = this.tagItem;
  526. let tagIds = this.tagIds;
  527. let idsIndex = tagIds.indexOf(item.id);
  528. if (idsIndex == -1) {
  529. if (tagItem.length < 2) {
  530. tags[index].isChoose = true;
  531. tagItem.push(item);
  532. tagIds.push(item.id);
  533. this.setData({
  534. tagItem: tagItem,
  535. tagIds: tagIds,
  536. 'conditions.tags': tags
  537. });
  538. } else {
  539. wx.showToast({
  540. title: '最多选择两个',
  541. icon: 'none'
  542. });
  543. }
  544. } else {
  545. tagItem.splice(idsIndex, 1);
  546. tagIds.splice(idsIndex, 1);
  547. tags[index].isChoose = false;
  548. this.setData({
  549. tagItem: tagItem,
  550. tagIds: tagIds,
  551. 'conditions.tags': tags
  552. });
  553. }
  554. },
  555. //重置标签
  556. reset() {
  557. let tags = this.conditions.tags;
  558. tags.forEach(val => {
  559. val.isChoose = false;
  560. });
  561. this.setData({
  562. brandIndex: -1,
  563. brandItem: '',
  564. tagItem: [],
  565. tagIds: [],
  566. 'conditions.tags': tags
  567. });
  568. },
  569. jumpClose() {
  570. return;
  571. },
  572. //确认筛选
  573. confirm() {
  574. this.setData({
  575. init: false
  576. });
  577. let brand_id = this.brandItem.id || '';
  578. let tags = '';
  579. let arr = [];
  580. if (this.tagItem.length) {
  581. this.tagItem.forEach(val => {
  582. arr.push(val.id);
  583. });
  584. tags = arr.join(',');
  585. }
  586. this.getContentList(1, brand_id, this.category_id, tags, true);
  587. this.filterClick();
  588. },
  589. //收藏内容
  590. addFavorite(content_id, idx, index) {
  591. let token = this.$cookieStorage.get('user_token');
  592. wx.showLoading({
  593. title: "收藏中",
  594. mask: true
  595. });
  596. this.$http.post({
  597. api: 'api/content/favorite/add',
  598. header: {
  599. Authorization: token
  600. },
  601. data: {
  602. content_id: content_id
  603. }
  604. }).then(res => {
  605. if (res.statusCode == 200) {
  606. res = res.data;
  607. if (res.status) {
  608. let items = this.list[idx];
  609. let item = items[index];
  610. item.is_favorite = 1;
  611. this.$set(this.list, idx, items)
  612. /*this.setData({
  613. [`list[${idx}][${index}].is_favorite`]: 1
  614. });*/
  615. } else {
  616. wx.showModal({
  617. content: res.message || '请求失败',
  618. showCancel: false
  619. });
  620. }
  621. } else {
  622. wx.showModal({
  623. content: res.message || '请求失败',
  624. showCancel: false
  625. });
  626. }
  627. wx.hideLoading();
  628. }).catch(rej => {
  629. wx.hideLoading();
  630. wx.showModal({
  631. content: res.message || '请求失败',
  632. showCancel: false
  633. });
  634. });
  635. },
  636. deleteFavorite(content_id, idx, index) {
  637. let token = this.$cookieStorage.get('user_token');
  638. wx.showLoading({
  639. title: "取消中",
  640. mask: true
  641. });
  642. this.$http.post({
  643. api: 'api/content/favorite/delete',
  644. header: {
  645. Authorization: token
  646. },
  647. data: {
  648. content_id: content_id
  649. }
  650. }).then(res => {
  651. if (res.statusCode == 200) {
  652. res = res.data;
  653. if (res.status) {
  654. let items = this.list[idx];
  655. let item = items[index];
  656. item.is_favorite = 0;
  657. this.$set(this.list, idx, items)
  658. } else {
  659. wx.showModal({
  660. content: res.message || '请求失败',
  661. showCancel: false
  662. });
  663. }
  664. } else {
  665. wx.showModal({
  666. content: res.message || '请求失败',
  667. showCancel: false
  668. });
  669. }
  670. wx.hideLoading();
  671. }).catch(rej => {
  672. wx.hideLoading();
  673. wx.showModal({
  674. content: res.message || '请求失败',
  675. showCancel: false
  676. });
  677. });
  678. },
  679. favoriteClick(e) {
  680. let token = this.$cookieStorage.get('user_token');
  681. if (token) {
  682. let islike = e.currentTarget.dataset.islike;
  683. let idx = e.currentTarget.dataset.idx;
  684. let index = e.currentTarget.dataset.index;
  685. let id = e.currentTarget.dataset.id;
  686. if (islike == 0) {
  687. this.addFavorite(id, idx, index);
  688. } else if (islike == 1) {
  689. this.deleteFavorite(id, idx, index);
  690. }
  691. } else {
  692. let url = getUrl();
  693. wx.navigateTo({
  694. url: "/pages/user/register/register?url=" + url
  695. });
  696. }
  697. },
  698. jumpSearch(e) {
  699. let keywords = e.currentTarget.dataset.key || '';
  700. wx.navigateTo({
  701. url: "/pages/user/findSearch/findSearch?keywords=" + keywords
  702. });
  703. },
  704. jumpfind() {
  705. wx.navigateTo({
  706. url: "/pages/user/findSearch/findSearch?keywords=" + this.keywords
  707. });
  708. },
  709. writePhotosAlbum(successFun, failFun) {
  710. // #ifdef MP-WEIXIN
  711. wx.getSetting({
  712. success(res) {
  713. if (!res.authSetting['scope.writePhotosAlbum']) {
  714. wx.authorize({
  715. scope: 'scope.writePhotosAlbum',
  716. success: function () {
  717. successFun && successFun();
  718. },
  719. fail: function (res) {
  720. wx.hideLoading();
  721. wx.showModal({
  722. title: '提示',
  723. content: "小程序需要您的微信授权保存图片,是否重新授权?",
  724. showCancel: true,
  725. cancelText: "否",
  726. confirmText: "是",
  727. success: function (res2) {
  728. if (res2.confirm) {
  729. //用户点击确定'
  730. wx.openSetting({
  731. success: res3 => {
  732. if (res3.authSetting['scope.writePhotosAlbum']) {
  733. //已授权
  734. successFun && successFun();
  735. } else {
  736. failFun && failFun();
  737. }
  738. }
  739. });
  740. } else {
  741. failFun && failFun();
  742. }
  743. }
  744. });
  745. }
  746. });
  747. } else {
  748. successFun && successFun();
  749. }
  750. }
  751. });
  752. // #endif
  753. // #ifdef APP-PLUS
  754. var that = this;
  755. uni.getSystemInfo({
  756. success(result) {
  757. if(result.platform == 'android'){
  758. that.requestAndroidPermission(successFun);
  759. } else if(result.platform == 'ios'){
  760. that.requestIosPermission(successFun)
  761. }
  762. }
  763. })
  764. // #endif
  765. },
  766. //ios 获取权限
  767. requestIosPermission(successFun){
  768. var result = permision.judgeIosPermission('photoLibrary');
  769. if(result){
  770. successFun && successFun();
  771. }else{
  772. //打开授权,iOS上如果没有调用过的权限,不会出现在权限设置界面。
  773. permision.gotoAppPermissionSetting()
  774. }
  775. },
  776. //安卓 app 获取权限
  777. async requestAndroidPermission(successFun) {
  778. var result = await permision.requestAndroidPermission("android.permission.WRITE_EXTERNAL_STORAGE")
  779. var strStatus
  780. if (result == 1) {
  781. strStatus = "已获得授权";
  782. successFun && successFun();
  783. } else if (result == 0) {
  784. strStatus = "未获得授权";
  785. void permision.gotoAppPermissionSetting()
  786. } else {
  787. strStatus = "被永久拒绝权限"
  788. void permision.gotoAppPermissionSetting()
  789. }
  790. },
  791. //下载多张图片
  792. downloadImgs(e) {
  793. // #ifdef APP-PLUS || MP-WEIXIN
  794. let urlsList = e.currentTarget.dataset.urls;
  795. if (urlsList && urlsList.length) {
  796. var _this = this; // 获取权限
  797. this.writePhotosAlbum(function success() {
  798. wx.showLoading({
  799. title: '加载中',
  800. mask: true
  801. });
  802. _this.queue(urlsList).then(res => {
  803. wx.hideLoading();
  804. wx.showToast({
  805. title: '下载完成'
  806. });
  807. }).catch(err => {
  808. wx.hideLoading();
  809. });
  810. }, function fail() {
  811. wx.showToast({
  812. title: '您拒绝了保存到相册',
  813. icon: 'none'
  814. });
  815. });
  816. } else {
  817. return;
  818. }
  819. // #endif
  820. // #ifdef H5
  821. wx.showModal({
  822. content:"请长按图片进行保存",
  823. showCancel:false
  824. })
  825. // #endif
  826. },
  827. // 队列
  828. queue(urls) {
  829. let promise = Promise.resolve();
  830. urls.forEach((url, index) => {
  831. promise = promise.then(() => {
  832. return this.download(url);
  833. });
  834. });
  835. return promise;
  836. },
  837. // 下载
  838. download(url) {
  839. return new Promise((resolve, reject) => {
  840. wx.downloadFile({
  841. url: url,
  842. success: function (res) {
  843. var temp = res.tempFilePath;
  844. wx.saveImageToPhotosAlbum({
  845. filePath: temp,
  846. success: function (res) {
  847. resolve(res);
  848. },
  849. fail: function (err) {
  850. reject(res);
  851. }
  852. });
  853. },
  854. fail: function (err) {
  855. reject(err);
  856. }
  857. });
  858. });
  859. },
  860. //预览图片
  861. preImage(e) {
  862. a = true;
  863. var url = e.currentTarget.dataset.url;
  864. var findex = e.currentTarget.dataset.idx;
  865. var index = e.currentTarget.dataset.index;
  866. wx.previewImage({
  867. current: url,
  868. // 当前显示图片的http链接
  869. urls: this.list[findex][index].img_list // 需要预览的图片http链接列表
  870. });
  871. },
  872. setData: function (obj) {
  873. let that = this;
  874. let keys = [];
  875. let val, data;
  876. Object.keys(obj).forEach(function (key) {
  877. keys = key.split('.');
  878. val = obj[key];
  879. data = that.$data;
  880. keys.forEach(function (key2, index) {
  881. if (index + 1 == keys.length) {
  882. that.$set(data, key2, val);
  883. } else {
  884. if (!data[key2]) {
  885. that.$set(data, key2, {});
  886. }
  887. }
  888. data = data[key2];
  889. });
  890. });
  891. }
  892. }
  893. };
  894. </script>
  895. <style rel="stylesheet/less" lang="less">
  896. @import "find";
  897. </style>