topic.vue 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373
  1. <template>
  2. <!--pages/topic/topic.wxml-->
  3. <!-- 顶部轮播图 -->
  4. <view :style="'background-color:' + pageList.backgroundColor + ';'">
  5. <view :class="' ' + (pageList.displayStyle == '2' ? 'banner2' : 'banner') + ' r20'" v-if="bannerList.length > 0">
  6. <swiper class="swiper" @change="swiperChange" :current="swiperCurrent">
  7. <block v-for="(item, index) in bannerList" :key="index">
  8. <swiper-item autoplay="true">
  9. <!-- <button open-type="contact" wx:if="{{item.type == 2}}">
  10. <image src="{{item.pic + '?x-oss-process=style/w750-auto'}}" mode="aspectFit"></image>
  11. </button>
  12. <block wx:else> -->
  13. <image lazy-load="true" :src="item.pic + '?x-oss-process=style/w750-auto'" mode="aspectFit" :data-type="item.type" :data-content="item.content"></image>
  14. <!-- </block> -->
  15. </swiper-item>
  16. </block>
  17. </swiper>
  18. <view class="dots dflex">
  19. <block v-for="(item, index) in bannerList" :key="index">
  20. <view :class="'dot ' + (index == swiperCurrent ? ' active' : '')" :data-current="index" @tap="dotEvent"></view>
  21. </block>
  22. </view>
  23. </view>
  24. <view class="quan ddflex" @click="jumpUrl('/product/couponList/index?specialId='+productId)" v-if="couponList.length>0">
  25. <view class="ddflex fflex">
  26. <text v-for="(item,index) in couponList" :key="index">{{item.couponTitle}}</text>
  27. </view>
  28. <image src="../../static/pages/images/rico_red.png" class="rico"></image>
  29. </view>
  30. <!-- 商品列表 -->
  31. <goods-list :pageList="pageList"></goods-list>
  32. <!-- 分块版式一 -->
  33. <!-- <view class="list1" wx:if="{{pageList.displayStyle=='2' && pageList.lineNumber=='1'}}">
  34. <navigator url="/product/detail/detail?id={{item.id}}" hover-class="none" class="li dflex" wx:for="{{pageList.products}}" wx:key="index">
  35. <view class="jsdimgs1">
  36. <image src="{{item.pic+ '?x-oss-process=style/w750-auto'}}" mode="aspectFit" class="liimg"></image>
  37. <image wx:if="{{item.isTimely}}" src="/pages/images/jishida.png" class="jsdimg1"></image>
  38. </view>
  39. <view class="info flex">
  40. <view class="title">{{item.title}}</view>
  41. <view class="infos">{{item.brief==null?' ':item.brief}}</view>
  42. <view class="operate dflex">
  43. <view class="price dflex">
  44. ¥ <text>{{item.salePrice}}</text>
  45. <text class="del" wx:if="{{item.marketPrice!=0}}">¥{{item.marketPrice}}</text>
  46. </view>
  47. <view class="btn">立即抢购</view>
  48. </view>
  49. </view>
  50. </navigator>
  51. </view> -->
  52. <!-- 分块版式二 -->
  53. <!-- <view class="list2 dflex" wx:if="{{pageList.displayStyle=='2' && pageList.lineNumber=='2'}}">
  54. <view class="li" wx:for="{{pageList.products}}" wx:key="index">
  55. <navigator url="/product/detail/detail?id={{item.id}}" hover-class="none">
  56. <view class="jsdimgs">
  57. <image src="{{item.pic + '?x-oss-process=style/w375'}}" mode="aspectFit" class="jsdpro"></image>
  58. <image wx:if="{{item.isTimely}}" src="/pages/images/jishida.png" class="jsdimg"></image>
  59. </view>
  60. <view class="jsdinfo">
  61. <view class="proname">{{item.title}}</view>
  62. <view class="operate dflex">
  63. <view class="price proprice">¥<text>{{item.salePrice}}</text><text class="del" wx:if="{{item.marketPrice!=0}}">¥{{item.marketPrice}}</text>
  64. </view>
  65. <view class="add-cart">
  66. <image src="/pages/images/jia.png"></image>
  67. </view>
  68. </view>
  69. </view>
  70. </navigator>
  71. </view>
  72. </view> -->
  73. <!-- 分块版式三 -->
  74. <!-- <view class="list3 dflex" wx:if="{{pageList.displayStyle=='2' && pageList.lineNumber=='3'}}">
  75. <view class="li" wx:for="{{pageList.products}}" wx:key="index">
  76. <navigator url="/product/detail/detail?id={{item.id}}" hover-class="none">
  77. <view class="jsdimgs">
  78. <image src="{{item.pic + '?x-oss-process=style/w210'}}" mode="aspectFit" class="jsdpro"></image>
  79. <image wx:if="{{item.isTimely}}" src="/pages/images/jishida.png" class="jsdimg1"></image>
  80. </view>
  81. <view class="jsdinfo">
  82. <view class="proname">{{item.title}}</view>
  83. <view class="operate dflex">
  84. <view class="price proprice">¥<text>{{item.salePrice}}</text></view>
  85. <view class="add-cart">
  86. <image src="/pages/images/jia.png"></image>
  87. </view>
  88. </view>
  89. </view>
  90. </navigator>
  91. </view>
  92. </view> -->
  93. <!-- 分隔线版式一 -->
  94. <!-- <view class="list1 list4" wx:if="{{pageList.displayStyle=='1' && pageList.lineNumber=='1'}}">
  95. <navigator url="/product/detail/detail?id={{item.id}}" hover-class="none" class="li dflex" wx:for="{{pageList.products}}" wx:key="index">
  96. <image src="{{item.pic+ '?x-oss-process=style/w750-auto'}}" mode="aspectFit" class="liimg"></image>
  97. <image wx:if="{{item.isTimely}}" src="/pages/images/jishida.png" class="jsdimg1"></image>
  98. <view class="info flex">
  99. <view class="title">{{item.title}}</view>
  100. <view class="infos">品质保证 全场五折</view>
  101. <view class="operate dflex">
  102. <view class="price dflex">
  103. <text>¥</text>{{item.salePrice}}
  104. <text class="del">¥{{item.marketPrice}}</text>
  105. </view>
  106. <view class="btn">立即抢购</view>
  107. </view>
  108. </view>
  109. </navigator>
  110. </view> -->
  111. <!-- 分隔线版式二 -->
  112. <!-- <view class="list2 list5 dflex" wx:if="{{pageList.displayStyle=='1' && pageList.lineNumber=='2'}}">
  113. <view class="li" wx:for="{{pageList.products}}" wx:key="index">
  114. <navigator url="/product/detail/detail?id={{item.id}}" hover-class="none">
  115. <view class="jsdimgs">
  116. <image src="{{item.pic + '?x-oss-process=style/w375'}}" mode="aspectFit" class="jsdpro"></image>
  117. <image wx:if="{{item.isTimely}}" src="/pages/images/jishida.png" class="jsdimg1"></image>
  118. </view>
  119. <view class="jsdinfo">
  120. <view class="proname">{{item.title}}</view>
  121. <view class="operate dflex">
  122. <view class="price proprice">¥<text>{{item.salePrice}}</text><text class="del">¥{{item.marketPrice}}</text>
  123. </view>
  124. <view class="add-cart">
  125. <image src="/pages/images/jia.png"></image>
  126. </view>
  127. </view>
  128. </view>
  129. </navigator>
  130. </view>
  131. </view> -->
  132. <!-- 分隔线版式三 -->
  133. <!-- <view class="list3 list6 dflex" wx:if="{{pageList.displayStyle=='1' && pageList.lineNumber=='3'}}">
  134. <view class="li" wx:for="{{pageList.products}}" wx:key="index">
  135. <navigator url="/product/detail/detail?id={{item.id}}" hover-class="none">
  136. <view class="jsdimgs">
  137. <image src="{{item.pic + '?x-oss-process=style/w210'}}" mode="aspectFit" class="jsdpro"></image>
  138. <image wx:if="{{item.isTimely}}" src="/pages/images/jishida.png" class="jsdimg1"></image>
  139. </view>
  140. <view class="jsdinfo">
  141. <view class="proname">{{item.title}}</view>
  142. <view class="operate dflex">
  143. <view class="price proprice">¥<text>{{item.salePrice}}</text></view>
  144. <view class="add-cart">
  145. <image src="/pages/images/jia.png"></image>
  146. </view>
  147. </view>
  148. </view>
  149. </navigator>
  150. </view>
  151. </view> -->
  152. <!-- 无分隔线版式 -->
  153. <!-- <view class="list3 list7 dflex" wx:if="{{styletype==7}}">
  154. <view class="li">
  155. <view class="jsdimgs">
  156. <image :src="picUrlss+'zbgw.png'" mode="aspectFit" class="jsdpro"></image>
  157. <image src="/pages/images/jishida.png" class="jsdimg"></image>
  158. </view>
  159. <view class="jsdinfo">
  160. <view class="proname">约斯夫儿童型医用退热贴约斯夫儿童型医用退热贴</view>
  161. <view class="operate dflex">
  162. <view class="price proprice">¥<text>129.00</text></view>
  163. <view class="add-cart">
  164. <image src="/pages/images/jia.png"></image>
  165. </view>
  166. </view>
  167. </view>
  168. </view>
  169. <view class="li">
  170. <view class="jsdimgs">
  171. <image :src="picUrlss+'zbgw.png'" mode="aspectFit" class="jsdpro"></image>
  172. <image src="/pages/images/jishida.png" class="jsdimg"></image>
  173. </view>
  174. <view class="jsdinfo">
  175. <view class="proname">约斯夫儿童型医用退热贴约斯夫儿童型医用退热贴</view>
  176. <view class="operate dflex">
  177. <view class="price proprice">¥<text>129.00</text></view>
  178. <view class="add-cart">
  179. <image src="/pages/images/jia.png"></image>
  180. </view>
  181. </view>
  182. </view>
  183. </view>
  184. <view class="li">
  185. <view class="jsdimgs">
  186. <image :src="picUrlss+'zbgw.png'" mode="aspectFit" class="jsdpro"></image>
  187. <image src="/pages/images/jishida.png" class="jsdimg"></image>
  188. </view>
  189. <view class="jsdinfo">
  190. <view class="proname">约斯夫儿童型医用退热贴约斯夫儿童型医用退热贴</view>
  191. <view class="operate dflex">
  192. <view class="price proprice">¥<text>129.00</text></view>
  193. <view class="add-cart">
  194. <image src="/pages/images/jia.png"></image>
  195. </view>
  196. </view>
  197. </view>
  198. </view>
  199. </view> -->
  200. </view>
  201. </template>
  202. <script>
  203. // pages/topic/topic.js
  204. const app = getApp();
  205. const req = require('../../utils/request.js');
  206. import goodsList from '../../components/goodsList/goodsList';
  207. export default {
  208. data() {
  209. return {
  210. picUrlss: req.public.picUrls,
  211. page: 1,
  212. pageList: {},
  213. bannerList: [],
  214. swiperCurrent: 0,
  215. isLoad: true,
  216. hasmore: true,
  217. Title: '',
  218. isRuleTrue: false,
  219. //筛选是否显示
  220. styletype: 0,
  221. productId: 0 ,//专题id
  222. options:'',
  223. couponList: []
  224. };
  225. },
  226. components: {
  227. goodsList
  228. },
  229. props: {},
  230. /**
  231. * 生命周期函数--监听页面加载
  232. */
  233. onLoad: async function(options) {
  234. this.options=options;
  235. uni.showShareMenu({
  236. menus: ['shareAppMessage']
  237. });
  238. // uni.setNavigationBarTitle({
  239. // title: options.title ? options.title : '专题详情'
  240. // });
  241. this.setData({
  242. productId: options.id
  243. });
  244. await this.getList(options.id);
  245. await this.getCateCoupon();
  246. },
  247. onShareAppMessage() {
  248. return{
  249. title: this.options.title
  250. }
  251. },
  252. methods: {
  253. //产品分类优惠券
  254. getCateCoupon(){
  255. let form = {
  256. page: 1,
  257. limit: 3,
  258. specialId: this.productId,
  259. bindType: 'use'
  260. }
  261. return new Promise((resolve, reject) => {
  262. req.getRequest('/api/coupon/list',form,data=>{
  263. this.couponList = data;
  264. })
  265. })
  266. },
  267. //获取商品列表数据
  268. getList(id) {
  269. let that = this;
  270. // console.log("isLoad", that.isLoad);
  271. if (!that.isLoad) return false;
  272. that.isLoad = false;
  273. let form = {
  274. id: id //searchTitle: that.data.searchTitle,
  275. //sort: that.data.sort,
  276. //attr: that.data.attr,
  277. //categoryId: that.data.categoryId
  278. };
  279. let isShowLoading = false;
  280. this.allShow = false;
  281. if (!isShowLoading) {
  282. req.loadIng('加载中');
  283. isShowLoading = true;
  284. }
  285. return new Promise((resolve,reject)=>{
  286. req.getRequest('/api/special/detail', form, data => {
  287. // console.log("pageList:", data);
  288. uni.setNavigationBarTitle({
  289. title: data.title ? data.title : '专题详情'
  290. });
  291. if (data && data.length >= 10) that.isLoad = true;
  292. if (that.page > 1) data = that.pageList.concat(data);
  293. if (data) {
  294. data.products = data.products.map(it => {
  295. if (it.deliverWay && JSON.parse(it.deliverWay).indexOf(3) != -1) it.isJs = true;
  296. return it;
  297. });
  298. // console.log(data)
  299. that.getBanner(data.bannerGroupId);
  300. that.setData({
  301. pageList: data
  302. });
  303. }
  304. if (isShowLoading) {
  305. uni.hideLoading();
  306. isShowLoading = false;
  307. }
  308. resolve();
  309. });
  310. })
  311. req.postRequest(
  312. '/api/browse',
  313. {
  314. bindId: id,
  315. type: 3
  316. },
  317. data => {
  318. // console.log("api/browse", data);
  319. }
  320. );
  321. },
  322. //获取banner图数据
  323. getBanner(groupId) {
  324. let that = this;
  325. req.getRequest(
  326. '/api/banner',
  327. {
  328. groupId: groupId
  329. },
  330. data => {
  331. // console.log("banner图数据", data);
  332. if (data && data.length >= 10) that.isLoad = true;
  333. if (that.page > 1) data = that.pageList.concat(data);
  334. if (data && data.length > 0) {
  335. that.setData({
  336. bannerList: data
  337. });
  338. }
  339. }
  340. );
  341. },
  342. /**
  343. * 轮播切换
  344. */
  345. swiperChange({ detail }) {
  346. if (detail.source !== 'touch') return;
  347. this.setData({
  348. swiperCurrent: detail.current
  349. });
  350. },
  351. jumpUrl(url){
  352. uni.navigateTo({
  353. url: url
  354. })
  355. }
  356. }
  357. };
  358. </script>
  359. <style>
  360. @import './topic.css';
  361. </style>