bobo лет назад: 3
Родитель
Сommit
88b76d1224

+ 36 - 0
.idea/inspectionProfiles/Project_Default.xml

@@ -0,0 +1,36 @@
+<component name="InspectionProjectProfileManager">
+  <profile version="1.0">
+    <option name="myName" value="Project Default" />
+    <inspection_tool class="JavaDoc" enabled="true" level="WARNING" enabled_by_default="true">
+      <option name="TOP_LEVEL_CLASS_OPTIONS">
+        <value>
+          <option name="ACCESS_JAVADOC_REQUIRED_FOR" value="none" />
+          <option name="REQUIRED_TAGS" value="" />
+        </value>
+      </option>
+      <option name="INNER_CLASS_OPTIONS">
+        <value>
+          <option name="ACCESS_JAVADOC_REQUIRED_FOR" value="none" />
+          <option name="REQUIRED_TAGS" value="" />
+        </value>
+      </option>
+      <option name="METHOD_OPTIONS">
+        <value>
+          <option name="ACCESS_JAVADOC_REQUIRED_FOR" value="none" />
+          <option name="REQUIRED_TAGS" value="@return@param@throws or @exception" />
+        </value>
+      </option>
+      <option name="FIELD_OPTIONS">
+        <value>
+          <option name="ACCESS_JAVADOC_REQUIRED_FOR" value="none" />
+          <option name="REQUIRED_TAGS" value="" />
+        </value>
+      </option>
+      <option name="IGNORE_DEPRECATED" value="false" />
+      <option name="IGNORE_JAVADOC_PERIOD" value="true" />
+      <option name="IGNORE_DUPLICATED_THROWS" value="false" />
+      <option name="IGNORE_POINT_TO_ITSELF" value="false" />
+      <option name="myAdditionalJavadocTags" value="date" />
+    </inspection_tool>
+  </profile>
+</component>

+ 10 - 0
.idea/runConfigurations.xml

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="RunConfigurationProducerService">
+    <option name="ignoredProducers">
+      <set>
+        <option value="com.android.tools.idea.compose.preview.runconfiguration.ComposePreviewRunConfigurationProducer" />
+      </set>
+    </option>
+  </component>
+</project>

+ 122 - 0
components/couponWrap/index.js

@@ -0,0 +1,122 @@
+// components/couponWrap/index.js
+import { parseTime } from '../../utils/util';
+import activity from '../../api/activity'
+
+Component({
+    externalClasses: ['class', 'coupon-circule-ex-class', 'coupon-item-ex-class'],
+    /**
+     * 组件的属性列表
+     */
+    properties: {
+        couponList: {
+            type: Array,
+            default: []
+        }
+    },
+
+    /**
+     * 组件的初始数据
+     */
+    data: {
+        flodMap: {
+        }
+    },
+
+    lifetimes: {
+        attached: function() {
+            // this.prepareData()
+        }
+    },
+    observers: {
+        'couponList'(dataA) { 
+           this.prepareData()
+        },
+    },
+
+    /**
+     * 组件的方法列表
+     */
+    methods: {
+        prepareData() {
+            this.data.couponList.forEach(v => {
+                v.validTimesStr = this.validTimes(v)
+                if (typeof (v.type || v.couponType) == "string") {
+                    v.type = { value: (v.type || v.couponType) }
+                } else {
+                    v.type = v.type || v.couponType
+                }
+                v.title = v.title || v.couponName || v.couponTitle
+            })
+            this.setData({
+                list: this.data.couponList
+            })
+        },
+        exFoldPanel(e) {
+            const index = e.currentTarget.dataset.index
+            if (this.data.flodMap[index]) {
+                this.data.flodMap[index] = false
+                this.setData({
+                    flodMap: this.data.flodMap
+                })
+            } else {
+                this.loadCouponData(index)
+            }
+
+        },
+        loadCouponData(index) {
+            if (this.data.list[index].isLoadCouponDetail) {
+                this.data.flodMap[index] = true
+                this.setData({
+                    flodMap: this.data.flodMap
+                })
+                return
+            }
+            activity.getCouponDetailData({ couponId: this.data.list[index].couponId }).then( res => {
+                if (res.code == 200) {
+                    const data = res.data || {}
+                    Object.assign(this.data.list[index], {
+                        description: data.description || '',
+                        bindShopType: data.bindShopType || 1,
+                        bindGoodsType: data.bindGoodsType || 1,
+                        isLoadCouponDetail: true
+                    })
+                    this.data.flodMap[index] = true
+                    this.setData({
+                        flodMap: this.data.flodMap,
+                        list: this.data.list
+                    })
+                }
+            }).catch( _ => { console.log(_)})
+        },
+        validTimes(item) {
+            if (item.isSn) {
+                if (item.couponStartTime && item.couponEndTime) {
+                    return parseTime(item.couponStartTime, "{y}.{m}.{d}") + " - " + parseTime(item.couponEndTime, "{y}.{m}.{d}")
+                } else {
+                    return ""
+                }
+            }
+            const timeCondition = item.timeCondition || {}
+            if (timeCondition.type == "DATE_TYPE_FIXED_TERM") {
+                return "领券当日起" + timeCondition.fixedTerm + "天内有效"
+            }
+            if (timeCondition.type == "DATE_TYPE_FIXED_TIME_RANGE") {
+                return parseTime(timeCondition.beginTimestamp, "{y}.{m}.{d}") + " - " + parseTime(timeCondition.endTimestamp, "{y}.{m}.{d}")
+            }
+            return ""
+        },
+        toFixStorePage(e) {
+            const couponId = this.data.list[e.currentTarget.dataset.index].couponId;
+            wx.navigateTo({
+              url: '/pages/welfareMall/couponFitStore/index?couponId=' + couponId,
+            })
+
+        },
+        toFixFoodPage(e) {
+            const couponId = this.data.list[e.currentTarget.dataset.index].couponId;
+            wx.navigateTo({
+                url: '/pages/welfareMall/couponFitFood/index?couponId=' + couponId,
+            })
+        }
+    }
+})

+ 6 - 0
components/couponWrap/index.json

@@ -0,0 +1,6 @@
+{
+    "component": true,
+    "usingComponents": {
+        "jumpmallapp": "../jumpmallapp"
+    }
+}

+ 139 - 0
components/couponWrap/index.wxml

@@ -0,0 +1,139 @@
+<!--components/couponWrap/index.wxml-->
+<block wx:if= "{{list.length>0}}">
+    <view class="coupon-list">
+        <view wx:for="{{list}}" wx:key="coupon" class="coupon-item coupon-item-ex-class">
+           <!-- 礼包 -->
+           <view class="coupon-card">
+                <view class="coupon-card-left">
+                      <view class="coupon-prices {{nums.priceClass(item)}}">
+                        <block wx:if="{{item.type.value == 'C'}}">
+                            <text>{{nums.formatReduceCost(item)}}</text>
+                            <text class="_unit">元</text>
+                        </block>
+                        <block wx:elif="{{item.type.value == 'D'}}">
+                            <text>{{nums.formatDiscount(item)}}</text>
+                            <text class="_unit">折</text>
+                        </block>
+                      </view>
+                      <view class="coupon-condition">{{nums.formatLeastCost(item)}}</view>
+                </view>
+                <view class="coupon-card-right">
+                    <view class="_title">{{item.title}}</view>
+                    <view class="_time_des">{{item.validTimesStr}}</view>
+                </view>
+                <block wx:if="{{item.isSn}}">
+                    <view wx:if="{{item.couponState == 0}}" class="coupon-card-btn">
+                      <jumpmallapp>立即使用</jumpmallapp>
+                    </view>
+                    <view wx:elif="{{item.couponState == 1}}" class="coupon-card-btn gray">
+                        已使用
+                    </view>
+                    <view class="coupon-card-btn gray" wx:else>
+                        已作废
+                    </view>
+                </block>
+                <view class="coupon-card-num" wx:else>
+                    {{item.num}}张
+                </view>
+           </view>
+           <view class="coupon-split">
+                 <view class="coupon-circule _left coupon-circule-ex-class" ></view>
+                 <view class="coupon-circule _right coupon-circule-ex-class"></view>
+           </view>
+
+           <view class="coupon-detail">
+                <view class="fold-title" data-index= "{{index}}" catchtap="exFoldPanel">使用规则 
+                    <image wx:if="{{!flodMap[index]}}" class="fold-btn" src="../../images/welfareMall/down-ico.png" />
+                    <image wx:else class="fold-btn" src="../../images/welfareMall/up-ico.png" />
+                </view>
+                <block wx:if="{{flodMap[index]}}">
+                   <view class="coupon-detail-line" style="margin-top: 22rpx;">
+                        <text class="_key">适用门店:</text>
+                        <block wx:if="{{item.bindShopType == 1}}">
+                          <text>全国所有门店</text>
+                        </block>
+                        <block wx:elif="{{item.bindShopType == 2 || item.bindShopType == 4}}">
+                           <text>适用部分门店</text>
+                           <text class="look_more_txt" data-index="{{index}}" catchtap="toFixStorePage">点击查看>></text>
+                        </block>
+                        <block wx:elif="{{item.bindShopType == 3 }}">
+                           <text>随领取门店可用</text>
+                        </block>
+                   </view>
+                   <view class="coupon-detail-line">
+                        <text class="_key">适用商品:</text>
+                        <block wx:if="{{item.bindGoodsType == 1}}">
+                          <text>特价商品除外</text>
+                        </block>
+                        <block wx:elif="{{item.bindGoodsType == 2 || item.bindGoodsType == 4}}">
+                           <text>适用部分商品</text>
+                           <text class="look_more_txt" data-index="{{index}}" catchtap="toFixFoodPage">点击查看>></text>
+                        </block>
+                   </view>
+                   <view class="coupon-detail-line">
+                        <text class="_key">适用场景:</text>
+                        <text>门店</text>
+                   </view>
+
+                   <view class="coupon-detail-line">
+                        <text class="_key">使用规则:</text>
+                   </view>
+
+                   <view class="coupon-detail-des">
+                       {{item.description}}
+                   </view>
+
+                </block>
+
+           </view>
+
+        </view>
+    </view>
+
+    <!-- 弹窗 -->
+
+</block>
+
+
+<wxs module="nums">
+        module.exports.formatReduceCost = function (item) {
+            if (item.formatReduceCost) {
+                return item.formatReduceCost;
+            } else if (item.reduceCost) {
+                return parseFloat(parseInt(item.reduceCost * 100) / 10000)
+            }
+            return 0
+        }
+        module.exports.formatLeastCost = function (item) {
+            if (!item.formatLeastCost) {
+                item.formatLeastCost = parseFloat(parseInt((item.leastCost || 0) * 100) / 10000)
+            }
+            if (item.formatLeastCost == 0) {
+                return "无限制"
+            }
+            return "满" + item.formatLeastCost + "元"
+        }
+        module.exports.formatDiscount = function(item) {
+            if (item.formatDiscount) {
+                return item.formatDiscount
+            } else if (item.discount) {
+                return parseFloat(parseInt((item.discount || 0) * 10) / 100)
+            }
+            return 0
+        }
+        module.exports.priceClass = function(item) {
+            if (item.type.value == "C") {
+                if (item.reduceCost >= 100) {
+                    return "_small"
+                }
+                return 100
+            }
+            if (item.type.value == "D" ) {
+                if (item.discount >= 10) {
+                    return "_small"
+                }
+                return ""
+            }
+            return ""
+        }
+</wxs>

+ 174 - 0
components/couponWrap/index.wxss

@@ -0,0 +1,174 @@
+/* components/couponWrap/index.wxss */
+
+.coupon-list {
+    display: block;
+    padding-top: 10rpx;
+}
+
+.coupon-item {
+    display: inline-block;
+    margin-bottom: 20rpx;
+    background: #FFF6F5;
+    font-size: 24rpx;
+    border-radius: 12rpx;
+    width: 690rpx;
+    overflow-x: hidden;
+}
+.coupon-list .coupon-item:last-child {
+    margin-bottom: 0;
+}
+
+.coupon-card {
+    height: 156rpx;
+    width: 100%;
+    position: relative;
+    display: flex;
+    flex-direction: row;
+}
+
+.coupon-card-left {
+    width: 220rpx;
+    text-align: center;
+}
+
+.coupon-prices {
+    width: 100%;
+    white-space: nowrap;
+}
+
+.coupon-condition {
+    font-size: 20rpx;
+    color: #F06255;
+    display: inline-block;
+    vertical-align: middle;
+}
+
+.coupon-prices {
+    font-size: 70rpx;
+    color: #F06255;
+    font-weight: 600;
+    height: 88rpx;
+    vertical-align: baseline;
+    box-sizing: border-box;
+    padding-top: 6rpx;
+}
+.coupon-prices._small {
+    padding-top: 20rpx;
+    font-size: 60rpx;
+}
+
+.coupon-prices ._unit {
+    font-size: 30rpx;
+}
+.coupon-condition:before, .coupon-condition:after {
+    width: 6px;
+    height: 6px;
+    background: #F06255;
+    transform:rotate(45deg);
+    margin: 0 6rpx;
+    display: inline-block;
+    content: "";
+    vertical-align: middle;
+    position: relative;
+    top: -3rpx;
+}
+
+.coupon-card-right {
+    padding-left: 4rpx;
+}
+.coupon-card-right ._title {
+    color: #444;
+    font-weight: 600;
+    font-size: 34rpx;
+    padding-top: 32rpx;
+    white-space: nowrap;
+}
+.coupon-card-right ._time_des {
+    font-size: 24rpx;
+    color: #A0A0A0;
+    margin-top: 14rpx;
+}
+
+.coupon-card-num {
+    position: absolute;
+    display: inline-block;
+    right: 32rpx;
+    top: 38rpx;
+    background: #F06255;
+    border-radius: 20rpx;
+    color: #fff;
+    font-size: 26rpx;
+    padding: 1rpx 12rpx 2px;
+}
+.coupon-card-btn {
+    position: absolute;
+    display: inline-block;
+    right: 32rpx;
+    top: 38rpx;
+    background: #F06255;
+    border-radius: 32rpx;
+    color: #fff;
+    font-size: 26rpx;
+    padding: 8rpx 16rpx 10rpx;
+}
+.coupon-card-btn.gray {
+    background:#a0a0a0;
+}
+
+.coupon-split {
+    border-top: 2rpx dashed  #F06255;
+    position: relative;
+}
+.coupon-circule {
+    height: 20rpx;
+    width: 20rpx;
+    background: #fff;
+    border-radius: 50%;
+    position: absolute;
+    top: -12rpx;
+}
+.coupon-circule._left {
+    left: -10rpx;
+}
+.coupon-circule._right {
+    right: -10rpx;
+}
+
+.coupon-detail {
+    padding: 20rpx 50rpx;
+}
+.fold-title {
+    font-size: 24rpx;
+    color: #444;
+}
+.fold-btn {
+    width: 26rpx;
+    height: 26rpx;
+    position: relative;
+    display: inline-block;
+    left: 18rpx;
+    top: 4rpx;
+}
+
+.coupon-detail-line {
+    margin-top: 12rpx;
+    font-size: 24rpx;
+    color: #444;
+}
+.coupon-detail-line ._key{
+    color: #A0A0A0;
+}
+
+.coupon-detail-des {
+    margin-top: 10rpx;
+    font-size: 24rpx;
+    color: #444;
+}
+
+.look_more_txt {
+    padding-left: 20rpx;
+    color: #F06255;
+    font-size: 22rpx;
+}
+
+

BIN
images/welfareMall/down-ico.png


BIN
images/welfareMall/store_call_ico.png


BIN
images/welfareMall/store_cr_ico.png


BIN
images/welfareMall/store_map_ico.png


BIN
images/welfareMall/store_time_ico.png


BIN
images/welfareMall/up-ico.png


+ 66 - 0
pages/welfareMall/couponFitFood/index.js

@@ -0,0 +1,66 @@
+// pages/welfareMall/couponFitFood/index.js
+Page({
+
+    /**
+     * 页面的初始数据
+     */
+    data: {
+
+    },
+
+    /**
+     * 生命周期函数--监听页面加载
+     */
+    onLoad: function (options) {
+
+    },
+
+    /**
+     * 生命周期函数--监听页面初次渲染完成
+     */
+    onReady: function () {
+
+    },
+
+    /**
+     * 生命周期函数--监听页面显示
+     */
+    onShow: function () {
+
+    },
+
+    /**
+     * 生命周期函数--监听页面隐藏
+     */
+    onHide: function () {
+
+    },
+
+    /**
+     * 生命周期函数--监听页面卸载
+     */
+    onUnload: function () {
+
+    },
+
+    /**
+     * 页面相关事件处理函数--监听用户下拉动作
+     */
+    onPullDownRefresh: function () {
+
+    },
+
+    /**
+     * 页面上拉触底事件的处理函数
+     */
+    onReachBottom: function () {
+
+    },
+
+    /**
+     * 用户点击右上角分享
+     */
+    onShareAppMessage: function () {
+
+    }
+})

+ 4 - 0
pages/welfareMall/couponFitFood/index.json

@@ -0,0 +1,4 @@
+{
+  "usingComponents": {},
+  "navigationBarTitleText": "适用商品"
+}

+ 2 - 0
pages/welfareMall/couponFitFood/index.wxml

@@ -0,0 +1,2 @@
+<!--pages/welfareMall/couponFitFood/index.wxml-->
+<text>pages/welfareMall/couponFitFood/index.wxml</text>

+ 1 - 0
pages/welfareMall/couponFitFood/index.wxss

@@ -0,0 +1 @@
+/* pages/welfareMall/couponFitFood/index.wxss */

+ 227 - 0
pages/welfareMall/couponFitStore/index.js

@@ -0,0 +1,227 @@
+// pages/welfareMall/couponFitStore/index.js
+import activity from '../../../api/activity'
+
+Page({
+
+    /**
+     * 页面的初始数据
+     */
+    data: {
+        couponId: '',
+        keyword: '',
+        page: 1,
+        pageSize: 10,
+        storeList: []
+    },
+
+    /**
+     * 生命周期函数--监听页面加载
+     */
+    onLoad: function (options) {
+        if (!options.couponId) {
+            wx.reLaunch({
+              url: '/pages/welfareMall/index/index',
+            })
+        }
+        this.data.couponId = options.couponId
+        const that = this
+        wx.getSetting({
+            success(res) {
+                // 1. scope.userLocation 为真, 代表用户已经授权
+                if (res.authSetting['scope.userLocation']) {
+                // 1.1 使用 getlocation 获取用户 经纬度位置
+                wx.getLocation({
+                    success(res){
+                        // 1.2 获取用户位置成功后,将会返回 latitude, longitude 两个字段,代表用户的经纬度位置
+                        console.log(res)
+                        const l = that.qqMapToBMap(res.longitude, res.latitude)
+                        that.setData({
+                            latitude: l[1],
+                            longitude: l[0],
+                        })
+                        that.loadStoreListData()
+                    },
+                    fail() {
+                        wx.navigateBack({
+                          delta: -1,
+                        })
+                    }
+                })
+                }else {
+                    // 2. 用户未授权的情况下, 打开授权界面, 引导用户授权.
+                    wx.openSetting({
+                        success(res) {
+                            // 2.1 如果二次授权允许了 userLocation 权限, 就再次执行获取位置的接口
+                            if (res.authSetting["scope.userLocation"]) {
+                                wx.getLocation({
+                                    success(res){
+                                        // 2.2 获取用户位置成功后,将会返回 latitude, longitude 两个字段,代表用户的经纬度位置
+                                        // 2.3 将获取到的 经纬度传值给 getAddress 解析出 具体的地址
+                                        that.setData({
+                                            latitude: res.latitude,
+                                            longitude: res.longitude,
+                                        })                
+                                        that.loadStoreListData()
+                                    },
+                                    fail() {
+                                        wx.navigateBack({
+                                          delta: -1,
+                                        })
+                                    }
+                                })
+                            }
+                        }
+                    })
+                }
+            }
+        })
+    },
+
+    qqMapToBMap(lng, lat) {
+        if (lng == null || lng == '' || lat == null || lat == '')
+            return [lng, lat];
+    
+        var x_pi = 3.14159265358979324;
+        var x = parseFloat(lng);
+        var y = parseFloat(lat);
+        var z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * x_pi);
+        var theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * x_pi);
+        var lng = (z * Math.cos(theta) + 0.0065).toFixed(5);
+        var lat = (z * Math.sin(theta) + 0.006).toFixed(5);
+        return [lng, lat];    
+    },
+
+    bMapToQQMap(lng, lat) {
+
+        if (lng == null || lng == '' || lat == null || lat == '')
+            return [lng, lat];
+    
+        var x_pi = 3.14159265358979324;
+        var x = parseFloat(lng) - 0.0065;
+        var y = parseFloat(lat) - 0.006;
+        var z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * x_pi);
+        var theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * x_pi);
+        var lng = (z * Math.cos(theta)).toFixed(7);
+        var lat = (z * Math.sin(theta)).toFixed(7);
+    
+        return [lng, lat];
+    
+    },
+
+    /**
+     * 生命周期函数--监听页面初次渲染完成
+     */
+    onReady: function () {
+
+    },
+
+    /**
+     * 生命周期函数--监听页面显示
+     */
+    onShow: function () {
+
+    },
+
+    /**
+     * 生命周期函数--监听页面隐藏
+     */
+    onHide: function () {
+
+    },
+    onConfirm(e) {
+        this.setData({
+            page: 1,
+            keyword:  e.detail.value,
+            noMore: false,
+            noResult: false,
+            storeList: []
+        })
+        this.loadStoreListData()
+    },
+
+    /**
+     * 生命周期函数--监听页面卸载
+     */
+    onUnload: function () {
+
+    },
+
+    /**
+     * 页面相关事件处理函数--监听用户下拉动作
+     */
+    onPullDownRefresh: function () {
+
+    },
+
+    onReachBottom: function () {
+        if (this.data.lock || this.data.noMore) {
+          return
+        }
+        this.data.lock = true
+        this.data.page++
+        this.loadStoreListData();
+    },
+
+    /**
+     * 用户点击右上角分享
+     */
+    onShareAppMessage: function () {
+
+    },
+
+    loadStoreListData: function() {
+        activity.getStoreListByCoupon({
+            couponId: this.data.couponId,
+            latitude: this.data.latitude,
+            longitude: this.data.longitude,
+            page: this.data.page,
+            keyword: this.data.keyword,
+            pageSize: 10,
+        }).then(data => {
+            if (data.code == 200) {
+                this.dataMapToView(data.data)
+            }
+            this.data.lock = false
+        }).catch(_ => {  
+            this.data.lock = false;
+            console.log(_)
+        })
+    },
+    dataMapToView(list) {
+        if (!Array.isArray(list) || list.length == 0) {
+            if (this.data.page == 1) {
+                this.setData({
+                    noResult: true
+                })
+            } else {
+                this.setData({
+                    noMore: true
+                })
+            }
+            return
+        }
+        list.forEach(v => {
+          v.distance = parseInt(v.distance * 100) / 100
+          if (v.distance > 1) {
+              v.distanceStr = "距离" + v.distance + "km"
+          } else {
+              v.distanceStr = "距离" + (v.distance * 100) + "m"
+          }  
+        })
+
+        this.data.storeList = this.data.storeList.concat(list)
+
+        this.setData({
+            storeList: list
+        })
+    },
+    callPhone(e) {
+        const phone = e.currentTarget.dataset.phone
+        if (phone) {
+            wx.makePhoneCall({
+                phoneNumber: phone,
+            })
+        }
+    }
+
+})

+ 6 - 0
pages/welfareMall/couponFitStore/index.json

@@ -0,0 +1,6 @@
+{
+  "usingComponents": {
+
+  },
+  "navigationBarTitleText": "适用门店"
+}

+ 40 - 0
pages/welfareMall/couponFitStore/index.wxml

@@ -0,0 +1,40 @@
+<!--pages/welfareMall/couponFitStore/index.wxml-->
+<page-wrap id="Page">
+   
+   <!-- 门店列表 -->
+   <view class="search_bar">
+        <view class="flex-row search_box">
+          <icon type="search" size="24" color="#d3d3d3" class="serach_ico"/>
+          <input class="search_input" 	placeholder-class= "search-input-tip" type="text" confirm-type="search" bindconfirm="onConfirm" value="{{keyword}}"  placeholder="输入门店名称查询"/>
+        </view>
+   </view>
+
+   <view class="store_body">
+        
+        <view class="store_list">
+            <view wx:for="{{storeList}}" class="store_item flex-row" wx:key="index">
+                <view class="_left">
+                     <view class="_store_name">{{item.shopName}}</view>
+                     <view class="_store_address flex-row"><image src="../../../images/welfareMall/store_cr_ico.png" /> <text>{{item.shopAddress}}</text></view>
+                     <view class="_store_times flex-row"><image src="../../../images/welfareMall/store_time_ico.png" /> <text>{{item.shopOpenTime}}</text></view>
+                </view>
+                <view class="_right">
+                    <view class="_distance">{{item.distanceStr}}</view>
+                    <view class="_btns flex-row">
+                        <view class="map_btn">
+                           <image src="../../../images/welfareMall/store_map_ico.png" />
+                        </view>
+                        <view class="call_btn" data-phone="{{item.shopPhone}}" catchtap="callPhone">
+                            <image src="../../../images/welfareMall/store_call_ico.png" />
+                        </view>
+                    </view>
+                </view>
+            </view>
+        </view>
+
+        <view class="no_result" wx:if="{{noResult}}">———— 抱歉,未查询到匹配的门店 ————</view>
+        <view class="no_result" wx:if="{{noMore}}">—— 人家也是有底线的 ——</view>
+
+   </view>
+
+</page-wrap>

+ 109 - 0
pages/welfareMall/couponFitStore/index.wxss

@@ -0,0 +1,109 @@
+/* pages/welfareMall/couponFitStore/index.wxss */
+page {
+    background: #f4f4f4;
+}
+.search_bar {
+    height: 106rpx;
+    width: 100vw;
+    position: fixed;
+    z-index: 1;
+    background: #fff;
+}
+.search_box {
+    width: 680rpx;
+    margin: 17rpx auto;
+    height: 72rpx;
+    background: #f3f3f3;
+    border-radius: 40px;
+}
+.serach_ico {
+    margin-left: 30rpx;
+}
+.search_input {
+    width: 580rpx;
+    padding-left: 8rpx;
+}
+
+.store_body {
+    padding-top: 106rpx;
+}
+.store_list {
+    width: 716rpx;
+    margin: auto;
+}
+.store_item {
+    width: 100%;
+    background: #fff;
+    margin-top: 20rpx;
+    border-radius: 10rpx;
+}
+.store_item ._left {
+    width: 560rpx;
+    box-sizing: border-box;
+    padding: 20rpx 0 20rpx 40rpx;
+}
+._store_name {
+    font-size: 36rpx;
+    font-weight: 600;
+    color: 444;
+}
+._store_address {
+    height: 40rpx;
+    margin-top: 30rpx;
+}
+._store_address image {
+    width: 40rpx;
+    height: 40rpx;
+}
+._store_address text {
+    font-size: 22rpx;
+    color: #a0a0a0;
+    padding-left: 10rpx;
+    width: 460rpx;
+    white-space: nowrap;
+    overflow: hidden;
+    text-overflow: ellipsis;
+}
+
+._store_times {
+    height: 40rpx;
+    margin-top: 20rpx;
+}
+
+._store_times image {
+    width: 40rpx;
+    height: 40rpx;
+}
+._store_times text {
+    font-size: 22rpx;
+    color: #a0a0a0;
+    padding-left: 10rpx;
+}
+
+.store_item ._right {
+    width: 152rpx;
+}
+.store_item ._right ._distance {
+    margin-bottom: 28rpx;
+    color: #a0a0a0;
+    font-size: 24rpx;
+}
+.store_item ._right ._btns .map_btn{
+    margin-right: 30rpx;
+}
+.store_item ._right ._btns image {
+    width: 50rpx;
+    height: 50rpx;
+}
+.search-input-tip {
+    font-size: 32rpx;
+    color: #a0a0a0;
+}
+
+.no_result {
+    font-size: 24rpx;
+    color: #B1B1B1;
+    line-height: 100rpx;
+    font-weight: 1000;
+    text-align: center;
+  }