From 05707c8c6adb1042597c52091ad25ed64d15bb55 Mon Sep 17 00:00:00 2001
From: litian <C21AF165>
Date: 星期四, 21 三月 2024 14:38:19 +0800
Subject: [PATCH] 设置

---
 packagePersonal/pages/userSetting/index.wxml |   71 ++++++++--
 packagePersonal/pages/userSetting/index.wxss |   86 ++++++++++++
 packagePersonal/pages/userSetting/index.json |    4 
 pages/personalCenter/index.js                |    6 
 packagePersonal/pages/userSetting/index.js   |  241 ++++++++++++++++++++++++++++++++++
 5 files changed, 391 insertions(+), 17 deletions(-)

diff --git a/packagePersonal/pages/userSetting/index.js b/packagePersonal/pages/userSetting/index.js
index 3f131a4..48c0a70 100644
--- a/packagePersonal/pages/userSetting/index.js
+++ b/packagePersonal/pages/userSetting/index.js
@@ -7,7 +7,18 @@
   data: {
     userInfo: {},
     defaultAvatarUrl: 'https://cdn-we-retail.ym.tencent.com/miniapp/usercenter/icon-user-center-avatar@2x.png',
-    visible: false
+    userInfoBox: false,
+    editType: '',
+    userInfoForm: {
+      phone: '',
+      email: '',
+      captcha: '',
+      code: '',
+    },
+    phoneError: false,
+    emailError: false,
+    imgCode: '',
+    countDown: 0,
   },
 
   /**
@@ -79,7 +90,235 @@
       }
     });
   },
+  //淇敼鐢ㄦ埛绫诲瀷
+  editUserInfo(e) {
+    console.log(e)
+    let { info } = e.currentTarget.dataset
+    if (!this.data.userInfoBox) {
+      this.setData({
+        userInfoBox: true,
+        editType: info,
+        "userInfoForm.captcha": "",
+        "userInfoForm.code": ""
+      });
+    }
+    this.getImgCapcha()
+  },
+  onVisibleChange(e) {
+    this.setData({
+      userInfoBox: e.detail.visible,
+      countDown: 0,
+    });
+  },
 
+  //杈撳叆鎵嬫満鍙�
+  onPhoneInput(e) {
+    console.log(e)
+    const { phoneError } = this.data;
+    const isPhoneNumber = /^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/.test(e.detail.value);
+    if (phoneError === isPhoneNumber) {
+      this.setData({
+        phoneError: !isPhoneNumber,
+        "userInfoForm.phone": e.detail.value,
+      });
+    }
+  },
+
+  onEmailInput(e) {
+    const { emailError } = this.data;
+    const isPhoneNumber = /^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.[a-zA-Z0-9]{2,6}$/.test(e.detail.value);
+    if (emailError === isPhoneNumber) {
+      this.setData({
+        emailError: !isPhoneNumber,
+        "userInfoForm.email": e.detail.value,
+      });
+    }
+  },
+
+  getImgCapcha() {
+    app.MG.identity.getImgCode().then((res) => {
+      this.setData({
+        imgCode: 'data:image/png;base64,' + res,
+      });
+    })
+  },
+  //鍥惧舰楠岃瘉鐮�
+  onCaptchaInput(e) {
+    this.setData({
+      "userInfoForm.captcha": e.detail.value,
+    });
+  },
+
+  //鐭俊閭楠岃瘉鐮�
+  onCodeInput(e) {
+    this.setData({
+      "userInfoForm.code": e.detail.value,
+    });
+  },
+
+  getPhoneCode() {
+    if (this.data.userInfoForm.phone && this.data.userInfoForm.captcha) {
+      app.MG.identity
+        .getPhoneCode({
+          phoneNumber: this.data.userInfoForm.phone,
+          imageCaptcha: this.data.userInfoForm.captcha,
+          appRefCode: app.config.appRefCode
+        })
+        .then((res) => {
+          if (res == '楠岃瘉鐮佸彂閫佹垚鍔�') {
+            wx.showToast({
+              title: res,
+              icon: 'none',
+              duration: 1000
+            })
+            // 寮�鍚煭淇¢獙璇佸�掕鏃�
+            this.getSecond(60)
+          } else {
+            wx.showToast({
+              title: res,
+              icon: 'none',
+              duration: 1000
+            })
+            this.getImgCapcha()
+          }
+        })
+    } else {
+      wx.showToast({
+        title: '璇峰~鍐欐墜鏈哄彿鎴栧浘褰㈤獙璇佺爜',
+        icon: 'none',
+        duration: 1000
+      })
+    }
+  },
+  getSecond(time) {
+    let timer = null
+    if (!timer) {
+      let countDown = time;
+      this.setData({
+        countDown: time,
+      });
+      timer = setInterval(() => {
+        countDown--
+        this.setData({
+          countDown: countDown,
+        });
+        if (this.data.countDow == 0) {
+          clearInterval(timer)
+          timer = null
+        }
+      }, 1000)
+    }
+  },
+
+  getEmailCode() {
+    console.log(this.data.userInfoForm.email)
+    if (this.data.userInfoForm.email && this.data.userInfoForm.captcha) {
+      app.MG.identity
+        .getEmailCode({
+          sendEmail: this.data.userInfoForm.email,
+          captcha: this.data.userInfoForm.captcha,
+          appRefCode: app.config.appRefCode
+        })
+        .then((res) => {
+          if (res == true) {
+            wx.showToast({
+              title: '楠岃瘉鐮佸凡鍙戦��',
+              icon: 'none',
+              duration: 1000
+            })
+            // 寮�鍚煭淇¢獙璇佸�掕鏃�
+            this.getSecond(60)
+          } else {
+            wx.showToast({
+              title: '閭楠岃瘉鐮佸彂閫佸け璐�',
+              icon: 'none',
+              duration: 1000
+            })
+            this.getImgCapcha()
+          }
+        })
+    } else {
+      wx.showToast({
+        title: '璇峰~鍐欓偖绠辨垨鍥惧舰楠岃瘉鐮�',
+        icon: 'none',
+        duration: 1000
+      })
+    }
+  },
+
+  confirmInfo() {
+    if (this.data.changeType == 'phone') {
+      let query = {
+        phoneNumber: this.data.userInfoForm.phone,
+        phoneCaptcha: this.data.userInfoForm.code
+      }
+      app.MG.identity.userSetPhoneNumber(query).then((res) => {
+        if (res == '楠岃瘉鐮佽繃鏈熸垨閿欒') {
+          wx.showToast({
+            title: res + ',璇风◢鍚庨噸璇�',
+            icon: 'none',
+            duration: 1000
+          })
+        } else if (res == '姝ゆ墜鏈哄彿鐮佸凡琚叾瀹冭处鍙风粦瀹�') {
+          wx.showToast({
+            title: res + ',璇锋洿鎹㈠叾浠栨墜鏈哄彿銆�',
+            icon: 'none',
+            duration: 1000
+          })
+        } else {
+          wx.showToast({
+            title: res,
+            icon: 'none',
+            duration: 1000
+          })
+
+          this.setData({
+            userInfoBox: false,
+          });
+          this.getUserInfo()
+        }
+      })
+    } else if (this.data.editType == 'email') {
+      let query = {
+        eMail: this.data.userInfoForm.email,
+        captcha: this.data.userInfoForm.code
+      }
+
+      app.MG.identity.bindingEmail(query).then((res) => {
+        if (res == '楠岃瘉鐮佽繃鏈�') {
+          wx.showToast({
+            title: res + ',璇风◢鍚庨噸璇曘��',
+            icon: 'none',
+            duration: 1000
+          })
+        } else if (res == '姝ら偖绠卞凡琚叾瀹冭处鍙风粦瀹�') {
+          wx.showToast({
+            title: res + ',璇锋洿鎹㈠叾浠栭偖绠便��',
+            icon: 'none',
+            duration: 1000
+          })
+
+        } else if (res == '楠岃瘉鐮佹棤鏁�') {
+          wx.showToast({
+            title: res,
+            icon: 'none',
+            duration: 1000
+          })
+        } else {
+          wx.showToast({
+            title: res,
+            icon: 'none',
+            duration: 1000
+          })
+          this.setData({
+            userInfoBox: false,
+          });
+          this.getUserInfo()
+        }
+      })
+    }
+
+  },
   /**
    * 椤甸潰鐩稿叧浜嬩欢澶勭悊鍑芥暟--鐩戝惉鐢ㄦ埛涓嬫媺鍔ㄤ綔
    */
diff --git a/packagePersonal/pages/userSetting/index.json b/packagePersonal/pages/userSetting/index.json
index 5ce906a..1be7702 100644
--- a/packagePersonal/pages/userSetting/index.json
+++ b/packagePersonal/pages/userSetting/index.json
@@ -2,6 +2,8 @@
   "navigationBarTitleText": "璁剧疆",
   "usingComponents": {
     "t-icon": "tdesign-miniprogram/icon/icon",
-    "t-avatar": "tdesign-miniprogram/avatar/avatar"
+    "t-avatar": "tdesign-miniprogram/avatar/avatar",
+    "t-popup": "tdesign-miniprogram/popup/popup",
+    "t-input": "tdesign-miniprogram/input/input"
   }
 }
\ No newline at end of file
diff --git a/packagePersonal/pages/userSetting/index.wxml b/packagePersonal/pages/userSetting/index.wxml
index 52ab0e9..51c6a17 100644
--- a/packagePersonal/pages/userSetting/index.wxml
+++ b/packagePersonal/pages/userSetting/index.wxml
@@ -13,28 +13,71 @@
   </view>
   <view class="itemList">
     <view class="label">鎵嬫満鍙风爜</view>
-    <view class="content">{{userInfo.phoneNumber || '鏈粦瀹氭墜鏈哄彿'}}</view>
+    <view class="content" data-info="{{'phone'}}" bindtap="editUserInfo">{{userInfo.phoneNumber || '鏈粦瀹氭墜鏈哄彿'}}</view>
     <t-icon name="chevron-right" size="40rpx" color="#C2C2C2" />
   </view>
   <view class="itemList">
     <view class="label">閭</view>
-    <view class="content">{{userInfo.Email}}</view>
+    <view class="content" data-info="{{'email'}}" bindtap="editUserInfo">{{userInfo.Email}}</view>
     <t-icon name="chevron-right" size="40rpx" color="#C2C2C2" />
   </view>
-</view>
-<t-popup visible="{{visible}}" bind:visible-change="onVisibleChange" placement="bottom">
-  <view class="block">
-    <view class="header">
-      <view class="title">璇烽�夋嫨鎮ㄧ殑鐢ㄦ埛绫诲瀷</view>
-    </view>
-    <view class="body">
+  <t-popup visible="{{userInfoBox}}" bind:visible-change="onVisibleChange" placement="bottom">
+    <view class="block">
+      <view class="body">
+        <view class="from-item" wx:if="{{editType == 'phone'}}">
+          <view class="label"> 鎵嬫満鍙凤細 </view>
+          <view class="item-content">
+            <view class="inputBox1">
+              <t-input placeholder="杈撳叆鎵嬫満鍙风爜" borderless value="{{userInfoForm.phone}}" type="number" tips="{{phoneError ? '鎵嬫満鍙疯緭鍏ヤ笉姝g‘' : ''}}" bindchange="onPhoneInput" />
+            </view>
+          </view>
+        </view>
+        <view class="from-item" wx:if="{{editType == 'email'}}">
+          <view class=" label"> 閭锛� </view>
+          <view class="item-content">
+            <view class="inputBox1">
+              <t-input placeholder="杈撳叆閭" borderless value="{{userInfoForm.email}}" type="number" tips="{{emailError ? '閭杈撳叆涓嶆纭�' : ''}}" bindchange="onEmailInput" />
+            </view>
+          </view>
+        </view>
+        <view class="from-item">
+          <view class="label"> 鍥惧舰楠岃瘉鐮侊細 </view>
+          <view class="item-content">
+            <view class="inputBox">
+              <t-input placeholder="杈撳叆鍥惧舰楠岃瘉鐮�" borderless value="{{userInfoForm.captcha}}" type="number" bindchange="onCaptchaInput" />
+            </view>
+            <view class="code">
+              <image src="{{imgCode}}" class="imgCode hover" bindtap="getImgCapcha" />
+            </view>
+          </view>
 
-      <view wx:for="{{userTypeList}}" wx:for-item="item" wx:for-index="index" wx:key="index" data-info="{{item}}" bindtap="tabUserTypeClick" class="{{item.value === userTypeActive ? 'activeItem item' : 'item'}}">
-        {{ item.lable }}
+        </view>
+        <view class="from-item" wx:if="{{editType == 'phone'}}">
+          <view class="label"> 鐭俊楠岃瘉鐮侊細 </view>
+          <view class="item-content">
+            <view class="inputBox">
+              <t-input placeholder="杈撳叆鐭俊楠岃瘉鐮�" borderless value="{{userInfoForm.code}}" type="number" bindchange="onCodeInput" />
+            </view>
+            <view class="code">
+              <button class="btn" bindtap="getPhoneCode">{{countDown > 0 ? countDown : '鑾峰彇鐭俊楠岃瘉鐮�'}}</button>
+            </view>
+          </view>
+        </view>
+        <view class="from-item" wx:if="{{editType == 'email'}}">
+          <view class="label"> 閭楠岃瘉鐮侊細 </view>
+          <view class="item-content">
+            <view class="inputBox">
+              <t-input placeholder="杈撳叆閭楠岃瘉鐮�" borderless value="{{userInfoForm.code}}" type="number" bindchange="onCodeInput" />
+            </view>
+            <view class="code">
+              <button class="btn" bindtap="getEmailCode">鑾峰彇閭楠岃瘉鐮�</button>
+            </view>
+          </view>
+        </view>
       </view>
     </view>
     <view class="footer">
-      <button class="submit" bindtap="submit">纭畾</button>
+      <button class="submit" bindtap="confirmInfo">纭畾</button>
     </view>
-  </view>
-</t-popup>
\ No newline at end of file
+  </t-popup>
+</view>
\ No newline at end of file
diff --git a/packagePersonal/pages/userSetting/index.wxss b/packagePersonal/pages/userSetting/index.wxss
index 31d6148..be5d1e4 100644
--- a/packagePersonal/pages/userSetting/index.wxss
+++ b/packagePersonal/pages/userSetting/index.wxss
@@ -11,9 +11,10 @@
   justify-content: space-between !important;
 }
 
-.label {
+.itemList .label {
   font-weight: bold;
   width: 180rpx;
+  font-size: 32rpx;
 }
 
 .contentImg {
@@ -34,4 +35,87 @@
 .content {
   flex: 1;
   color: #5C5C5C;
+  font-size: 32rpx;
+}
+
+.block {
+  width: 100vw;
+  background: #fff;
+  border-top-left-radius: 16rpx;
+  border-top-right-radius: 16rpx;
+}
+
+.block .body {
+  padding: 40rpx;
+  display: flex;
+  flex-wrap: wrap;
+  justify-content: space-between;
+}
+
+.block .body .from-item {
+  margin-bottom: 20rpx;
+  display: flex;
+  align-items: center;
+}
+
+.block .body .from-item .label {
+  width: 170rpx;
+  height: 72rpx;
+  line-height: 72rpx;
+  font-size: 28rpx;
+}
+
+.block .body .from-item .item-content {
+  padding: 10rpx;
+  flex: 1;
+  display: flex;
+}
+
+.inputBox1 {
+  width: 540rox;
+  height: 72rpx;
+  border: 2rpx solid #D9D9D9;
+  flex: 1;
+}
+
+.block .body .inputBox {
+  width: 280rpx;
+  height: 72rpx;
+  border: 2rpx solid #D9D9D9;
+}
+
+.t-input {
+  padding: 10rpx !important;
+}
+
+.imgCode {
+  height: 72rpx;
+  width: 200rpx;
+}
+
+.code {
+  width: 200rpx;
+  height: 72rpx;
+  margin-left: 20rpx;
+}
+
+.btn {
+  width: 200rpx;
+  height: 72rpx;
+  padding: 0 10rpx !important;
+  background: #ff6c00;
+  border: 2rpx solid #ff6c00;
+  color: #fff;
+  font-size: 28rpx;
+}
+
+.footer {
+  width: 80%;
+  margin: 10rpx auto;
+}
+
+.submit {
+  background: #ff6c00;
+  color: #fff;
+  border-radius: 50rpx;
 }
\ No newline at end of file
diff --git a/pages/personalCenter/index.js b/pages/personalCenter/index.js
index f4dfc6b..7ece773 100644
--- a/pages/personalCenter/index.js
+++ b/pages/personalCenter/index.js
@@ -318,6 +318,12 @@
     }
   },
 
+  onPageScroll(e) {
+    this.setData({
+      isWhite: e.scrollTop > 20 ? true : false
+    })
+  },
+
   /**
    * 鐢ㄦ埛鐐瑰嚮鍙充笂瑙掑垎浜�
    */

--
Gitblit v1.9.1