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.
 
 
 
 
 
 

1019 line
36 KiB

  1. <template>
  2. <view class="container">
  3. <!-- 小程序头部兼容 -->
  4. <!-- #ifdef MP -->
  5. <!-- <view class="mp-search-box"><input class="ser-input" type="text" value="输入关键字搜索" disabled /></view> -->
  6. <!-- #endif -->
  7. <!-- 头部轮播 -->
  8. <view class="carousel-section">
  9. <!-- 标题栏和状态栏占位符 -->
  10. <view class="titleNview-placing"></view>
  11. <!-- 背景色区域 -->
  12. <view class="titleNview-background" :style="{ backgroundColor: titleNViewBackground }"></view>
  13. <swiper class="carousel" circular @change="swiperChange">
  14. <swiper-item v-for="(item, index) in carouselList" :key="index" class="carousel-item" @click="navToDetailPage({ product_id: item.product_id })">
  15. <image mode="aspectFill" :src="item.image" />
  16. </swiper-item>
  17. </swiper>
  18. <!-- 自定义swiper指示器 -->
  19. <view class="swiper-dots">
  20. <text class="num">{{ swiperCurrent + 1 }}</text>
  21. <text class="sign">/</text>
  22. <text class="num">{{ swiperLength }}</text>
  23. </view>
  24. </view>
  25. <!-- 分类 -->
  26. <!-- <view class="cate-section">
  27. <view class="cate-item" v-for="(item, index) in menu" :key="index" @click="navToList(item.id)">
  28. <image :src="item.image" ></image>
  29. <text>{{item.name}}</text>
  30. </view>
  31. </view> -->
  32. <!-- 秒杀楼层 -->
  33. <view class="seckill-section m-t" v-if="flashSale && flashSale.product.length > 0">
  34. <view class="s-header" @click="navTo('/pages/flash/list')">
  35. <image class="s-img" src="/static/temp/secskill-img.jpg" mode="widthFix"></image>
  36. <!-- <text class="tip">{{(new Date(flashSale.starttime*1000)).getHours()}}点场</text> -->
  37. <text class="tip" v-if="flashSale.countdown" >下一场倒计时</text>
  38. <text class="tip" v-else>{{flashSale.title}}</text>
  39. <uni-countdown ref="countd" v-if="flashSale.countdown" @timeup="timeup" :show-day="flashSale.countdown.day ? true : false" :day="day" :hour="hour" :minute="minute" :second="second" color="#FFFFFF" background-color="#00B26A" border-color="#00B26A" ></uni-countdown>
  40. <text class="yticon icon-you"></text>
  41. </view>
  42. <scroll-view class="floor-list" scroll-x>
  43. <view class="scoll-wrapper">
  44. <view v-for="(item, index) in flashSale.product" :key="index" class="floor-item" @click="navToDetailPage({ product_id: item.flash_product_id }, flashSale.flash_id)">
  45. <image :src="item.image" mode="aspectFill"></image>
  46. <text class="title clamp">{{item.title }}</text>
  47. <text class="price">¥{{item.sales_price }}</text>
  48. </view>
  49. </view>
  50. </scroll-view>
  51. </view>
  52. <!-- 团购楼层 -->
  53. <!-- <view class="f-header m-t">
  54. <image src="/static/temp/h1.png"></image>
  55. <view class="tit-box">
  56. <text class="tit">精品团购</text>
  57. <text class="tit2">Boutique Group Buying</text>
  58. </view>
  59. <text class="yticon icon-you"></text>
  60. </view> -->
  61. <!-- <view class="group-section">
  62. <swiper class="g-swiper" :duration="500">
  63. <swiper-item class="g-swiper-item" v-for="(item, index) in goodsList" :key="index" v-if="index % 2 === 0" @click="navToDetailPage(item)">
  64. <view class="g-item left">
  65. <image :src="item.image" mode="aspectFill"></image>
  66. <view class="t-box">
  67. <text class="title clamp">{{ item.title }}</text>
  68. <view class="price-box">
  69. <text class="price">¥{{ item.price }}</text>
  70. <text class="m-price">¥188</text>
  71. </view>
  72. <view class="pro-box">
  73. <view class="progress-box"><progress percent="72" activeColor="#fa436a" active stroke-width="6" /></view>
  74. <text>6人成团</text>
  75. </view>
  76. </view>
  77. </view>
  78. <view class="g-item right">
  79. <image :src="goodsList[index + 1].image" mode="aspectFill"></image>
  80. <view class="t-box">
  81. <text class="title clamp">{{ goodsList[index + 1].title }}</text>
  82. <view class="price-box">
  83. <text class="price">¥{{ goodsList[index + 1].price }}</text>
  84. <text class="m-price">¥188</text>
  85. </view>
  86. <view class="pro-box">
  87. <view class="progress-box"><progress percent="72" activeColor="#fa436a" active stroke-width="6" /></view>
  88. <text>10人成团</text>
  89. </view>
  90. </view>
  91. </view>
  92. </swiper-item>
  93. </swiper>
  94. </view> -->
  95. <!-- 分类推荐楼层 -->
  96. <!-- <view class="f-header m-t">
  97. <image src="/static/temp/h1.png"></image>
  98. <view class="tit-box">
  99. <text class="tit">分类精选</text>
  100. <text class="tit2">Competitive Products For You</text>
  101. </view>
  102. <text class="yticon icon-you"></text>
  103. </view> -->
  104. <!-- <view class="hot-floor">
  105. <view class="floor-img-box">
  106. <image
  107. class="floor-img"
  108. src="https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1553409398864&di=4a12763adccf229133fb85193b7cc08f&imgtype=0&src=http%3A%2F%2Fb-ssl.duitang.com%2Fuploads%2Fitem%2F201703%2F19%2F20170319150032_MNwmn.jpeg"
  109. mode="scaleToFill"
  110. ></image>
  111. </view>
  112. <scroll-view class="floor-list" scroll-x>
  113. <view class="scoll-wrapper">
  114. <view v-for="(item, index) in goodsList" :key="index" class="floor-item" @click="navToDetailPage(item)">
  115. <image :src="item.image" mode="aspectFill"></image>
  116. <text class="title clamp">{{ item.title }}</text>
  117. <text class="price">¥{{ item.price }}</text>
  118. </view>
  119. <view class="more">
  120. <text>查看全部</text>
  121. <text>More+</text>
  122. </view>
  123. </view>
  124. </scroll-view>
  125. </view> -->
  126. <!-- <view class="hot-floor">
  127. <view class="floor-img-box">
  128. <image
  129. class="floor-img"
  130. src="https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1553409984228&di=dee176242038c2d545b7690b303d65ea&imgtype=0&src=http%3A%2F%2Fhbimg.b0.upaiyun.com%2F5ef4da9f17faaf4612f0d5046f4161e556e9bbcfdb5b-rHjf00_fw658"
  131. mode="scaleToFill"
  132. ></image>
  133. </view>
  134. <scroll-view class="floor-list" scroll-x>
  135. <view class="scoll-wrapper">
  136. <view v-for="(item, index) in goodsList" :key="index" class="floor-item" @click="navToDetailPage(item)">
  137. <image :src="item.image3" mode="aspectFill"></image>
  138. <text class="title clamp">{{ item.title }}</text>
  139. <text class="price">¥{{ item.price }}</text>
  140. </view>
  141. <view class="more">
  142. <text>查看全部</text>
  143. <text>More+</text>
  144. </view>
  145. </view>
  146. </scroll-view>
  147. </view> -->
  148. <!-- <view class="hot-floor">
  149. <view class="floor-img-box">
  150. <image
  151. class="floor-img"
  152. src="https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1553409794730&di=12b840ec4f5748ef06880b85ff63e34e&imgtype=0&src=http%3A%2F%2Fimg.zcool.cn%2Fcommunity%2F01dc03589ed568a8012060c82ac03c.jpg%40900w_1l_2o_100sh.jpg"
  153. mode="scaleToFill"
  154. ></image>
  155. </view>
  156. <scroll-view class="floor-list" scroll-x>
  157. <view class="scoll-wrapper">
  158. <view v-for="(item, index) in goodsList" :key="index" class="floor-item" @click="navToDetailPage(item)">
  159. <image :src="item.image2" mode="aspectFill"></image>
  160. <text class="title clamp">{{ item.title }}</text>
  161. <text class="price">¥{{ item.price }}</text>
  162. </view>
  163. <view class="more">
  164. <text>查看全部</text>
  165. <text>More+</text>
  166. </view>
  167. </view>
  168. </scroll-view>
  169. </view> -->
  170. <!-- 猜你喜欢 -->
  171. <!-- <view class="f-header m-t">-->
  172. <!-- <image src="/static/temp/h1.png"></image>-->
  173. <!-- <view class="tit-box">-->
  174. <!-- <text class="tit">猜你喜欢</text>-->
  175. <!-- <text class="tit2">Guess You Like It</text>-->
  176. <!-- </view>-->
  177. <!-- <text class="yticon icon-you"></text>-->
  178. <!-- </view>-->
  179. <view class="guess-section">
  180. <view v-for="(item, index) in goodsList" :key="index" class="guess-item" @click="navToDetailPage(item)">
  181. <view class="image-wrapper"><image :src="item.image" mode="aspectFill"></image></view>
  182. <text class="title clamp">{{ item.title }}</text>
  183. <text class="price"><text class="symbol">¥</text> {{ item.sales_price }} <text class="sales"> {{' '+item.sales}}人付款</text></text>
  184. </view>
  185. </view>
  186. <!-- <view style="text-align: center;margin: 10px 0; padding-bottom: 170upx;">-->
  187. <!-- <text style="color: #315efb;text-decoration: underline;font-size: 10px" @click="showPolicy">Privacy Policy</text>-->
  188. <!-- </view>-->
  189. <!-- 底部操作菜单 -->
  190. <view class="page-bottom">
  191. <view class="p-b-btn" @click="showServe(1)">
  192. <i class="xbicon">&#xe663;</i>
  193. <text>Liên hệ</text>
  194. </view>
  195. <view class="p-b-btn" @click="showServe(2)">
  196. <i class="xbicon">&#xe662;</i>
  197. <text>Chính sách bảo mật</text>
  198. </view>
  199. <view class="p-b-btn" @click="showServe(3)">
  200. <i class="xbicon">&#xe629;</i>
  201. <text>Hỗ trợ</text>
  202. </view>
  203. </view>
  204. </view>
  205. </template>
  206. <script>
  207. var _self = this;
  208. import uniCountdown from '@/components/uni-countdown/uni-countdown.vue';
  209. export default {
  210. components: {uniCountdown},
  211. data() {
  212. return {
  213. titleNViewBackground: '',
  214. swiperCurrent: 0,
  215. swiperLength: 0,
  216. carouselList: [],
  217. goodsList: [],
  218. menu:[],
  219. flashSale: '',
  220. page:1,
  221. pageSize: 16,
  222. day:0,
  223. hour:0,
  224. minute:0,
  225. second:0
  226. };
  227. },
  228. computed:{
  229. },
  230. onLoad() {
  231. this.loadData();
  232. },
  233. onReachBottom() {
  234. this.getProduct();
  235. },
  236. onPullDownRefresh() {
  237. if (this.$refs && this.$refs.countd) {
  238. this.$refs.countd.syncFlag = false;
  239. }
  240. this.goodsList = [];
  241. this.page = 1;
  242. this.loadData();
  243. },
  244. onShareAppMessage(e) {
  245. return {
  246. title: "MSVENI SHOP",
  247. };
  248. },
  249. methods: {
  250. /**
  251. * 请求静态数据只是为了代码不那么乱
  252. * 分次请求未作整合
  253. */
  254. loadData() {
  255. let that = this;
  256. //获取广告图
  257. uni.request({
  258. url: that.$unishow + '/ads/index',
  259. success(res) {
  260. let carouselList = res.data.data;
  261. that.titleNViewBackground = carouselList[0].background;
  262. that.swiperLength = carouselList.length;
  263. that.carouselList = carouselList;
  264. }
  265. });
  266. //获取菜单栏
  267. uni.request({
  268. url: that.$unishow + '/category/menu',
  269. success(res) {
  270. that.menu = res.data.data;
  271. }
  272. });
  273. uni.stopPullDownRefresh();
  274. this.getFlash();
  275. this.getProduct();
  276. },
  277. // 获取产品列表
  278. async getProduct() {
  279. let goodsList = await this.$api.request('/product/lists', 'GET', {page:this.page, pagesize:this.pageSize});
  280. if (goodsList) {
  281. if (goodsList.length > 0) {
  282. goodsList.forEach(item=>{
  283. this.goodsList.push(item);
  284. });
  285. this.page++;
  286. } else {
  287. this.$api.msg('没有更多数据');
  288. }
  289. }
  290. },
  291. // 获取限时秒杀数据
  292. async getFlash() {
  293. let data = await this.$api.request('/flash/index');
  294. if (data) {
  295. this.flashSale = data;
  296. this.day = data.countdown.day;
  297. this.hour = data.countdown.hour;
  298. this.minute = data.countdown.minute;
  299. this.second = data.countdown.second;
  300. //this.$refs.countd.update();
  301. }
  302. //console.log(this.$refs)
  303. },
  304. //轮播图切换修改背景色
  305. swiperChange(e) {
  306. const index = e.detail.current;
  307. this.swiperCurrent = index;
  308. this.titleNViewBackground = this.carouselList[index].background;
  309. },
  310. // 商品详情页
  311. navToDetailPage(item, flash_id = 0) {
  312. let id = item.product_id;
  313. uni.navigateTo({
  314. url: `/pages/product/product?id=${id}&flash=${flash_id}`
  315. });
  316. },
  317. /**
  318. * 秒杀倒计时为0时再请求一次接口
  319. */
  320. timeup() {
  321. this.getFlash();
  322. },
  323. // 跳转页面
  324. navTo(url){
  325. uni.navigateTo({
  326. url
  327. })
  328. },
  329. // 跳转到商品列表
  330. navToList(fid) {
  331. uni.navigateTo({
  332. url: `/pages/product/list?fid=${fid}&sid=0`
  333. });
  334. },
  335. showPolicy(){
  336. uni.showModal({
  337. showCancel: false,
  338. title: 'Privacy Policy',
  339. content: '"MSVENI" tôn trọng và bảo vệ quyền riêng tư của người dùng. Chính sách bảo mật này sẽ cho bạn biết cách chúng tôi thu thập và sử dụng thông tin về bạn và cách chúng tôi bảo vệ thông tin đó. Trước khi trở thành người dùng "MSVENI", bạn phải đọc chính sách quyền riêng tư này một cách cẩn thận và đồng ý với tất cả các chính sách quyền riêng tư. Các điều khoản của chính sách quyền riêng tư này sẽ có hiệu lực ngay sau khi bạn đăng ký làm người dùng "MSVENI" và sẽ ràng buộc bạn và "MSVENI".\n' +
  340. '\n' +
  341. 'I. Chúng tôi thu thập thông tin người dùng nào\n' +
  342. 'Thông tin cá nhân: Bao gồm: tên, số điện thoại di động, bằng lái xe, thông tin liên lạc khẩn cấp, hình ảnh, địa chỉ gửi thư, địa điểm, địa chỉ công ty.\n' +
  343. '\n' +
  344. 'Thông tin liên quan đến thiết bị của bạn, chẳng hạn như: gaid, số IMSI, phiên bản Android, thông tin thiết bị điều dưỡng.\n' +
  345. '\n' +
  346. 'Thông tin vị trí (chỉ dành cho các dịch vụ / tính năng đặc biệt): Các loại thông tin khác nhau liên quan đến vị trí của bạn. Ví dụ: mã quốc gia, mã thành phố, mã mạng di động, thông tin vĩ độ và kinh độ để đảm bảo rằng người dùng cung cấp vị trí trong dịch vụ của chúng tôi và đánh giá điểm tín dụng của bạn.\n' +
  347. '\n' +
  348. 'Thông tin ngân hàng: bao gồm tên, số tài khoản, v.v. Chúng tôi cũng thu thập thông tin cá nhân khác và thu thập thông tin việc làm, thông tin của bên thứ ba, v.v. Tất nhiên khi sử dụng một số dịch vụ. Mục đích của việc thu thập thông tin này là để cải thiện các dịch vụ chúng tôi cung cấp cho bạn. Thông tin được cung cấp tùy thuộc vào cách bạn sử dụng nó để tham gia vào các sản phẩm hoặc dịch vụ của chúng tôi. Việc sử dụng dịch vụ của chúng tôi là hoàn toàn tự nguyện và bạn không cần cung cấp thông tin này trừ khi bạn chọn sử dụng dịch vụ của chúng tôi.\n' +
  349. '\n' +
  350. 'Khi sử dụng sản phẩm này, chúng tôi cũng cần bạn cấp các quyền thiết bị sau để bạn có thể sử dụng dịch vụ của chúng tôi tốt hơn.\n' +
  351. '- Sổ địa chỉ: Chúng tôi cần có được thông tin liên lạc để xem xét cho vay.\n' +
  352. '\n' +
  353. '- Quyền camera: Chúng tôi cũng cần sử dụng quyền camera của thiết bị để chụp ảnh ID của bạn để xác nhận danh tính của bạn.\n' +
  354. '\n' +
  355. 'II. Làm thế nào để chúng tôi bảo vệ thông tin người dùng?\n' +
  356. '(1) "MSVENI" sử dụng công nghệ mới nhất để bảo vệ thông tin của bạn. Chúng tôi sẽ tuân thủ các điều khoản hiện hành để đảm bảo thông tin của bạn được giữ bí mật và được duy trì và quyền truy cập bị hạn chế để bảo vệ bạn khỏi mọi hình thức lừa đảo. Bạn có trách nhiệm bảo vệ mã truy cập tài khoản và ID người dùng và mật khẩu của mình để đảm bảo rằng những người dùng khác không thể truy cập vào tài khoản của bạn.\n' +
  357. '\n' +
  358. '(2) Về thông tin của bạn, "MSVENI" đảm bảo tính bảo mật của dữ liệu được truyền qua ứng dụng của chúng tôi. Khi chúng tôi nhận được dữ liệu hoặc thông tin của bạn, chúng tôi sẽ sử dụng các tính năng và quy trình bảo mật để ngăn chặn truy cập trái phép.\n' +
  359. '\n' +
  360. '(3) "MSVENI" tuân thủ đầy đủ và tuân thủ luật pháp và quy định bảo vệ dữ liệu hiện hành của Việt Nam.\n' +
  361. '\n' +
  362. 'III. Làm thế nào để chúng ta quản lý thông tin người dùng?\n' +
  363. 'Thông tin chúng tôi thu thập sẽ được lưu trữ và quản lý cho các mục đích sau: Để kiểm tra so sánh giữa thông tin bạn cung cấp và thông tin thực tế, đảm bảo rằng không ai khác sử dụng thông tin đó. Sử dụng danh tính của bạn;\n' +
  364. '\n' +
  365. 'Xác định khả năng của bạn để có được một khoản vay theo các điều khoản hiện có;\n' +
  366. 'Xác nhận rằng thông tin bạn cung cấp là chính xác trong quá trình đăng ký khoản vay. Nếu khoản vay của bạn được chấp thuận, vui lòng đảm bảo quá trình giao dịch.\n' +
  367. 'Giải quyết các nghĩa vụ phát sinh từ hợp đồng;\n' +
  368. '\n' +
  369. 'Khi bạn gọi điện hoặc truy cập ứng dụng di động của chúng tôi, vui lòng liên hệ với bạn để tìm hiểu tài khoản của bạn và cung cấp thông tin nhận dạng và cung cấp thông tin cập nhật khi dịch vụ thay đổi. Chúng tôi.\n' +
  370. '\n' +
  371. 'IV. Làm thế nào để chúng tôi bảo vệ thông tin người dùng\n' +
  372. 'Chúng tôi bảo vệ tất cả thông tin người dùng và sẽ không chia sẻ thông tin người dùng với bên thứ ba trừ khi được người dùng ủy quyền.\n' +
  373. '\n' +
  374. '"MSVENI" sẽ tiết lộ thông tin cá nhân của người dùng cho các nhà cung cấp dịch vụ, người vay và thành viên nhóm của chúng tôi để giúp chúng tôi thực hiện một số hoạt động kinh doanh. Bao gồm các dịch vụ, thanh toán và thủ tục phòng chống gian lận, "MSVENI" cũng sẽ chia sẻ thông tin về người dùng bên thứ ba với bất kỳ luật pháp và tòa án nào để ngăn chặn tổn thất tài chính và báo cáo hoạt động.\n' +
  375. '\n' +
  376. 'V. Thay đổi chính sách bảo mật\n' +
  377. 'Chúng tôi sẽ gửi cho bạn một thông báo qua SMS hoặc email về các thay đổi đối với chính sách bảo mật của chúng tôi để bạn có thể xem lại chính sách bảo mật mới.Trong trường hợp đó, nếu bạn tiếp tục sử dụng dịch vụ của chúng tôi, bạn đồng ý bị ràng buộc bởi Chính sách quyền riêng tư sửa đổi này.\n',
  378. confirmText: 'OK'
  379. })
  380. },
  381. showServe(flag){
  382. if(flag==1){
  383. uni.showModal({
  384. showCancel: false,
  385. showConfirm: false,
  386. title: 'Liên hệ',
  387. content: 'MSVENI mang đến cho các bạn gái những sản phẩm thời trang mới nhất. Cho dù bạn là ai và chuộng phong cách nào đều có thể hóa thân vào thế giới của riêng mình từ những bộ sưu tập của chúng tôi.\n' +
  388. 'Các nàng ơi, cùng khoác lên mình những bộ cánh thật xinh đẹp các nàng nhé. \nHotline: 0342261765',
  389. confirmText: 'OK',
  390. success: (res) => {
  391. window.location.href='tel:0342261765'
  392. }
  393. })
  394. }
  395. if(flag==2){
  396. uni.showModal({
  397. showCancel: false,
  398. title: 'Chính sách bảo mật',
  399. content: '"MSVENI" tôn trọng và bảo vệ quyền riêng tư của người dùng. Chính sách bảo mật này sẽ cho bạn biết cách chúng tôi thu thập và sử dụng thông tin về bạn và cách chúng tôi bảo vệ thông tin đó. Trước khi trở thành người dùng "MSVENI", bạn phải đọc chính sách quyền riêng tư này một cách cẩn thận và đồng ý với tất cả các chính sách quyền riêng tư. Các điều khoản của chính sách quyền riêng tư này sẽ có hiệu lực ngay sau khi bạn đăng ký làm người dùng "MSVENI" và sẽ ràng buộc bạn và "MSVENI".\n' +
  400. '\n' +
  401. 'I. Chúng tôi thu thập thông tin người dùng nào\n' +
  402. 'Thông tin cá nhân: Bao gồm: tên, số điện thoại di động, bằng lái xe, thông tin liên lạc khẩn cấp, hình ảnh, địa chỉ gửi thư, địa điểm, địa chỉ công ty.\n' +
  403. '\n' +
  404. 'Thông tin liên quan đến thiết bị của bạn, chẳng hạn như: gaid, số IMSI, phiên bản Android, thông tin thiết bị điều dưỡng.\n' +
  405. '\n' +
  406. 'Thông tin vị trí (chỉ dành cho các dịch vụ / tính năng đặc biệt): Các loại thông tin khác nhau liên quan đến vị trí của bạn. Ví dụ: mã quốc gia, mã thành phố, mã mạng di động, thông tin vĩ độ và kinh độ để đảm bảo rằng người dùng cung cấp vị trí trong dịch vụ của chúng tôi và đánh giá điểm tín dụng của bạn.\n' +
  407. '\n' +
  408. 'Thông tin ngân hàng: bao gồm tên, số tài khoản, v.v. Chúng tôi cũng thu thập thông tin cá nhân khác và thu thập thông tin việc làm, thông tin của bên thứ ba, v.v. Tất nhiên khi sử dụng một số dịch vụ. Mục đích của việc thu thập thông tin này là để cải thiện các dịch vụ chúng tôi cung cấp cho bạn. Thông tin được cung cấp tùy thuộc vào cách bạn sử dụng nó để tham gia vào các sản phẩm hoặc dịch vụ của chúng tôi. Việc sử dụng dịch vụ của chúng tôi là hoàn toàn tự nguyện và bạn không cần cung cấp thông tin này trừ khi bạn chọn sử dụng dịch vụ của chúng tôi.\n' +
  409. '\n' +
  410. 'Khi sử dụng sản phẩm này, chúng tôi cũng cần bạn cấp các quyền thiết bị sau để bạn có thể sử dụng dịch vụ của chúng tôi tốt hơn.\n' +
  411. '- Sổ địa chỉ: Chúng tôi cần có được thông tin liên lạc để xem xét cho vay.\n' +
  412. '\n' +
  413. '- Quyền camera: Chúng tôi cũng cần sử dụng quyền camera của thiết bị để chụp ảnh ID của bạn để xác nhận danh tính của bạn.\n' +
  414. '\n' +
  415. 'II. Làm thế nào để chúng tôi bảo vệ thông tin người dùng?\n' +
  416. '(1) "MSVENI" sử dụng công nghệ mới nhất để bảo vệ thông tin của bạn. Chúng tôi sẽ tuân thủ các điều khoản hiện hành để đảm bảo thông tin của bạn được giữ bí mật và được duy trì và quyền truy cập bị hạn chế để bảo vệ bạn khỏi mọi hình thức lừa đảo. Bạn có trách nhiệm bảo vệ mã truy cập tài khoản và ID người dùng và mật khẩu của mình để đảm bảo rằng những người dùng khác không thể truy cập vào tài khoản của bạn.\n' +
  417. '\n' +
  418. '(2) Về thông tin của bạn, "MSVENI" đảm bảo tính bảo mật của dữ liệu được truyền qua ứng dụng của chúng tôi. Khi chúng tôi nhận được dữ liệu hoặc thông tin của bạn, chúng tôi sẽ sử dụng các tính năng và quy trình bảo mật để ngăn chặn truy cập trái phép.\n' +
  419. '\n' +
  420. '(3) "MSVENI" tuân thủ đầy đủ và tuân thủ luật pháp và quy định bảo vệ dữ liệu hiện hành của Việt Nam.\n' +
  421. '\n' +
  422. 'III. Làm thế nào để chúng ta quản lý thông tin người dùng?\n' +
  423. 'Thông tin chúng tôi thu thập sẽ được lưu trữ và quản lý cho các mục đích sau: Để kiểm tra so sánh giữa thông tin bạn cung cấp và thông tin thực tế, đảm bảo rằng không ai khác sử dụng thông tin đó. Sử dụng danh tính của bạn;\n' +
  424. '\n' +
  425. 'Xác định khả năng của bạn để có được một khoản vay theo các điều khoản hiện có;\n' +
  426. 'Xác nhận rằng thông tin bạn cung cấp là chính xác trong quá trình đăng ký khoản vay. Nếu khoản vay của bạn được chấp thuận, vui lòng đảm bảo quá trình giao dịch.\n' +
  427. 'Giải quyết các nghĩa vụ phát sinh từ hợp đồng;\n' +
  428. '\n' +
  429. 'Khi bạn gọi điện hoặc truy cập ứng dụng di động của chúng tôi, vui lòng liên hệ với bạn để tìm hiểu tài khoản của bạn và cung cấp thông tin nhận dạng và cung cấp thông tin cập nhật khi dịch vụ thay đổi. Chúng tôi.\n' +
  430. '\n' +
  431. 'IV. Làm thế nào để chúng tôi bảo vệ thông tin người dùng\n' +
  432. 'Chúng tôi bảo vệ tất cả thông tin người dùng và sẽ không chia sẻ thông tin người dùng với bên thứ ba trừ khi được người dùng ủy quyền.\n' +
  433. '\n' +
  434. '"MSVENI" sẽ tiết lộ thông tin cá nhân của người dùng cho các nhà cung cấp dịch vụ, người vay và thành viên nhóm của chúng tôi để giúp chúng tôi thực hiện một số hoạt động kinh doanh. Bao gồm các dịch vụ, thanh toán và thủ tục phòng chống gian lận, "MSVENI" cũng sẽ chia sẻ thông tin về người dùng bên thứ ba với bất kỳ luật pháp và tòa án nào để ngăn chặn tổn thất tài chính và báo cáo hoạt động.\n' +
  435. '\n' +
  436. 'V. Thay đổi chính sách bảo mật\n' +
  437. 'Chúng tôi sẽ gửi cho bạn một thông báo qua SMS hoặc email về các thay đổi đối với chính sách bảo mật của chúng tôi để bạn có thể xem lại chính sách bảo mật mới.Trong trường hợp đó, nếu bạn tiếp tục sử dụng dịch vụ của chúng tôi, bạn đồng ý bị ràng buộc bởi Chính sách quyền riêng tư sửa đổi này.\n',
  438. confirmText: 'OK'
  439. })
  440. }
  441. if(flag==3){
  442. uni.showModal({
  443. showCancel: false,
  444. title: 'Hỗ trợ',
  445. content: 'Đổi trả trong vòng 7 ngày nhận hàng.',
  446. confirmText: 'OK'
  447. })
  448. }
  449. },
  450. },
  451. // #ifndef MP
  452. // 标题栏input搜索框点击
  453. onNavigationBarSearchInputClicked: async function(e) {
  454. this.$api.msg('点击了搜索框');
  455. },
  456. //点击导航栏 buttons 时触发
  457. onNavigationBarButtonTap(e) {
  458. const index = e.index;
  459. if (index === 0) {
  460. this.$api.msg('点击了扫描');
  461. } else if (index === 1) {
  462. // #ifdef APP-PLUS
  463. const pages = getCurrentPages();
  464. const page = pages[pages.length - 1];
  465. const currentWebview = page.$getAppWebview();
  466. currentWebview.hideTitleNViewButtonRedDot({
  467. index
  468. });
  469. // #endif
  470. uni.navigateTo({
  471. url: '/pages/notice/notice'
  472. });
  473. }
  474. }
  475. // #endif
  476. };
  477. </script>
  478. <style lang="scss">
  479. /* #ifdef MP */
  480. .mp-search-box {
  481. position: absolute;
  482. left: 0;
  483. top: 30upx;
  484. z-index: 9999;
  485. width: 100%;
  486. padding: 0 80upx;
  487. .ser-input {
  488. flex: 1;
  489. height: 56upx;
  490. line-height: 56upx;
  491. text-align: center;
  492. font-size: 28upx;
  493. color: $font-color-base;
  494. border-radius: 20px;
  495. background: rgba(255, 255, 255, 0.6);
  496. }
  497. }
  498. /* #endif */
  499. page {
  500. .cate-section {
  501. position: relative;
  502. z-index: 5;
  503. border-radius: 16upx 16upx 0 0;
  504. margin-top: -20upx;
  505. }
  506. .carousel-section {
  507. padding: 0;
  508. .titleNview-placing {
  509. padding-top: 0;
  510. height: 0;
  511. }
  512. .carousel {
  513. .carousel-item {
  514. padding: 0;
  515. }
  516. }
  517. .swiper-dots {
  518. left: 45upx;
  519. bottom: 40upx;
  520. }
  521. }
  522. }
  523. page {
  524. background: #f5f5f5;
  525. }
  526. .m-t {
  527. margin-top: 16upx;
  528. }
  529. /* 头部 轮播图 */
  530. .carousel-section {
  531. position: relative;
  532. padding-top: 10px;
  533. .titleNview-placing {
  534. height: var(--status-bar-height);
  535. padding-top: 44px;
  536. box-sizing: content-box;
  537. }
  538. .titleNview-background {
  539. position: absolute;
  540. top: 0;
  541. left: 0;
  542. width: 100%;
  543. height: 350upx;
  544. transition: 0.4s;
  545. }
  546. }
  547. .carousel {
  548. width: 100%;
  549. height: 350upx;
  550. .carousel-item {
  551. width: 100%;
  552. height: 100%;
  553. padding: 0 28upx;
  554. overflow: hidden;
  555. }
  556. image {
  557. width: 100%;
  558. height: 100%;
  559. border-radius: 10upx;
  560. padding: 20rpx;
  561. }
  562. }
  563. .swiper-dots {
  564. display: flex;
  565. position: absolute;
  566. left: 60upx;
  567. bottom: 15upx;
  568. width: 72upx;
  569. height: 36upx;
  570. background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAABkCAYAAADDhn8LAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTMyIDc5LjE1OTI4NCwgMjAxNi8wNC8xOS0xMzoxMzo0MCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6OTk4MzlBNjE0NjU1MTFFOUExNjRFQ0I3RTQ0NEExQjMiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6OTk4MzlBNjA0NjU1MTFFOUExNjRFQ0I3RTQ0NEExQjMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6Q0E3RUNERkE0NjExMTFFOTg5NzI4MTM2Rjg0OUQwOEUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6Q0E3RUNERkI0NjExMTFFOTg5NzI4MTM2Rjg0OUQwOEUiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4Gh5BPAAACTUlEQVR42uzcQW7jQAwFUdN306l1uWwNww5kqdsmm6/2MwtVCp8CosQtP9vg/2+/gY+DRAMBgqnjIp2PaCxCLLldpPARRIiFj1yBbMV+cHZh9PURRLQNhY8kgWyL/WDtwujjI8hoE8rKLqb5CDJaRMJHokC6yKgSCR9JAukmokIknCQJpLOIrJFwMsBJELFcKHwM9BFkLBMKFxNcBCHlQ+FhoocgpVwwnv0Xn30QBJGMC0QcaBVJiAMiec/dcwKuL4j1QMsVCXFAJE4s4NQA3K/8Y6DzO4g40P7UcmIBJxbEesCKWBDg8wWxHrAiFgT4fEGsB/CwIhYE+AeBAAdPLOcV8HRmWRDAiQVcO7GcV8CLM8uCAE4sQCDAlHcQ7x+ABQEEAggEEAggEEAggEAAgQACASAQQCCAQACBAAIBBAIIBBAIIBBAIABe4e9iAe/xd7EAJxYgEGDeO4j3EODp/cOCAE4sYMyJ5cwCHs4rCwI4sYBxJ5YzC84rCwKcXxArAuthQYDzC2JF0H49LAhwYUGsCFqvx5EF2T07dMaJBetx4cRyaqFtHJ8EIhK0i8OJBQxcECuCVutxJhCRoE0cZwMRyRcFefa/ffZBVPogePihhyCnbBhcfMFFEFM+DD4m+ghSlgmDkwlOgpAl4+BkkJMgZdk4+EgaSCcpVX7bmY9kgXQQU+1TgE0c+QJZUUz1b2T4SBbIKmJW+3iMj2SBVBWz+leVfCQLpIqYbp8b85EskIxyfIOfK5Sf+wiCRJEsllQ+oqEkQfBxmD8BBgA5hVjXyrBNUQAAAABJRU5ErkJggg==);
  571. background-size: 100% 100%;
  572. .num {
  573. width: 36upx;
  574. height: 36upx;
  575. border-radius: 50px;
  576. font-size: 24upx;
  577. color: #fff;
  578. text-align: center;
  579. line-height: 36upx;
  580. }
  581. .sign {
  582. position: absolute;
  583. top: 0;
  584. left: 50%;
  585. line-height: 36upx;
  586. font-size: 12upx;
  587. color: #fff;
  588. transform: translateX(-50%);
  589. }
  590. }
  591. /* 分类 */
  592. .cate-section {
  593. display: flex;
  594. justify-content: space-around;
  595. align-items: center;
  596. flex-wrap: wrap;
  597. padding: 30upx 22upx;
  598. background: #fff;
  599. .cate-item {
  600. display: flex;
  601. flex-direction: column;
  602. align-items: center;
  603. font-size: $font-sm + 2upx;
  604. color: $font-color-dark;
  605. }
  606. /* 原图标颜色太深,不想改图了,所以加了透明度 */
  607. image {
  608. width: 88upx;
  609. height: 88upx;
  610. margin-bottom: 14upx;
  611. border-radius: 50%;
  612. opacity: 0.7;
  613. box-shadow: 4upx 4upx 20upx rgba(250, 67, 106, 0.3);
  614. }
  615. }
  616. .ad-1 {
  617. width: 100%;
  618. height: 210upx;
  619. padding: 10upx 0;
  620. background: #fff;
  621. image {
  622. width: 100%;
  623. height: 100%;
  624. }
  625. }
  626. /* 秒杀专区 */
  627. .seckill-section {
  628. padding: 4upx 30upx 24upx;
  629. background: #fff;
  630. .s-header {
  631. display: flex;
  632. align-items: center;
  633. height: 92upx;
  634. line-height: 1;
  635. .s-img {
  636. width: 140upx;
  637. height: 30upx;
  638. }
  639. .tip {
  640. font-size: $font-base;
  641. color: $font-color-light;
  642. margin: 0 20upx 0 40upx;
  643. }
  644. .timer {
  645. display: inline-block;
  646. width: 40upx;
  647. height: 36upx;
  648. text-align: center;
  649. line-height: 36upx;
  650. margin-right: 14upx;
  651. font-size: $font-sm + 2upx;
  652. color: #fff;
  653. border-radius: 2px;
  654. background: rgba(0, 0, 0, 0.8);
  655. }
  656. .icon-you {
  657. font-size: $font-lg;
  658. color: $font-color-light;
  659. flex: 1;
  660. text-align: right;
  661. }
  662. }
  663. .floor-list {
  664. white-space: nowrap;
  665. }
  666. .scoll-wrapper {
  667. display: flex;
  668. align-items: flex-start;
  669. }
  670. .floor-item {
  671. width: 150upx;
  672. margin-right: 20upx;
  673. font-size: $font-sm + 2upx;
  674. color: $font-color-dark;
  675. line-height: 1.8;
  676. image {
  677. width: 150upx;
  678. height: 150upx;
  679. border-radius: 6upx;
  680. }
  681. .price {
  682. color: $uni-color-primary;
  683. }
  684. }
  685. }
  686. .f-header {
  687. display: flex;
  688. align-items: center;
  689. height: 140upx;
  690. padding: 6upx 30upx 8upx;
  691. background: #fff;
  692. image {
  693. flex-shrink: 0;
  694. width: 80upx;
  695. height: 80upx;
  696. margin-right: 20upx;
  697. }
  698. .tit-box {
  699. flex: 1;
  700. display: flex;
  701. flex-direction: column;
  702. }
  703. .tit {
  704. font-size: $font-lg + 2upx;
  705. color: #font-color-dark;
  706. line-height: 1.3;
  707. }
  708. .tit2 {
  709. font-size: $font-sm;
  710. color: $font-color-light;
  711. }
  712. .icon-you {
  713. font-size: $font-lg + 2upx;
  714. color: $font-color-light;
  715. }
  716. }
  717. /* 团购楼层 */
  718. .group-section {
  719. background: #fff;
  720. .g-swiper {
  721. height: 650upx;
  722. padding-bottom: 30upx;
  723. }
  724. .g-swiper-item {
  725. width: 100%;
  726. padding: 0 30upx;
  727. display: flex;
  728. }
  729. image {
  730. width: 100%;
  731. height: 460upx;
  732. border-radius: 4px;
  733. }
  734. .g-item {
  735. display: flex;
  736. flex-direction: column;
  737. overflow: hidden;
  738. }
  739. .left {
  740. flex: 1.2;
  741. margin-right: 24upx;
  742. .t-box {
  743. padding-top: 20upx;
  744. }
  745. }
  746. .right {
  747. flex: 0.8;
  748. flex-direction: column-reverse;
  749. .t-box {
  750. padding-bottom: 20upx;
  751. }
  752. }
  753. .t-box {
  754. height: 160upx;
  755. font-size: $font-base + 2upx;
  756. color: $font-color-dark;
  757. line-height: 1.6;
  758. }
  759. .price {
  760. color: $uni-color-primary;
  761. }
  762. .m-price {
  763. font-size: $font-sm + 2upx;
  764. text-decoration: line-through;
  765. color: $font-color-light;
  766. margin-left: 8upx;
  767. }
  768. .pro-box {
  769. display: flex;
  770. align-items: center;
  771. margin-top: 10upx;
  772. font-size: $font-sm;
  773. color: $font-base;
  774. padding-right: 10upx;
  775. }
  776. .progress-box {
  777. flex: 1;
  778. border-radius: 10px;
  779. overflow: hidden;
  780. margin-right: 8upx;
  781. }
  782. }
  783. /* 分类推荐楼层 */
  784. .hot-floor {
  785. width: 100%;
  786. overflow: hidden;
  787. margin-bottom: 20upx;
  788. .floor-img-box {
  789. width: 100%;
  790. height: 320upx;
  791. position: relative;
  792. &:after {
  793. content: '';
  794. position: absolute;
  795. left: 0;
  796. top: 0;
  797. width: 100%;
  798. height: 100%;
  799. background: linear-gradient(rgba(255, 255, 255, 0.06) 30%, #f8f8f8);
  800. }
  801. }
  802. .floor-img {
  803. width: 100%;
  804. height: 100%;
  805. }
  806. .floor-list {
  807. white-space: nowrap;
  808. padding: 20upx;
  809. padding-right: 50upx;
  810. border-radius: 6upx;
  811. margin-top: -140upx;
  812. margin-left: 30upx;
  813. background: #fff;
  814. box-shadow: 1px 1px 5px rgba(0, 0, 0, 0.2);
  815. position: relative;
  816. z-index: 1;
  817. }
  818. .scoll-wrapper {
  819. display: flex;
  820. align-items: flex-start;
  821. }
  822. .floor-item {
  823. width: 180upx;
  824. margin-right: 20upx;
  825. font-size: $font-sm + 2upx;
  826. color: $font-color-dark;
  827. line-height: 1.8;
  828. image {
  829. width: 180upx;
  830. height: 180upx;
  831. border-radius: 6upx;
  832. }
  833. .price {
  834. color: $uni-color-primary;
  835. }
  836. }
  837. .more {
  838. display: flex;
  839. align-items: center;
  840. justify-content: center;
  841. flex-direction: column;
  842. flex-shrink: 0;
  843. width: 180upx;
  844. height: 180upx;
  845. border-radius: 6upx;
  846. background: #f3f3f3;
  847. font-size: $font-base;
  848. color: $font-color-light;
  849. text:first-child {
  850. margin-bottom: 4upx;
  851. }
  852. }
  853. }
  854. /* 猜你喜欢 */
  855. .guess-section {
  856. display: flex;
  857. flex-wrap: wrap;
  858. padding: 30upx;
  859. padding-bottom: 170upx;
  860. background: #fff;
  861. .guess-item {
  862. display: flex;
  863. flex-direction: column;
  864. width: 48%;
  865. padding-bottom: 40upx;
  866. &:nth-child(2n + 1) {
  867. margin-right: 4%;
  868. }
  869. }
  870. .image-wrapper {
  871. width: 100%;
  872. height: 330upx;
  873. border-radius: 3px;
  874. overflow: hidden;
  875. image {
  876. width: 100%;
  877. height: 100%;
  878. opacity: 1;
  879. }
  880. }
  881. .title {
  882. font-size: $font-lg;
  883. color: $font-color-dark;
  884. line-height: 80upx;
  885. }
  886. .price {
  887. font-size: $font-lg;
  888. color: $uni-color-primary;
  889. line-height: 1;
  890. .sales{
  891. color: #999999;
  892. font-size: 24upx;
  893. }
  894. .symbol{
  895. font-size: 24upx;
  896. }
  897. }
  898. }
  899. /* 底部操作菜单 */
  900. .page-bottom {
  901. position: fixed;
  902. left: 30upx;
  903. bottom: 30upx;
  904. z-index: 95;
  905. display: flex;
  906. justify-content: space-around;
  907. align-items: center;
  908. width: 690upx;
  909. height: 100upx;
  910. background: rgba(255, 255, 255, .9);
  911. box-shadow: 0 0 20upx 0 rgba(0, 0, 0, .5);
  912. border-radius: 16upx;
  913. .p-b-btn {
  914. display: flex;
  915. flex-direction: column;
  916. align-items: center;
  917. justify-content: center;
  918. font-size: $font-sm;
  919. color: $font-color-base;
  920. height: 80upx;
  921. position: relative;
  922. /* 购物车数量 */
  923. .cart-count{
  924. border: 4rpx solid #fa436a;
  925. width: 40rpx;
  926. height: 40rpx;
  927. color: #fa436a;
  928. text-align: center;
  929. border-radius: 40rpx;
  930. position: absolute;
  931. background: #fff;
  932. top: -10rpx;
  933. right: 0;
  934. }
  935. .yticon {
  936. font-size: 46upx;
  937. line-height: 48upx;
  938. color: $font-color-light;
  939. }
  940. &.active,
  941. &.active .yticon {
  942. color: $uni-color-primary;
  943. }
  944. }
  945. .action-btn-group {
  946. display: flex;
  947. height: 76upx;
  948. border-radius: 100px;
  949. overflow: hidden;
  950. box-shadow: 0 20upx 40upx -16upx #fa436a;
  951. box-shadow: 1px 2px 5px rgba(219, 63, 96, 0.4);
  952. background: linear-gradient(to right, #ffac30, #fa436a, #F56C6C);
  953. margin-left: 20upx;
  954. position: relative;
  955. .only {
  956. width: 360rpx!important;
  957. }
  958. &:after {
  959. content: '';
  960. position: absolute;
  961. top: 50%;
  962. right: 50%;
  963. transform: translateY(-50%);
  964. height: 28upx;
  965. width: 0;
  966. border-right: 1px solid rgba(255, 255, 255, .5);
  967. }
  968. .action-btn {
  969. display: flex;
  970. align-items: center;
  971. justify-content: center;
  972. width: 180upx;
  973. height: 100%;
  974. font-size: $font-base;
  975. padding: 0;
  976. border-radius: 0;
  977. background: transparent;
  978. }
  979. }
  980. }
  981. </style>