xieying 1 год назад
Родитель
Сommit
1439bc537e
82 измененных файлов: 2161 добавлений и 321 удалений
  1. +1
    -1
      api/home.js
  2. +26
    -3
      api/login.js
  3. +38
    -0
      api/mine.js
  4. +1
    -20
      app.js
  5. +11
    -3
      app.json
  6. Двоичные данные
      assets/first/ask.png
  7. Двоичные данные
      assets/first/new.png
  8. Двоичные данные
      assets/first/rivers.png
  9. Двоичные данные
      assets/first/stores.png
  10. Двоичные данные
      assets/img/approveing.png
  11. Двоичные данные
      assets/img/beauty.png
  12. Двоичные данные
      assets/img/exchange.png
  13. Двоичные данные
      assets/img/failed.png
  14. Двоичные данные
      assets/img/feedback.png
  15. Двоичные данные
      assets/img/id_bg.png
  16. Двоичные данные
      assets/img/myid.png
  17. Двоичные данные
      assets/img/passed.png
  18. Двоичные данные
      assets/img/position.png
  19. Двоичные данные
      assets/img/search.png
  20. Двоичные данные
      assets/img/submit_success.png
  21. Двоичные данные
      assets/img/unapprove.png
  22. Двоичные данные
      assets/img/userinfo.png
  23. +5
    -0
      components/List/index.js
  24. +5
    -5
      custom-tab-bar/index.js
  25. +2
    -2
      environment.js
  26. +12
    -12
      package_A/pages/report/index.js
  27. +18
    -21
      package_A/pages/report/index.wxml
  28. +1
    -1
      package_A/pages/report/index.wxss
  29. +41
    -0
      package_A/pages/storeDetail/index.js
  30. +4
    -0
      package_A/pages/storeDetail/index.json
  31. +11
    -0
      package_A/pages/storeDetail/index.wxml
  32. +55
    -0
      package_A/pages/storeDetail/index.wxss
  33. +59
    -0
      package_A/pages/stores/index.js
  34. +7
    -0
      package_A/pages/stores/index.json
  35. +26
    -0
      package_A/pages/stores/index.wxml
  36. +129
    -0
      package_A/pages/stores/index.wxss
  37. +49
    -0
      package_B/pages/IdList/index.js
  38. +6
    -0
      package_B/pages/IdList/index.json
  39. +17
    -0
      package_B/pages/IdList/index.wxml
  40. +73
    -0
      package_B/pages/IdList/index.wxss
  41. +130
    -0
      package_B/pages/approveId/index.js
  42. +4
    -0
      package_B/pages/approveId/index.json
  43. +35
    -0
      package_B/pages/approveId/index.wxml
  44. +113
    -0
      package_B/pages/approveId/index.wxss
  45. +1
    -1
      package_B/pages/beauties/index.js
  46. +38
    -0
      package_B/pages/exchange/index.js
  47. +6
    -0
      package_B/pages/exchange/index.json
  48. +18
    -0
      package_B/pages/exchange/index.wxml
  49. +58
    -0
      package_B/pages/exchange/index.wxss
  50. +2
    -2
      package_B/pages/feedbackDetail/index.js
  51. +41
    -0
      package_B/pages/myId/index.js
  52. +4
    -0
      package_B/pages/myId/index.json
  53. +31
    -0
      package_B/pages/myId/index.wxml
  54. +131
    -0
      package_B/pages/myId/index.wxss
  55. +3
    -16
      package_B/pages/records/index.js
  56. +36
    -0
      package_B/pages/submitSuccess/index.js
  57. +4
    -0
      package_B/pages/submitSuccess/index.json
  58. +6
    -0
      package_B/pages/submitSuccess/index.wxml
  59. +31
    -0
      package_B/pages/submitSuccess/index.wxss
  60. +250
    -0
      package_B/pages/userInfo/index.js
  61. +4
    -0
      package_B/pages/userInfo/index.json
  62. +28
    -0
      package_B/pages/userInfo/index.wxml
  63. +153
    -0
      package_B/pages/userInfo/index.wxss
  64. +0
    -8
      package_first/pages/announceList/index.js
  65. +1
    -8
      package_first/pages/askAdmin/index.js
  66. +6
    -12
      package_first/pages/beautyList/index.js
  67. +1
    -5
      package_first/pages/uploadBeauty/index.js
  68. +19
    -57
      pages/FirstPage/index.js
  69. +0
    -16
      pages/FirstPage/index.wxml
  70. +1
    -1
      pages/FirstPage/index.wxss
  71. +5
    -19
      pages/all/index.js
  72. +3
    -3
      pages/all/index.wxss
  73. +124
    -23
      pages/login/login.js
  74. +13
    -0
      pages/login/login.wxml
  75. +73
    -1
      pages/login/login.wxss
  76. +35
    -21
      pages/mine/index.js
  77. +2
    -1
      pages/mine/index.json
  78. +18
    -5
      pages/mine/index.wxml
  79. +62
    -12
      pages/mine/index.wxss
  80. +44
    -2
      project.private.config.json
  81. +14
    -6
      request/index.js
  82. +16
    -34
      utils/getUserInfo.js

+ 1
- 1
api/home.js Просмотреть файл

@@ -11,7 +11,7 @@ export const getAnnounce = function(params) {
// 获取在线人数
export const getOnlive = function(params) {
return request({
url: '/index/westreamUser/onlineNum',
url: '/westreamUser/onlineNum',
method: 'GET',
data:params
})

+ 26
- 3
api/login.js Просмотреть файл

@@ -9,12 +9,13 @@ export const getOpenId = function (code) {
})
}
/**
* 获取openId
* 获取用户信息
*/
export const getUserData = function (openid) {
export const getUserData = function (params) {
return request({
url: `/wx/westreamUser/${openid}`,
url: '/westreamUser/userInfo',
method: 'GET',
data: params
})
}
/**
@@ -27,6 +28,28 @@ export const getCityNameCode = function (data) {
data
})
}
/**
* 查询省市区对应租户数据
*/
export const getTenantData = function (data) {
return request({
url: '/index/tenants/areaCode',
method: 'GET',
data
})
}

/**
* 进入小程序,记录次数
*/
export const enterMini = function (data) {
return request({
url: '/westreamUser/login',
method: 'POST',
data
})
}


/**
* 在线心跳

+ 38
- 0
api/mine.js Просмотреть файл

@@ -8,4 +8,42 @@ export const getFeedbackIndex = function (params) {
method: 'GET',
params
})
}
// 上传个人信息
export const uploadUserInfo = function(data) {
return request({
url: '/westreamUser/editInfo',
method: 'PUT',
data
})
}

/**
* 获取身份列表
*/
export const getIdList = function () {
return request({
url: '/identity/getList',
method: 'GET'
})
}

// 申请身份
export const approveIdenty = function(data) {
return request({
url: '/identity/submit',
method: 'POST',
data
})
}

/**
* 获取身份申请记录(最新一条)
*/
export const getIdApprove = function (data) {
return request({
url: '/identity/getApplyLast',
method: 'GET',
data
})
}

+ 1
- 20
app.js Просмотреть файл

@@ -8,26 +8,7 @@ App({
wx.setStorageSync('logs', logs)

// 心跳更新在线状态
setInterval(()=> {
const {times} = this.globalData
const openid = wx.getStorageSync('openId')
const positionParams = wx.getStorageSync('positionParams')
const {nickname, headimgurl} = wx.getStorageSync('userInfo')
const params = {
openid,
// nickname: nickname,
// headimgurl: headimgurl,
provinceCode: positionParams.provinceCode,
cityCode: positionParams.cityCode,
districtCode: positionParams.districtCode
}
if(openid) {
/* 更新用户省市区,一分钟一次 */
if(times%60 === 0){
IsOnlive(params)
}
}
}, 5000)
},
globalData: {
times: 0,

+ 11
- 3
app.json Просмотреть файл

@@ -14,7 +14,7 @@
"custom": true,
"color": "#939393",
"borderStyle": "white",
"selectedColor": "#477DF3",
"selectedColor": "#2a82e4",
"list": [
{
"pagePath": "pages/FirstPage/index",
@@ -59,7 +59,9 @@
"pages/submitSuccess/index",
"pages/riverDetail/index",
"pages/conceal/index",
"pages/agree/index"
"pages/agree/index",
"pages/stores/index",
"pages/storeDetail/index"
]
},
{
@@ -68,7 +70,13 @@
"pages/records/index",
"pages/feedbackDetail/index",
"pages/beauties/index",
"pages/senceDetail/index"
"pages/senceDetail/index",
"pages/userInfo/index",
"pages/myId/index",
"pages/approveId/index",
"pages/exchange/index",
"pages/IdList/index",
"pages/submitSuccess/index"
]
}
],

Двоичные данные
assets/first/ask.png Просмотреть файл

Before After
Width: 45  |  Height: 45  |  Size: 1.2KB Width: 45  |  Height: 45  |  Size: 1.5KB

Двоичные данные
assets/first/new.png Просмотреть файл

Before After
Width: 90  |  Height: 90  |  Size: 3.9KB Width: 45  |  Height: 45  |  Size: 2.0KB

Двоичные данные
assets/first/rivers.png Просмотреть файл

Before After
Width: 45  |  Height: 45  |  Size: 2.0KB Width: 45  |  Height: 45  |  Size: 1.8KB

Двоичные данные
assets/first/stores.png Просмотреть файл

Before After
Width: 45  |  Height: 45  |  Size: 2.3KB

Двоичные данные
assets/img/approveing.png Просмотреть файл

Before After
Width: 345  |  Height: 104  |  Size: 5.6KB

Двоичные данные
assets/img/beauty.png Просмотреть файл

Before After
Width: 31  |  Height: 31  |  Size: 1.1KB

Двоичные данные
assets/img/exchange.png Просмотреть файл

Before After
Width: 31  |  Height: 31  |  Size: 964B

Двоичные данные
assets/img/failed.png Просмотреть файл

Before After
Width: 345  |  Height: 104  |  Size: 5.0KB

Двоичные данные
assets/img/feedback.png Просмотреть файл

Before After
Width: 31  |  Height: 31  |  Size: 726B

Двоичные данные
assets/img/id_bg.png Просмотреть файл

Before After
Width: 345  |  Height: 104  |  Size: 6.3KB

Двоичные данные
assets/img/myid.png Просмотреть файл

Before After
Width: 31  |  Height: 31  |  Size: 1.1KB

Двоичные данные
assets/img/passed.png Просмотреть файл

Before After
Width: 345  |  Height: 104  |  Size: 5.8KB

Двоичные данные
assets/img/position.png Просмотреть файл

Before After
Width: 10  |  Height: 10  |  Size: 369B

Двоичные данные
assets/img/search.png Просмотреть файл

Before After
Width: 48  |  Height: 48  |  Size: 1.0KB Width: 15  |  Height: 15  |  Size: 607B

Двоичные данные
assets/img/submit_success.png Просмотреть файл

Before After
Width: 112  |  Height: 112  |  Size: 3.7KB

Двоичные данные
assets/img/unapprove.png Просмотреть файл

Before After
Width: 112  |  Height: 112  |  Size: 3.8KB

Двоичные данные
assets/img/userinfo.png Просмотреть файл

Before After
Width: 31  |  Height: 31  |  Size: 847B

+ 5
- 0
components/List/index.js Просмотреть файл

@@ -61,6 +61,11 @@ Component({
if (!this.data.more) return
if (!this.data.loading && (!this.data.params || Object.keys(this.data.params).length > 0)) {
this.setData({ loading: true })
// 增加租户id
let {tenantId} = wx.getStorageSync('tenant')
if(this.data?.params) {
this.data.params.tenantId = tenantId
}
get(this.data.url, Object.assign({}, { page: this.data.page, limit: this.data.limit }, this.data.params || {})).then(res => {
let records;
if (res.code == 0) {

+ 5
- 5
custom-tab-bar/index.js Просмотреть файл

@@ -1,10 +1,10 @@
const app = getApp();
import {getUserInfo} from '../utils/getUserInfo.js'
import {getOpenidData} from '../utils/getUserInfo.js'
Component({
data: {
selected: 0,
color: "#939393",
selectedColor: "#477DF3",
selectedColor: "#2a82e4",
list: [
{
pagePath: "/pages/FirstPage/index",
@@ -40,14 +40,14 @@ Component({
const path = dataset.path
const index = dataset.index
const auth = dataset.auth
const openId = wx.getStorageSync('openId')
const openid = wx.getStorageSync('openid')
if(auth) {
if(openId) {
if(openid) {
wx.switchTab({
url: path
})
} else {
getUserInfo().then(res=> {
getOpenidData().then(res=> {
wx.switchTab({
url: path
})

+ 2
- 2
environment.js Просмотреть файл

@@ -1,6 +1,6 @@
const __request_base_url__ = {
develop: "http://192.168.11.11:9061/api",
// develop: "https://qmhhapi-test.t-aaron.com/api",
// develop: "http://192.168.11.11:9061/api",
develop: "https://qmhh.t-aaron.com/api",
trial: "https://qmhhapi-test.t-aaron.com/api",
release: "https://qmhh.t-aaron.com/api"
}

+ 12
- 12
package_A/pages/report/index.js Просмотреть файл

@@ -10,7 +10,7 @@ Page({
* 页面的初始数据
*/
data: {
checkAgree: false,
checkAgree: false, // 是否勾选用户协议
form: {},
ossForm: {},
imagePreviewList: [], // 上传图片预览列表
@@ -67,9 +67,9 @@ Page({
*/
onShow: function () {
this.getOssAuthForm()
const openId = wx.getStorageSync('openId')
const openid = wx.getStorageSync('openid')
let form = this.data.form
form.openid = openId
form.openid = openid
this.setData({form})
},
bindValue(e) {
@@ -281,17 +281,17 @@ Page({
})
})
Promise.all(temp).then((res)=> {
let form = this.data.form;
let form = this.data.form
form.feedbackUrl = res.join(',')
feedbackPosition(form).then(res => {
if (res.code === 0) {
wx.reLaunch({
url: '/package_A/pages/submitSuccess/index',
})
}
}).finally(()=>{
wx.hideLoading();
feedbackPosition(form).then(res => {
if (res.code === 0) {
wx.reLaunch({
url: '/package_A/pages/submitSuccess/index',
})
}
}).finally(()=>{
wx.hideLoading();
})
}).catch(()=> {

+ 18
- 21
package_A/pages/report/index.wxml Просмотреть файл

@@ -2,7 +2,7 @@
<view class="upload_container">
<image class="head_img" mode="widthFix" src="../../../assets/img/upload_head.png"></image>
<view class="form_container">
<view class="form_item">
<view class="form_item">
<text><text style="color: red;">*</text>选择河道:</text>
<view class="value_box disable_class">
<text class="picker_text">{{form.streamName}}</text>
@@ -20,52 +20,49 @@
<view class="use_purpose {{formRules.feedbackDesc.warning ? 'warning' : ''}}">
<text><text style="color: red;">*</text>问题描述:</text>
<view class="value_box">
<textarea maxlength="200" style="width:500rpx; height: 160rpx;padding-top: 10rpx;" type="text" adjust-position="{{true}}" placeholder="请输入问题描述" placeholder-style="font-size: 24rpx; color: #A6A6A6;" value="{{form.feedbackDesc}}"
data-name="feedbackDesc" name="feedbackDesc" bindblur="bindValue" />
<textarea maxlength="200" style="width:500rpx; height: 160rpx;padding-top: 10rpx;" type="text" adjust-position="{{true}}" placeholder="请输入问题描述" placeholder-style="font-size: 24rpx; color: #A6A6A6;" value="{{form.feedbackDesc}}" data-name="feedbackDesc" name="feedbackDesc" bindblur="bindValue" />
</view>
<text class="tips">请输入问题描述</text>
</view>
<view class="form_item {{formRules.feedbackName.warning ? 'warning' : ''}}">
<text><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: 24rpx; color: #A6A6A6;" adjust-position="{{true}}" value="{{form.feedbackName}}"
data-name="feedbackName" name="feedbackName" bindblur="bindValue" />
<input style="width: 100%;height: 100%;" type="text" maxlength="100" placeholder="请输入您的姓名" placeholder-style="font-size: 24rpx; color: #A6A6A6;" adjust-position="{{true}}" value="{{form.feedbackName}}" data-name="feedbackName" name="feedbackName" bindblur="bindValue" />
</view>
<text class="tips">请输入您的姓名</text>
</view>
<view class="form_item {{formRules.feedbackPhone.warning ? 'warning' : ''}}">
<text><text style="color: red;">*</text>电话号码:</text>
<view class="value_box">
<input style="width: 100%;height: 100%;" maxlength="11" type="text" placeholder="请输入您的电话号码" placeholder-style="font-size: 24rpx; color: #A6A6A6;" adjust-position="{{true}}" value="{{form.feedbackPhone}}"
data-name="feedbackPhone" name="feedbackPhone" bindblur="bindValue" />
<input style="width: 100%;height: 100%;" maxlength="11" type="text" placeholder="请输入您的电话号码" placeholder-style="font-size: 24rpx; color: #A6A6A6;" adjust-position="{{true}}" value="{{form.feedbackPhone}}" data-name="feedbackPhone" name="feedbackPhone" bindblur="bindValue" />
</view>
<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: 56rpx;width: 56rpx;" mode="widthFix" src="../../../assets/img/upload.png"></image>
</view>
<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: 56rpx;width: 56rpx;" mode="widthFix" src="../../../assets/img/upload.png"></image>
</view>
<text class="tips">请上传图片</text>
</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: #477DF3;" bindtap="showAgree">《用户服务协议》</text>和<text style="color: #477DF3;" bindtap="showConceal">《隐私政策》</text>
<text style="color: #2a82e4;" bindtap="showAgree">《用户服务协议》</text>和<text style="color: #2a82e4;" bindtap="showConceal">《隐私政策》</text>
</view>

<view class="btn_list">
<button class="btn_item cancel_btn" bindtap="returnLastPage">取消</button>
<button disabled="{{!checkAgree}}" class="btn_item submit_btn" bindtap="submit">确认</button>
<button disabled="{{!checkAgree}}" class="btn_item submit_btn" bindtap="submit">确认</button>
</view>
</view>
</view>

+ 1
- 1
package_A/pages/report/index.wxss Просмотреть файл

@@ -183,7 +183,7 @@
}
.submit_btn {
color: #ffffff;
background-color: #477DF3;
background-color: #2a82e4;
}
/* 用户协议确认框 */
.safe_box {

+ 41
- 0
package_A/pages/storeDetail/index.js Просмотреть файл

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

/**
* 页面的初始数据
*/
data: {
dataSource: {
image: ''
},
dataList: [
{label: '店铺名称', value: 'shopsName'},
{label: '所在区域', value: 'areaName'},
{label: '地址', value: 'shopsAddress'},
{label: '联系人', value: 'realname'},
{label: '联系方式', value: 'mobile'}
]
},

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

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

+ 4
- 0
package_A/pages/storeDetail/index.json Просмотреть файл

@@ -0,0 +1,4 @@
{
"usingComponents": {},
"navigationBarTitleText": "店铺详情"
}

+ 11
- 0
package_A/pages/storeDetail/index.wxml Просмотреть файл

@@ -0,0 +1,11 @@
<!--package_A/pages/storeDetail/index.wxml-->
<view class="detail_container">
<image class="detail_head" src="{{dataSource.shopsImage}}"></image>
<view class="info_list">
<view class="info_item" wx:for="{{dataList}}" wx:key="index">
<text class="info_label">{{item.label}}:</text>
<text class="info_value">{{dataSource[item.value]}}</text>
</view>
<view class="btn_box" bindtap="showNavigator">导航</view>
</view>
</view>

+ 55
- 0
package_A/pages/storeDetail/index.wxss Просмотреть файл

@@ -0,0 +1,55 @@
/* package_A/pages/storeDetail/index.wxss */
.detail_container {
width: 100%;
min-height: 100vh;
padding: 22rpx 30rpx;
background-color: #F6F6F6;
display: flex;
flex-direction: column;
justify-content: flex-start;
align-items: center;
}
.detail_head {
width: 100%;
height: 300rpx;
border-radius: 16rpx;
}
.info_list {
width: 100%;
margin-top: 22rpx;
display: flex;
flex-direction: column;
justify-content: flex-start;
align-items: center;
background-color: #ffffff;
border-radius: 16rpx;
}
.info_item {
width: 100%;
padding: 40rpx 0 40rpx 100rpx;
display: flex;
justify-content: flex-start;
align-items: flex-start;
border-bottom: 2rpx solid #EEEEEe;
font-size: 26rpx;
color: #111111;
}
.btn_box {
width: 200rpx;
height: 60rpx;
margin: 50rpx 0;
text-align: center;
line-height: 60rpx;
background-color: #2D84E4;
border-radius: 30rpx;
font-size: 26rpx;
color: #ffffff;
}
.info_label {
/* min-width: 130rpx; */
white-space: nowrap;
/* text-align: end; */
}
.info_value {
max-width: 440rpx;
}

+ 59
- 0
package_A/pages/stores/index.js Просмотреть файл

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

/**
* 页面的初始数据
*/
data: {
// 列表数据筛选条件
params: {
shopsName: ''
},
shopsName: '',
list: [],
current: "/index/merchant/page",
},

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

},

/* 输入名称搜索 */
search(e) {
let params = this.data.params
params.shopsName = this.data.shopsName
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/storeDetail/index?data='+JSON.stringify(data),
})
},

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

+ 7
- 0
package_A/pages/stores/index.json Просмотреть файл

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

+ 26
- 0
package_A/pages/stores/index.wxml Просмотреть файл

@@ -0,0 +1,26 @@
<!--package_A/pages/stores/index.wxml-->
<view class="protecityct_container">
<view class="protect_head">
<view class="search_container">
<image class="search_icon" src="../../../assets/img/search.png"></image>
<input class="task-search" type="text" placeholder="请输入搜索的商户名称" model:value="{{shopsName}}" placeholder-class="placeholder-style" bindconfirm="search" bindblur="search"/>
</view>
</view>
<list id="list" class="shop_list" url="{{current}}" bind:update-list="updateList" list="{{list}}" bind:reset-list="resetList" params="{{params}}">
<view class="shop_item" data-item="{{item}}" bindtap="showDetail" wx:for="{{list}}" wx:key="index">
<view class="shop_info">
<image class="shop_img" mode="scaleToFill" src="{{item.shopsImage}}"></image>
<view class="massage_box">
<text class="shops_name" style="width: 100%;font-size: 30rpx;">{{item.shopsName}}</text>
<text class="shops_area" style="font-size: 26rpx;margin: 16rpx 0;">{{item.areaName}}</text>
<view class="location_text">
<image style="width: 20rpx;height: 20rpx;margin: 6rpx 10rpx 0 0;" src="../../../assets/img/position.png"></image>
<text class="location_value" style="font-size: 22rpx;">{{item.shopsAddress}}</text>
</view>
</view>
</view>
<view class="execute_btn" catchtap="showNavigate" data-current="{{index}}" data-detail="{{item}}">导航</view>
</view>
</list>
</view>

+ 129
- 0
package_A/pages/stores/index.wxss Просмотреть файл

@@ -0,0 +1,129 @@
/* package_A/pages/stores/index.wxss */
.protecityct_container {
width: 100%;
min-height: 100vh;
padding: 30rpx;
display: flex;
flex-direction: column;
justify-content: flex-start;
align-items: center;
color: #333333;
background: linear-gradient(180deg, #2A82E4 0%, rgba(255,255,255,0) 100%);
}
.protect_head {
width: 100%;
display: flex;
flex-direction: column;
justify-content: flex-start;
align-items: flex-end;
}
.search_container {
width: 100%;
height: 80rpx;
padding-left: 60rpx;
box-sizing: border-box;
background: #fff;
border-radius: 34rpx;
display: flex;
justify-content: flex-start;
align-items: center;
}
.search_icon{
height: 32rpx;
width: 32rpx;
}
.task-search {
height: 80rpx;
flex: 1;
text-align: left;
border-radius: 30rpx;
font-size: 28rpx;
padding: 0 20rpx;
}
.placeholder-style{
font-family: "PingFangSC-Regular", "PingFang SC";
font-weight: normal;
color: #a6a6a6;
}

/* 列表样式 */
.shop_list {
width: 100%;
flex: 1;
margin-top: 30rpx;
background-color: #fff;
border-radius: 16rpx;
}
.shop_item {
width: 100%;
padding: 50rpx 20rpx;
border-bottom: 2rpx solid #eeeeee;
display: flex;
justify-content: flex-start;
align-items: flex-start;
}
.shop_info {
box-sizing: border-box;
/* width: 100%; */
width: calc(100% - 100rpx);
display: flex;
justify-content: flex-start;
align-items: flex-start;
}
.shop_img {
width: 260rpx;
height: 180rpx;
border-radius: 20rpx;
}
.massage_box {
width: 240rpx;
box-sizing: border-box;
margin-left: 30rpx;
padding-top: 10rpx;
display: flex;
flex-direction: column;
justify-content: flex-start;
align-items: flex-start;
color: #0C0C0C;
}
.shops_name {
width: 100%;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.shops_area {
width: 100%;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.location_text {
/* width: 100%; */
display: flex;
justify-content: flex-start;
align-items: flex-start;
}
.location_value {
width: 220rpx;
/* max-height: 60rpx; */
display: -webkit-box;
word-break: break-all;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
overflow: hidden;
text-overflow: ellipsis;
}
.execute_btn {
width: 90rpx;
height: 56rpx;
margin-left: 10rpx;
margin-top: 20rpx;
font-size: 24rpx;
color: #fff;
line-height: 56rpx;
text-align: center;
background-color: #2D84E4;
border-radius: 28rpx;
}

+ 49
- 0
package_B/pages/IdList/index.js Просмотреть файл

@@ -0,0 +1,49 @@
// package_B/pages/IdList/index.js
Page({

/**
* 页面的初始数据
*/
data: {
list: [],
current: "/identity/index",
},

/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
this.setData({
current: "/identity/index"
})
},

/* 更新数据 */
updateList(e) {
let list = this.data.list.concat(e.detail || [])
this.setData({ list })
},
/* 重置数据 */
resetList() {
this.setData({ list: [] })
},
/* 跳转申请页面 */
uploadApprove(e) {
let detail = e.currentTarget.dataset.detail
const params = {
applyIdentityId: detail.id,
applyIdentityName: detail.identityName
}
wx.navigateTo({
url: '/package_B/pages/approveId/index?data=' + JSON.stringify(params),
})
},

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

+ 6
- 0
package_B/pages/IdList/index.json Просмотреть файл

@@ -0,0 +1,6 @@
{
"usingComponents": {
"list": "../../../components/List/index"
},
"navigationBarTitleText": "身份列表"
}

+ 17
- 0
package_B/pages/IdList/index.wxml Просмотреть файл

@@ -0,0 +1,17 @@
<!--package_B/pages/IdList/index.wxml-->
<view class="id_container">
<list id="list" class="id_list" url="{{current}}" bind:update-list="updateList" list="{{list}}" bind:reset-list="resetList" params="{{params}}">
<view class="id_item" data-item="{{item}}" bindtap="showDetail" wx:for="{{list}}" wx:key="index">
<image class="id_bg" mode="widthFix" src="../../../assets/img/id_bg.png">
</image>
<view class="id_info">
<view class="massage_box">
<text class="id_info_item" style="font-size: 30rpx;font-weight: bold;">{{item.identityName}}</text>
<text class="id_info_content" style="font-size: 22rpx;margin-top: 30rpx;">{{item.identityRemark}}</text>
</view>
<view class="execute_btn" catchtap="uploadApprove" data-current="{{index}}" data-detail="{{item}}">去申请</view>
</view>
</view>
</list>
</view>

+ 73
- 0
package_B/pages/IdList/index.wxss Просмотреть файл

@@ -0,0 +1,73 @@
/* package_B/pages/IdList/index.wxss */
.id_container {
width: 100%;
height: 100vh;
padding: 0 30rpx;
display: flex;
flex-direction: column;
justify-content: flex-start;
align-items: center;
color: #333333;
}
/* 列表样式 */
.id_list {
width: 100%;
height: 100%;
}
.id_item {
width: 100%;
margin-bottom: 30rpx;
position: relative;
}
.id_bg {
width: 100%;
}
.id_info {
width: 100%;
height: 100%;
padding: 50rpx 30rpx;
display: flex;
justify-content: space-between;
align-items: center;
position: absolute;
top: 0;
left: 0;
}
.massage_box {
box-sizing: border-box;
max-width: calc(100%-190rpx);
display: flex;
flex-direction: column;
justify-content: space-between;
align-items: flex-start;
color: #fff;
}
.id_info_item {
width: 420rpx;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.id_info_content {
width: 420rpx;
max-height: 90rpx;
overflow: hidden;
white-space: pre-wrap;
text-overflow: ellipsis;
}
.id_img {
display: block;
width: 178rpx;
height: 144rpx;
margin-right: 20rpx;
}
.execute_btn {
width: 180rpx;
height: 80rpx;
font-size: 26rpx;
color: #fff;
line-height: 80rpx;
text-align: center;
background-color: #2A82E4FF;
border-radius: 40rpx;
}

+ 130
- 0
package_B/pages/approveId/index.js Просмотреть файл

@@ -0,0 +1,130 @@
// package_B/pages/approveId/index.js
import {approveIdenty} from '../../../api/mine.js'
import {isPositiveInteger} from '../../../utils/check.js'

Page({

/**
* 页面的初始数据
*/
data: {
checkAgree: false,
form: {},
// 表单验证
formRules: {
applyName: {
validator: function (value) {
return value;
},
warning: false
},
applyPhone: {
validator: function (value) {
return value && isPositiveInteger(value);
},
warning: false
}
},
},

/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
if(options.data) {
const params = JSON.parse(options.data)
const applyOpenid = wx.getStorageSync('openid')
this.setData({
form: {
applyOpenid,
...params
}
})
}
},
// 输入框输入
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) {
if(name !== 'applyRemark') {
let formRules = this.data.formRules;
let validator = formRules[name].validator
let 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)
}
})
},
/**
* 同意用户协议
*/
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',
})
},
// 提交申请
submit(){
this.validateForm().then(res => {
if(res) {
wx.showLoading({title:"上传中",mask:true})
const params = this.data.form
approveIdenty(params).then(res => {
if (res.code === 0) {
wx.reLaunch({
url: '/package_B/pages/submitSuccess/index',
})
}
}).finally(()=>{
wx.hideLoading();
})
}
})
},

// 取消
returnLastPage() {
wx.navigateBack({
delta: 1,
})
}
})

+ 4
- 0
package_B/pages/approveId/index.json Просмотреть файл

@@ -0,0 +1,4 @@
{
"usingComponents": {},
"navigationBarTitleText": "身份申请"
}

+ 35
- 0
package_B/pages/approveId/index.wxml Просмотреть файл

@@ -0,0 +1,35 @@
<!--package_B/pages/approveId/index.wxml-->
<view class="approve_container">
<text class="approve_title">请提交你的申请信息</text>
<view class="form_container">
<view class="form_item {{formRules.applyName.warning ? 'warning' : ''}}">
<text><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: 24rpx; color: #A6A6A6;" adjust-position="{{true}}" value="{{form.applyName}}" data-name="applyName" name="applyName" bindblur="bindValue" />
</view>
<text class="tips">请输入您的姓名</text>
</view>
<view class="form_item {{formRules.applyPhone.warning ? 'warning' : ''}}">
<text><text style="color: red;">* </text>电话:</text>
<view class="value_box">
<input style="width: 100%;height: 100%;" maxlength="11" type="text" placeholder="请输入您的电话" placeholder-style="font-size: 24rpx; color: #A6A6A6;" adjust-position="{{true}}" value="{{form.applyPhone}}" data-name="applyPhone" name="applyPhone" bindblur="bindValue" />
</view>
<text class="tips">请输入您的电话</text>
</view>
<view class="use_purpose">
<text>申请理由:</text>
<textarea maxlength="200" style="width:460rpx; height: 160rpx;" type="text" adjust-position="{{true}}" placeholder="请输入申请理由" placeholder-style="font-size: 24rpx; color: #A6A6A6;" value="{{form.applyRemark}}" data-name="applyRemark" name="applyRemark" bindblur="bindValue" />
<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="btn_list">
<button disabled="{{!checkAgree}}" class="btn_item submit_btn" bindtap="submit">确认</button>
<button class="btn_item cancel_btn" bindtap="returnLastPage">取消</button>
</view>
</view>

+ 113
- 0
package_B/pages/approveId/index.wxss Просмотреть файл

@@ -0,0 +1,113 @@
/* package_B/pages/approveId/index.wxss */
.approve_container {
width: 100%;
padding: 0 60rpx;
display: flex;
flex-direction: column;
justify-content: flex-start;
align-items: flex-start;
}
.approve_title {
margin-top: 20rpx;
font-size: 32rpx;
font-weight: bold;
}
.form_container {
width: 100%;
margin-top: 30rpx;
display: flex;
flex-direction: column;
justify-content: flex-start;
align-items: flex-start;
}
.form_item {
width: 100%;
min-height: 68rpx;
padding: 0 20rpx;
margin-bottom: 30rpx;
display: flex;
justify-content: space-between;
align-items: center;
position: relative;
font-size: 26rpx;
background-color: #F8F8F8;
border-radius: 34rpx;
}
.use_purpose {
width: 100%;
padding: 14rpx 0 14rpx 40rpx;
margin-bottom: 30rpx;
display: flex;
justify-content: space-between;
align-items: flex-start;
position: relative;
font-size: 26rpx;
background-color: #F8F8F8;
border-radius: 34rpx;
}
.value_box {
width: 480rpx;
min-height: 68rpx;
display: flex;
justify-content: flex-start;
align-items: center;
position: relative;
color: #333333;
font-size: 24rpx;
}
.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 {
display: block;
}

/* 按钮区 */
.btn_list {
width: 100%;
margin-top: 20rpx;
padding: 10rpx 30rpx;
display: flex;
justify-content: space-between;
align-items: center;
}
.btn_item {
width: 140rpx !important;
padding: 0 !important;
height: 80rpx;
border-radius: 40rpx;
text-align: center;
line-height: 80rpx;
font-size: 28rpx;
}
.cancel_btn {
color: #ffffff;
background-color: #A4A4A4;
}
.submit_btn {
color: #ffffff;
background-color: #2a82e4;
}
/* 用户协议确认框 */
.safe_box {
width: 100%;
margin-top: 50rpx;
display: flex;
justify-content: flex-start;
align-items: center;
font-size: 24rpx;
}
.checkbox {
display: flex;
justify-content: flex-start;
align-items: center;
}
checkbox {
transform: scale(0.7);
}

+ 1
- 1
package_B/pages/beauties/index.js Просмотреть файл

@@ -19,7 +19,7 @@ Page({
* 生命周期函数--监听页面加载
*/
onLoad(options) {
const openid = wx.getStorageSync('openId')
const openid = wx.getStorageSync('openid')
let params = this.data.params
params.openid = openid
this.setData({params})

+ 38
- 0
package_B/pages/exchange/index.js Просмотреть файл

@@ -0,0 +1,38 @@
// package_B/pages/exchange/index.js
Page({

/**
* 页面的初始数据
*/
data: {
list: [],
current: "/my/exchange",
params: {}
},

/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
let params = this.data.params
params.openid = wx.getStorageSync('openid')
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_B/pages/feedbackDetail/index?data='+ JSON.stringify(data),
// })
// }
})

+ 6
- 0
package_B/pages/exchange/index.json Просмотреть файл

@@ -0,0 +1,6 @@
{
"usingComponents": {
"list": "../../../components/List/index"
},
"navigationBarTitleText": "我的兑换"
}

+ 18
- 0
package_B/pages/exchange/index.wxml Просмотреть файл

@@ -0,0 +1,18 @@
<!--package_B/pages/exchange/index.wxml-->
<view class="protect_container">
<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>
</view>
</view>
</list>
</view>

+ 58
- 0
package_B/pages/exchange/index.wxss Просмотреть файл

@@ -0,0 +1,58 @@
/* package_B/pages/exchange/index.wxss */
.protect_container {
width: 100%;
height: 100vh;
padding: 0 30rpx;
display: flex;
flex-direction: column;
justify-content: flex-start;
align-items: center;
color: #0C0C0C;
}
.exchange_list {
width: 100%;
height: 100vh;
}
.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;
}
.exchange_info {
width: 100%;
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;
}
.info_item {
width: 100%;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}

+ 2
- 2
package_B/pages/feedbackDetail/index.js Просмотреть файл

@@ -9,8 +9,8 @@ Page({
statusList: [
{title: '待处理', color: '#F34747'},
{title: '待处理', color: '#F34747'},
{title: '已处理', color: '#477DF3'},
{title: '已处理', color: '#477DF3'}
{title: '已处理', color: '#2a82e4'},
{title: '已处理', color: '#2a82e4'}
]
},


+ 41
- 0
package_B/pages/myId/index.js Просмотреть файл

@@ -0,0 +1,41 @@
// package_B/pages/myId/index.js
import {getIdApprove} from '../../../api/mine.js'
Page({

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

/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
this.getApproveRecord()
},
getApproveRecord() {
const openid = wx.getStorageSync('openid')
getIdApprove({openid}).then(res=> {
if(res.code === 0) {
this.setData({
records: res.data
})
}
})
},

// 重新申请
reApprove() {
wx.navigateTo({
url: '/package_B/pages/IdList/index',
})
},
// 返回我的页面
returnList() {
wx.switchTab({
url: '/pages/mine/index',
})
}
})

+ 4
- 0
package_B/pages/myId/index.json Просмотреть файл

@@ -0,0 +1,4 @@
{
"usingComponents": {},
"navigationBarTitleText": "我的身份"
}

+ 31
- 0
package_B/pages/myId/index.wxml Просмотреть файл

@@ -0,0 +1,31 @@
<!--package_B/pages/myId/index.wxml-->
<view class="myid_container">
<view class="records_box" wx:if="{{records}}">
<view class="record_title">您当前申请的身份</view>
<view class="record_card">
<image wx:if="{{records.status === 1}}" class="approve_bg" mode="widthFix" src="../../../assets/img/approveing.png"></image>
<image wx:if="{{records.status === 2}}" class="approve_bg" mode="widthFix" src="../../../assets/img/passed.png"></image>
<image wx:if="{{records.status === 3}}" class="approve_bg" mode="widthFix" src="../../../assets/img/failed.png"></image>
<view class="record_info">
<view class="massage_box">
<text class="info_name" style="font-size: 30rpx;font-weight: bold;">{{records.applyIdentityName}}</text>
<text class="info_content" style="font-size: 22rpx;margin-top: 30rpx;">{{records.identityRemark}}</text>
</view>
<view wx:if="{{records.status === 1}}" class="execute_btn" style="background-color: #05E4AF;">申请中</view>
<view wx:if="{{records.status === 2}}" class="execute_btn" style="background-color: #2B83E4;">申请通过</view>
<view wx:if="{{records.status === 3}}" class="execute_btn" style="background-color: #FF2D2D;">申请不通过</view>
</view>
</view>
<view class="btn_units">
<view wx:if="{{records.status !== 1}}" class="re_approve" bindtap="reApprove">重新申请</view>
</view>
</view>

<view class="empty_box" wx:else>
<image class="success_img" src="../../../assets/img/unapprove.png" mode="widthFix"></image>
<view class="tips_text">您当前还未申请身份, 请返回“我的”页面申请身份!</view>
<view class="return_btn" bindtap="returnList">我知道了</view>
</view>


</view>

+ 131
- 0
package_B/pages/myId/index.wxss Просмотреть файл

@@ -0,0 +1,131 @@
/* package_B/pages/myId/index.wxss */
.myid_container {
width: 100%;
padding: 0 30rpx;
display: flex;
flex-direction: column;
justify-content: flex-start;
align-items: flex-start;
}
.records_box {
width: 100%;
display: flex;
flex-direction: column;
justify-content: flex-start;
align-items: flex-start;
}
.record_title {
margin: 60rpx 0;
padding-left: 40rpx;
color: #111111;
font-size: 32rpx;
font-weight: 800;
}
.record_card {
width: 100%;
position: relative;
}
.approve_bg {
width: 100%;
}
.record_info {
width: 100%;
height: 100%;
padding: 50rpx 30rpx;
display: flex;
justify-content: space-between;
align-items: center;
position: absolute;
top: 0;
left: 0;
}
.massage_box {
box-sizing: border-box;
max-width: calc(100%-190rpx);
display: flex;
flex-direction: column;
justify-content: space-between;
align-items: flex-start;
color: #fff;
}
.info_name {
width: 420rpx;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.info_content {
width: 420rpx;
max-height: 90rpx;
overflow: hidden;
white-space: pre-wrap;
text-overflow: ellipsis;
}
.id_img {
display: block;
width: 178rpx;
height: 144rpx;
margin-right: 20rpx;
}

.execute_btn {
width: 180rpx;
height: 80rpx;
font-size: 26rpx;
color: #fff;
line-height: 80rpx;
text-align: center;
background-color: #2A82E4FF;
border-radius: 40rpx;
}
.btn_units {
width: 100%;
margin-top: 380rpx;
display: flex;
justify-content: center;
align-items: center;
}
.re_approve {
width: 326rpx;
height: 80rpx;
text-align: center;
line-height: 80rpx;
font-size: 26rpx;
font-weight: 800;
color: #fff;
background-color: #4BE2AC;
border-radius: 40rpx;
}

.empty_box {
width: 100%;
padding: 130rpx 170rpx;
display: flex;
flex-direction: column;
justify-content: flex-start;
align-items: center;
}
.success_img {
width: 224rpx;
height: 224rpx;
margin-bottom: 126rpx;
}

.tips_text {
font-size: 26rpx;
font-weight: 800;
color: #504E4E;
text-indent: 34rpx;
}
.return_btn {
width: 400rpx;
height: 88rpx;
margin-top: 260rpx;
border-radius: 40rpx;
background-color: #4BE2AC;
line-height: 88rpx;
text-align: center;
color: #ffffff;
font-size: 24rpx;
font-weight: bold;
}

+ 3
- 16
package_B/pages/records/index.js Просмотреть файл

@@ -11,8 +11,8 @@ Page({
statusList: [
{title: '待处理', color: '#F34747'},
{title: '待处理', color: '#F34747'},
{title: '已处理', color: '#477DF3'},
{title: '已处理', color: '#477DF3'}
{title: '已处理', color: '#2a82e4'},
{title: '已处理', color: '#2a82e4'}
]
},

@@ -21,23 +21,10 @@ Page({
*/
onLoad: function (options) {
let params = this.data.params
params.openid = wx.getStorageSync('openId')
params.openid = wx.getStorageSync('openid')
this.setData({params})
},

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

},

/**
* 生命周期函数--监听页面显示
*/
onShow: function () {
},
/* 更新数据 */
updateList(e) {
let list = this.data.list.concat(e.detail)

+ 36
- 0
package_B/pages/submitSuccess/index.js Просмотреть файл

@@ -0,0 +1,36 @@
// package_A/pages/sreamDetail/index.js
Page({

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

},

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

},

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

},

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

},
returnList(){
wx.switchTab({
url: '/pages/mine/index'
})
}
})

+ 4
- 0
package_B/pages/submitSuccess/index.json Просмотреть файл

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

+ 6
- 0
package_B/pages/submitSuccess/index.wxml Просмотреть файл

@@ -0,0 +1,6 @@
<!--package_A/pages/sreamDetail/index.wxml-->
<view class="success_container">
<image class="success_img" src="../../../assets/img/submit_success.png" mode="widthFix"></image>
<view class="tips_text">您的申请已提交,请耐心等待审核!</view>
<view class="return_btn" bindtap="returnList">我知道了</view>
</view>

+ 31
- 0
package_B/pages/submitSuccess/index.wxss Просмотреть файл

@@ -0,0 +1,31 @@
/* package_A/pages/sreamDetail/index.wxss */
.success_container {
width: 100%;
padding: 150rpx 125rpx 0 125rpx;
display: flex;
flex-direction: column;
justify-content: flex-start;
align-items: center;
}
.success_img {
width: 224rpx;
height: 224rpx;
margin-bottom: 126rpx;
}

.tips_text {
font-size: 26rpx;
color: #666666;
}
.return_btn {
width: 400rpx;
height: 88rpx;
margin-top: 260rpx;
border-radius: 40rpx;
background-color: #4BE2AC;
line-height: 88rpx;
text-align: center;
color: #ffffff;
font-size: 24rpx;
font-weight: bold;
}

+ 250
- 0
package_B/pages/userInfo/index.js Просмотреть файл

@@ -0,0 +1,250 @@
// package_B/pages/userInfo/index.js
import {Base64} from 'js-base64'
import {getOssAuth} from '../../../api/uploadOss.js'
const crypto = require('crypto-js')
import {uploadUserInfo} from '../../../api/mine.js'

Page({

/**
* 页面的初始数据
*/
data: {
ossForm: {},
form: {},
image: '',
formRules: {
nickname: {
validator: function (value) {
return value;
},
warning: false
},
headimgurl: {
validator: function (value) {
return value;
},
warning: false
}
}
},

/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
const form = wx.getStorageSync('userInfo')
this.setData({form})
},

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

},

/**
* 生命周期函数--监听页面显示
*/
onShow() {
this.getOssAuthForm()
},
/**
* 获取上传oss参数
*/
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})
})
},

// 表单项验证
validate(name) {
let formRules = this.data.formRules;
let validator = formRules[name].validator
let 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)
},
/* 上传图片 */
uploadImage(){
wx.chooseMedia({
count: 1, // 最多可以选择的图片张数,默认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 form = this.data.form
form.headimgurl = list[0]
this.setData({ form, image: list[0] })
this.validate('headimgurl')
},
fail: (e) => {
console.log(e);
}
})
},

// 删除图片
deleteImage() {
let form = this.data.form
form.headimgurl = ''
this.setData({ form, image: '' })
this.validate('headimgurl')
},

/** 返回 */
return() {
wx.switchTab({
url: '/pages/mine/index',
})
},

/**
* 图片上传oss
*/
uploadToOss(url) {
const ossForm = this.data.ossForm
// 设置文件上传路径
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: url,
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('图片上传失败')
}
})
})
},

/* 表单上传 */
submit(){
this.validateForm().then(res => {
if(res) {
const image = this.data.image
let params = {}
params.id = this.data.form.id
params.nickname = this.data.form.nickname
if (image) {
wx.showLoading({title:"上传中",mask:true})
this.uploadToOss(image).then(item=> {
params.headimgurl = item
uploadUserInfo(params).then(i => {
if (i.code === 0) {
wx.switchTab({
url: '/pages/mine/index',
})
}
}).finally(()=>{
wx.hideLoading();
})
}).catch(()=> {
wx.hideLoading();
})
} else {
uploadUserInfo(params).then(i => {
if (i.code === 0) {
wx.switchTab({
url: '/pages/mine/index',
})
}
}).finally(()=>{
wx.hideLoading();
})
}
}
})
}

})

+ 4
- 0
package_B/pages/userInfo/index.json Просмотреть файл

@@ -0,0 +1,4 @@
{
"usingComponents": {},
"navigationBarTitleText": "个人信息"
}

+ 28
- 0
package_B/pages/userInfo/index.wxml Просмотреть файл

@@ -0,0 +1,28 @@
<!--package_B/pages/userInfo/index.wxml-->
<view class="form_container">
<view class="form_item {{formRules.nickname.warning ? 'warning' : ''}}">
<text><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: 24rpx; color: #A6A6A6;" adjust-position="{{true}}" value="{{form.nickname}}"
data-name="nickname" name="nickname" bindinput="bindValue" />
</view>
<text class="tips">请输入用户名称</text>
</view>
<view class="upload_images {{formRules.headimgurl.warning? 'warning': ''}}">
<text><text style="color: red;">*</text>个人头像:</text>
<view class="image_preview" wx:if="{{form.headimgurl}}">
<image class="image_item" src="{{form.headimgurl}}" mode="aspectFill">
</image>
<div class="close" catchtap="deleteImage"></div>
</view>
<view class="upload_image" bindtap="uploadImage" wx:if="{{form.headimgurl.length<1}}">
<image style="height: 56rpx;width: 56rpx;" mode="widthFix" src="../../../assets/img/upload.png"></image>
</view>
<text class="tips">请上传个人头像</text>
</view>
<view class="btn_list">
<view class="btn_item cancel_btn" bindtap="return">返回</view>
<view class="btn_item submit_btn" bindtap="submit">确定</view>
</view>

</view>

+ 153
- 0
package_B/pages/userInfo/index.wxss Просмотреть файл

@@ -0,0 +1,153 @@
/* package_B/pages/userInfo/index.wxss */
.form_container {
width: 100%;
padding: 30rpx 80rpx;
display: flex;
flex-direction: column;
justify-content: flex-start;
align-items: flex-start;
}
.form_item {
width: 100%;
margin-bottom: 60rpx;
display: flex;
justify-content: space-between;
align-items: center;
position: relative;
font-size: 30rpx;
color: #666666;
}
.value_box {
width: 420rpx;
background-color: #F8F8F8;
min-height: 68rpx;
padding: 0 55rpx 0 20rpx;
display: flex;
justify-content: flex-start;
align-items: center;
border-radius: 34rpx;
position: relative;
color: #333333;
font-size: 26rpx;
}
.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%;
margin-bottom: 30rpx;
display: flex;
justify-content: flex-start;
align-items: flex-start;
font-size: 30rpx;
color: #666666;
position: relative;
}
.image_preview {
height: 120rpx;
width: 120rpx;
margin-left: 30rpx;
margin-bottom: 20rpx;
position: relative;
}
.image_item {
height:100%;
width: 100%;
border-radius: 16rpx;
margin-bottom: 20rpx;
}
.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: ; */
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: ; */
transform: translate(-50%,-50%) rotate(-45deg);
}
.upload_image {
width: 120rpx;
height: 120rpx;
margin-left: 40rpx;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
background-color: #F8F8F8;
border-radius: 34rpx;
}

.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_list {
width: 100%;
margin-top: 200rpx;
padding: 10rpx 0;
display: flex;
justify-content: space-between;
align-items: center;
}
.btn_item {
width: 240rpx;
height: 80rpx;
border-radius: 40rpx;
text-align: center;
line-height: 80rpx;
font-size: 26rpx;
}
.cancel_btn {
color: #333333;
border: 1rpx solid #E6E6E6;
margin-right: 20rpx;
}
.submit_btn {
color: #ffffff;
background-color: #2a82e4;
}

+ 0
- 8
package_first/pages/announceList/index.js Просмотреть файл

@@ -6,18 +6,10 @@ Page({
*/
data: {
list: [],
params: {},
current: "",
},
onLoad: function() {

let positionParams = wx.getStorageSync('positionParams')
let params = this.data.params
params.provinceCode = positionParams.provinceCode || ''
params.cityCode = positionParams.cityCode || ''
params.districtCode = positionParams.districtCode || ''
this.setData({
params,
current: "/index/westreamAct/page"
})
},

+ 1
- 8
package_first/pages/askAdmin/index.js Просмотреть файл

@@ -6,21 +6,14 @@ Page({
*/
data: {
list: [],
params: {},
current: "/index/westreamKnow/page",
current: "",
},

/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
let positionParams = wx.getStorageSync('positionParams')
let params = this.data.params
params.provinceCode = positionParams.provinceCode || ''
params.cityCode = positionParams.cityCode || ''
params.districtCode = positionParams.districtCode || ''
this.setData({
params,
current: "/index/westreamKnow/page"
})
},

+ 6
- 12
package_first/pages/beautyList/index.js Просмотреть файл

@@ -1,5 +1,5 @@
// package_first/pages/upload/index.js
import {getUserInfo} from '../../../utils/getUserInfo.js'
import {getOpenidData} from '../../../utils/getUserInfo.js'

Page({

@@ -9,20 +9,14 @@ Page({
data: {
// 列表数据筛选条件
list: [],
params: {},
current: "/index/westreamScenery/page",
current: "",
},

/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
let positionParams = wx.getStorageSync('positionParams')
let params = this.data.params
params.provinceCode = positionParams.provinceCode || ''
params.cityCode = positionParams.cityCode || ''
params.districtCode = positionParams.districtCode || ''
this.setData({ params })
this.setData({ current: "/index/westreamScenery/page" })
},

/**
@@ -43,13 +37,13 @@ Page({
},
/* 跳转上报问题页面 */
uploadBeauty(e) {
const openId = wx.getStorageSync('openId')
if(openId) {
const openid = wx.getStorageSync('openid')
if(openid) {
wx.navigateTo({
url: '/package_first/pages/uploadBeauty/index',
})
} else {
getUserInfo().then(res=> {
getOpenidData().then(res=> {
wx.navigateTo({
url: '/package_first/pages/uploadBeauty/index',
})

+ 1
- 5
package_first/pages/uploadBeauty/index.js Просмотреть файл

@@ -78,11 +78,7 @@ Page({

/* 获取河流数据 */
getRiversOption() {
const positionParams = wx.getStorageSync('positionParams')
const riverParams = {}
riverParams.provinceCode = positionParams.provinceCode
riverParams.cityCode = positionParams.cityCode
riverParams.distritCode = positionParams.distritCode
getRivers(riverParams).then((res)=> {
if(res.code === 0) {
this.setData({
@@ -254,7 +250,7 @@ Page({
})
Promise.all(temp).then((res)=> {
let form = this.data.form;
let openid = wx.getStorageSync('openId')
let openid = wx.getStorageSync('openid')
form.image = res.join(',')
form.openid = openid
uploadBeauty(form).then(res => {

+ 19
- 57
pages/FirstPage/index.js Просмотреть файл

@@ -1,6 +1,6 @@
// pages/FirstPage/index.js
import {getAnnounce, getOnlive} from '../../api/home.js'
import {getUserInfo} from '../../utils/getUserInfo.js'
import {getOnlive} from '../../api/home.js'
import {getOpenidData} from '../../utils/getUserInfo.js'
Page({

/**
@@ -35,21 +35,15 @@ Page({
type: 'page'
},
{
title:'互河建议',
iconPath: '../../assets/first/rivers.png',
path: '/package_first/pages/ProtectionSuggestion/index',
type: 'page'
},
{
title:'敬请期待',
iconPath: '../../assets/first/more.png',
path: '/package_first/pages/more/index',
title:'积分商城',
iconPath: '../../assets/first/stores.png',
path: '/package_A/pages/stores/index',
type: 'page'
},
{
title:'敬请期待',
iconPath: '../../assets/first/more.png',
path: '/package_first/pages/more/index',
title:'积分商城',
iconPath: '../../assets/first/stores.png',
path: '/package_A/pages/stores/index',
type: 'page'
}
],
@@ -58,9 +52,6 @@ Page({
list: [], // 河道展示
current: '',
params: {
provinceCode: '',
cityCode: '',
districtCode: '',
page: 1,
limit: 3
}
@@ -73,22 +64,15 @@ Page({
this.getTabBar().setData({
selected: 0
})
let positionParams = wx.getStorageSync('positionParams')
if(Object.keys(positionParams).length) {
let params = this.data.params
let data = {}
data.provinceCode = positionParams.provinceCode || ''
data.cityCode = positionParams.cityCode || ''
data.districtCode = positionParams.districtCode || ''
params = Object.assign(this.data.params, data)
this.setData({params, current:'/stream/index'})
this.getAnnouncementList(data)
} else {
let tenant = wx.getStorageSync('tenant')
if(!Object.keys(tenant).length) {
const path = '/pages/FirstPage/index'
const fromType = 'tabbar'
wx.redirectTo({
url: `/pages/login/login?path=${path}&fromType=${fromType}`,
})
} else {
this.setData({current: '/stream/index',})
}
},
@@ -96,19 +80,6 @@ Page({
this.getOnliveNum()
},

// 获取公告数据
async getAnnouncementList(data) {
const params = {
page: 1,
limit: 1,
...data
}
const res = await getAnnounce(params)
if(res.code === 0) {
const announcementList = res.data.records
this.setData({announcementList})
}
},

/* 更新数据 */
updateList(e) {
@@ -121,18 +92,9 @@ Page({
},
// 获取在线人数
getOnliveNum() {
let params = {}
if(wx.getStorageSync('positionParams')) {
const {provinceCode, cityCode, districtCode} = wx.getStorageSync('positionParams')
params = {
provinceCode: provinceCode|| '',
cityCode: cityCode || '',
districtCode:districtCode|| ''
}
}
getOnlive(params).then(res=> {
getOnlive().then(res=> {
if(res.code === 0) {
this.setData({liveNum: 21346 + res.data})
this.setData({liveNum: res.data})
}
})
},
@@ -155,10 +117,10 @@ Page({
let title = e.currentTarget.dataset.title
if(title !== '敬请期待') {
// 判断是否有权限
let positionParams = wx.getStorageSync('positionParams')
let tenant = wx.getStorageSync('tenant')
let path = e.currentTarget.dataset.path
let type = e.currentTarget.dataset.type
if(Object.keys(positionParams).length) {
if(Object.keys(tenant).length) {
if(type === 'tabbar') {
wx.switchTab({
url: path,
@@ -179,13 +141,13 @@ Page({
// 上报问题
uploadProblem(e) {
let detail = e.currentTarget.dataset.detail
let openId = wx.getStorageSync('openId')
if(openId) {
let openid = wx.getStorageSync('openid')
if(openid) {
wx.navigateTo({
url: '/package_A/pages/report/index?data=' + JSON.stringify(detail),
})
} else {
getUserInfo().then(res=> {
getOpenidData().then(res=> {
wx.navigateTo({
url: '/package_A/pages/report/index?data=' + JSON.stringify(detail),
})

+ 0
- 16
pages/FirstPage/index.wxml Просмотреть файл

@@ -10,22 +10,6 @@
<image class="banner_image" src="../../assets/first/home_banner.png" mode="aspectFill" bindtap="redirectToAd"></image>
</view>

<!-- 头条 -->
<!-- <view class="announcement " bindtap="showAnnouncementDetail">
<view class="announcement_img">
<image src="../../assets/first/inform.png" class="announcement_icon"></image>
<text class="announcement_text">行动</text>
</view>
<swiper class="announcement-swiper" indicator-dots="{{false}}" vertical="false" duration="1000" interval="5000"
autoplay="{{true}}" circular="true">
<block wx:for="{{announcementList}}" wx:key="index">
<swiper-item class="announcement-swiper-item" data-current="{{index}}">
<view class="overflow_ellipsis">{{item.title}}</view>
<view class="inform_date">{{item.createTime}}</view>
</swiper-item>
</block>
</swiper>
</view> -->

<!-- 快捷入口 -->
<view class="fast_enters">

+ 1
- 1
pages/FirstPage/index.wxss Просмотреть файл

@@ -229,7 +229,7 @@
color: #fff;
line-height: 60rpx;
text-align: center;
background-color: #2a82e4cc;
background-color: #2a82e4;
border-radius: 8rpx;
align-self: flex-end;
}

+ 5
- 19
pages/all/index.js Просмотреть файл

@@ -1,5 +1,5 @@
// pages/all/index.js
import {getUserInfo} from '../../utils/getUserInfo.js'
import {getOpenidData} from '../../utils/getUserInfo.js'
import {getCityTree} from '../../api/feeddback.js'
Page({

@@ -13,7 +13,7 @@ Page({
},
name: '',
list: [],
current: "",
current: "/stream/index",
},

/**
@@ -23,20 +23,6 @@ Page({
this.getTabBar().setData({
selected: 1
})
let positionParams = wx.getStorageSync('positionParams')
if(Object.keys(positionParams).length) {
let params = this.data.params
params.provinceCode = positionParams.provinceCode
params.cityCode = positionParams.cityCode
params.districtCode = positionParams.districtCode
this.setData({params, current: '/stream/index'})
} else {
const path = '/pages/all/index'
const fromType = 'tabbar'
wx.redirectTo({
url: `/pages/login/login?path=${path}&fromType=${fromType}`,
})
}
},

/**
@@ -66,13 +52,13 @@ Page({
/* 跳转上报问题页面 */
uploadProblem(e) {
let detail = e.currentTarget.dataset.detail
let openId = wx.getStorageSync('openId')
if(openId) {
let openid = wx.getStorageSync('openid')
if(openid) {
wx.navigateTo({
url: '/package_A/pages/report/index?data=' + JSON.stringify(detail),
})
} else {
getUserInfo().then(res=> {
getOpenidData().then(res=> {
wx.navigateTo({
url: '/package_A/pages/report/index?data=' + JSON.stringify(detail),
})

+ 3
- 3
pages/all/index.wxss Просмотреть файл

@@ -34,8 +34,8 @@
position: relative;
}
.search_icon{
height: 60rpx;
width: 60rpx;
height: 34rpx;
width: 34rpx;
position: absolute;
top:50%;
left:51rpx;
@@ -74,7 +74,7 @@
}
.massage_box {
box-sizing: border-box;
width: calc(100%-150rpx);
width: calc(100% - 150rpx);
display: flex;
justify-content: flex-start;
align-items: flex-start;

+ 124
- 23
pages/login/login.js Просмотреть файл

@@ -1,6 +1,7 @@
// pages/login/login.js
import {getCityTree} from '../../api/feeddback.js'
import {getCityNameCode} from '../../api/login.js'
import {getCityNameCode, getTenantData, getUserData, enterMini} from '../../api/login.js'
import {getOpenidData, getUserMessage} from '../../utils/getUserInfo.js'
import {getLocatonPermission} from '../../utils/getUserLocation.js'
Page({

@@ -18,7 +19,18 @@ Page({
params: {}, // 筛选条件
obj: {},
path: '/pages/FirstPage/index',
fromType: 'tabbar'
fromType: 'tabbar',
tenantId: '',
tenantCurrent: -1, // 当前选择的租户数据index
tenantOptions: [], // 租户列表
formRules: {
tenantId: {
validator: function (value) {
return value;
},
warning: false
}
}
},

/**
@@ -55,6 +67,8 @@ Page({
districtCurrent: positionParams.districtCurrent,
districtOptions: positionParams.districtOptions
})
// 获取租户信息
this.getTenantByParams(params)
} else {
this.getUserLocation()
}
@@ -73,12 +87,79 @@ Page({
districtCurrent: positionParams.districtCurrent,
districtOptions: positionParams.districtOptions
})
wx.setStorage({
key: 'positionParams',
data: positionParams
})
} else {
this.getUserLocation()
}
})
}
}
const tenantObj = wx.getStorageSync('tenant')
if(tenantObj) {
const {tenantCurrent, tenantId} = tenantObj
this.setData({tenantCurrent, tenantId})
}
const openid = wx.getStorageSync('openid')
if(openid) {
this.setData({openid})
} else {
getOpenidData().then(res=> {
this.setData({openid: res.openid})
})
}
},
validate(name) {
let formRules = this.data.formRules;
let validator = formRules[name].validator
let result = validator ? !validator(this.data[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)
}
})
},
/**
* 根据省市区查询已有租户
*/
getTenantByParams(params) {
getTenantData(params).then(res=> {
if(res.code === 0) {
this.setData({
tenantOptions: res.data
})
}
})
},

/**
* 选择租户
*/
selectTenant(e) {
const tenantCurrent = e.detail.value
let tenantId = this.data.tenantOptions[tenantCurrent].id
this.setData({
tenantCurrent,
tenantId
})
this.validate('tenantId')
},
/**
* 根据name查找list
@@ -133,6 +214,12 @@ Page({
},
/* 筛选 */
updateAreaChange(e) {
// 清空租户信息
this.setData({
tenantId: '',
tenantCurrent: -1,
tenantOptions: [],
})
const type = e.target.dataset.type
const current = e.detail.current
let params = this.data.params
@@ -161,12 +248,14 @@ Page({
this.setData({
params: params
})
this.getTenantByParams(params)
},
/* 根据current获取当前选中的值 */
getValueByCurrent(current,type) {
let code = this.data[type+'Options'][current].value
return code
},
// 获取用户位置信息
getUserLocation(e) {
let cityObj = wx.getStorageSync('cityObj')
if(!Object.keys(cityObj).length) {
@@ -180,8 +269,14 @@ Page({
latlng.lng = res.longitude
getCityNameCode(latlng).then(res=> {
let cityObj = res.data
const params = {
provinceCode: cityObj.provinceCode,
cityCode: cityObj.cityCode,
districtCode: cityObj.districtCode
}
this.setData({cityObj})
this.getListByName(cityObj)
this.getTenantByParams(params)
})
})
}
@@ -190,27 +285,33 @@ Page({
* 进入首页
*/
goHome() {
let params = this.data.params
let positionParams = Object.assign({}, params)
positionParams.provinceCurrent = this.data.provinceCurrent
positionParams.cityCurrent = this.data.cityCurrent
positionParams.districtCurrent = this.data.districtCurrent
positionParams.cityOptions = this.data.cityOptions
positionParams.districtOptions = this.data.districtOptions
wx.setStorage({
key: 'positionParams',
data: positionParams
this.validateForm().then(res => {
if(res) {
enterMini({openid: this.data.openid, tenantId: this.data.tenantId}).then(item=> {
if(item.code === 0) {
const tenantObj = {
tenantCurrent: this.data.tenantCurrent,
tenantId: this.data.tenantId
}
wx.setStorage({
key: 'tenant',
data: tenantObj
})
// 进入首页
const path = this.data.path
const fromType = this.data.fromType
if(fromType === 'page') {
wx.redirectTo({
url: path,
})
} else {
wx.switchTab({
url: path,
})
}
}
})
}
})
const path = this.data.path
const fromType = this.data.fromType
if(fromType === 'page') {
wx.redirectTo({
url: path,
})
} else {
wx.switchTab({
url: path,
})
}
}
})

+ 13
- 0
pages/login/login.wxml Просмотреть файл

@@ -8,6 +8,19 @@
<select disabled="{{!params.provinceCode}}" data="{{cityOptions}}" data-type="city" rangeKey="name" current="{{cityCurrent}}" bind:updateChange="updateAreaChange"></select>
<select disabled="{{!params.cityCode}}" data="{{districtOptions}}" data-type="district" rangeKey="name" current="{{districtCurrent}}" bind:updateChange="updateAreaChange"></select>
</view>
<text class="location_label">您的关注部门:</text>
<view class="form_item {{formRules.tenantId.warning ? 'warning' : ''}}">
<view class="value_box">
<picker class="picker_box" bindchange="selectTenant" value="{{tenantCurrent}}" data-current="{{tenantCurrent}}" range="{{tenantOptions}}" range-key="name">
<view class="picker" wx:if="{{tenantId}}">
{{tenantOptions[tenantCurrent].name}}
</view>
<view wx:else class="picker" style="color: #A6A6A6; font-size: 26rpx;">请选择部门</view>
<image class="select_img" src="../../assets/first/select.png"></image>
</picker>
</view>
<text class="tips">请选择部门</text>
</view>
</view>
<view class="footer">
<view class="enter_btn" bindtap="goHome">进入小程序</view>

+ 73
- 1
pages/login/login.wxss Просмотреть файл

@@ -33,13 +33,85 @@
justify-content: space-around;
align-items: center;
}
.form_item {
width: 100%;
padding: 0 60rpx;
margin-top: 30rpx;
display: flex;
justify-content: space-between;
align-items: center;
position: relative;
font-size: 28rpx;
color: #666666;
}
.value_box {
width: 100%;
min-height: 60rpx;
display: flex;
justify-content: space-between;
align-items: center;
border: 1rpx solid rgba(181, 181, 181, 1);
border-radius: 4rpx;
position: relative;
color: #333333;
font-size: 24rpx;
}
.text_box {
width: 100%;
margin-top: 20rpx;
}
.picker_box {
width: 560rpx;
padding: 0 30rpx 0 10rpx;
font-size: 28rpx;
color: #333333;
display: flex;
justify-content: space-between !important;
align-items: center;
position: relative;
}
.picker {
width: 500rpx;
margin-right: 30rpx;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.select_img {
width: 24rpx;
height: 12rpx;
position: absolute;
right: 0rpx;
top: 10rpx;
}
.picker_text {
width: 100%;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.tips{
position: absolute;
bottom: -40rpx;
left: 40rpx;
color: red;
font-size: 24rpx;
transform: translate(27rpx, -5rpx);
display: none;
}
.form_item.warning .tips{
display: block;
}



.login_btn {
margin-top: 80rpx;
color: #fff;
font-weight: normal;
border-radius: 39rpx;
background-color: #477DF3;
background-color: #2a82e4;
}
.footer {
margin-top: 100rpx;

+ 35
- 21
pages/mine/index.js Просмотреть файл

@@ -1,4 +1,5 @@
// pages/mine/index.js
import {getUserData} from '../../api/login.js'
Page({

/**
@@ -7,9 +8,14 @@ Page({
data: {
userInfo: {}, // 用户授权信息
list: [
{title: '我的反馈', type: 'feedback'},
{title: '我的美拍', type: 'upload'}
]
{title: '个人信息', type: 'userinfo', path: '/package_B/pages/userInfo/index'},
{title: '我的反馈', type: 'feedback', path: '/package_B/pages/records/index'},
{title: '我的美拍', type: 'beauty', path: '/package_B/pages/beauties/index'},
{title: '我的兑换', type: 'exchange', path: '/package_B/pages/exchange/index'},
{title: '我的身份', type: 'myid', path: '/package_B/pages/myId/index'}
],
myId: '', // 身份
integral: 0, // 积分
},

/**
@@ -19,28 +25,36 @@ Page({
this.getTabBar().setData({
selected: 2
})
this.setData({
userInfo: wx.getStorageSync('userInfo')
})
},
onShow:function() {
this.getUserInfo()
},

goRecords(e) {
const type = e.currentTarget.dataset.type
if(type === 'feedback') {
wx.navigateTo({
url: '/package_B/pages/records/index',
})
} else {
wx.navigateTo({
url: '/package_B/pages/beauties/index',
const path = e.currentTarget.dataset.path
wx.navigateTo({
url: path,
})
},
// 获取
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})
})
},

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

// 进入申请身份页面
goApprove() {
wx.navigateTo({
url: '/package_B/pages/IdList/index',
})
}
})

+ 2
- 1
pages/mine/index.json Просмотреть файл

@@ -1,4 +1,5 @@
{
"usingComponents": {},
"navigationBarTitleText": "我的"
"navigationBarTitleText": "我的",
"navigationBarBackgroundColor": "#2C83E4"
}

+ 18
- 5
pages/mine/index.wxml Просмотреть файл

@@ -1,16 +1,29 @@
<!--pages/mine/index.wxml-->
<view class="mine_container">
<view class="user_massage">
<image class="user_avatar" src="{{userInfo.headimgurl}}"></image>
<text class="user_name">{{userInfo.nickname}}</text>
<view class="message_box">
<image class="user_avatar" src="{{userInfo.headimgurl}}"></image>
<view class="id_box">
<text class="user_name">{{userInfo.nickname}}</text>
<view class="integral">
<text style="color: #ffffff;font-size: 20rpx;">护河积分</text>
<text style="font-size: 40rpx;color: #FFC65E;">{{userInfo.mallPoints || 0}}</text>
</view>
</view>
</view>
<view class="approve_box">
<view wx:if="{{userInfo.identityName}}" class="approve_btn">{{userInfo.identityName}}</view>
<view wx:else class="approve_btn" bindtap="goApprove">申请护河身份</view>
<text style="color: #ffffff;font-size: 20rpx;">护河积分可兑换礼物!快来加入我们吧</text>
</view>
</view>
<view class="function_list">
<view class="function_item" wx:for="{{list}}" wx:key="index" bindtap="goRecords" data-type="{{item.type}}">
<view class="function_item" wx:for="{{list}}" wx:key="index" bindtap="goRecords" data-path="{{item.path}}">
<view class="item_title">
<image style="height: 40rpx;width: 40rpx;margin-right: 15rpx;" src="../../assets/img/record.png"></image>
<image style="height: 60rpx;width: 60rpx;margin-right: 20rpx;" src="{{'../../assets/img/'+ item.type +'.png'}}"></image>
<text style="font-size: 26rpx;">{{item.title}}</text>
</view>
<image style="height: 48rpx;width: 48rpx;" src="../../assets/img/more.png"></image>
<image style="height: 30rpx;width: 30rpx;" src="../../assets/img/more.png"></image>
</view>

</view>

+ 62
- 12
pages/mine/index.wxss Просмотреть файл

@@ -2,7 +2,8 @@
.mine_container {
width: 100%;
height: 100vh;
background-color: #F3F4F5;
padding: 0 30rpx;
background: linear-gradient(180deg, #2A82E4 0%, rgba(255,255,255,0) 100%);
display: flex;
flex-direction: column;
justify-content: flex-start;
@@ -10,35 +11,84 @@
}
.user_massage {
width: 100%;
height: 200rpx;
padding: 36rpx 60rpx;
background-color: #ffffff;
padding: 60rpx 40rpx;
display: flex;
justify-content: space-between;
align-items: flex-start;
}
.message_box {
display: flex;
justify-content: flex-start;
align-items: center;
align-items: flex-start;
}
.user_avatar {
width: 128rpx;
height: 128rpx;
border-radius: 50%;
width: 100rpx;
height: 100rpx;
border-radius: 16rpx;
margin-right: 30rpx;
}
.id_box {
display: flex;
flex-direction: column;
justify-content: flex-start;
align-items: flex-start;
}
.user_name {
width: 170rpx;
font-size: 30rpx;
color: #ffffff;
font-weight: bold;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.approve_box {
margin-left: 20rpx;
display: flex;
flex-direction: column;
justify-content: flex-start;
align-items: center;
}
.approve_btn {
width: 250rpx;
height: 80rpx;
padding: 0 20rpx;
margin-bottom: 20rpx;
text-align: center;
line-height: 80rpx;
font-size: 24rpx;
color: #ffffff;
background-color: #2A82E4;
border-radius: 40rpx;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.integral {
margin-top: 20rpx;
display: flex;
flex-direction: column;
justify-content: flex-start;
align-items: flex-start;
}

.function_list {
width: 100%;
margin-top: 30rpx;
flex: 1;
border-radius: 16rpx;
background-color: #ffffff;
display: flex;
flex-direction: column;
justify-content: flex-start;
align-items: center;
}
.function_item {
background-color: #ffffff;
width: 100%;
margin-bottom: 20rpx;
padding: 20rpx 30rpx;
padding: 40rpx 60rpx;
display: flex;
justify-content: space-between;
align-items: center;
border-bottom: 2rpx solid #eeeeee;
}
.item_title {
display: flex;

+ 44
- 2
project.private.config.json Просмотреть файл

@@ -100,8 +100,50 @@
"scene": null
},
{
"name": "",
"pathName": "package_first/pages/ProtectionSuggestion/index",
"name": "个人信息",
"pathName": "package_B/pages/userInfo/index",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "身份申请",
"pathName": "package_B/pages/approveId/index",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "身份列表",
"pathName": "package_B/pages/IdList/index",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "我的身份",
"pathName": "package_B/pages/myId/index",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "积分商城",
"pathName": "package_A/pages/stores/index",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "店铺详情",
"pathName": "package_A/pages/storeDetail/index",
"query": "data=%7B%22id%22%3A88%2C%22code%22%3A%2281%22%2C%22name%22%3A%22%E4%BA%94%E5%9F%8E%E5%9C%A9%E4%B8%AD%E5%BF%83%E6%B2%9F%22%2C%22provinceCode%22%3A%22320000%22%2C%22cityCode%22%3A%22320100%22%2C%22districtCode%22%3A%22320115%22%2C%22streetCode%22%3A%22320115004000%22%2C%22villageCode%22%3Anull%2C%22streamAdminId%22%3A30%2C%22streamAdminName%22%3A%22%E8%A1%97%E9%81%93%E6%B2%B3%E6%B9%96%E9%95%BF%22%2C%22longitude%22%3A%22119.076515%22%2C%22latitude%22%3A%2231.926426%22%2C%22location%22%3A%22%E6%B1%9F%E5%AE%81%E5%8C%BA%E6%B7%B3%E5%8C%96%E8%A1%97%E9%81%93%E5%90%B4%E9%9F%B5%E8%B7%AF%22%2C%22length%22%3A%221.1%22%2C%22note%22%3Anull%2C%22status%22%3A1%2C%22createUserName%22%3A%22admin%22%2C%22updateUserName%22%3A%22admin%22%2C%22cityArea%22%3A%22%E6%B1%9F%E8%8B%8F%E7%9C%81%E5%8D%97%E4%BA%AC%E5%B8%82%E6%B1%9F%E5%AE%81%E5%8C%BA%E6%B7%B3%E5%8C%96%E8%A1%97%E9%81%93%22%2C%22provinceName%22%3A%22%E6%B1%9F%E8%8B%8F%E7%9C%81%22%2C%22cityName%22%3A%22%E5%8D%97%E4%BA%AC%E5%B8%82%22%2C%22districtName%22%3A%22%E6%B1%9F%E5%AE%81%E5%8C%BA%22%2C%22streetName%22%3A%22%E6%B7%B3%E5%8C%96%E8%A1%97%E9%81%93%22%2C%22villageName%22%3Anull%2C%22createUser%22%3A0%2C%22createTime%22%3A%222022-07-18%2013%3A44%3A19%22%2C%22updateUser%22%3A0%2C%22updateTime%22%3A%222022-11-07%2013%3A41%3A06%22%2C%22mark%22%3A1%2C%22image%22%3A%22https%3A%2F%2Fimage.t-aaron.com%2Fimagedir%2Fg6cqtgjby2m_1658123057918.jpg%22%2C%22streamGisNumber%22%3Anull%2C%22mobile%22%3Anull%7D",
"launchMode": "default",
"scene": null
},
{
"name": "我的兑换",
"pathName": "package_B/pages/exchange/index",
"query": "",
"launchMode": "default",
"scene": null

+ 14
- 6
request/index.js Просмотреть файл

@@ -1,19 +1,27 @@
import baseurl from '../environment.js'
export const request = function(data) {

export const request = function(params) {
return new Promise((resolve, reject) => {
if(data.showLoading) {
if(params.showLoading) {
wx.showLoading({
title: '加载中',
mask: true
})
}
// 接口api拼接环境地址
data.url = baseurl + data.url
params.url = baseurl + params.url
const {tenantId} = wx.getStorageSync('tenant')
if(tenantId && !params?.data?.tenantId) {
params.data = {
...params.data,
tenantId
}
}
wx.request({
...data,
...params,
success: function(res) {
// 处理请求
if(data.url === baseurl+'/aliyunOss/getSecurityToken') {
if(params.url === baseurl+'/aliyunOss/getSecurityToken') {
resolve(res.data)
} else {
if(res.data.code == 0) { // 请求成功状态码
@@ -27,7 +35,7 @@ export const request = function(data) {
reject(error)
},
complete: function () {
if (data.showLoading) {
if (params.showLoading) {
wx.hideLoading()
}
}

+ 16
- 34
utils/getUserInfo.js Просмотреть файл

@@ -1,38 +1,20 @@
import {getOpenId, getUserData} from '../api/login.js'
export function getUserInfo() {
export function getOpenidData() {
return new Promise((resolve)=> {
wx.getUserProfile({
desc: '用于完善会员资料',
success: (r)=> {
wx.login({
success: result=> {
let code = result.code
getOpenId(code).then((i=> {
if(i.code === 0) {
const openId = i.data
getUserData(openId).then(m=> {
let userInfo = {}
userInfo.nickname = m.data.nickname
userInfo.headimgurl = m.data.headimgurl
wx.setStorage({
key: 'openId',
data: openId
})
wx.setStorage({
key: 'userInfo',
data:userInfo
})
resolve({
openId: openId,
userInfo: userInfo
})
})
}
}))
}
})

}
wx.login({
success: result=> {
let code = result.code
getOpenId(code).then(i=> {
if(i.code === 0) {
const openid = i.data
wx.setStorage({
key: 'openid',
data: openid
})
resolve({openid})
}
})
}
})
})
}
}

Загрузка…
Отмена
Сохранить