personalInfo.vue 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. <template>
  2. <view>
  3. <up-form labelPosition="left" :model="modelForm" :rules="rulesForm" ref="formRef">
  4. <up-form-item label="姓名" prop="nickName" borderBottom labelWidth="70">
  5. <up-input v-model="modelForm.nickName" border="none" placeholder="请输入姓名" :disabled="loading"></up-input>
  6. </up-form-item>
  7. <up-form-item label="性别" prop="sex" borderBottom @click="() => !loading && (sexFlag = true)" labelWidth="70">
  8. <up-input v-model="displaySex" disabled disabledColor="#ffffff" placeholder="请选择性别"
  9. border="none"></up-input>
  10. <template #right>
  11. <up-icon name="arrow-right"></up-icon>
  12. </template>
  13. </up-form-item>
  14. <up-form-item label="年龄" prop="age" borderBottom labelWidth="70">
  15. <up-input v-model="modelForm.age" border="none" placeholder="请输入年龄" :disabled="loading"></up-input>
  16. </up-form-item>
  17. <up-form-item label="手机号" prop="phonenumber" borderBottom labelWidth="70">
  18. <up-input v-model="modelForm.phonenumber" border="none" placeholder="请输入手机号" :disabled="loading"></up-input>
  19. </up-form-item>
  20. </up-form>
  21. <up-action-sheet :show="sexFlag" :actions="sexOptions" @select="sexSelect"
  22. @close="sexFlag = false"></up-action-sheet>
  23. <view class="Wrapper-Btn">
  24. <up-button @click="handleQux" type="error" :plain="true" :hairline="true" text="取消"
  25. :customStyle="hadlClickEdit" :disabled="loading"></up-button>
  26. <up-button type="error" @click="handleSubmit" text="保存" :customStyle="hadlClickEdit" :loading="loading" :disabled="loading" />
  27. </view>
  28. </view>
  29. </template>
  30. <script setup>
  31. import { ref, computed, onMounted } from 'vue'
  32. import { updateUserInfo, userUserInfoEdit } from '@/api/personaInforMation.js'
  33. const formRef = ref(null)
  34. const sexFlag = ref(false)
  35. const sexOptions = ref([
  36. { name: '男', value: 0 },
  37. { name: '女', value: 1 }
  38. ])
  39. const modelForm = ref({
  40. nickName: '',
  41. sex: '',
  42. age: '',
  43. phonenumber: ''
  44. })
  45. const loading = ref(false)
  46. const rulesForm = ref({
  47. nickName: {
  48. type: 'string',
  49. required: true,
  50. message: '请输入姓名',
  51. trigger: ['blur', 'change']
  52. },
  53. sex: {
  54. type: 'number',
  55. required: true,
  56. message: '请选择性别',
  57. trigger: ['change']
  58. },
  59. age: {
  60. type: 'string',
  61. required: true,
  62. message: '请输入年龄',
  63. trigger: ['blur', 'change']
  64. },
  65. phonenumber: {
  66. type: 'string',
  67. required: true,
  68. message: '请输入手机号',
  69. trigger: ['blur', 'change']
  70. }
  71. })
  72. onMounted(async () => {
  73. loading.value = true
  74. try {
  75. const res = await userUserInfoEdit({})
  76. if (res && res.code === 200 && res.data) {
  77. modelForm.value = {
  78. nickName: res.data.nickName || '',
  79. sex: res.data.sex !== undefined ? res.data.sex : '',
  80. age: res.data.age || '',
  81. phonenumber: res.data.phonenumber || ''
  82. }
  83. } else {
  84. modelForm.value = {
  85. nickName: '',
  86. sex: '',
  87. age: '',
  88. phonenumber: ''
  89. }
  90. }
  91. } catch (e) {
  92. console.error('获取用户信息失败:', e)
  93. uni.showToast({
  94. title: '获取用户信息失败',
  95. icon: 'none'
  96. })
  97. } finally {
  98. loading.value = false
  99. }
  100. })
  101. const handleQux = () => {
  102. uni.navigateBack({
  103. delta: 1
  104. })
  105. }
  106. const handleSubmit = async () => {
  107. try {
  108. if (!formRef.value) {
  109. console.error('表单引用不存在')
  110. return
  111. }
  112. const valid = await formRef.value.validate()
  113. if (!valid) return
  114. loading.value = true
  115. const params = {
  116. nickName: modelForm.value.nickName,
  117. sex: modelForm.value.sex,
  118. age: modelForm.value.age,
  119. phonenumber: modelForm.value.phonenumber
  120. }
  121. const res = await updateUserInfo(params)
  122. if (res && res.code === 200) {
  123. uni.showToast({
  124. title: '保存成功',
  125. icon: 'success'
  126. })
  127. uni.navigateBack({ delta: 1 })
  128. } else {
  129. uni.showToast({
  130. title: res.msg || '保存失败',
  131. icon: 'none'
  132. })
  133. }
  134. } catch (e) {
  135. console.error('提交失败:', e)
  136. uni.showToast({
  137. title: '请求异常',
  138. icon: 'none'
  139. })
  140. } finally {
  141. loading.value = false
  142. }
  143. }
  144. const displaySex = computed({
  145. get() {
  146. const option = sexOptions.value.find(item => item.value === modelForm.value.sex)
  147. return option ? option.name : ''
  148. },
  149. set(newValue) {
  150. const option = sexOptions.value.find(item => item.name === newValue)
  151. if (option) {
  152. modelForm.value.sex = option.value
  153. }
  154. }
  155. })
  156. function sexSelect(e) {
  157. modelForm.value.sex = Number(e.value)
  158. sexFlag.value = false
  159. }
  160. const hadlClickEdit = {
  161. width: '240rpx',
  162. marginTop: '30rpx'
  163. }
  164. </script>
  165. <style scoped>
  166. .Wrapper-Btn {
  167. display: flex;
  168. justify-content: center;
  169. align-items: center;
  170. }
  171. </style>