Browse Source

Merge branch 'yufei' of gitadmin/tuoheng_qmhh_web into develop

develop
yufei111 8 months ago
parent
commit
c6f95cb915
72 changed files with 2259 additions and 121 deletions
  1. +27
    -0
      api/goods.js
  2. +9
    -0
      api/home.js
  3. +12
    -0
      api/report.js
  4. +12
    -0
      api/volunteer-service.js
  5. +8
    -3
      app.json
  6. BIN
      assets/first/home_banner.png
  7. BIN
      assets/first/report.png
  8. BIN
      assets/first/volunteer.png
  9. BIN
      assets/img/address.png
  10. BIN
      assets/img/exchange.png
  11. BIN
      assets/img/store.png
  12. +36
    -0
      components/GoodsInfo/index.js
  13. +4
    -0
      components/GoodsInfo/index.json
  14. +11
    -0
      components/GoodsInfo/index.wxml
  15. +37
    -0
      components/GoodsInfo/index.wxss
  16. +1
    -1
      components/List/index.wxml
  17. +5
    -0
      components/List/index.wxss
  18. +33
    -0
      components/exchangeInfo/index.js
  19. +4
    -0
      components/exchangeInfo/index.json
  20. +30
    -0
      components/exchangeInfo/index.wxml
  21. +83
    -0
      components/exchangeInfo/index.wxss
  22. BIN
      package_A/img/date.png
  23. BIN
      package_A/img/location.png
  24. BIN
      package_A/img/search.png
  25. BIN
      package_A/img/store_bg.png
  26. BIN
      package_A/img/success.png
  27. BIN
      package_A/img/volunteer_head.png
  28. BIN
      package_A/img/want_report.png
  29. +32
    -0
      package_A/pages/exchange-success/index.js
  30. +4
    -0
      package_A/pages/exchange-success/index.json
  31. +18
    -0
      package_A/pages/exchange-success/index.wxml
  32. +49
    -0
      package_A/pages/exchange-success/index.wxss
  33. +108
    -0
      package_A/pages/goods-detail/index.js
  34. +4
    -0
      package_A/pages/goods-detail/index.json
  35. +46
    -0
      package_A/pages/goods-detail/index.wxml
  36. +113
    -0
      package_A/pages/goods-detail/index.wxss
  37. +60
    -0
      package_A/pages/goods-page/index.js
  38. +8
    -0
      package_A/pages/goods-page/index.json
  39. +22
    -0
      package_A/pages/goods-page/index.wxml
  40. +69
    -0
      package_A/pages/goods-page/index.wxss
  41. +301
    -0
      package_A/pages/report-page/index.js
  42. +5
    -0
      package_A/pages/report-page/index.json
  43. +50
    -0
      package_A/pages/report-page/index.wxml
  44. +232
    -0
      package_A/pages/report-page/index.wxss
  45. +295
    -0
      package_A/pages/volunteer-page/index.js
  46. +4
    -0
      package_A/pages/volunteer-page/index.json
  47. +83
    -0
      package_A/pages/volunteer-page/index.wxml
  48. +185
    -0
      package_A/pages/volunteer-page/index.wxss
  49. +1
    -3
      package_first/pages/AttentionMethod/index.js
  50. +66
    -0
      package_first/pages/RulesPage/index.js
  51. +4
    -0
      package_first/pages/RulesPage/index.json
  52. +2
    -0
      package_first/pages/RulesPage/index.wxml
  53. +1
    -0
      package_first/pages/RulesPage/index.wxss
  54. +2
    -1
      package_first/pages/announceList/index.wxss
  55. +1
    -0
      package_first/pages/askAdmin/index.wxss
  56. +25
    -0
      package_first/pages/askDetail/index.js
  57. +5
    -0
      package_first/pages/askDetail/index.wxml
  58. +20
    -0
      package_first/pages/askDetail/index.wxss
  59. +12
    -7
      package_mine/pages/exchange/index.js
  60. +4
    -2
      package_mine/pages/exchange/index.json
  61. +5
    -9
      package_mine/pages/exchange/index.wxml
  62. +17
    -37
      package_mine/pages/exchange/index.wxss
  63. +0
    -42
      package_mine/pages/feedbackDetail/index.wxml
  64. +14
    -7
      package_mine/pages/history/index.wxss
  65. +20
    -1
      pages/FirstPage/index.js
  66. +1
    -1
      pages/FirstPage/index.wxml
  67. +1
    -1
      pages/FirstPage/index.wxss
  68. +1
    -0
      pages/mine/index.js
  69. +42
    -0
      project.private.config.json
  70. +7
    -5
      request/index.js
  71. +7
    -0
      utils/check.js
  72. +1
    -1
      utils/getUserInfo.js

+ 27
- 0
api/goods.js View File

@@ -0,0 +1,27 @@
const {request} = require("../request/index")

// 商品列表
export const getAnnounce = function(data) {
return request({
url: '/goods/index',
method: 'GET',
data
})
}
// 商铺信息
export const storeInfo = function(data) {
return request({
url: '/goods/merchantInfo',
method: 'GET',
data
})
}
// 兑换
export const exchange = function (data) {
return request({
url: '/goods/exchange',
method: 'POST',
showLoading: false,
data
})
}

+ 9
- 0
api/home.js View File

@@ -35,3 +35,12 @@ export const uploadBeauty = function(data) {
})
}

// 领取积分
export const getPoint = function(data) {
return request({
url: '/userPoints/receive',
method: 'POST',
data
})
}


+ 12
- 0
api/report.js View File

@@ -0,0 +1,12 @@
const {request} = require("../request/index")
/**
* 上报
* @param {*} data
*/
export const applyReport = function (data) {
return request({
url: '/westreamSubmit/report',
method: 'POST',
data
})
}

+ 12
- 0
api/volunteer-service.js View File

@@ -0,0 +1,12 @@
const {request} = require("../request/index")
/**
* 申请志愿者服务
* @param {*} data
*/
export const applyVolunteer = function (data) {
return request({
url: '/westreamVolunteer/add',
method: 'POST',
data
})
}

+ 8
- 3
app.json View File

@@ -57,8 +57,8 @@
"pages/videoDetail/index",
"pages/VolunteerActivity/index",
"pages/VolunteerDetail/index",
"pages/ActivityApply/index"
"pages/ActivityApply/index",
"pages/RulesPage/index"
]
},
{
@@ -70,7 +70,12 @@
"pages/conceal/index",
"pages/agree/index",
"pages/stores/index",
"pages/storeDetail/index"
"pages/storeDetail/index",
"pages/goods-page/index",
"pages/goods-detail/index",
"pages/exchange-success/index",
"pages/volunteer-page/index",
"pages/report-page/index"
]
},
{

BIN
assets/first/home_banner.png View File

Before After
Width: 690  |  Height: 283  |  Size: 72KB Width: 1380  |  Height: 566  |  Size: 489KB

BIN
assets/first/report.png View File

Before After
Width: 218  |  Height: 218  |  Size: 14KB

BIN
assets/first/volunteer.png View File

Before After
Width: 218  |  Height: 218  |  Size: 14KB

BIN
assets/img/address.png View File

Before After
Width: 39  |  Height: 39  |  Size: 2.1KB

BIN
assets/img/exchange.png View File

Before After
Width: 40  |  Height: 40  |  Size: 1.4KB

BIN
assets/img/store.png View File

Before After
Width: 39  |  Height: 39  |  Size: 1.8KB

+ 36
- 0
components/GoodsInfo/index.js View File

@@ -0,0 +1,36 @@
// components/GoodsInfo/index.js
Component({
/**
* 组件的属性列表
*/
properties: {
dataSource:{
type:Object,
value:{},
}
},

/**
* 组件的初始数据
*/
data: {
detail: {},
coverImage: ''
},
observers: {
'dataSource'(value) {
if(value) {
let detail = this.data.detail
detail = {...value}
detail.coverImage = value.goodsImage.split(',')[0]
this.setData({ detail })
}
}
},
/**
* 组件的方法列表
*/
methods: {

}
})

+ 4
- 0
components/GoodsInfo/index.json View File

@@ -0,0 +1,4 @@
{
"component": true,
"usingComponents": {}
}

+ 11
- 0
components/GoodsInfo/index.wxml View File

@@ -0,0 +1,11 @@
<!--components/GoodsInfo/index.wxml-->
<view class="info_container">
<image class="goods_image" src="{{detail.coverImage}}"></image>
<view class="goods_info">
<view class="goods_desc">{{detail.goodsName}}</view>
<view class="goods_points">
<text style="color: #FC8202;font-size: 38rpx;">{{detail.goodsPoints}}</text>
<text> 积分</text>
</view>
</view>
</view>

+ 37
- 0
components/GoodsInfo/index.wxss View File

@@ -0,0 +1,37 @@
/* components/GoodsInfo/index.wxss */
.info_container {
width: 100%;
max-height: 400rpx;
padding: 27rpx 20rpx;
display: flex;
flex-direction: column;
justify-content: flex-start;
align-items: center;
background-color: #ffffff;
overflow: hidden;
}
.goods_image {
width: 245rpx;
height: 212rpx;
flex-shrink: 0;
}
.goods_info {
width: 100%;
margin-top: 30rpx;
display: flex;
flex-direction: column;
justify-content: flex-start;
align-items: flex-start;
}
.goods_desc {
width: 100%;
font-size: 30rpx;
font-weight: bold;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
}
.goods_points {
margin-top: 10rpx;
font-size: 28rpx;
}

+ 1
- 1
components/List/index.wxml View File

@@ -1,5 +1,5 @@
<!--components/List/index.wxml-->
<scroll-view class="list {{list.length>0?'':'min-height'}}" scroll-y="{{scrolling}}" bindscrolltolower="loadMore" lower-threshold="80">
<scroll-view class="list {{list.length>0?'':'min-height'}}" scroll-y="{{scrolling}}" bindscrolltolower="loadMore" enable-flex="{{true}}" lower-threshold="80">
<slot></slot>
<view class="empty" wx:if="{{!loading && list.length==0}}">
<image class="image" src="/assets/img/empty.png" mode="aspectFit" lazy-load="false">

+ 5
- 0
components/List/index.wxss View File

@@ -3,6 +3,10 @@
box-sizing: border-box;
width: 100%;
height: 100%;
/* display: flex;
flex-wrap: wrap; */
/* justify-content: space-between; */
/* align-content: flex-start; */
}

.min-height {
@@ -17,6 +21,7 @@
}

.empty {
width: 100%;
display: flex;
flex-direction: column;
align-items: center;

+ 33
- 0
components/exchangeInfo/index.js View File

@@ -0,0 +1,33 @@
// components/exchangeInfo/index.js
Component({
/**
* 组件的属性列表
*/
properties: {
dataSource: {}
},

/**
* 组件的初始数据
*/
data: {
item: {}
},

observers: {
'dataSource'(value) {
let item = {}
item = {...value}
if(value.goods.goodsImage) {
item.coverImage = value.goods.goodsImage.split(',')[0]
}
this.setData({item})
}
},
/**
* 组件的方法列表
*/
methods: {

}
})

+ 4
- 0
components/exchangeInfo/index.json View File

@@ -0,0 +1,4 @@
{
"component": true,
"usingComponents": {}
}

+ 30
- 0
components/exchangeInfo/index.wxml View File

@@ -0,0 +1,30 @@
<!--components/exchangeInfo/index.wxml-->
<view class="exchange_info">
<!-- 商品信息 -->
<view class="info_head">
<image class="exchange_img" src="{{item.coverImage}}"></image>
<view class="info_box">
<view class="goods_title">
<text class="goods_name" >{{item.goods.goodsName}}</text>
<view class="status_tab" wx:if="{{item.exchangeFlag === 1}}" style="color: #5472EF;background-color: #DCE3FE;" >已核销</view>
<view class="status_tab" wx:else style="color: #EB6100;background-color: rgba(235, 97, 0, 0.2);" >未核销</view>
</view>
<text class="info_item">{{item.goods.goodsSpec}}</text>
<view class="points_box">实付:<text style="color: #2D84E4;">{{item.goods.goodsPoints * item.goodsCount}}</text> 积分</view>
</view>
</view>
<!-- 店铺信息 -->
<view class="info_foot">
<view class="stores_info">
<image class="store_icon" src="../../assets/img/store.png"></image>
<text class="store_text">商家:{{item.merchant.shopsName}}</text>
</view>
<view class="stores_info">
<image class="store_icon" src="../../assets/img/address.png"></image>
<text class="store_text">地址:{{item.merchant.shopsAddress}}</text>
</view>
</view>
<!-- 按钮区域 -->
<slot></slot>

</view>

+ 83
- 0
components/exchangeInfo/index.wxss View File

@@ -0,0 +1,83 @@
/* components/exchangeInfo/index.wxss */
.exchange_info {
width: 100%;
background-color: #ffffff;
display: flex;
flex-direction: column;
justify-content: flex-start;
align-items: flex-end;
border-bottom: 2rpx solid #eeeeee;
}
.info_head {
width: 100%;
padding: 40rpx 35rpx;
display: flex;
justify-content: flex-start;
align-items: flex-start;
border-bottom: 1rpx solid #D3DCE6;
}
.exchange_img {
width: 155rpx;
height: 155rpx;
flex-shrink: 0;
}
.info_box {
margin-left: 25rpx;
display: flex;
flex-direction: column;
justify-content: flex-start;
align-items: flex-start;
}
.goods_title {
width: 100%;
display: flex;
justify-content: space-between;
align-items: center;
}
.goods_name {
width: calc(100vw - 420rpx);
font-size: 32rpx;
font-weight: bold;
}
.status_tab {
width: 100rpx;
padding: 8rpx 10rpx;
font-size: 26rpx;
}
.info_item {
width: calc(100vw - 300rpx);
margin-top: 20rpx;
font-size: 26rpx;
color: #5B5B5B;
}
.points_box {
margin-top: 20rpx;
font-size: 28rpx;
}
.info_foot {
width: 100%;
padding: 32rpx 35rpx 10rpx 35rpx;
border-bottom: 1rpx solid #D3DCE6;
display: flex;
flex-direction: column;
justify-content: flex-start;
align-items: flex-start;
}
.stores_info {
width: 100%;
display: flex;
justify-content: flex-start;
align-items: center;
margin-bottom: 30rpx;
}
.store_icon {
width: 40rpx;
height: 40rpx;
margin-right: 20rpx;
flex-shrink: 0;
}
.goods_name, .info_item, .store_text {
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}

BIN
package_A/img/date.png View File

Before After
Width: 66  |  Height: 74  |  Size: 1.3KB

BIN
package_A/img/location.png View File

Before After
Width: 51  |  Height: 52  |  Size: 3.7KB

BIN
package_A/img/search.png View File

Before After
Width: 35  |  Height: 35  |  Size: 1.4KB

BIN
package_A/img/store_bg.png View File

Before After
Width: 326  |  Height: 259  |  Size: 49KB

BIN
package_A/img/success.png View File

Before After
Width: 289  |  Height: 226  |  Size: 34KB

BIN
package_A/img/volunteer_head.png View File

Before After
Width: 1500  |  Height: 638  |  Size: 740KB

BIN
package_A/img/want_report.png View File

Before After
Width: 750  |  Height: 539  |  Size: 211KB

+ 32
- 0
package_A/pages/exchange-success/index.js View File

@@ -0,0 +1,32 @@
// package_A/pages/exchange-success/index.js
import {wgs84togcj02} from '../../../utils/util.js'
Page({

/**
* 页面的初始数据
*/
data: {
storeDetail: {}
},

/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
if(options.data) {
let storeDetail = this.data.storeDetail
storeDetail = JSON.parse(decodeURIComponent(options.data))
this.setData({storeDetail})
}
},

navigateTo(){
const {longitude,latitude} = this.data.storeDetail
let coordinate=wgs84togcj02([longitude,latitude])
wx.openLocation({
latitude: parseFloat(coordinate[1]), // 纬度,范围为-90~90,负数表示南纬
longitude: parseFloat(coordinate[0]), // 经度,范围为-180~180,负数表示西经
scale: 17, // 缩放比例
})
}
})

+ 4
- 0
package_A/pages/exchange-success/index.json View File

@@ -0,0 +1,4 @@
{
"usingComponents": {},
"navigationBarTitleText": "兑换成功"
}

+ 18
- 0
package_A/pages/exchange-success/index.wxml View File

@@ -0,0 +1,18 @@
<!--package_A/pages/exchange-success/index.wxml-->
<view class="success_container">
<view class="success_head">
<image style="width: 290rpx;height: 226rpx;" src="../../img/success.png"></image>
<text style="font-size: 36rpx;margin: 30rpx 0;">恭喜您,兑换成功</text>
<text style="font-size: 26rpx;color: #8e8e8e;">兑换成功!请到商家店铺进行兑换</text>
</view>
<view class="segmentation"></view>
<!-- 地址导航 -->
<view class="store_info">
<view class="info_head">
<image style="width: 52rpx;height: 52rpx;margin-right: 30rpx;" src="../../img/location.png"></image>
<text>自提地址</text>
</view>
<view class="store_address">{{storeDetail.shopsAddress}}</view>
<view class="nav_btn" bindtap="navigateTo">导航</view>
</view>
</view>

+ 49
- 0
package_A/pages/exchange-success/index.wxss View File

@@ -0,0 +1,49 @@
/* package_A/pages/exchange-success/index.wxss */
.success_container {
width: 100%;
display: flex;
flex-direction: column;
justify-content: flex-start;
align-items: flex-start;
}
.success_head {
width: 100%;
height: 540rpx;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}
.segmentation {
width: 100%;
height: 20rpx;
background-color: #F1F5F8;
}
.store_info {
width: 100%;
padding: 40rpx 30rpx 0 30rpx;
display: flex;
flex-direction: column;
justify-content: flex-start;
align-items: flex-start;
font-size: 28rpx;
}
.info_head {
display: flex;
justify-content: flex-start;
align-items: center;
}
.store_address {
margin-top: 40rpx;
}
.nav_btn {
width: 100%;
height: 90rpx;
margin-top: 90rpx;
line-height: 90rpx;
text-align: center;
background: #416CE2;
border-radius: 40px;
font-size: 32rpx;
color: #ffffff;
}

+ 108
- 0
package_A/pages/goods-detail/index.js View File

@@ -0,0 +1,108 @@
// package_A/pages/goods-detail/index.js
import {storeInfo, exchange} from '../../../api/goods.js'
Page({

/**
* 页面的初始数据
*/
data: {
// 商品详情信息
detail: {},
// 轮播图列表
coverList: [],
// 详情图片列表
detailImages: [],
// 商铺信息
storeDetail: {},
// 商品数量
numbers: 1
},

/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
if(options.data) {
let detail = this.data.detail
let coverList = []
let detailImages = []
detail = JSON.parse(decodeURIComponent(options.data))
this.getStoreInfo({merchantId: detail.merchantId})
if(detail.goodsImage) {
coverList = detail.goodsImage.split(',')
}
if(detail.goodsDetailImage) {
detailImages = detail.goodsDetailImage.split(',')
}
this.setData({detail, coverList, detailImages})
}
},

// 获取商铺信息
async getStoreInfo(params) {
const res = await storeInfo(params)
if(res.code === 0) {
let storeDetail = this.data.storeDetail
storeDetail = res.data
this.setData({
storeDetail
})
}
},

/**
* 生命周期函数--监听页面显示
*/
onShow() {

},
// 加数量
addNum() {
let numbers = this.data.numbers
this.setData({
numbers: numbers + 1
})
},
// 减数量
reduceNum() {
let numbers = this.data.numbers
if(numbers !== 1) {
this.setData({
numbers: numbers - 1
})
} else {
wx.showToast({
icon: "none",
title: '请至少选择一件商品!',
})
}
},
// 兑换
exchangeGoods() {
let params = {}
params.goodsId = this.data.detail.id
params.goodsCount = this.data.numbers
params.openid = wx.getStorageSync('openid')
exchange(params).then(res=> {
if(res.code === 0) {
// 成功跳转页面
wx.navigateTo({
url: '/package_A/pages/exchange-success/index?data=' + encodeURIComponent(JSON.stringify(this.data.storeDetail))
})
} else {
wx.showToast({
icon: 'error',
title: res.msg,
duration: 2000
})
}
}).catch((e)=> {
wx.showToast({
icon: 'error',
title: e.msg,
duration: 2000
})
})
}

})

+ 4
- 0
package_A/pages/goods-detail/index.json View File

@@ -0,0 +1,4 @@
{
"usingComponents": {},
"navigationBarTitleText": "商品详情"
}

+ 46
- 0
package_A/pages/goods-detail/index.wxml View File

@@ -0,0 +1,46 @@
<!--package_A/pages/goods-detail/index.wxml-->
<view class="goods_detail">
<!-- 轮播图 -->
<swiper class="swiper_box" autoplay>
<swiper-item class="swiper_item" wx:for="{{coverList}}" wx:key="index">
<image style="width:100vw;height: 435rpx;" mode="scaleToFill" src="{{item}}"></image>
</swiper-item>
</swiper>
<!-- 商品信息 -->
<view class="goods_info">
<view class="goods_name">{{detail.goodsName}}</view>
<view class="goods_points_num">
<view class="goods_point">
<text style="color: #3175E8; font-size: 38rpx;">{{detail.goodsPoints}}</text> 积分
</view>
<view class="goods_num_box">
<text class="operate_num" bindtap="reduceNum">-</text>
<text class="goods_num">{{numbers}}</text>
<text class="operate_num" bindtap="addNum">+</text>
</view>
</view>
</view>
<!-- 商品规格 -->
<view class="goods_info">
<text class="goods_name">规格</text>
<text class="goods_desc">{{detail.goodsSpec}}</text>
</view>
<!-- 店铺信息 -->
<view class="stores_info">
<image class="stores_img" src="{{storeDetail.shopsImage}}"></image>
<view class="stores_message">
<text class="goods_name">{{storeDetail.shopsName}}</text>
<text class="goods_desc">{{storeDetail.shopsAddress}}</text>
</view>
</view>
<!-- 详情图片展示 -->
<view class="detail_images">
<image wx:for="{{detailImages}}" wx:key="index" style="width: 100vw;" mode="widthFix" src="{{item}}"></image>
</view>

<!-- 按钮 -->
<view class="btn_box">
<view class="btn_item" bindtap="exchangeGoods">立即兑换</view>
</view>

</view>

+ 113
- 0
package_A/pages/goods-detail/index.wxss View File

@@ -0,0 +1,113 @@
/* package_A/pages/goods-detail/index.wxss */
.goods_detail {
min-height: 100vh;
width: 100%;
padding-bottom: 120rpx;
display: flex;
flex-direction: column;
justify-content: flex-start;
align-items: flex-start;
background-color: #F2F6F9;
position: relative;
}
.swiper_box {
width: 100vw;
height: 435rpx;
}
.swiper_item {
width: 100%;
height: 100%;
}
.goods_info {
width: 100%;
padding: 30rpx 32rpx;
margin-bottom: 20rpx;
display: flex;
flex-direction: column;
justify-content: flex-start;
align-items: flex-start;
background-color: #fff;
}
.goods_name {
width: 100%;
font-size: 34rpx;
font-weight: bold;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.goods_points_num {
width: 100%;
display: flex;
justify-content: space-between;
align-items: center;
}
.goods_num_box {
margin-top: 30rpx;
display: flex;
justify-content: space-between;
align-items: center;
}
.goods_num_box {
display: flex;
justify-content: end;
align-items: center;
}
.operate_num {
width: 52rpx;
height: 52rpx;
line-height: 52rpx;
text-align: center;
border-radius: 50%;
border: 1rpx solid #AAAAAA;
font-size: 40rpx;
color: #AAAAAA;
}

.goods_num {
font-size: 30rpx;
margin: 0 12rpx;
}
.goods_desc {
font-size: 26rpx;
color: #666666;
margin-top: 30rpx;
}
.stores_info {
width: 100%;
margin-bottom: 20rpx;
padding: 30rpx 32rpx;
display: flex;
justify-content: flex-start;
align-items: center;
background-color: #fff;
}
.stores_img {
width: 102rpx;
height: 102rpx;
flex-shrink: 0;
}
.stores_message {
margin-left: 30rpx;
display: flex;
flex-direction: column;
justify-content: flex-start;
align-items: flex-start;
}
.btn_box {
width: 100%;
padding: 0 30rpx;
position: fixed;
bottom: 20rpx;
left: 0;
}
.btn_item {
width: 100%;
height: 90rpx;
line-height: 90rpx;
text-align: center;
background-color: #3175E8;
font-size: 32rpx;
color: #fff;
border-radius: 40rpx;
}

+ 60
- 0
package_A/pages/goods-page/index.js View File

@@ -0,0 +1,60 @@
// package_A/pages/goods-page/index.js
import {getUserData} from '../../../api/login.js'
Page({

/**
* 页面的初始数据
*/
data: {
list: [],
// 列表数据筛选条件
params: {
goodsName: ''
},
goodsName: '',
current: "/goods/index",
// 用户信息
userInfo: {}
},
onShow() {
this.getUserInfo()
},

// 获取
getUserInfo() {
const params = {}
params.tenantId = wx.getStorageSync('tenant').tenantId
params.openid = wx.getStorageSync('openid')
getUserData(params).then(success=> {
const userInfo = success.data
wx.setStorage({
key: 'userInfo',
data:userInfo
})
this.setData({userInfo})
})
},

/* 输入商品名称搜索 */
search(e) {
let params = this.data.params
params.goodsName = this.data.goodsName
this.setData({ params })
},
/* 更新数据 */
updateList(e) {
let list = this.data.list.concat(e.detail || [])
this.setData({ list })
},
/* 重置数据 */
resetList() {
this.setData({ list: [] })
},
/* 跳转至详情页 */
showDetail(e) {
let data = e.currentTarget.dataset.item
wx.navigateTo({
url: '/package_A/pages/goods-detail/index?data='+ encodeURIComponent(JSON.stringify(data)),
})
}
})

+ 8
- 0
package_A/pages/goods-page/index.json View File

@@ -0,0 +1,8 @@
{
"usingComponents": {
"list": "../../../components/List/index",
"GoodsInfo": "../../../components/GoodsInfo/index"
},
"navigationBarTitleText": "积分商城",
"navigationBarBackgroundColor": "#D9E6FE"
}

+ 22
- 0
package_A/pages/goods-page/index.wxml View File

@@ -0,0 +1,22 @@
<!--package_A/pages/goods-page/index.wxml-->
<view class="store_container">
<!-- 积分展示 -->
<view class="store_head">
<view class="head_left">
<text style="font-size:30rpx;margin-bottom: 15rpx;">我的积分</text>
<text style="font-size: 82rpx;font-weight: bold;">{{userInfo.mallPoints}}</text>
</view>
<image class="head_img" src="../../img/store_bg.png"></image>
</view>
<!-- 搜索 -->
<view class="search_box">
<input class="goods_search" type="text" placeholder="请输入搜索的商品名称" model:value="{{goodsName}}" placeholder-class="placeholder-style" bindconfirm="search" bindblur="search"/>
<image class="search_icon" src="../../img/search.png"></image>
</view>
<!-- 列表 -->
<list id="list" class="goods_list" url="{{current}}" bind:update-list="updateList" list="{{list}}" bind:reset-list="resetList" params="{{params}}">
<view class="goods_item" data-item="{{item}}" bindtap="showDetail" wx:for="{{list}}" wx:key="index">
<GoodsInfo dataSource="{{item}}"></GoodsInfo>
</view>
</list>
</view>

+ 69
- 0
package_A/pages/goods-page/index.wxss View File

@@ -0,0 +1,69 @@
/* package_A/pages/goods-page/index.wxss */
.store_container {
width: 100%;
min-height: 100vh;
padding: 30rpx;
background: linear-gradient(0deg, #F2F6F9 30%, #D9E6FE);
}
.store_head {
width: 100%;
display: flex;
justify-content: space-between;
align-items: center;
}
.head_left {
height: 100%;
padding: 0 0 40rpx 20rpx;
display: flex;
flex-direction: column;
justify-content: flex-end;
align-items: flex-start;
}
.head_img {
width: 326rpx;
height: 259rpx;
}
.search_box {
width: 100%;
margin-top: 15rpx;
padding: 15rpx 25rpx;
display: flex;
justify-content: space-between;
align-items: center;
border: 1rpx solid #959595;
border-radius: 32rpx;
}
.goods_search {
flex: 1;
font-size: 30rpx;
}
.placeholder-style {
font-size: 30rpx;
color: #A6A6A6;
}
.search_icon{
height: 34rpx;
width: 34rpx;
margin-left: 10rpx;
}
/* 列表样式 */
.goods_list {
width: 100%;
height: calc(100vh - 400rpx);
margin-top: 30rpx;
display: flex;
flex-wrap: wrap;
justify-content: space-between;
align-content: flex-start;
}
.goods_item {
width: 48%;
max-height: 400rpx;
margin-bottom: 30rpx;
}
scroll-view {
display: flex !important;
flex-wrap: wrap !important;
justify-content: space-between !important;
align-content: flex-start !important;
}

+ 301
- 0
package_A/pages/report-page/index.js View File

@@ -0,0 +1,301 @@
// package_A/pages/report-page/index.js
import {getOssAuth} from '../../../api/uploadOss.js'
import {applyReport} from '../../../api/report.js'
import {Base64} from 'js-base64'
import {isNoCharacters} from '../../../utils/check.js'
const crypto = require('crypto-js')
Page({

/**
* 页面的初始数据
*/
data: {
checkAgree: false, // 是否勾选用户协议
form: {},
ossForm: {},
imagePreviewList: [], // 上传图片预览列表
imageList: [], // 图片列表
// 表单验证
formRules: {
location: {
validator: function (value) {
return value;
},
warning: false
},
problemDesc: {
validator: function (value) {
return value && isNoCharacters(value);
},
warning: false
},
imageList: {
validator: function (value) {
return value.length!=0;
},
warning: false
}
}
},

/**
* 生命周期函数--监听页面加载
*/
onLoad: function () {
},


/**
* 生命周期函数--监听页面显示
*/
onShow: function () {
this.getOssAuthForm()
const openid = wx.getStorageSync('openid')
let form = this.data.form
form.openid = openid
this.setData({form})
},
bindValue(e) {
let name = e.currentTarget.dataset.name;
let form = this.data.form;
form[name] = e.detail.value;
this.setData({
form,
})
this.validate(name, e.detail.value)
},
validate(name) {
let formRules = this.data.formRules;
let validator = formRules[name].validator
let result
if(name === 'imageList') {
result = validator ? !validator(this.data.imageList) : false
} else {
result = validator ? !validator(this.data.form[name]) : false;
}
formRules[name].warning = result
this.setData({formRules})
return result
},
validateForm() {
return new Promise((resolve, reject) => {
try {
let formRules = this.data.formRules;
let result = false;
for (let key in formRules) {
let temp = this.validate(key)
if (temp) {
result = temp
}
}
resolve(!result)
} catch (e) {
reject(e)
}
})
},
/* 获取图片上传鉴权 */
getOssAuthForm() {
let that = this
getOssAuth().then((res)=> {
let client = {
region: 'oss-cn-shanghai',
secure: true,
accessKeyId: res.accessKeyId,
accessKeySecret: res.accessKeySecret,
securityToken: res.securityToken,
bucket: 'ta-tech-image'
}
// 计算签名
function computeSignature(accessKeySecret, canonicalString) {
return crypto.enc.Base64.stringify(crypto.HmacSHA1(canonicalString, accessKeySecret));
}
const date = new Date();
date.setHours(date.getHours() + 1);
const policyText = {
expiration: date.toISOString(), // 设置policy过期时间。
conditions: [
// 限制上传大小。
["content-length-range", 0, 1024 * 1024 * 1024],
],
};
// 获取签名
const policy = Base64.encode(JSON.stringify(policyText)) // policy必须为base64的string。
const signature = computeSignature(client.accessKeySecret, policy)
let ossForm = that.data.ossForm
ossForm = {
OSSAccessKeyId: client.accessKeyId,
signature,
policy,
SecurityToken: client.securityToken
}
that.setData({ossForm})
})
},
/* 上传图片 */
uploadImage(){
wx.chooseMedia({
count: 5 - this.data.imageList.length, // 最多可以选择的图片张数,默认9
mediaType: ['image'], // 图片
sizeType: ['original'], // original 原图,compressed 压缩图,默认二者都有
sourceType: ['album', 'camera'], // album 从相册选图,camera 使用相机,默认二者都有
success:(res) =>{
const list = res.tempFiles.map((item)=> {
return item.tempFilePath
})
// success
let imagePreviewList = this.data.imagePreviewList.concat(list)
let imageList = this.data.imageList.concat(list);
this.setData({ imageList, imagePreviewList })
this.validate('imageList')
},
fail: (e) => {
console.log(e);
}
})
},
// 删除图片
deleteImage(e) {
let index = this.getCurrentData(e);
let imageList = this.data.imageList
imageList.splice(index, 1)
let imagePreviewList = this.data.imagePreviewList
imagePreviewList.splice(index, 1)
this.setData({ imageList, imagePreviewList })
this.validate('imageList')
},
getCurrentData(e) {
return e.currentTarget.dataset.current;
},

/**
* 选择位置
*/
selectLocation() {
let location = wx.getStorageSync('location')
wx.chooseLocation({
latitude: location.latitude,
longitude: location.longitude,
success: (res)=>{
let form = this.data.form
form.location = res.address
form.latitude = res.latitude
form.longitude = res.longitude
this.setData({form})
this.validate('location')
},
fail(e) {
console.log(e);
}
})
},
/**
* 同意用户协议
*/
checkBoxChange() {
let checkAgree = this.data.checkAgree
this.setData({
checkAgree: !checkAgree
})
},
// 用户服务协议
showAgree() {
wx.navigateTo({
url: '/package_A/pages/agree/index',
})
},
// 隐私政策
showConceal() {
wx.navigateTo({
url: '/package_A/pages/conceal/index',
})
},
/**
* 图片上传到oss
*/
/* 表单上传 */
submit(){
if(this.data.checkAgree) {
this.validateForm().then(res => {
if(res) {
let ossForm = this.data.ossForm
let temp = []
if (this.data.imageList.length > 0) {
wx.showLoading({title:"上传中",mask:true})
temp = this.data.imageList.map(item => {
// 设置文件上传路径
const randomString = Math.random().toString(36).slice(2)
const timestamp = new Date().getTime()
const key = `imagedir/${randomString}_${timestamp}.png`
// 上传图片
return new Promise((resolve, reject)=> {
wx.uploadFile({
url: 'https://ta-tech-image.oss-cn-shanghai.aliyuncs.com',
filePath: item,
name: 'file',
formData: {
key,
OSSAccessKeyId: ossForm.OSSAccessKeyId,
signature: ossForm.signature,
policy: ossForm.policy,
'x-oss-security-token': ossForm.SecurityToken
},
success: (res)=> {
if(res.statusCode === 204) {
// 上传成功,将图片路径resolve出去
resolve(key)
} else {
wx.showToast({
title: '图片上传失败',
})
reject('图片上传失败')
}
},
fail: (e)=> {
console.log(e);
reject('图片上传失败')
}
})
})
})
Promise.all(temp).then((res)=> {
let form = this.data.form
form.photoUrl = res.join(',')
applyReport(form).then(res => {
if (res.code === 0) {
wx.showModal({
title: '上报成功',
confirmColor: '#3175E8',
showCancel: false,
content: '等待审核,审核通过后就可以获得积分。',
success(res) {
if(res.confirm) {
wx.navigateBack()
}
}
})
}
}).finally(()=>{
wx.hideLoading();
})
}).catch(()=> {
wx.hideLoading()
})
}
}
})
} else {
wx.showToast({
icon: 'none',
title: '请先勾选用户服务协议以及隐私政策!',
})
}
}
})

+ 5
- 0
package_A/pages/report-page/index.json View File

@@ -0,0 +1,5 @@
{
"usingComponents": {},
"navigationBarTitleText": "我要上报",
"navigationBarBackgroundColor": "#008CFF"
}

+ 50
- 0
package_A/pages/report-page/index.wxml View File

@@ -0,0 +1,50 @@
<!--package_A/pages/report-page/index.wxml-->
<view class="upload_container">
<image class="head_img" mode="widthFix" src="../../img/want_report.png"></image>
<view class="form_container">
<!-- 河道信息 -->
<view class="info_box">
<view class="box_title">河道信息</view>
<view class="form_item {{formRules.location.warning ? 'warning' : ''}}">
<text><text style="color: red;">* </text>问题位置</text>
<view class="value_box" bindtap="selectLocation">
<text class="picker_text" wx:if="{{form.location}}">{{form.location}}</text>
<text style="color: #a6a6a6;font-size: 28rpx;" wx:else>请选择问题位置</text>
<image src="../../../assets/img/location.png" style="width:54rpx;height:54rpx;position: absolute;right: 0rpx;top: 7rpx;z-index: 99;"></image>
</view>
<text class="tips">请选择问题位置</text>
</view>
<view class="use_purpose {{formRules.problemDesc.warning ? 'warning' : ''}}">
<text><text style="color: red;">* </text>问题描述</text>
<textarea maxlength="500" style="width:620rpx; height: 120rpx;padding: 20rpx;" type="text" adjust-position="{{true}}" placeholder="请输入问题描述" placeholder-style="font-size: 28rpx; color: #A6A6A6;" value="{{form.problemDesc}}" data-name="problemDesc" name="problemDesc" bindblur="bindValue" />
<text class="tips">请输入问题描述</text>
</view>
<view class="upload_images {{formRules.imageList.warning? 'warning': ''}}">
<text><text style="color: red;">* </text>上传图片</text>
<view class="image_list">
<view class="image_preview" wx:for="{{imagePreviewList}}" wx:key="index">
<image class="image_item" src="{{item}}" mode="aspectFill" data-item="{{item}}">
</image>
<div class="close" data-current="{{index}}" catchtap="deleteImage"></div>
</view>
<view class="upload_image" bindtap="uploadImage" wx:if="{{imageList.length<5}}">
<image style="height: 53rpx;width: 53rpx;margin-bottom: 27rpx;" mode="widthFix" src="../../../assets/img/open_upload.png"></image>
<text style="font-size: 28rpx;">上传图片</text>
</view>
</view>
<text class="tips">请上传图片</text>
</view>
</view>

<view class="safe_box">
<label class="checkbox" bindtap="checkBoxChange">
<checkbox value="{{checkAgree}}" /><text>同意</text>
</label>
<text style="color: #2a82e4;" bindtap="showAgree">《用户服务协议》</text>和<text style="color: #2a82e4;" bindtap="showConceal">《隐私政策》</text>
</view>
<!-- 按钮 -->
<view class="{{ checkAgree ? 'btn_item submit_btn' : 'btn_item'}}" bindtap="submit">上报</view>
</view>


</view>

+ 232
- 0
package_A/pages/report-page/index.wxss View File

@@ -0,0 +1,232 @@
/* package_A/pages/report-page/index.wxss */
.upload_container {
width: 100%;
min-height: 100vh;
display: flex;
flex-direction: column;
justify-content: flex-start;
align-items: flex-start;
position: relative;
background-color: #f8f8f8;
}
.head_img {
width: 100vw;
}
.form_container {
width: 100%;
margin-top: -300rpx;
padding: 30rpx;
display: flex;
flex-direction: column;
justify-content: flex-start;
align-items: flex-start;
}
.info_box {
width: 100%;
padding: 30rpx 27rpx;
margin-bottom: 40rpx;
background-color: #FFFFFF;
border-radius: 20rpx;
display: flex;
flex-direction: column;
justify-content: flex-start;
align-items: flex-start;
font-size: 28rpx;
color: #6F6F6F;
}
.box_title {
width: 100%;
margin-bottom: 30rpx;
font-size: 30rpx;
color: #000000;
font-weight: bold;
}
.form_item {
width: 100%;
padding: 15rpx 0;
/* margin-bottom: 30rpx; */
display: flex;
justify-content: space-between;
align-items: center;
position: relative;
font-size: 28rpx;
color: #666666;
border-top: 1rpx solid #EDEDED;
}
.use_purpose {
width: 100%;
padding: 25rpx 0;
display: flex;
flex-direction: column;
justify-content: flex-start;
align-items: flex-start;
position: relative;
font-size: 28rpx;
color: #666666;
border-top: 1rpx solid #EDEDED;
}
.value_box {
width: 460rpx;
min-height: 68rpx;
padding: 0 50rpx 0 10rpx;
display: flex;
justify-content: flex-end;
align-items: center;
border-radius: 4rpx;
position: relative;
color: #333333;
font-size: 28rpx;
text-align: end;
}
.picker_text {
width: 100%;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.disable_class {
border: none;
color: #006DF7;
}
.tips{
position: absolute;
bottom: -32rpx;
left: -13rpx;
color: red;
font-size: 24rpx;
transform: translate(27rpx, -5rpx);
display: none;
}
.form_item.warning .tips, .use_purpose.warning .tips, .upload_images.warning .tips{
display: block;
}

/* 上传图片 */
.upload_images {
width: 100%;
padding: 25rpx 0;
display: flex;
flex-direction: column;
justify-content: flex-start;
align-items: flex-start;
font-size: 28rpx;
color: #666666;
position: relative;
border-top: 1rpx solid #EDEDED;
}
.image_list {
width: 500rpx;
margin-top: 30rpx;
display: flex;
flex-wrap: wrap;
justify-content: flex-start;
align-content: flex-start;
}
.image_preview {
height: 200rpx;
width: 200rpx;
margin-right: 20rpx;
margin-bottom: 20rpx;
position: relative;
}
.image_item {
height:100%;
width: 100%;
margin-bottom: 20rpx;
margin-right: 30rpx;
border-radius: 10rpx;
}
.close{
position: absolute;
top:0;
right:0;
transform: translate(40%,-40%);
height:50rpx;
width:50rpx;
background:rgba(179, 179, 179, 0.5);
border-radius: 50%;
z-index: 10;
}
.close::before{
content: "";
display: block;
position: absolute;
width: 60%;
height: 6rpx;
top:50%;
left:50%;
background:rgb(124, 124, 124);
transform-origin: center;
transform: translate(-50%,-50%) rotate(45deg);
}
.close::after{
content: "";
display: block;
position: absolute;
width: 60%;
height: 6rpx;
top:50%;
left:50%;
background:rgb(124, 124, 124);
transform-origin: center;
transform: translate(-50%,-50%) rotate(-45deg);
}
.upload_image {
width: 200rpx;
height: 200rpx;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
border-radius: 10rpx;
background-color: #FBFBFB;
border: 1px dashed #CECECE;
}

.upload_image text {
color: rgba(0, 0, 0, 0.5);
font-size: 30rpx;
}
.note_mark {
margin-top: 20rpx;
font-size: 24rpx;
color: rgba(153, 153, 153, 1);
}

/* 按钮区 */
.btn_item {
width: 100%;
height: 80rpx;
margin-bottom: 30rpx;
border-radius: 40rpx;
text-align: center;
line-height: 80rpx;
font-size: 32rpx;
color: #6F6F6F;
background-color: #EEEEEE;
}

.submit_btn {
color: #ffffff;
background-color: #2a82e4;
}
/* 用户协议确认框 */
.safe_box {
width: 100%;
margin-top: 110rpx;
margin-bottom: 30rpx;
display: flex;
justify-content: flex-start;
align-items: center;
font-size: 26rpx;
color: #959595;
}
.checkbox {
display: flex;
justify-content: flex-start;
align-items: center;
}
checkbox {
transform: scale(0.8);
}

+ 295
- 0
package_A/pages/volunteer-page/index.js View File

@@ -0,0 +1,295 @@
// package_A/pages/volunteer-page/index.js
import { getOssAuth } from '../../../api/uploadOss.js'
import { Base64 } from 'js-base64'
const crypto = require('crypto-js')
import { applyVolunteer } from '../../../api/volunteer-service.js'
import {isPositiveInteger, isNoCharacters} from '../../../utils/check.js'
Page({

/**
* 页面的初始数据
*/
data: {
checkAgree: false, // 是否勾选用户协议
form: {},
ossForm: {},
imagePreviewList: [], // 上传图片预览列表
imageList: [], // 图片列表
// 表单验证
formRules: {
activityNum: {
validator: function (value) {
return value && isPositiveInteger(value) && value<= 1000;
},
warning: false
},
activityDate: {
validator: function (value) {
return value;
},
warning: false
},
activityPoints: {
validator: function (value) {
return value && isPositiveInteger(value) && value<= 1000;
},
warning: false
},
companyName: {
validator: function (value) {
return value && isNoCharacters(value);
},
warning: false
},
contactName: {
validator: function (value) {
return value && isNoCharacters(value);
},
warning: false
},
contactPhone: {
validator: function (value) {
return value && isPositiveInteger(value);
},
warning: false
},
imageList: {
validator: function (value) {
return value.length != 0;
},
warning: false
}
}
},

/**
* 生命周期函数--监听页面显示
*/
onShow: function () {
this.getOssAuthForm()
const openid = wx.getStorageSync('openid')
let form = this.data.form
form.openid = openid
this.setData({form})
},
/* 获取图片上传鉴权 */
getOssAuthForm() {
let that = this
getOssAuth().then((res) => {
let client = {
region: 'oss-cn-shanghai',
secure: true,
accessKeyId: res.accessKeyId,
accessKeySecret: res.accessKeySecret,
securityToken: res.securityToken,
bucket: 'ta-tech-image'
}
// 计算签名
function computeSignature(accessKeySecret, canonicalString) {
return crypto.enc.Base64.stringify(crypto.HmacSHA1(canonicalString, accessKeySecret));
}
const date = new Date();
date.setHours(date.getHours() + 1);
const policyText = {
expiration: date.toISOString(), // 设置policy过期时间。
conditions: [
// 限制上传大小。
["content-length-range", 0, 1024 * 1024 * 1024],
],
};
// 获取签名
const policy = Base64.encode(JSON.stringify(policyText)) // policy必须为base64的string。
const signature = computeSignature(client.accessKeySecret, policy)
let ossForm = that.data.ossForm
ossForm = {
OSSAccessKeyId: client.accessKeyId,
signature,
policy,
SecurityToken: client.securityToken
}
that.setData({
ossForm
})
})

},
/* 上传图片 */
uploadImage(){
wx.chooseMedia({
count: 5 - this.data.imageList.length, // 最多可以选择的图片张数,默认9
mediaType: ['image'], // 图片
sizeType: ['original'], // original 原图,compressed 压缩图,默认二者都有
sourceType: ['album', 'camera'], // album 从相册选图,camera 使用相机,默认二者都有
success:(res) =>{
const list = res.tempFiles.map((item)=> {
return item.tempFilePath
})
// success
let imagePreviewList = this.data.imagePreviewList.concat(list)
let imageList = this.data.imageList.concat(list);
this.setData({ imageList, imagePreviewList })
this.validate('imageList')
},
fail: (e) => {
console.log(e);
}
})
},
// 删除图片
deleteImage(e) {
let index = this.getCurrentData(e);
let imageList = this.data.imageList
imageList.splice(index, 1)
let imagePreviewList = this.data.imagePreviewList
imagePreviewList.splice(index, 1)
this.setData({ imageList, imagePreviewList })
this.validate('imageList')
},
getCurrentData(e) {
return e.currentTarget.dataset.current;
},
validate(name) {
let formRules = this.data.formRules;
let validator = formRules[name].validator
let result
if(name === 'imageList') {
result = validator ? !validator(this.data.imageList) : false
} else {
result = validator ? !validator(this.data.form[name]) : false;
}
formRules[name].warning = result
this.setData({formRules})
return result
},
// 表单验证
validateForm() {
return new Promise((resolve, reject) => {
try {
let formRules = this.data.formRules;
let result = false;
for (let key in formRules) {
let temp = this.validate(key)
if (temp) {
result = temp
}
}
resolve(!result)
} catch (e) {
reject(e)
}
})
},
// 输入
bindValue(e) {
let name = e.currentTarget.dataset.name;
let form = this.data.form;
form[name] = e.detail.value;
this.setData({
form,
})
this.validate(name)
},
// 选择时间
selectDate(e) {
let form = this.data.form
form.activityDate = e.detail.value
this.setData({form})
},
/* 表单上传 */
submit(){
if(this.data.checkAgree) {
this.validateForm().then(res => {
let ossForm = this.data.ossForm
let temp = []
if (this.data.imageList.length > 0) {
wx.showLoading({title:"上传中",mask:true})
temp = this.data.imageList.map(item => {
// 设置文件上传路径
const randomString = Math.random().toString(36).slice(2)
const timestamp = new Date().getTime()
const key = `imagedir/${randomString}_${timestamp}.png`
// 上传图片
return new Promise((resolve, reject)=> {
wx.uploadFile({
url: 'https://ta-tech-image.oss-cn-shanghai.aliyuncs.com',
filePath: item,
name: 'file',
formData: {
key,
OSSAccessKeyId: ossForm.OSSAccessKeyId,
signature: ossForm.signature,
policy: ossForm.policy,
'x-oss-security-token': ossForm.SecurityToken
},
success: (res)=> {
if(res.statusCode === 204) {
// 上传成功,将图片路径resolve出去
resolve(key)
} else {
wx.showToast({
title: '图片上传失败',
})
reject('图片上传失败')
}
},
fail: (e)=> {
console.log(e);
reject('图片上传失败')
}
})
})
})
Promise.all(temp).then((res)=> {
let form = this.data.form;
form.photoUrl = res.join(',')
applyVolunteer(form).then(res => {
if (res.code === 0) {
wx.showModal({
title: '提交成功',
confirmColor: '#3175E8',
showCancel: false,
content: '等待审核,审核通过后就可以获得积分。',
success(res) {
if(res.confirm) {
wx.navigateBack()
}
}
})
}
}).finally(()=>{
wx.hideLoading();
})
}).catch(()=> {
wx.hideLoading()
})
}
})
} else {
wx.showToast({
icon: 'none',
title: '请先勾选用户服务协议以及隐私政策!',
})
}
},
/**
* 同意用户协议
*/
checkBoxChange() {
let checkAgree = this.data.checkAgree
this.setData({
checkAgree: !checkAgree
})
},
// 用户服务协议
showAgree() {
wx.navigateTo({
url: '/package_A/pages/agree/index',
})
},
// 隐私政策
showConceal() {
wx.navigateTo({
url: '/package_A/pages/conceal/index',
})
}
})

+ 4
- 0
package_A/pages/volunteer-page/index.json View File

@@ -0,0 +1,4 @@
{
"usingComponents": {},
"navigationBarTitleText": "志愿者服务"
}

+ 83
- 0
package_A/pages/volunteer-page/index.wxml View File

@@ -0,0 +1,83 @@
<!--package_A/pages/volunteer-page/index.wxml-->
<view class="page_container">
<image class="page_head" mode="widthFix" src="../../img/volunteer_head.png"></image>
<view class="form_container">
<view class="form_item {{formRules.activityNum.warning ? 'warning' : ''}}">
<text class="form_label"><text style="color: red;">*</text>活动人数</text>
<view class="value_box">
<input style="width: 100%;height: 100%;" type="number" maxlength="100" placeholder="请输入活动人数" placeholder-style="font-size: 28rpx; color: #A6A6A6;" adjust-position="{{true}}" value="{{form.activityNum}}" data-name="activityNum" name="activityNum" bindblur="bindValue" />
</view>
<text class="tips">请输入活动人数(仅可以输入数字,不超过1000)</text>
</view>
<view class="form_item {{formRules.activityDate.warning ? 'warning' : ''}}">
<text class="form_label"><text style="color: red;">*</text>活动日期</text>
<picker class="picker_box" bindchange="selectDate" value="{{form.activityDate}}" mode="date">
<view class="picker_value" wx:if="{{form.activityDate}}">
<text>{{form.activityDate}}</text>
<image class="select_img" src="../../img/date.png"></image>
</view>
<view wx:else class="picker_value" style="color: #A6A6A6; font-size: 26rpx;">
<text>请选择活动日期</text>
<image class="select_img" src="../../img/date.png"></image>
</view>
</picker>
<text class="tips">请选择活动日期</text>
</view>
<view class="form_item {{formRules.activityPoints.warning ? 'warning' : ''}}">
<text class="form_label"><text style="color: red;">*</text>获取积分</text>
<view class="value_box">
<input style="width: 100%;height: 100%;" type="number" maxlength="4" placeholder="请输入获取积分" placeholder-style="font-size: 28rpx; color: #A6A6A6;" adjust-position="{{true}}" value="{{form.activityPoints}}" data-name="activityPoints" name="activityPoints" bindblur="bindValue" />
</view>
<text class="tips">请输入获取积分(仅可以输入数字,不超过1000)</text>
</view>
<view class="form_item {{formRules.companyName.warning ? 'warning' : ''}}">
<text class="form_label"><text style="color: red;">*</text>单位名称</text>
<view class="value_box">
<input style="width: 100%;height: 100%;" type="text" maxlength="100" placeholder="请输入单位名称" placeholder-style="font-size: 28rpx; color: #A6A6A6;" adjust-position="{{true}}" value="{{form.companyName}}" data-name="companyName" name="companyName" bindblur="bindValue" />
</view>
<text class="tips">请输入单位名称(可输入数字、字母和汉字)</text>
</view>
<view class="form_item {{formRules.contactName.warning ? 'warning' : ''}}">
<text class="form_label"><text style="color: red;">*</text>联系人</text>
<view class="value_box">
<input style="width: 100%;height: 100%;" type="text" maxlength="100" placeholder="请输入联系人" placeholder-style="font-size: 28rpx; color: #A6A6A6;" adjust-position="{{true}}" value="{{form.contactName}}" data-name="contactName" name="contactName" bindblur="bindValue" />
</view>
<text class="tips">请输入联系人(可输入数字、字母和汉字)</text>
</view>
<view class="form_item {{formRules.contactPhone.warning ? 'warning' : ''}}">
<text class="form_label"><text style="color: red;">*</text>电话</text>
<view class="value_box">
<input style="width: 100%;height: 100%;" type="text" maxlength="11" placeholder="请输入电话" placeholder-style="font-size: 28rpx; color: #A6A6A6;" adjust-position="{{true}}" value="{{form.contactPhone}}" data-name="contactPhone" name="contactPhone" bindblur="bindValue" />
</view>
<text class="tips">请输入电话(仅可输入11位数字)</text>
</view>
<view class="upload_images {{formRules.imageList.warning? 'warning': ''}}">
<text>
<text style="color: red;">* </text>
<text style="font-size:30rpx; color: #262E38;">上传照片</text>
<text style="font-size:26rpx; color: #999999;">(最多5张照片)</text>
</text>
<view class="image_list">
<view class="image_preview" wx:for="{{imagePreviewList}}" wx:key="index">
<image class="image_item" src="{{item}}" mode="aspectFill" data-item="{{item}}">
</image>
<div class="close" data-current="{{index}}" catchtap="deleteImage"></div>
</view>
<view class="upload_image" bindtap="uploadImage" wx:if="{{imageList.length<5}}">
<image style="height: 53rpx;width: 53rpx;" mode="widthFix" src="../../../assets/img/open_upload.png"></image>
</view>
</view>
<text class="tips">请上传照片</text>
</view>

<!-- 用户服务协议和隐私协议 -->
<view class="safe_box">
<label class="checkbox" bindtap="checkBoxChange">
<checkbox value="{{checkAgree}}" /><text>同意</text>
</label>
<text style="color: #2a82e4;" bindtap="showAgree">《用户服务协议》</text>和<text style="color: #2a82e4;" bindtap="showConceal">《隐私政策》</text>
</view>
<!-- 按钮 -->
<view class="{{checkAgree? 'btn_item submit_btn' : 'btn_item'}}" bindtap="submit">提交</view>
</view>
</view>

+ 185
- 0
package_A/pages/volunteer-page/index.wxss View File

@@ -0,0 +1,185 @@
/* package_A/pages/volunteer-page/index.wxss */
.page_head {
width: 100vw;
}
.form_container {
width: 100%;
padding: 0 30rpx;
display: flex;
flex-direction: column;
justify-content: flex-start;
align-items: flex-start;
}
.form_item {
width: 100%;
padding: 30rpx 0;
display: flex;
justify-content: flex-start;
align-items: center;
border-bottom: 1rpx solid #EAE8E8;
position: relative;
}
.form_label {
width: 160rpx;
color: #262E38;
font-size: 30rpx;
}
.tips{
position: absolute;
bottom: -6rpx;
left: -10rpx;
color: red;
font-size: 24rpx;
transform: translate(27rpx, -5rpx);
display: none;
}
.form_item.warning .tips, .use_purpose.warning .tips, .upload_images.warning .tips{
display: block;
}
.value_box {
flex: 1;
display: flex;
justify-content: space-between;
align-items: center;
border-radius: 4rpx;
position: relative;
color: #333333;
font-size: 24rpx;
}
.picker_box {
flex: 1;
}
.picker_value {
width: 100%;
display: flex;
justify-content: space-between;
align-items: center;
}
.select_img {
width: 33rpx;
height: 37rpx;
}
/* 上传图片 */
.upload_images {
width: 100%;
padding: 25rpx 0;
display: flex;
flex-direction: column;
justify-content: flex-start;
align-items: flex-start;
font-size: 28rpx;
color: #666666;
position: relative;
border-top: 1rpx solid #EDEDED;
}
.image_list {
width: 100%;
margin-top: 30rpx;
display: flex;
flex-wrap: wrap;
justify-content: flex-start;
align-content: flex-start;
}
.image_preview {
height: 150rpx;
width: 150rpx;
margin-right: 20rpx;
margin-bottom: 20rpx;
position: relative;
}
.image_item {
height:100%;
width: 100%;
margin-bottom: 20rpx;
margin-right: 30rpx;
border-radius: 10rpx;
}
.close{
position: absolute;
top:0;
right:0;
transform: translate(40%,-40%);
height: 40rpx;
width: 40rpx;
background:rgba(179, 179, 179, 0.5);
border-radius: 50%;
z-index: 10;
}
.close::before{
content: "";
display: block;
position: absolute;
width: 60%;
height: 6rpx;
top:50%;
left:50%;
background:rgb(124, 124, 124);
transform-origin: center;
transform: translate(-50%,-50%) rotate(45deg);
}
.close::after{
content: "";
display: block;
position: absolute;
width: 60%;
height: 6rpx;
top:50%;
left:50%;
background:rgb(124, 124, 124);
transform-origin: center;
transform: translate(-50%,-50%) rotate(-45deg);
}
.upload_image {
width: 150rpx;
height: 150rpx;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
border-radius: 4rpx;
background-color: #EEEEEE;
border: 1px solid #D2D2D2;
}

.note_mark {
margin-top: 20rpx;
font-size: 24rpx;
color: rgba(153, 153, 153, 1);
}

/* 用户协议确认框 */
.safe_box {
width: 100%;
margin-top: 110rpx;
margin-bottom: 30rpx;
display: flex;
justify-content: flex-start;
align-items: center;
font-size: 26rpx;
color: #959595;
}
.checkbox {
display: flex;
justify-content: flex-start;
align-items: center;
}
checkbox {
transform: scale(0.8);
}
/* 按钮区 */
.btn_item {
width: 100%;
height: 80rpx;
margin-bottom: 30rpx;
border-radius: 40rpx;
text-align: center;
line-height: 80rpx;
font-size: 32rpx;
color: #6F6F6F;
background-color: #EEEEEE;
}

.submit_btn {
color: #ffffff;
background-color: #2a82e4;
}

+ 1
- 3
package_first/pages/AttentionMethod/index.js View File

@@ -72,12 +72,10 @@ Page({

},
getIsApply(){
const {tenantId} = wx.getStorageSync('tenant')
const openid = wx.getStorageSync('openid')
const data = { openid }
api_getIsApply(data).then(res=>{
console.log(res);
this.data.status = res.data
this.data.status = res.data
})
},
goPage(e){

+ 66
- 0
package_first/pages/RulesPage/index.js View File

@@ -0,0 +1,66 @@
// package_first/pages/RulesPage/index.js
Page({

/**
* 页面的初始数据
*/
data: {

},

/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {

},

/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady() {

},

/**
* 生命周期函数--监听页面显示
*/
onShow() {

},

/**
* 生命周期函数--监听页面隐藏
*/
onHide() {

},

/**
* 生命周期函数--监听页面卸载
*/
onUnload() {

},

/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh() {

},

/**
* 页面上拉触底事件的处理函数
*/
onReachBottom() {

},

/**
* 用户点击右上角分享
*/
onShareAppMessage() {

}
})

+ 4
- 0
package_first/pages/RulesPage/index.json View File

@@ -0,0 +1,4 @@
{
"usingComponents": {},
"navigationBarTitleText": "积分商城规则"
}

+ 2
- 0
package_first/pages/RulesPage/index.wxml View File

@@ -0,0 +1,2 @@
<!--package_first/pages/RulesPage/index.wxml-->
<image mode="widthFix" style="width: 100vw;" src="https://ta-tech-file.oss-cn-shanghai.aliyuncs.com/hhz_mini/PointsMallRules.png"></image>

+ 1
- 0
package_first/pages/RulesPage/index.wxss View File

@@ -0,0 +1 @@
/* package_first/pages/RulesPage/index.wxss */

+ 2
- 1
package_first/pages/announceList/index.wxss View File

@@ -1,7 +1,7 @@
/* package_first/pages/announceList/index.wxss */
.announ_container {
width: 100%;
height: 100vh;
min-height: 100vh;
padding: 20rpx 30rpx;
display: flex;
flex-direction: column;
@@ -16,6 +16,7 @@
}
.announ_item {
width: 100%;
height: 230rpx;
padding: 30rpx;
margin-bottom: 20rpx;
background-color: #ffffff;

+ 1
- 0
package_first/pages/askAdmin/index.wxss View File

@@ -16,6 +16,7 @@
}
.ask_item {
width: 100%;
height: 230rpx;
padding: 30rpx;
margin-top: 20rpx;
background-color: #ffffff;

+ 25
- 0
package_first/pages/askDetail/index.js View File

@@ -1,4 +1,5 @@
// package_first/pages/askDetail/index.js
import {getPoint} from '../../../api/home.js'
Page({

/**
@@ -31,5 +32,29 @@ Page({
this.setData({dataSource})
}
}
},
// 领取积分
getPoints() {
let params = {}
params.openid = wx.getStorageSync('openid')
params.knowId = this.data.dataSource.id
getPoint(params).then(res=> {
if(res.code === 0) {
wx.showModal({
title: '领取成功',
confirmColor: '#3175E8',
showCancel: false,
content: '恭喜您,领取积分成功',
success(res) {
if(res.confirm) {
wx.navigateBack({
delta: 0,
})
}
}
})
}
})
}
})

+ 5
- 0
package_first/pages/askDetail/index.wxml View File

@@ -4,4 +4,9 @@
<text class="detail_date">{{dataSource.createTime || ''}}</text>
<image wx:if="{{dataSource.image}}" class="detail_img" mode="widthFix" src="{{dataSource.image}}"></image>
<rich-text type="node" style="width:100%; white-space: pre-wrap;word-break: break-all;" nodes="{{dataSource.content}}"></rich-text>

<!-- 领取积分按钮 -->
<view class="btn_box">
<view class="btn_item" bindtap="getPoints">领取积分</view>
</view>
</view>

+ 20
- 0
package_first/pages/askDetail/index.wxss View File

@@ -7,6 +7,7 @@
justify-content: flex-start;
align-items: flex-start;
background-color: #ffffff;
position: relative;
}
.detail_title {
width: 100%;
@@ -22,4 +23,23 @@
.detail_img {
width: 100%;
margin-bottom: 20rpx;
}

.btn_box {
width: 100%;
padding: 0 30rpx;
position: fixed;
bottom: 20rpx;
left: 0;
}
.btn_item {
width: 100%;
height: 80rpx;
margin-bottom: 30rpx;
border-radius: 40rpx;
text-align: center;
line-height: 80rpx;
font-size: 32rpx;
color: #ffffff;
background-color: #2a82e4;
}

+ 12
- 7
package_mine/pages/exchange/index.js View File

@@ -1,4 +1,5 @@
// package_mine/pages/exchange/index.js
import {wgs84togcj02} from '../../../utils/util.js'
Page({

/**
@@ -27,12 +28,16 @@ Page({
resetList() {
this.setData({ list: [] })
},
// 导航
navigateTo(e){
const item = e.currentTarget.dataset.item
const {longitude,latitude} = item
let coordinate=wgs84togcj02([longitude,latitude])
wx.openLocation({
latitude: parseFloat(coordinate[1]), // 纬度,范围为-90~90,负数表示南纬
longitude: parseFloat(coordinate[0]), // 经度,范围为-180~180,负数表示西经
scale: 17, // 缩放比例
})
}

// /* 跳转至详情页 */
// showDetail(e) {
// let data = e.currentTarget.dataset.item
// wx.navigateTo({
// url: '/package_mine/pages/feedbackDetail/index?data='+ JSON.stringify(data),
// })
// }
})

+ 4
- 2
package_mine/pages/exchange/index.json View File

@@ -1,6 +1,8 @@
{
"usingComponents": {
"list": "../../../components/List/index"
"list": "../../../components/List/index",
"exchange-info": "../../../components/exchangeInfo/index"
},
"navigationBarTitleText": "我的兑换"
"navigationBarTitleText": "我的兑换",
"navigationBarBackgroundColor": "#F2F6F9"
}

+ 5
- 9
package_mine/pages/exchange/index.wxml View File

@@ -3,16 +3,12 @@
<list id="list" class="exchange_list" url="{{current}}" bind:update-list="updateList" list="{{list}}" bind:reset-list="resetList" params="{{params}}">
<view class="exchange_item" data-item="{{item}}" wx:for="{{list}}" wx:key="index">
<view class="exchange_info">
<image class="exchange_img" src="{{item.shopsImage}}"></image>
<view class="info_box">
<view style="color: #2D84E4;" class="status_box">已兑换</view>
<text class="info_item" style="font-size: 30rpx; font-weight: bold;">{{item.shopsName}}</text>
<text class="info_item" style="font-size: 26rpx;margin: 16rpx 0;">{{item.areaName}}</text>
<text class="info_item" style="font-size: 22rpx;">{{item.createTime}}</text>
<view class="status_box">实付:<text style="color: #2D84E4;">{{item.pointsChange}}</text>积分</view>
</view>
<exchange-info dataSource="{{item}}">
<view class="nav_box">
<view class="nav_btn" data-item="{{item.merchant}}" bindtap="navigateTo">导航</view>
</view>
</exchange-info>
</view>
</view>
</list>
</view>

+ 17
- 37
package_mine/pages/exchange/index.wxss View File

@@ -8,6 +8,7 @@
justify-content: flex-start;
align-items: center;
color: #0C0C0C;
background-color: #F2F6F9;
}
.exchange_list {
width: 100%;
@@ -15,44 +16,23 @@
}
.exchange_item {
width: 100%;
padding: 30rpx 0;
background-color: #ffffff;
display: flex;
flex-direction: column;
justify-content: flex-start;
align-items: flex-end;
border-bottom: 2rpx solid #eeeeee;
}
.info_head {
font-size: 22rpx;
margin-bottom: 20rpx;
}
.exchange_info {
.nav_box {
width: 100%;
padding: 16rpx 30rpx;
display: flex;
justify-content: space-between;
align-items: flex-start;
}
.exchange_img {
width: 262rpx;
height: 180rpx;
margin-right: 30rpx;
border-radius: 20rpx;
}
.info_box {
width: 395rpx;
display: flex;
flex-direction: column;
justify-content: flex-start;
align-items: flex-start;
}
.status_box {
width: 100%;
text-align: end;
font-size: 22rpx;
justify-content: flex-end;
align-items: center;
}
.info_item {
width: 100%;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.nav_btn {
width: 160rpx;
height: 50rpx;
line-height: 50rpx;
text-align: center;
background-color: #5472EF;
border-radius: 25rpx;
font-size: 28rpx;
color: #ffffff;
}


+ 0
- 42
package_mine/pages/feedbackDetail/index.wxml View File

@@ -35,46 +35,4 @@
</view>
</view>
</view>
<!-- <view class="detail_main">
<view class="detail_item">
<view class="item_title">选择河道:</view>
<text class="item_value">{{dataSource.streamName}}</text>
</view>
<view class="detail_item">
<view class="item_title">问题描述:</view>
<text class="item_value">{{dataSource.feedbackDesc}}</text>
</view>
<view class="image_list">
<view class="item_title">问题图片:</view>
<view class="image_box">
<image class="image_item" wx:for="{{imageList}}" src="{{item}}" wx:key="index" data-current="{{index}}" data-type="imageList" bindtap="showImgPreview"></image>
</view>
</view>
<view class="detail_item">
<view class="item_title">反馈时间:</view>
<text class="item_value">{{dataSource.createTime}}</text>
</view>
<view class="detail_item">
<view class="item_title">当前进度:</view>
<text class="item_value" style="color: {{statusList[dataSource.status-1].color}}">{{statusList[dataSource.status-1].title}}</text>
</view>
<view class="detail_item">
<view class="item_title">反馈意见:</view>
<text class="item_value">{{dataSource.examineRemark || ''}}</text>
</view>
<view class="detail_item">
<view class="item_title">处理人:</view>
<text class="item_value">{{dataSource.realname || ''}}</text>
</view>
<view class="image_list">
<view class="item_title">处理结果:</view>
<view class="image_box" wx:if="{{handleImgList.length}}">
<image class="image_item" wx:for="{{handleImgList}}" src="{{item}}" wx:key="index" data-current="{{index}}" data-type="handleImgList" bindtap="showImgPreview"></image>
</view>
</view>
<view class="detail_item">
<view class="item_title">处理时间:</view>
<text class="item_value">{{dataSource.handleTime || ''}}</text>
</view>
</view> -->
</view>

+ 14
- 7
package_mine/pages/history/index.wxss View File

@@ -17,13 +17,15 @@
}

.history__item{
display: flex;
align-items: center;
justify-content: space-between;
padding: 40rpx 70rpx 50rpx 60rpx;
background: rgba(255, 255, 255, 1);
border-radius: 20rpx;
margin-bottom: 14rpx;
width: 100%;
height: 165rpx;
display: flex;
align-items: center;
justify-content: space-between;
padding: 30rpx;
background: rgba(255, 255, 255, 1);
border-radius: 20rpx;
margin-bottom: 14rpx;
}

.history__item :last-child{
@@ -31,6 +33,7 @@
}

.item__content{
width: 75%;
display: flex;
flex-direction: column;
}
@@ -38,6 +41,9 @@
.item__title{
font-size: 32rpx;
margin-bottom: 16rpx;
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
}
.item__time{
font-size: 26rpx;
@@ -45,6 +51,7 @@
color: #7B8280;
}
.item__score{
flex-shrink: 0;
font-size: 44rpx;
font-weight: bold;
}

+ 20
- 1
pages/FirstPage/index.js View File

@@ -34,7 +34,7 @@ Page({
{
title:'积分商城',
iconPath: '../../assets/first/stores.png',
path: '/package_A/pages/stores/index',
path: '/package_A/pages/goods-page/index',
type: 'mini'
},
{
@@ -49,6 +49,18 @@ Page({
path: '/package_first/pages/ProtectionSuggestion/index',
type: 'page'
},
{
title:'志愿者服务',
iconPath: '../../assets/first/volunteer.png',
path: '/package_A/pages/volunteer-page/index',
type: 'page'
},
{
title:'我要上报',
iconPath: '../../assets/first/report.png',
path: '/package_A/pages/report-page/index',
type: 'page'
}
],
liveNum: 0, // 在线人数
list: [], // 河道展示
@@ -201,5 +213,12 @@ Page({
wx.navigateTo({
url: '/package_A/pages/riverDetail/index?data='+ JSON.stringify(data),
})
},

/* 跳转至积分规则页面 */
showRules() {
wx.navigateTo({
url: '/package_first/pages/RulesPage/index',
})
}
})

+ 1
- 1
pages/FirstPage/index.wxml View File

@@ -11,7 +11,7 @@
<view class="main_container">
<!-- 图片 -->
<view class="banner">
<image class="banner_image" mode="widthFix" src="../../assets/first/home_banner.png" bindtap="redirectToAd"></image>
<image class="banner_image" mode="widthFix" src="../../assets/first/home_banner.png" bindtap="redirectToAd" bindtap="showRules"></image>
</view>



+ 1
- 1
pages/FirstPage/index.wxss View File

@@ -135,7 +135,7 @@
justify-content: flex-start;
align-items: center;
padding: 10rpx;
margin-right: 65rpx;
margin-right: 45rpx;
margin-bottom: 10rpx;
}
.fast_enters>.enter_item:nth-child(4n+0) {

+ 1
- 0
pages/mine/index.js View File

@@ -15,6 +15,7 @@ Page({
otherList: [
{title: '河湖问题反馈', type: 'feedback', path: '/package_mine/pages/records/index', info: '问题反馈'},
{title: '消息通知', type: 'notice', path: '/package_mine/pages/notice/index',info: '', showNumbers: true},
{title: '我的兑换', type: 'exchange', path: '/package_mine/pages/exchange/index', info: ''}
],
myId: '', // 身份
integral: 0, // 积分

+ 42
- 0
project.private.config.json View File

@@ -210,6 +210,48 @@
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "积分商城",
"pathName": "package_A/pages/goods-page/index",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "兑换成功",
"pathName": "package_A/pages/exchange-success/index",
"query": "data=%257B%2522id%2522%253A55%252C%2522createUser%2522%253A10%252C%2522createTime%2522%253A%25222023-05-09%252016%253A00%253A16%2522%252C%2522updateUser%2522%253A0%252C%2522updateTime%2522%253Anull%252C%2522mark%2522%253A1%252C%2522tenantId%2522%253A1%252C%2522userId%2522%253A144%252C%2522shopsImage%2522%253A%2522https%253A%252F%252Fimage.t-aaron.com%252Fmorentu%252Fshanghu.png%2522%252C%2522shopsName%2522%253A%2522%25E6%2596%25B0%25E7%25AC%25AC%25E4%25B8%2580%25E5%2595%2586%25E9%2593%25BA%2522%252C%2522shopsAddress%2522%253A%2522%25E6%25B1%259F%25E8%258B%258F%25E7%259C%2581%25E6%25B7%25AE%25E5%25AE%2589%25E5%25B8%2582%25E7%259B%25B1%25E7%259C%2599%25E5%258E%25BF%25E9%25B2%258D%25E9%259B%2586%25E9%2595%2587205%25E5%258E%25BF%25E9%2581%2593%2522%252C%2522areaName%2522%253A%2522%25E6%25B1%259F%25E8%258B%258F%25E7%259C%2581%25E5%258D%2597%25E4%25BA%25AC%25E5%25B8%2582%25E6%25B1%259F%25E5%25AE%2581%25E5%258C%25BA%2522%252C%2522longitude%2522%253A%2522118.324555%2522%252C%2522latitude%2522%253A%252232.9923131%2522%252C%2522realname%2522%253Anull%252C%2522mobile%2522%253Anull%257D",
"launchMode": "default",
"scene": null
},
{
"name": "河湖问题反馈",
"pathName": "package_mine/pages/records/index",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "积分明细",
"pathName": "package_mine/pages/history/index",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "志愿者服务",
"pathName": "package_A/pages/volunteer-page/index",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "我要上报",
"pathName": "package_A/pages/report-page/index",
"query": "",
"launchMode": "default",
"scene": null
}
]
}

+ 7
- 5
request/index.js View File

@@ -20,6 +20,9 @@ export const request = function(params) {
wx.request({
...params,
success: function(res) {
if(params.showLoading) {
wx.hideLoading()
}
// 处理请求
if(params.url === baseurl+'/aliyunOss/getSecurityToken') {
resolve(res.data)
@@ -32,18 +35,17 @@ export const request = function(params) {
}
},
fail: function (error) {
reject(error)
},
complete: function () {
if (params.showLoading) {
if(params.showLoading) {
wx.hideLoading()
}
reject(error)
}
})
}).catch(e => {
wx.showToast({
icon: "error",
icon: "none",
title: e || '系统错误',
duration: 2000
})
})
}

+ 7
- 0
utils/check.js View File

@@ -4,4 +4,11 @@
export const isPositiveInteger = function(value) {
var re = /^[0-9]+$/ ;
return re.test(value)
}
/**
* 校验数字、字母或汉字
*/
export const isNoCharacters = function(value) {
var re = /^[\u4e00-\u9fa5_a-zA-z0-9]+$/ ;
return re.test(value)
}

+ 1
- 1
utils/getUserInfo.js View File

@@ -1,4 +1,4 @@
import {getOpenId, getUserData} from '../api/login.js'
import {getOpenId} from '../api/login.js'
export function getOpenidData() {
return new Promise((resolve)=> {
wx.login({

Loading…
Cancel
Save