From f2433a2fb08c167b45a9fc26f2fa178a76ab807b Mon Sep 17 00:00:00 2001
From: qiyunfeng-create <1940665526@qq.com>
Date: 星期三, 20 八月 2025 10:40:02 +0800
Subject: [PATCH] 个人中心-img

---
 src/views/personalCenter/userInfo.vue | 1099 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 1,099 insertions(+), 0 deletions(-)

diff --git a/src/views/personalCenter/userInfo.vue b/src/views/personalCenter/userInfo.vue
new file mode 100644
index 0000000..c4d4e9b
--- /dev/null
+++ b/src/views/personalCenter/userInfo.vue
@@ -0,0 +1,1099 @@
+<template>
+  <div class="personalPage-box">
+    <div class="personalPage-title">璐︽埛淇℃伅</div>
+    <div class="personalPage-content">
+      <div class="content-item">
+        <div class="item-title">鍩虹淇℃伅</div>
+        <div class="item-box">
+          <div class="info-box flex">
+            <span class="label">鐢ㄦ埛鍚嶏細</span>
+            <span class="text">{{ userStore?.userInfo.name }}</span>
+            <span class="change-info hover" @click="changeUserInfo('password')">淇敼瀵嗙爜</span>
+          </div>
+          <div class="info-box flex">
+            <span class="label">寰俊璁よ瘉:</span>
+            <span class="text no" v-if="!weChatState">鏈璇�</span>
+            <span class="text yes" v-else>宸茶璇�</span>
+            <span class="change-info hover" v-if="!weChatState" @click="goBindWeChat()"
+              >绔嬪嵆璁よ瘉</span
+            >
+          </div>
+          <div class="info-box flex">
+            <span class="label">缁戝畾鎵嬫満鍙凤細</span>
+            <span class="text" v-if="userStore?.userInfo?.phoneNumber">{{
+              userStore?.userInfo?.phoneNumber
+            }}</span>
+            <span class="text no" v-else>鏈粦瀹�</span>
+            <span class="change-info hover" @click="changeUserInfo('phone')">{{
+              userStore?.userInfo?.phoneNumber ? '鏇存崲鎵嬫満鍙�' : '缁戝畾'
+            }}</span>
+          </div>
+          <div class="info-box flex">
+            <span class="label">閭锛�</span>
+            <span class="text">{{
+              userStore?.userInfo?.Email ? userStore.userInfo?.Email : '--'
+            }}</span>
+            <span class="change-info hover" @click="changeUserInfo('email')">{{
+              userStore?.userInfo?.Email ? '鏇存崲閭' : '缁戝畾閭'
+            }}</span>
+          </div>
+        </div>
+      </div>
+      <div class="content-item">
+        <div class="item-title flex jc-sb">
+          <span>鐢ㄦ埛绫诲瀷</span>
+          <!-- <span class="change-info hover" @click="userTypeDialog = true">淇敼</span> -->
+          <span class="change-info hover" @click="updateUserInfo()">淇敼</span>
+        </div>
+        <div class="item-box">
+          <div class="info-box flex">
+            <span class="label">鐢ㄦ埛绫诲瀷锛�</span>
+            <span class="text">{{ userInfo.userType }}</span>
+          </div>
+        </div>
+      </div>
+      <div class="content-item">
+        <div class="item-title flex jc-sb">
+          <span>鏁欏笀璁よ瘉</span>
+          <div>
+            <span class="change-info hover" v-if="teacherState == ''" @click="showTeacherDialog()"
+              >璁よ瘉</span
+            >
+            <span
+              class="change-info hover"
+              @click="showTeacherDialog()"
+              v-if="teacherState == 'Normal' || teacherState == 'Reject'"
+              >淇敼</span
+            >
+          </div>
+        </div>
+        <div class="item-box">
+          <div class="info-box flex">
+            <span class="label">璁よ瘉鐘舵�侊細</span>
+            <div class="text">
+              <span class="text wait" v-if="teacherState == 'WaitAudit'">绛夊緟瀹℃牳</span>
+              <span class="text yes" v-else-if="teacherState == 'Normal'">宸茶璇�</span>
+              <span class="text no" v-else-if="teacherState == 'Reject'">宸查┏鍥�</span>
+              <span class="text wait" v-if="teacherState === ''">寰呰璇�</span>
+            </div>
+            <div v-if="teacherState == 'Reject'">
+              <span class="title">椹冲洖鍘熷洜</span> :
+              <span @click="lookReason()" class="wait hover">鏌ョ湅鍘熷洜</span>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div class="content-item">
+        <div class="item-title flex jc-sb">
+          <span>鎴戠殑绉垎</span>
+          <span class="record hover" @click="recordDialog()">绉垎璁板綍</span>
+        </div>
+        <div class="item-box">
+          <div class="info-box flex">
+            <span class="label">绉垎锛�</span>
+            <span class="text">{{ userInfo.integral }}</span>
+          </div>
+        </div>
+      </div>
+    </div>
+    <!-- 淇敼瀵嗙爜/鎵嬫満鍙�/閭 -->
+    <el-dialog
+      @open="openChangePassword"
+      align-center
+      :close-on-click-modal="false"
+      destroy-on-close
+      v-model="userInfoDialog"
+      :title="
+        changeType == 'email' ? '鏇存崲閭' : changeType == 'password' ? '淇敼瀵嗙爜' : '鏇存崲鎵嬫満鍙�'
+      "
+      width="500"
+      class="myDialogs"
+      @close="closeUserInfoDialog(userFormRef)"
+    >
+      <div>
+        <el-form
+          ref="userFormRef"
+          :model="userInfoForm"
+          :rules="userFormRules"
+          label-width="140px"
+          class="userInfo"
+          status-icon
+        >
+          <el-form-item label="鎵嬫満鍙凤細" prop="phone" v-if="changeType != 'email'">
+            <el-input
+              v-model="userInfoForm.phone"
+              autocomplete="off"
+              placeholder="璇疯緭鍏ユ墜鏈哄彿"
+              :disabled="changeType == 'password'"
+            />
+          </el-form-item>
+          <el-form-item label="閭锛�" prop="email" v-if="changeType == 'email'">
+            <el-input
+              v-model="userInfoForm.email"
+              autocomplete="off"
+              placeholder="璇疯緭鍏ラ偖绠�"
+              :disabled="formDisabled"
+            />
+          </el-form-item>
+          <el-form-item
+            :label="changeType == 'email' ? '閭楠岃瘉鐮侊細' : '鐭俊楠岃瘉鐮侊細'"
+            prop="code"
+          >
+            <el-input
+              v-model="userInfoForm.code"
+              autocomplete="off"
+              class="code-input"
+              placeholder="璇疯緭鍏ラ獙璇佺爜"
+            />
+            <div class="code">
+              <el-button
+                type="primary"
+                class="btn"
+                @click="getVerifyCode()"
+                :disabled="countDown > 0"
+              >
+                {{
+                  countDown > 0
+                    ? '楠岃瘉鐮�(' + countDown + 's)'
+                    : changeType == 'email'
+                      ? '鑾峰彇閭楠岃瘉鐮�'
+                      : '鑾峰彇鐭俊楠岃瘉鐮�'
+                }}
+              </el-button>
+            </div>
+          </el-form-item>
+          <el-form-item label="鏂板瘑鐮侊細" prop="password" v-if="changeType == 'password'">
+            <el-input
+              type="password"
+              v-model="userInfoForm.password"
+              autocomplete="off"
+              placeholder="璇疯緭鍏�8-16浣嶆柊瀵嗙爜,涓斾笉鑳戒负绾暟瀛�"
+            />
+          </el-form-item>
+          <el-form-item label="纭瀵嗙爜锛�" prop="confirmPassword" v-if="changeType == 'password'">
+            <el-input
+              type="password"
+              v-model="userInfoForm.confirmPassword"
+              autocomplete="off"
+              placeholder="璇疯緭鍏ョ‘璁ゅ瘑鐮�"
+            />
+          </el-form-item>
+        </el-form>
+      </div>
+      <template #footer>
+        <span class="myDialogs-footer">
+          <el-button @click="closeUserInfoDialog(userFormRef)">鍙栨秷</el-button>
+          <el-button type="primary" @click="confirmInfo(userFormRef)" :loading="subLoading">
+            纭畾
+          </el-button>
+        </span>
+      </template>
+    </el-dialog>
+    <!-- 寰俊璁よ瘉 -->
+    <el-dialog
+      align-center
+      :close-on-click-modal="false"
+      v-model="weChartDialog"
+      title="寰俊璁よ瘉"
+      class="myDialogs"
+    >
+      <div>
+        <div class="qrcodeBox">
+          <!-- <wxlogin
+            :redirect_uri="wxLogin.redirectURL"
+            style="width: 300px; height: 400px; margin: -40px auto 0; overflow: hidden"
+            :appid="wxLogin.appid"
+            :scope="wxLogin.scope"
+            state="WeChatScanningCodeBind"
+          >
+          </wxlogin> -->
+        </div>
+        <p class="tips">浣跨敤寰俊鎵竴鎵壂鎻忎簩缁寸爜杩涜缁戝畾</p>
+      </div>
+    </el-dialog>
+    <!-- 鐢ㄦ埛绫诲瀷淇敼 -->
+    <login ref="loginRef"></login>
+    <!-- 鏌ョ湅鍘熷洜 -->
+    <el-dialog
+      align-center
+      :close-on-click-modal="false"
+      v-model="dialogReason"
+      title="椹冲洖鍘熷洜"
+      class="myDialogs"
+    >
+      <div class="reason" v-if="reasonTxt">
+        {{ reasonTxt }}
+      </div>
+      <div v-else>鏃�</div>
+    </el-dialog>
+    <!-- 绉垎璁板綍 -->
+    <el-dialog
+      align-center
+      :close-on-click-modal="false"
+      v-model="integralRecord.recordDialog"
+      title="绉垎璁板綍"
+      class="myDialogs"
+    >
+      <div class="recordTableBox">
+        <ul class="recordTable">
+          <li class="head">
+            <span class="label">绫诲瀷</span>
+            <span class="value">鏁伴噺</span>
+            <span>鏃堕棿</span>
+          </li>
+          <li v-for="item in integralRecord.recordList" :key="item.key" class="body">
+            <span class="label">{{ item.type }}</span>
+            <span class="value" :class="item.value > 0 ? 'yes' : 'no'">{{
+              item.value > 0 ? '+' + item.value : item.value
+            }}</span>
+            <span>{{ item.createDate ? item.createDate : '-' }}</span>
+          </li>
+          <li class="total" v-if="integralRecord.recordList.length > 0">
+            <span class="label">鎬昏</span>
+            <span class="value">{{ userInfo.integral }}</span>
+          </li>
+          <li v-if="integralRecord.recordList.length == 0" class="noData">鏃犵Н鍒嗚褰�</li>
+        </ul>
+      </div>
+    </el-dialog>
+    <teacherCertification :isShow="teacherDialog" @dialog-Change="dialogChange" />
+    <!-- 婊戝姩楠岃瘉 -->
+    <el-dialog
+      v-model="sliderImgDialogVisable"
+      align-center
+      destroy-on-close="true"
+      width="420"
+      class="sliderImgDialog"
+    >
+      <verify :MG="MG" @loginImgVerify="loginImgVerify" />
+    </el-dialog>
+  </div>
+</template>
+
+<script setup lang="ts">
+import { reactive, ref, inject, onMounted, watch } from 'vue'
+import type { FormInstance, FormRules } from 'element-plus'
+// import verify from '@/components/sliderImg/component/verify.vue'
+// import '@/components/sliderImg/sliderImg.js'
+// import '@/components/sliderImg/sliderImg.css'
+import { ElMessage } from 'element-plus'
+import tool from '@/assets/js/toolClass.js'
+// import { useUserStore } from '@/store'
+// import wxlogin from 'vue-wxlogin'
+// import teacherCertification from '@/views/components/teacherCertification.vue'
+// import login from '@/layout/components/login.vue'
+// const userStore = useUserStore()
+import { useRoute } from 'vue-router'
+import moment from 'moment'
+const route = useRoute()
+const MG: any = inject('MG')
+const config: any = inject('config')
+
+const validatePhone = (rule: any, value: any, callback: any) => {
+  if (value === '') {
+    callback(new Error('璇疯緭鍏ヨ仈绯荤數璇�'))
+  } else {
+    if (!config.reg_tel.test(value)) {
+      callback(new Error('璇疯緭鍏ユ纭牸寮忕殑鐢佃瘽'))
+    }
+    callback()
+  }
+}
+const validateEmail = (rule: any, value: any, callback: any) => {
+  let myreg = /^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.[a-zA-Z0-9]{2,6}$/
+  if (value === '') {
+    callback(new Error('璇疯緭鍏ョ數瀛愰偖绠�'))
+  } else {
+    if (!myreg.test(value)) {
+      callback(new Error('璇疯緭鍏ユ纭牸寮忕殑鐢靛瓙閭'))
+    }
+    callback()
+  }
+}
+
+const validatePassword = (rule: any, value: any, callback: any) => {
+  let myreg = /^(?!^\d+$)(?!^[a-zA-Z]+$)(?!^\W+$)[a-zA-Z\d\W]{8,16}$/
+  if (value === '') {
+    callback(new Error('璇疯緭鍏ュ瘑鐮�'))
+  } else {
+    if (!myreg.test(value)) {
+      callback(new Error('璇疯緭鍏ユ纭牸寮忕殑瀵嗙爜锛�8-16浣�,涓斾笉鑳戒负绾暟瀛�'))
+    }
+    callback()
+  }
+}
+
+// onMounted(() => {
+//   getWechatAuthenticationState()
+//   getIntegral()
+//   if (localStorage.getItem(config.tokenKey)) {
+//     getUserRole()
+//   }
+// })
+
+// watch(route, () => {
+//   bindWeChat()
+// })
+let subLoading = ref(false)
+//鐢ㄦ埛淇℃伅
+let weChatState = ref(false)
+const userInfo = reactive({
+  userType: '',
+  integral: 0,
+})
+//鍩虹淇℃伅
+const userInfoDialog = ref(false)
+let changeType = ref('password')
+const imgCode = ref<string>() // 鍥惧舰楠岃瘉鐮乽rl
+let countDown = ref(0)
+// function changeUserInfo(type) {
+//   changeType.value = type
+//   if (type == 'password') {
+//     if (userStore.userInfo?.phoneNumber) {
+//       getImgCapcha()
+//       userInfoDialog.value = true
+//     } else {
+//       ElMessage({
+//         message: '淇敼瀵嗙爜闇�鐭俊楠岃瘉,璇风粦瀹氭墜鏈哄彿鍚庡啀淇敼瀵嗙爜锛�',
+//         type: 'warning'
+//       })
+//     }
+//   } else {
+//     getImgCapcha()
+//     userInfoDialog.value = true
+//   }
+// }
+// const getImgCapcha = () => {
+//   MG.identity.getImgCode().then((res) => {
+//     imgCode.value = 'data:image/png;base64,' + res
+//   })
+// }
+
+const userFormRef = ref<FormInstance>()
+const userInfoForm = reactive({
+  phone: '',
+  email: '',
+  captcha: '',
+  code: '',
+  password: '',
+  confirmPassword: '',
+})
+const formDisabled = ref(false)
+const userFormRules = reactive<FormRules<userInfoForm>>({
+  phone: [{ required: true, validator: validatePhone, trigger: 'blur' }],
+  email: [{ required: true, validator: validateEmail, trigger: 'blur' }],
+  captcha: [
+    { required: true, message: '鍥惧舰楠岃瘉鐮佷笉鑳戒负绌�', trigger: 'blur' },
+    { min: 4, max: 4, message: '璇疯緭鍏� 4 浣嶉獙璇佺爜', trigger: 'blur' },
+  ],
+  code: [{ required: true, message: '楠岃瘉鐮佷笉鑳戒负绌�', trigger: 'blur' }],
+  password: [{ required: true, validator: validatePassword, trigger: 'blur' }],
+  confirmPassword: [{ required: true, message: '纭瀵嗙爜涓嶈兘涓虹┖', trigger: 'blur' }],
+})
+
+const getVerifyCode = async () => {
+  sliderImgDialogVisable.value = true
+}
+
+// 楠岃瘉鐮佸�掕鏃�
+function getSecond(time: number) {
+  let timer: ReturnType<typeof setInterval> | null = null
+  if (!timer) {
+    countDown.value = time
+    timer = setInterval(() => {
+      countDown.value--
+      if (countDown.value == 0) {
+        if (timer) clearInterval(timer)
+        timer = null
+      }
+    }, 1000)
+  }
+}
+
+const closeUserInfoDialog = (formEl: FormInstance | undefined) => {
+  if (!formEl) return
+  formEl.resetFields()
+  countDown.value = 0
+  userInfoDialog.value = false
+}
+const confirmInfo = async (formEl: FormInstance | undefined) => {
+  if (!formEl) return
+  await formEl.validate((valid, fields) => {
+    if (valid) {
+      subLoading.value = true
+      if (changeType.value == 'password') {
+        if (userInfoForm.password != userInfoForm.confirmPassword) {
+          ElMessage({
+            message: '涓ゆ瀵嗙爜杈撳叆涓嶄竴鑷�',
+            type: 'warning',
+          })
+          return false
+        }
+        let query = {
+          phoneNumber: userInfoForm.phone,
+          phoneCaptcha: userInfoForm.code,
+          password: userInfoForm.password,
+        }
+        MG.identity.changePasswordByMobilePhone(query).then((res) => {
+          if (res) {
+            ElMessage({
+              message: '瀵嗙爜閲嶇疆鎴愬姛锛�',
+              type: 'success',
+            })
+            userInfoDialog.value = false
+          } else {
+            ElMessage({
+              message: '瀵嗙爜閲嶇疆澶辫触锛岃濉啓姝g‘鐨勯獙璇佺爜銆�',
+              type: 'error',
+            })
+          }
+          subLoading.value = false
+        })
+      } else if (changeType.value == 'phone') {
+        let query = {
+          phoneNumber: userInfoForm.phone,
+          phoneCaptcha: userInfoForm.code,
+        }
+        MG.identity.userSetPhoneNumber(query).then((res) => {
+          if (res == '楠岃瘉鐮佽繃鏈熸垨閿欒') {
+            ElMessage({
+              message: res + ',璇风◢鍚庨噸璇�',
+              type: 'error',
+            })
+          } else if (res == '姝ゆ墜鏈哄彿鐮佸凡琚叾瀹冭处鍙风粦瀹�') {
+            ElMessage({
+              message: res + ',璇锋洿鎹㈠叾浠栨墜鏈哄彿銆�',
+              type: 'error',
+            })
+          } else {
+            ElMessage({
+              message: res,
+              type: 'success',
+            })
+            userStore.setUserInfo({
+              ...userStore.userInfo,
+              phoneNumber: userInfoForm.phone,
+            })
+            userInfoDialog.value = false
+          }
+          subLoading.value = false
+        })
+      } else if (changeType.value == 'email') {
+        let query = {
+          eMail: userInfoForm.email,
+          captcha: userInfoForm.code,
+        }
+
+        MG.identity.bindingEmail(query).then((res) => {
+          if (res == '楠岃瘉鐮佽繃鏈�') {
+            ElMessage({
+              message: res + ',璇风◢鍚庨噸璇�',
+              type: 'error',
+            })
+          } else if (res == '姝ら偖绠卞凡琚叾瀹冭处鍙风粦瀹�') {
+            ElMessage({
+              message: res + ',璇锋洿鎹㈠叾浠栭偖绠便��',
+              type: 'error',
+            })
+          } else if (res == '楠岃瘉鐮佹棤鏁�') {
+            ElMessage({
+              message: res,
+              type: 'error',
+            })
+          } else {
+            ElMessage({
+              message: res,
+              type: 'success',
+            })
+            userStore.setUserInfo({
+              ...userStore.userInfo,
+              Email: userInfoForm.email,
+            })
+            userInfoDialog.value = false
+          }
+          subLoading.value = false
+        })
+      }
+    } else {
+      subLoading.value = false
+    }
+  })
+}
+// 婊戝姩楠岃瘉
+const sliderImgDialogVisable = ref<boolean>(false)
+const loginImgVerify = (code: string) => {
+  userInfoForm.captcha = code
+  sliderImgDialogVisable.value = false
+  if (changeType.value == 'phone' || changeType.value == 'password') {
+    MG.identity
+      .getPhoneCode({
+        phoneNumber: userInfoForm.phone,
+        imageCaptcha: userInfoForm.captcha,
+        appRefCode: config.appRefCode,
+      })
+      .then((res: any) => {
+        if (res == '楠岃瘉鐮佸彂閫佹垚鍔�') {
+          ElMessage({
+            message: res,
+            type: 'success',
+          })
+          // 寮�鍚煭淇¢獙璇佸�掕鏃�
+          getSecond(60)
+        } else {
+          ElMessage({
+            message: res,
+            type: 'error',
+          })
+        }
+      })
+  } else if (changeType.value == 'email') {
+    MG.identity
+      .getEmailCode({
+        sendEmail: userInfoForm.email,
+        captcha: userInfoForm.captcha,
+        appRefCode: config.appRefCode,
+      })
+      .then((res) => {
+        if (res == true) {
+          ElMessage({
+            message: '閭欢宸插彂閫�',
+            type: 'success',
+          })
+        } else {
+          ElMessage({
+            message: '閭欢鍙戦�佸け璐�',
+            type: 'error',
+          })
+        }
+      })
+  }
+}
+//寰俊璁よ瘉
+let wxLogin = reactive({
+  appid: 'wx5cfe8b007a3c6f8c',
+  scope: 'snsapi_login',
+  redirectURL: encodeURIComponent(config.requestCtx + '/home/#/personalCenter'),
+})
+const getWechatAuthenticationState = () => {
+  MG.identity.checkBuildingWeChat({}).then((res: any) => {
+    if (res) {
+      weChatState.value = true
+    } else {
+      weChatState.value = false
+    }
+  })
+}
+const weChartDialog = ref(false)
+function goBindWeChat() {
+  window.location.href = `https://open.weixin.qq.com/connect/qrconnect?appid=${wxLogin.appid}&scope=${wxLogin.scope}&redirect_uri=${wxLogin.redirectURL}&state=WeChatScanningCodeBind`
+}
+
+//缁戝畾寰俊
+const bindWeChat = () => {
+  var url = window.location.href
+  if (url.indexOf('WeChatScanningCodeBind') > -1) {
+    var querys = url.substring(url.indexOf('?') + 1).split('&')
+    var result = {}
+    for (var i = 0; i < querys.length; i++) {
+      var temp = querys[i].split('=')
+      if (temp.length < 2) {
+        result[temp[0]] = ''
+      } else {
+        result[temp[0]] = temp[1]
+      }
+    }
+    if (result && result.code) {
+      MG.identity
+        .bindingWeChat({
+          code: result.code,
+        })
+        .then((res) => {
+          if (res) {
+            ElMessage({
+              message: '缁戝畾鎴愬姛!',
+              type: 'success',
+            })
+            getWechatAuthenticationState()
+            weChartDialog.value = false
+          } else {
+            ElMessage({
+              message: '缁戝畾澶辫触锛岃寰俊宸茶缁戝畾锛�',
+              type: 'error',
+            })
+          }
+        })
+    }
+  }
+}
+
+//鐢ㄦ埛绫诲瀷
+const loginRef = ref()
+// const userTypeDialog = ref(false)
+const userTypeActive = ref('')
+const teacherType = ref('')
+const teacherList = ref([
+  {
+    value: 'vocSchoolTeachers',
+    label: '涓亴鏁欏笀',
+  },
+  {
+    value: 'vocCollegeTeachers',
+    label: '楂樿亴鏁欏笀',
+  },
+  {
+    value: 'ordUniversityTeachers',
+    label: '鏈鏁欏笀',
+  },
+  {
+    value: 'primarySchoolTeachers',
+    label: '涓皬瀛︽暀甯�',
+  },
+  {
+    value: 'kindergarteTeachers',
+    label: '骞煎効鍥暀甯�',
+  },
+])
+const userTypeList = ref([
+  {
+    value: 'Teacher',
+    label: '鏁欏笀',
+    checked: false,
+  },
+  {
+    value: 'Student',
+    label: '瀛︾敓',
+    checked: false,
+  },
+  {
+    value: 'otherReaders',
+    label: '鍏朵粬璇昏��',
+    checked: false,
+  },
+])
+
+// 淇敼鐢ㄦ埛绫诲瀷璋冪敤娉ㄥ唽鏃剁敤鎴蜂俊鎭~鍐欏脊绐�
+const updateUserInfo = () => {
+  loginRef.value.updateUserInfo()
+  loginRef.value.signUp()
+}
+
+//鏁欏笀璁よ瘉
+let teacherDialog = ref(false) //寮圭獥
+let loading = ref(false)
+const teacherState = ref(null)
+const reasonTxt = ref('')
+const userId = ref()
+
+const dialogReason = ref(false)
+//鏁欏笀璁よ瘉寮圭獥
+function showTeacherDialog() {
+  teacherDialog.value = true
+}
+
+const dialogChange = (val: any) => {
+  getTeacherInfo()
+  if (val == false) {
+    teacherDialog.value = false
+  } else {
+    teacherDialog.value = true
+  }
+}
+
+// 淇敼瀵嗙爜寮圭獥鎵撳紑
+const openChangePassword = () => {
+  if (changeType.value == 'password' && userStore.userInfo?.phoneNumber) {
+    userInfoForm.phone = userStore.userInfo?.phoneNumber
+  }
+}
+
+// 鑾峰彇鐧诲綍鐢ㄦ埛韬唤
+function getUserRole() {
+  loading.value = true
+  MG.identity.getCurrentAppUser().then((res: any) => {
+    if (res) {
+      if (res.lastLoginTime) {
+        localStorage.setItem('lastLoginTime', res.lastLoginTime)
+      }
+      //鑾峰彇鐢ㄦ埛绫诲瀷
+      let userTypeData = res.infoList.find((item: any) => item.type == 'userType')
+      if (userTypeData) {
+        userTypeActive.value = JSON.parse(userTypeData.data).userType
+        if (userTypeActive.value !== 'Student' && userTypeActive.value !== 'otherReaders') {
+          const index = userTypeList.value.findIndex((item) => item.value === 'Teacher')
+          if (index !== -1) {
+            userTypeList.value[index].checked = true
+            teacherType.value = JSON.parse(userTypeData.data).userType
+          }
+          userInfo.userType =
+            teacherList.value.find((item) => item.value === userTypeActive.value)?.label ?? ''
+        } else {
+          const index = userTypeList.value.findIndex((item) => item.value === userTypeActive.value)
+          if (index !== -1) {
+            userTypeList.value[index].checked = true
+          }
+          userInfo.userType =
+            userTypeList.value.find((item) => item.value === userTypeActive.value)?.label ?? ''
+        }
+      } else {
+        userInfo.userType = '-'
+      }
+      getTeacherInfo()
+      userId.value = res.userId
+      let customUser = res.infoList.find((item: any) => item.type == 'userInfo')
+      let teacherRole = res.roleLinks.find((item: any) => item.role.refCode == 'teacher')
+      let teacherInfos = res.infoList.find((item: any) => item.type == 'teacherInfo')
+      let wechatInfo = res.infoList.find((item: any) => item.type == 'WeChat')
+      let studentInfo = res.infoList.find((item: any) => item.type == 'Default')
+      let phoneInfo = res.secretList.find((item: any) => item.type == 'MobilePhone')
+      let emailInfo = res.secretList.find((item: any) => item.type == 'EMail')
+      const userData = {
+        userName: customUser && customUser.data ? JSON.parse(customUser.data).name : '',
+        school: customUser && customUser.data ? JSON.parse(customUser.data).school : '',
+        cityCode: customUser && customUser.data ? JSON.parse(customUser.data).cityCode : '',
+        address: customUser && customUser.data ? JSON.parse(customUser.data).address : '',
+        userType: userTypeData && userTypeData.data ? JSON.parse(userTypeData.data).userType : '',
+      }
+      if (teacherRole && teacherInfos) {
+        if (JSON.parse(teacherInfos.data).email && !emailInfo) {
+          userInfoForm.email = JSON.parse(teacherInfos.data).email
+          formDisabled.value = true
+        }
+        userStore.setUserInfo({
+          ...userData,
+          ...teacherInfos,
+          phoneNumber: phoneInfo?.credential,
+          Email: emailInfo ? emailInfo.credential : JSON.parse(teacherInfos.data).email,
+          icon: wechatInfo?.icon,
+          role: 'Teacher',
+          roleId: teacherRole.role.id,
+          userId: res.userId,
+        })
+      } else if (wechatInfo) {
+        userStore.setUserInfo({
+          ...userData,
+          ...wechatInfo,
+          phoneNumber: phoneInfo?.credential,
+          Email: emailInfo?.credential,
+          role: 'Student',
+          userId: res.userId,
+        })
+      } else if (studentInfo) {
+        userStore.setUserInfo({
+          ...userData,
+          ...studentInfo,
+          icon: wechatInfo?.icon,
+          phoneNumber: phoneInfo?.credential,
+          Email: emailInfo?.credential,
+          role: 'Student',
+          userId: res.userId,
+        })
+      }
+    }
+  })
+}
+
+//鏁欏笀淇℃伅
+function getTeacherInfo() {
+  const data = {
+    start: 0,
+    size: 10,
+    topicIdOrRefCode: 'teacherRoleApproval',
+    appRefCode: config.appRefCode,
+    sort: {
+      type: 'Desc',
+      field: 'CreateDate',
+    },
+  }
+  MG.ugc.getTopicMessageList(data).then((res) => {
+    try {
+      const resData = res.datas.find((i) => i.appUserCreator.userId == userId.value)
+      if (resData) {
+        teacherState.value = resData.state
+        if (resData.feedBack != null) {
+          reasonTxt.value = JSON.parse(resData.feedBack).reason
+        }
+      } else {
+        teacherState.value = ''
+      }
+      loading.value = false
+    } catch (error) {
+      loading.value = false
+    }
+  })
+}
+
+//鍘熷洜鏌ョ湅
+const lookReason = () => {
+  dialogReason.value = true
+}
+
+//绉垎
+function getIntegral() {
+  MG.store
+    .getUserWallet({
+      type: 'integral',
+    })
+    .then((res) => {
+      userInfo.integral = res.balance
+    })
+}
+
+const integralRecord = reactive({
+  recordDialog: false,
+  recordList: [],
+})
+
+// 绉垎璁板綍寮圭獥
+function recordDialog() {
+  integralRecord.recordDialog = true
+  getRecordList()
+}
+
+//鑾峰彇绉垎璁板綍
+function getRecordList() {
+  MG.store
+    .getWalletHistory({
+      Size: 999,
+      Start: 0,
+      sort: {
+        type: 'Desc',
+        field: 'CreateDate',
+      },
+      type: 'integral',
+    })
+    .then((res) => {
+      console.log(res, '绉垎璁板綍')
+      if (res.datas.length > 0) {
+        res.datas.forEach((element) => {
+          element.createDate = moment(element.createDate).format('YYYY-MM-DD HH:mm:ss')
+          if (element.refType == 'sign') {
+            element.type = '姣忔棩鐧诲綍'
+          }
+          if (element.refType == 'Reward') {
+            element.type = '涓婁紶璧勬簮濂栧姳'
+          }
+          if (element.refType == 'OrderCoinBonus') {
+            element.type = '璁㈠崟鏀粯濂栧姳'
+          }
+          if (element.refType == 'Order' && element.value < 0) {
+            element.type = '璁㈠崟鏀粯鎶垫墸'
+          }
+          if (element.refType == 'Order' && element.value > 0) {
+            element.type = '璁㈠崟鍙栨秷閫�鍥�'
+          }
+          if (element.refType == 'AdminRecharge') {
+            element.type = '绠$悊鍛樺厖鍊�'
+          }
+        })
+        integralRecord.recordList = res.datas
+      }
+    })
+}
+</script>
+<style lang="less" scoped>
+.content-item {
+  .item-title {
+    line-height: 20px;
+    padding: 0 10px;
+    border-left: 3px solid #019e58;
+    font-family:
+      Microsoft YaHei UI,
+      Microsoft YaHei UI;
+    font-weight: 400;
+    font-size: 16px;
+  }
+
+  .item-box {
+    padding: 25px 13px;
+
+    .info-box {
+      padding: 10px 0;
+      font-family:
+        Microsoft YaHei UI,
+        Microsoft YaHei UI;
+      font-weight: 400;
+      font-size: 14px;
+      color: #333333;
+      line-height: 34px;
+
+      .label,
+      .text {
+        width: 300px;
+      }
+    }
+  }
+
+  .change-info {
+    color: #019e58;
+  }
+
+  .record {
+    color: #949494;
+  }
+}
+
+.userInfo {
+  .el-input {
+    width: 86%;
+    height: 38px;
+  }
+
+  .code-input {
+    width: 50%;
+  }
+
+  .code {
+    width: 130px;
+    height: 38px;
+    margin-left: 20px;
+
+    .imgCode {
+      width: 100%;
+      height: 100%;
+    }
+
+    .btn {
+      width: 100%;
+      height: 100%;
+    }
+  }
+}
+
+.qrcodeBox {
+  width: 300px;
+  height: 300px;
+  margin: 0 auto;
+  // border: 1px solid #c0ccda;
+  overflow: hidden;
+
+  img {
+    width: 100%;
+    height: 100%;
+  }
+}
+
+.tips {
+  text-align: center;
+  font-size: 14px;
+  color: #666;
+  margin-top: 30px;
+}
+
+.userTypeList {
+  width: 200px;
+  margin: 0 auto;
+
+  .item {
+    padding: 15px;
+    text-align: center;
+    margin: 20px 0;
+    border: 1px solid #d9d9d9;
+    border-radius: 3px;
+  }
+
+  .activeItem {
+    background-color: #019e58;
+    color: #fff;
+  }
+}
+
+.currentState {
+  margin-bottom: 22px;
+
+  .label {
+    width: 140px;
+    text-align: right;
+  }
+}
+
+.reasonBox {
+  margin-left: 100px;
+  font-size: 14px;
+
+  .title {
+    font-weight: bold;
+  }
+}
+.recordTableBox {
+  height: 600px;
+  overflow-y: auto;
+}
+
+.recordTable {
+  border: 1px solid #f4f4f4;
+
+  li {
+    display: flex;
+    line-height: 24px;
+    padding: 10px;
+    border-bottom: 1px solid #f4f4f4;
+
+    .label {
+      width: 220px;
+    }
+
+    .value {
+      width: 150px;
+    }
+  }
+
+  .head {
+    background-color: #f3f3f3;
+  }
+  .noData {
+    justify-content: center;
+  }
+}
+
+.total {
+  font-weight: bold;
+}
+
+.reason {
+  word-wrap: break-word;
+}
+</style>
+<style lang="less">
+.myDialogs {
+  width: 628px;
+
+  .el-dialog__header {
+    padding: 15px;
+    margin-right: 0;
+    border-bottom: 1px solid #f4f4f4;
+  }
+
+  .el-dialog__title {
+    font-weight: bold;
+    font-size: 16px;
+  }
+
+  .el-dialog__headerbtn {
+    top: 6px;
+    right: 6px;
+  }
+
+  .el-dialog__footer {
+    padding: 15px;
+    border-top: 1px solid #f4f4f4;
+  }
+
+  .myDialogs-footer {
+    .el-button {
+      padding: 0 20px;
+    }
+  }
+}
+
+.userTypeWall {
+  width: 100%;
+  height: 20px;
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  margin-bottom: 40px;
+  color: #333;
+  padding-left: 15px;
+  border-left: 3px solid #019e58;
+}
+</style>

--
Gitblit v1.9.1