Address.vue 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. <template>
  2. <view>
  3. <add-component
  4. v-for="(item, index) in addInfoArr"
  5. :key="index"
  6. :ref="el => { if(el) addComponentRef[index] = el }"
  7. ></add-component>
  8. <view class="Wrapper-Btn">
  9. <up-button
  10. @click="handleQux"
  11. type="error"
  12. :plain="true"
  13. :hairline="true"
  14. text="取消"
  15. :customStyle="hadlClickEdit"
  16. ></up-button>
  17. <up-button
  18. type="error"
  19. text="确定"
  20. @click="handlOk"
  21. :customStyle="hadlClickEdit"
  22. ></up-button>
  23. </view>
  24. </view>
  25. </template>
  26. <script setup>
  27. import { ref, reactive } from 'vue'
  28. import { useraDdressData } from '@/api/userSettings.js'
  29. import pickerAddress from '@/pages_mine/components/pickerAddress/pickerAddress.vue' // 地区选择器组件
  30. import addComponent from '@/pages_mine/components/setupUser/Add.vue'
  31. const addComponentRef = ref([])
  32. const addInfoArr = ref([{}])
  33. function handleAdd() {
  34. if (addInfoArr.value.length < 4) addInfoArr.value.push({})
  35. }
  36. const handlOk = async () => {
  37. // 验证所有表单是否填写完整
  38. let isValid = true
  39. // 遍历所有地址组件,验证每个表单
  40. for (let i = 0; i < addComponentRef.value.length; i++) {
  41. const formRef = addComponentRef.value[i].$refs.formRef
  42. if (formRef) {
  43. try {
  44. // 直接触发表单验证,会自动显示错误提示
  45. const valid = await formRef.validate()
  46. if (!valid) {
  47. isValid = false
  48. }
  49. } catch (error) {
  50. isValid = false
  51. }
  52. }
  53. }
  54. // 只有全部验证通过才调用接口
  55. if (isValid) {
  56. const params = []
  57. addComponentRef.value.forEach((item) => {
  58. params.push(item.modelForm)
  59. })
  60. // 提交数据
  61. params.forEach(async (obj) => {
  62. const res = await useraDdressData(obj)
  63. if (res.code == 200) {
  64. uni.showToast({
  65. title: '新增成功',
  66. icon: 'success',
  67. duration: 1500,
  68. mask: true,
  69. })
  70. setTimeout(() => {
  71. uni.navigateTo({
  72. url: '/pages_mine/pages/selectAddress/index',
  73. })
  74. }, 1500)
  75. }
  76. })
  77. }
  78. }
  79. const handleQux = () => {
  80. uni.navigateBack({
  81. delta: 1,
  82. })
  83. }
  84. const hadlClickEdit = {
  85. width: '240rpx',
  86. marginTop: '30rpx',
  87. }
  88. </script>
  89. <style scoped lang="scss">
  90. .address-inp {
  91. color: #929292;
  92. }
  93. .Wrapper-Btn {
  94. display: flex;
  95. justify-content: center;
  96. align-items: center;
  97. }
  98. </style>