1 line
25 KiB
Plaintext
1 line
25 KiB
Plaintext
{"version":3,"sources":["pages/mall/consumer/address-edit.uvue","uni_modules/ak-req/ak-req.uts","pages/user/terms.uvue","pages/mall/consumer/index.uvue","pages/user/center.uvue"],"sourcesContent":["<template>\r\n <view class=\"page-container\">\r\n <scroll-view class=\"address-edit-scroll\" scroll-y=\"true\">\r\n <view class=\"address-edit-content\">\r\n <!-- 基础信息组 -->\r\n <view class=\"form-group\">\r\n <view class=\"form-item\">\r\n <text class=\"label\">收货人</text>\r\n <input class=\"input\" v-model=\"formData.name\" placeholder=\"请填写收货人姓名\" placeholder-class=\"placeholder\" />\r\n </view>\r\n <view class=\"form-item\">\r\n <text class=\"label\">手机号码</text>\r\n <input class=\"input\" v-model=\"formData.phone\" type=\"number\" maxlength=\"11\" placeholder=\"请填写手机号码\" placeholder-class=\"placeholder\" />\r\n </view>\r\n <view class=\"form-item\">\r\n <text class=\"label\">所在地区</text>\r\n <input class=\"input\" v-model=\"regionString\" placeholder=\"省市区县、乡镇等\" placeholder-class=\"placeholder\" />\r\n <text class=\"arrow-icon\">›</text>\r\n </view>\r\n <view class=\"form-item detail-item\">\r\n <text class=\"label\">详细地址</text>\r\n <textarea class=\"textarea\" v-model=\"formData.detail\" placeholder=\"街道、楼牌号等\" placeholder-class=\"placeholder\" maxlength=\"100\"></textarea>\r\n </view>\r\n </view>\r\n \r\n <!-- 标签与默认设置组 -->\r\n <view class=\"form-group\">\r\n <view class=\"form-item label-section\">\r\n <text class=\"label\">地址标签</text>\r\n <view class=\"tags-container\">\r\n <view \r\n v-for=\"tag in tags\" \r\n :key=\"tag\" \r\n class=\"tag-item\"\r\n :class=\"{ active: formData.label === tag }\"\r\n @click=\"selectTag(tag)\"\r\n >\r\n <text class=\"tag-text\" :class=\"{ 'tag-text-active': formData.label === tag }\">{{ tag }}</text>\r\n </view>\r\n </view>\r\n </view>\r\n <view class=\"form-item switch-item\">\r\n <view class=\"switch-label-group\">\r\n <text class=\"label\">设为默认地址</text>\r\n <text class=\"sub-label\">下单时优先使用该地址</text>\r\n </view>\r\n <switch :checked=\"formData.isDefault\" color=\"#ff5000\" @change=\"onSwitchChange\" />\r\n </view>\r\n </view>\r\n\r\n <!-- 智能识别组 -->\r\n <view class=\"form-group smart-group\">\r\n <view class=\"smart-header\">\r\n <text class=\"smart-title\">智能填写</text>\r\n <text class=\"smart-clear\" v-if=\"smartInput\" @click=\"smartInput = ''\">清空</text>\r\n </view>\r\n <textarea class=\"smart-textarea\" v-model=\"smartInput\" placeholder=\"粘贴整段地址,自动识别姓名、电话、地址\" @input=\"parseSmartInput\" maxlength=\"200\"></textarea>\r\n <view class=\"smart-footer\">\r\n <text class=\"smart-tip\">示例:张三,13800138000,北京市朝阳区...</text>\r\n </view>\r\n </view>\r\n \r\n <!-- 底部操作按钮 -->\r\n <view class=\"footer-actions\">\r\n <button class=\"save-btn\" @click=\"saveAddress\">保存地址</button>\r\n <button v-if=\"isEdit\" class=\"delete-btn\" @click=\"deleteAddress\">删除此地址</button>\r\n </view>\r\n </view>\r\n </scroll-view>\r\n </view>\r\n</template>\r\n\r\n<script setup lang=\"uts\">\r\nimport { ref, reactive, computed } from 'vue'\r\nimport { onLoad } from '@dcloudio/uni-app'\r\nimport { supabaseService, AddAddressParams, UpdateAddressParams } from '@/utils/supabaseService.uts'\r\n\r\ntype Address = {\r\n id: string\r\n name: string\r\n phone: string\r\n province: string\r\n city: string\r\n district: string\r\n detail: string\r\n isDefault: boolean\r\n label?: string\r\n}\r\n\r\nconst isEdit = ref(false)\r\nconst addressId = ref('')\r\nconst regionString = ref('')\r\nconst tags = ['家', '公司', '学校']\r\nconst smartInput = ref('')\r\n\r\ntype AddressForm = {\r\n name: string\r\n phone: string\r\n detail: string\r\n isDefault: boolean\r\n label: string\r\n}\r\n\r\nconst formData = reactive({\r\n name: '',\r\n phone: '',\r\n detail: '',\r\n isDefault: false,\r\n label: ''\r\n} as AddressForm)\r\n\r\nconst loadAddress = async (id: string) => {\r\n try {\r\n // 从Supabase加载地址详情\r\n const address = await supabaseService.getAddressById(id)\r\n if (address != null) {\r\n formData.name = address.recipient_name\r\n formData.phone = address.phone\r\n formData.detail = address.detail_address\r\n formData.isDefault = address.is_default\r\n formData.label = address.label ?? ''\r\n regionString.value = `${address.province} ${address.city} ${address.district}`.trim()\r\n } else {\r\n // 如果Supabase没有找到,尝试从本地存储加载\r\n const storedAddresses = uni.getStorageSync('addresses')\r\n if (storedAddresses != null) {\r\n const addresses = JSON.parse(storedAddresses as string) as Address[]\r\n const localAddress = addresses.find(item => item.id === id)\r\n if (localAddress != null) {\r\n formData.name = localAddress.name\r\n formData.phone = localAddress.phone\r\n formData.detail = localAddress.detail\r\n formData.isDefault = localAddress.isDefault\r\n formData.label = localAddress.label ?? ''\r\n regionString.value = `${localAddress.province} ${localAddress.city} ${localAddress.district}`.trim()\r\n }\r\n }\r\n }\r\n } catch (error) {\r\n console.error('加载地址详情失败:', error)\r\n // 失败时从本地存储加载\r\n const storedAddresses = uni.getStorageSync('addresses')\r\n if (storedAddresses != null) {\r\n try {\r\n const addresses = JSON.parse(storedAddresses as string) as Address[]\r\n const address = addresses.find(item => item.id === id)\r\n if (address != null) {\r\n formData.name = address.name\r\n formData.phone = address.phone\r\n formData.detail = address.detail\r\n formData.isDefault = address.isDefault\r\n formData.label = address.label ?? ''\r\n regionString.value = `${address.province} ${address.city} ${address.district}`.trim()\r\n }\r\n } catch (e) {\r\n console.error('解析本地地址数据失败', e)\r\n }\r\n }\r\n }\r\n}\r\n\r\nonLoad((options) => {\r\n if (options['id'] != null) {\r\n isEdit.value = true\r\n addressId.value = options['id'] as string\r\n loadAddress(addressId.value)\r\n }\r\n})\r\n\r\nconst selectTag = (tag: string) => {\r\n if (formData.label === tag) {\r\n formData.label = ''\r\n } else {\r\n formData.label = tag\r\n }\r\n}\r\n\r\nconst onSwitchChange = (e: UniSwitchChangeEvent) => {\r\n formData.isDefault = e.detail.value\r\n}\r\n\r\nconst saveAddress = async () => {\r\n if (formData.name == '') {\r\n uni.showToast({ title: '请填写收货人', icon: 'none' })\r\n return\r\n }\r\n if (formData.phone == '') {\r\n uni.showToast({ title: '请填写手机号码', icon: 'none' })\r\n return\r\n }\r\n if (regionString.value == '') {\r\n uni.showToast({ title: '请填写所在地区', icon: 'none' })\r\n return\r\n }\r\n if (formData.detail == '') {\r\n uni.showToast({ title: '请填写详细地址', icon: 'none' })\r\n return\r\n }\r\n \r\n // 简单解析地区(这里简化处理,实际应使用选择器)\r\n const regions = regionString.value.split(' ')\r\n const province = regions[0] ?? ''\r\n const city = regions[1] ?? ''\r\n const district = regions.slice(2).join(' ')\r\n\r\n // 构建地址对象\r\n const addressData = {\r\n recipient_name: formData.name,\r\n phone: formData.phone,\r\n province: province,\r\n city: city,\r\n district: district,\r\n detail_address: formData.detail,\r\n postal_code: '', // 如果需要可以添加邮政编码字段\r\n is_default: formData.isDefault,\r\n label: formData.label\r\n } as AddAddressParams\r\n\r\n let success = false\r\n \r\n if (isEdit.value) {\r\n // 更新地址\r\n const updateData = {\r\n recipient_name: formData.name,\r\n phone: formData.phone,\r\n province: province,\r\n city: city,\r\n district: district,\r\n detail_address: formData.detail,\r\n postal_code: '',\r\n is_default: formData.isDefault,\r\n label: formData.label\r\n } as UpdateAddressParams\r\n success = await supabaseService.updateAddress(addressId.value, updateData)\r\n } else {\r\n // 添加新地址\r\n success = await supabaseService.addAddress(addressData)\r\n }\r\n\r\n if (success) {\r\n // 同时更新本地存储作为缓存\r\n const storedAddresses = uni.getStorageSync('addresses')\r\n let addresses: Address[] = []\r\n if (storedAddresses != null) {\r\n try {\r\n addresses = JSON.parse(storedAddresses as string) as Address[]\r\n } catch (e) {\r\n addresses = []\r\n }\r\n }\r\n \r\n // 如果设为默认,取消其他默认\r\n if (formData.isDefault) {\r\n addresses.forEach(item => {\r\n item.isDefault = false\r\n })\r\n }\r\n \r\n if (isEdit.value) {\r\n const index = addresses.findIndex(item => item.id === addressId.value)\r\n if (index !== -1) {\r\n addresses[index] = {\r\n ...addresses[index],\r\n name: formData.name,\r\n phone: formData.phone,\r\n province: province,\r\n city: city,\r\n district: district,\r\n detail: formData.detail,\r\n isDefault: formData.isDefault,\r\n label: formData.label\r\n }\r\n }\r\n } else {\r\n const newAddress: Address = {\r\n id: `addr_${Date.now()}`, // 临时ID,实际由Supabase生成\r\n name: formData.name,\r\n phone: formData.phone,\r\n province: province,\r\n city: city,\r\n district: district,\r\n detail: formData.detail,\r\n isDefault: formData.isDefault,\r\n label: formData.label\r\n }\r\n addresses.push(newAddress)\r\n }\r\n \r\n uni.setStorageSync('addresses', JSON.stringify(addresses))\r\n \r\n uni.showToast({\r\n title: '保存成功',\r\n icon: 'success'\r\n })\r\n \r\n setTimeout(() => {\r\n uni.navigateBack()\r\n }, 1500)\r\n } else {\r\n console.error('保存地址失败')\r\n uni.showToast({\r\n title: '保存失败',\r\n icon: 'none'\r\n })\r\n }\r\n}\r\n\r\nconst parseSmartInput = () => {\r\n const input = smartInput.value.trim()\r\n if (input == '') return\r\n \r\n // 提取手机号\r\n const phoneRegex = /(1[3-9]\\d{9})/\r\n const phoneMatch = input.match(phoneRegex)\r\n if (phoneMatch != null) {\r\n formData.phone = phoneMatch[0] ?? ''\r\n }\r\n \r\n // 提取姓名(取第一个2-4位中文)\r\n const nameRegex = /([\\u4e00-\\u9fa5]{2,4})/\r\n const nameMatch = input.match(nameRegex)\r\n if (nameMatch != null) {\r\n formData.name = nameMatch[0] ?? ''\r\n }\r\n \r\n // 去掉姓名和电话后剩余作为地址\r\n let addrText = input\r\n if (formData.name != '') addrText = addrText.replace(formData.name, '')\r\n if (formData.phone != '') addrText = addrText.replace(formData.phone, '')\r\n addrText = addrText.replace(/[,,;;\\s]+/g, ' ').trim()\r\n \r\n // 解析省市区\r\n const pattern1 = /^(.*?省)?(.*?市)?(.*?[区县])?(.*)$/\r\n const m = addrText.match(pattern1)\r\n if (m != null) {\r\n const province = m[1] ?? ''\r\n const city = m[2] ?? ''\r\n const district = m[3] ?? ''\r\n const detail = m[4] ?? ''\r\n regionString.value = `${province.trim()} ${city.trim()} ${district.trim()}`.trim()\r\n formData.detail = detail.trim()\r\n } else {\r\n formData.detail = addrText\r\n }\r\n}\r\nconst deleteAddress = () => {\r\n uni.showModal({\r\n title: '提示',\r\n content: '确定要删除该地址吗?',\r\n success: (res: UniShowModalResult) => {\r\n if (res.confirm) {\r\n // 调用Supabase服务删除地址\r\n supabaseService.deleteAddress(addressId.value).then((success) => {\r\n if (success) {\r\n // 同时从本地存储中移除\r\n const storedAddresses = uni.getStorageSync('addresses')\r\n if (storedAddresses != null) {\r\n try {\r\n let addresses = JSON.parse(storedAddresses as string) as Address[]\r\n addresses = addresses.filter(item => item.id !== addressId.value)\r\n uni.setStorageSync('addresses', JSON.stringify(addresses))\r\n } catch (e) {\r\n console.error('解析本地地址数据失败', e)\r\n }\r\n }\r\n \r\n uni.showToast({\r\n title: '删除成功',\r\n icon: 'success'\r\n })\r\n \r\n setTimeout(() => {\r\n uni.navigateBack()\r\n }, 1500)\r\n } else {\r\n console.error('删除地址失败')\r\n uni.showToast({\r\n title: '删除失败',\r\n icon: 'none'\r\n })\r\n }\r\n })\r\n }\r\n }\r\n })\r\n}\r\n</script>\r\n\r\n<style>\r\n.page-container {\r\n flex: 1;\r\n background-color: #f8f8f8;\r\n display: flex;\r\n flex-direction: column;\r\n}\r\n\r\n.address-edit-scroll {\r\n flex: 1;\r\n}\r\n\r\n.address-edit-content {\r\n padding: 12px;\r\n padding-bottom: 40px;\r\n}\r\n\r\n.form-group {\r\n background-color: #ffffff;\r\n border-radius: 12px;\r\n padding: 0 16px;\r\n margin-bottom: 12px;\r\n box-shadow: 0 2rpx 10rpx rgba(0, 0, 0, 0.02);\r\n}\r\n\r\n.form-item {\r\n display: flex;\r\n flex-direction: row;\r\n align-items: center;\r\n padding: 18px 0;\r\n border-bottom: 1px solid #f9f9f9;\r\n}\r\n\r\n.form-item:last-child {\r\n border-bottom: none;\r\n}\r\n\r\n.detail-item {\r\n align-items: flex-start;\r\n flex-direction: column;\r\n}\r\n\r\n.detail-item .label {\r\n margin-bottom: 12px;\r\n}\r\n\r\n.label {\r\n width: 80px;\r\n font-size: 15px;\r\n color: #333;\r\n font-weight: 500;\r\n}\r\n\r\n.input {\r\n flex: 1;\r\n font-size: 15px;\r\n color: #333;\r\n}\r\n\r\n.textarea {\r\n width: 100%;\r\n height: 60px;\r\n font-size: 15px;\r\n line-height: 1.5;\r\n color: #333;\r\n}\r\n\r\n.placeholder {\r\n color: #ccc;\r\n font-size: 15px;\r\n}\r\n\r\n.arrow-icon {\r\n font-size: 18px;\r\n color: #ccc;\r\n margin-left: 8px;\r\n}\r\n\r\n/* 标签选择 */\r\n.label-section {\r\n align-items: flex-start;\r\n flex-direction: column;\r\n}\r\n\r\n.label-section .label {\r\n margin-bottom: 16px;\r\n}\r\n\r\n.tags-container {\r\n display: flex;\r\n flex-direction: row;\r\n flex-wrap: wrap;\r\n}\r\n\r\n.tag-item {\r\n padding: 6px 18px;\r\n background-color: #f7f7f7;\r\n border-radius: 20px;\r\n margin-right: 12px;\r\n border: 1px solid transparent;\r\n}\r\n\r\n.tag-item.active {\r\n background-color: #fff1eb;\r\n border-color: #ff5000;\r\n}\r\n\r\n.tag-text {\r\n font-size: 13px;\r\n color: #666;\r\n}\r\n\r\n.tag-text-active {\r\n color: #ff5000;\r\n font-weight: bold;\r\n}\r\n\r\n/* 开关项 */\r\n.switch-item {\r\n justify-content: space-between;\r\n}\r\n\r\n.switch-label-group {\r\n display: flex;\r\n flex-direction: column;\r\n}\r\n\r\n.sub-label {\r\n font-size: 12px;\r\n color: #999;\r\n margin-top: 4px;\r\n}\r\n\r\n/* 智能填写 */\r\n.smart-group {\r\n padding: 16px;\r\n}\r\n\r\n.smart-header {\r\n display: flex;\r\n flex-direction: row;\r\n justify-content: space-between;\r\n align-items: center;\r\n margin-bottom: 12px;\r\n}\r\n\r\n.smart-title {\r\n font-size: 14px;\r\n color: #333;\r\n font-weight: bold;\r\n}\r\n\r\n.smart-clear {\r\n font-size: 12px;\r\n color: #007aff;\r\n}\r\n\r\n.smart-textarea {\r\n width: 100%;\r\n height: 80px;\r\n background-color: #f9f9f9;\r\n border-radius: 8px;\r\n padding: 12px;\r\n font-size: 13px;\r\n line-height: 1.6;\r\n color: #666;\r\n}\r\n\r\n.smart-footer {\r\n margin-top: 8px;\r\n}\r\n\r\n.smart-tip {\r\n font-size: 11px;\r\n color: #999;\r\n}\r\n\r\n/* 底部按钮 */\r\n.footer-actions {\r\n margin-top: 32px;\r\n display: flex;\r\n flex-direction: column;\r\n}\r\n\r\n.save-btn {\r\n background-color: #ff5000;\r\n color: #ffffff;\r\n height: 48px;\r\n line-height: 48px;\r\n font-size: 16px;\r\n font-weight: bold;\r\n border-radius: 24px;\r\n border: none;\r\n margin-bottom: 16px;\r\n box-shadow: 0 8rpx 20rpx rgba(255, 80, 0, 0.2);\r\n}\r\n\r\n.delete-btn {\r\n background-color: #ffffff;\r\n color: #ee0a24;\r\n height: 48px;\r\n line-height: 48px;\r\n font-size: 16px;\r\n border-radius: 24px;\r\n border: 1px solid #f0f0f0;\r\n}\r\n</style>\r\n\r\n",null,null,null,null],"names":[],"mappings":"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"} |