personalInfo.vue 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  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="isEdit ? '编辑' : '新增'" :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 isEdit = ref(false)
  46. const loading = ref(false)
  47. const rulesForm = ref({
  48. nickName: {
  49. type: 'string',
  50. required: true,
  51. message: '请输入姓名',
  52. trigger: ['blur', 'change']
  53. },
  54. sex: {
  55. type: 'number',
  56. required: true,
  57. message: '请选择性别',
  58. trigger: ['change']
  59. },
  60. age: {
  61. type: 'string',
  62. required: true,
  63. message: '请输入年龄',
  64. trigger: ['blur', 'change']
  65. },
  66. phonenumber: {
  67. type: 'string',
  68. required: true,
  69. message: '请输入手机号',
  70. trigger: ['blur', 'change']
  71. }
  72. })
  73. onMounted(async () => {
  74. loading.value = true
  75. try {
  76. const res = await userUserInfoEdit({})
  77. if (res && res.code === 200 && res.data) {
  78. modelForm.value = {
  79. nickName: res.data.nickName || '',
  80. sex: res.data.sex !== undefined ? res.data.sex : '',
  81. age: res.data.age || '',
  82. phonenumber: res.data.phonenumber || ''
  83. }
  84. isEdit.value = true
  85. } else {
  86. isEdit.value = false
  87. modelForm.value = {
  88. nickName: '',
  89. sex: '',
  90. age: '',
  91. phonenumber: ''
  92. }
  93. }
  94. } catch (e) {
  95. console.error('获取用户信息失败:', e)
  96. uni.showToast({
  97. title: '获取用户信息失败',
  98. icon: 'none'
  99. })
  100. isEdit.value = false
  101. } finally {
  102. loading.value = false
  103. }
  104. })
  105. const handleQux = () => {
  106. uni.navigateBack({
  107. delta: 1
  108. })
  109. }
  110. const handleSubmit = async () => {
  111. try {
  112. // 表单验证
  113. if (!formRef.value) {
  114. console.error('表单引用不存在')
  115. return
  116. }
  117. const valid = await formRef.value.validate()
  118. if (!valid) return
  119. loading.value = true
  120. const params = {
  121. nickName: modelForm.value.nickName,
  122. sex: modelForm.value.sex,
  123. age: modelForm.value.age,
  124. phonenumber: modelForm.value.phonenumber
  125. }
  126. const res = await updateUserInfo(params)
  127. if (res && res.code === 200) {
  128. uni.showToast({
  129. title: isEdit.value ? '编辑成功' : '新增成功',
  130. icon: 'success'
  131. })
  132. uni.navigateBack({ delta: 1 })
  133. } else {
  134. uni.showToast({
  135. title: res.msg || (isEdit.value ? '编辑失败' : '新增失败'),
  136. icon: 'none'
  137. })
  138. }
  139. } catch (e) {
  140. console.error('提交失败:', e)
  141. uni.showToast({
  142. title: '请求异常',
  143. icon: 'none'
  144. })
  145. } finally {
  146. loading.value = false
  147. }
  148. }
  149. const displaySex = computed({
  150. get() {
  151. const option = sexOptions.value.find(item => item.value === modelForm.value.sex)
  152. return option ? option.name : ''
  153. },
  154. set(newValue) {
  155. const option = sexOptions.value.find(item => item.name === newValue)
  156. if (option) {
  157. modelForm.value.sex = option.value
  158. }
  159. }
  160. })
  161. function sexSelect(e) {
  162. modelForm.value.sex = Number(e.value)
  163. sexFlag.value = false
  164. }
  165. const hadlClickEdit = {
  166. width: '240rpx',
  167. marginTop: '30rpx'
  168. }
  169. </script>
  170. <style scoped>
  171. .Wrapper-Btn {
  172. display: flex;
  173. justify-content: center;
  174. align-items: center;
  175. }
  176. </style>