Browse Source

feat(订单地址): 添加设置默认地址功能

yz 1 month ago
parent
commit
0fd0c5a746

+ 2 - 4
src/api/order/address.js

@@ -101,16 +101,14 @@ export const updateAddress = async (row) => {
 /**
  * 设置默认地址
  * @param {string|number} id - 地址ID
- * @param {string|number} customerId - 客户ID
  * @returns {Promise<import('../types/address').CustomerAddressOperationResponse>} 设置结果
  */
-export const setDefaultAddress = async (id, customerId) => {
+export const setDefaultAddress = async (id) => {
   return request({
     url: '/api/blade-factory/api/factory/salesOrder/setDefaultAddress',
     method: 'put',
     params: {
-      id,
-      customerId
+       addressId: id
     }
   })
 }

+ 51 - 4
src/views/order/address/addressMixin.js

@@ -1,4 +1,4 @@
-import { getList, getAddressList, add, update, getDetail, addAddress, updateAddress, deleteAddress } from '@/api/order/address'
+import { getList, getAddressList, add, update, getDetail, addAddress, updateAddress, deleteAddress, setDefaultAddress } from '@/api/order/address'
 import { getCustomerList } from '@/api/common/index'
 import { mapGetters } from 'vuex'
 import RegionCascader from '@/components/region-cascader/index.vue'
@@ -160,6 +160,8 @@ export default {
             label: '地区编码',
             prop: 'regionCode',
             hide: true,
+            addDisplay: false,
+            editDisplay: false,
             rules: [
               {
                 required: true,
@@ -264,7 +266,7 @@ export default {
         // delBtn: this.vaildData(this.permission.order_address_delete, false),
         // editBtn: this.vaildData(this.permission.order_address_edit, false)
         addBtn: true,
-        viewBtn: true,
+        viewBtn: false,
         delBtn: true,
         editBtn: true
       }
@@ -412,10 +414,18 @@ export default {
      * @this {OrderAddressMixinComponent & Vue}
      */
     handleRegionChange(data) {
-      const { regionName } = data
+      const { values, regionName } = data
 
-      // 只设置regionName,regionCode保持独立
+      // 设置地区名称
       this.form.regionName = regionName
+
+      // 设置地区编码(取最后一级的编码)
+      if (values && values.length > 0) {
+        const tmpCode = values[values.length - 1]
+        this.form.regionCode = tmpCode || ''
+      } else {
+        this.form.regionCode = ''
+      }
     },
 
    /**
@@ -613,6 +623,43 @@ export default {
      */
     refreshChange() {
       this.onLoad(this.query)
+    },
+
+    /**
+     * 设为默认地址
+     * @param {CustomerAddressItem} row - 地址数据
+     * @returns {Promise<void>}
+     * @this {OrderAddressMixinComponent & Vue}
+     */
+    async handleSetDefault(row) {
+      try {
+        await this.$confirm('确定要将此地址设为默认地址吗?', '提示', {
+          confirmButtonText: '确定',
+          cancelButtonText: '取消',
+          type: 'warning'
+        })
+        
+        const loading = this.$loading({
+          lock: true,
+          text: '设置中...',
+          spinner: 'el-icon-loading',
+          background: 'rgba(0, 0, 0, 0.7)'
+        })
+        
+        try {
+          await setDefaultAddress(row.id)
+          this.$message.success('设置默认地址成功')
+          // 刷新表格数据
+          this.onLoad(this.query)
+        } catch (error) {
+          console.error('设置默认地址失败:', error)
+          this.$message.error('设置默认地址失败,请重试')
+        } finally {
+          loading.close()
+        }
+      } catch {
+        // 用户取消操作
+      }
     }
   },
   /**

+ 12 - 0
src/views/order/address/index.vue

@@ -42,6 +42,18 @@
         </el-tag>
       </template>
 
+      <!-- 操作列插槽 -->
+      <template slot-scope="{row, index}" slot="menu">
+        <el-button
+          v-if="row.isDefault !== 1"
+          type="text"
+          size="small"
+          @click="handleSetDefault(row)"
+        >
+          设为默认
+        </el-button>
+      </template>
+
       <!-- 地区选择器插槽 -->
       <template slot="regionNameForm" slot-scope="{value, column}">
         <region-cascader

+ 4 - 4
src/views/order/address/types.d.ts

@@ -66,7 +66,7 @@ export interface CustomerOption {
  */
 export interface RegionData {
   /** 地区编码 */
-  regionCode: string;
+  values: string[];
   /** 地区名称 */
   regionName: string;
 }
@@ -198,7 +198,7 @@ export interface OrderAddressComponentEvents {
  * 订单地址管理组件类型
  * @description 组合所有相关类型,用于@this注解
  */
-export interface OrderAddressComponent extends 
+export interface OrderAddressComponent extends
   OrderAddressComponentProps,
   OrderAddressMixinData,
   OrderAddressMixinComputed,
@@ -230,7 +230,7 @@ export interface OrderAddressComponent extends
  * 订单地址管理Mixin组件类型
  * @description 用于Mixin文件的@this注解
  */
-export interface OrderAddressMixinComponent extends 
+export interface OrderAddressMixinComponent extends
   OrderAddressComponentProps,
   OrderAddressMixinData,
   OrderAddressMixinComputed,
@@ -255,4 +255,4 @@ export {
   ValidationRule,
   ApiResponse,
   PageResult
-} from '@/api/types/common';
+} from '@/api/types/common';