OrderUpdateAddressForm.vue 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. <template>
  2. <Dialog v-model="dialogVisible" title="修改订单收货地址" width="35%">
  3. <el-form ref="formRef" v-loading="formLoading" :model="formData" label-width="120px">
  4. <el-form-item label="收件人">
  5. <el-input v-model="formData.receiverName" placeholder="请输入收件人名称" />
  6. </el-form-item>
  7. <el-form-item label="手机号">
  8. <el-input v-model="formData.receiverMobile" placeholder="请输入收件人手机号" />
  9. </el-form-item>
  10. <el-form-item label="所在地">
  11. <el-tree-select
  12. v-model="formData.receiverAreaId"
  13. :data="areaList"
  14. :props="defaultProps"
  15. :render-after-expand="true"
  16. />
  17. </el-form-item>
  18. <el-form-item label="详细地址">
  19. <el-input
  20. v-model="formData.receiverDetailAddress"
  21. :rows="3"
  22. placeholder="请输入收件人详细地址"
  23. type="textarea"
  24. />
  25. </el-form-item>
  26. </el-form>
  27. <template #footer>
  28. <el-button :disabled="formLoading" type="primary" @click="submitForm">确 定</el-button>
  29. <el-button @click="dialogVisible = false">取 消</el-button>
  30. </template>
  31. </Dialog>
  32. </template>
  33. <script lang="ts" setup>
  34. import * as TradeOrderApi from '@/api/mall/trade/order'
  35. import { getAreaTree } from '@/api/system/area'
  36. import { copyValueToTarget } from '@/utils'
  37. import { defaultProps } from '@/utils/tree'
  38. defineOptions({ name: 'OrderUpdateAddressForm' })
  39. const { t } = useI18n() // 国际化
  40. const message = useMessage() // 消息弹窗
  41. const dialogVisible = ref(false) // 弹窗的是否展示
  42. const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
  43. const formData = ref({
  44. id: 0, // 订单编号
  45. receiverName: '', // 收件人名称
  46. receiverMobile: '', // 收件人手机
  47. receiverAreaId: null, //收件人地区编号
  48. receiverDetailAddress: '' //收件人详细地址
  49. })
  50. const areaList = ref([]) // 地区列表
  51. const formRef = ref() // 表单 Ref
  52. /** 打开弹窗 */
  53. const open = async (row: TradeOrderApi.OrderVO) => {
  54. resetForm()
  55. // 设置数据
  56. copyValueToTarget(formData.value, row)
  57. dialogVisible.value = true
  58. }
  59. defineExpose({ open }) // 提供 open 方法,用于打开弹窗
  60. /** 提交表单 */
  61. const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
  62. const submitForm = async () => {
  63. // 提交请求
  64. formLoading.value = true
  65. try {
  66. const data = unref(formData)
  67. await TradeOrderApi.updateOrderAddress(data)
  68. message.success(t('common.updateSuccess'))
  69. dialogVisible.value = false
  70. // 发送操作成功的事件
  71. emit('success', true)
  72. } finally {
  73. formLoading.value = false
  74. }
  75. }
  76. /** 重置表单 */
  77. const resetForm = () => {
  78. formData.value = {
  79. id: 0, // 订单编号
  80. receiverName: '', // 收件人名称
  81. receiverMobile: '', // 收件人手机
  82. receiverAreaId: null, //收件人地区编号
  83. receiverDetailAddress: '' //收件人详细地址
  84. }
  85. formRef.value?.resetFields()
  86. }
  87. onMounted(async () => {
  88. // 获得地区列表
  89. areaList.value = await getAreaTree()
  90. })
  91. </script>