From fe75cffbf3bae6777aa2794fd89fa5dc37f5df8d Mon Sep 17 00:00:00 2001 From: gaoluyang <2820782392@qq.com> Date: 星期二, 15 七月 2025 10:11:23 +0800 Subject: [PATCH] 项目初始化 --- src/pages_template/pages/address/index.ts | 256 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 256 insertions(+), 0 deletions(-) diff --git a/src/pages_template/pages/address/index.ts b/src/pages_template/pages/address/index.ts new file mode 100644 index 0000000..32701bc --- /dev/null +++ b/src/pages_template/pages/address/index.ts @@ -0,0 +1,256 @@ +import { ref, reactive, computed } from 'vue'; +import { onShow } from '@dcloudio/uni-app'; + +/** + * 鍦板潃淇℃伅鎺ュ彛 + */ +export interface AddressInfo { + id: string; // 鍦板潃ID + name: string; // 鏀惰揣浜哄鍚� + phone: string; // 鎵嬫満鍙风爜(宸茶劚鏁�) + region: string; // 鍦板尯(濡�: 骞夸笢鐪佹繁鍦冲競鍗楀北鍖�) + address: string; // 璇︾粏鍦板潃 + tag: string; // 鍦板潃鏍囩(濡�: 瀹躲�佸叕鍙搞�佸鏍�) + isDefault: boolean; // 鏄惁涓洪粯璁ゅ湴鍧� +} + +/** + * 绀轰緥鍦板潃鏁版嵁 + */ +const sampleAddresses: AddressInfo[] = [ + { + id: '1', + name: '寮犱笁', + phone: '13712348888', + region: '骞夸笢鐪佹繁鍦冲競鍗楀北鍖�', + address: '绉戞妧鍥崡璺�888鍙峰垱鏂板ぇ鍘搴�10妤�', + tag: '鍏徃', + isDefault: true + }, + { + id: '2', + name: '鏉庡洓', + phone: '13912345678', + region: '骞夸笢鐪佹繁鍦冲競绂忕敯鍖�', + address: '绂忎腑璺�1000鍙锋捣鍩庡ぇ鍘搴�20妤�2001瀹�', + tag: '瀹�', + isDefault: false + }, + { + id: '3', + name: '鐜嬩簲', + phone: '15812342233', + region: '骞夸笢鐪佸箍宸炲競澶╂渤鍖�', + address: '澶╂渤璺�100鍙峰ぉ娌冲煄璐墿涓績闄勮繎灏忓尯A鏍�3鍗曞厓701瀹�', + tag: '瀛︽牎', + isDefault: false + } +]; + +// 鍏变韩鐨勫湴鍧�鏁版嵁 +const addressStore = { + list: ref<AddressInfo[]>([]), + tags: ref(['瀹�', '鍏徃', '瀛︽牎']) +}; + +/** + * 鏍煎紡鍖栨墜鏈哄彿锛屼腑闂�4浣嶇敤鏄熷彿浠f浛 + */ +export function formatPhoneNumber(phone: string): string { + return phone.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2'); +} + +/** + * 鍦板潃鍒楄〃椤甸潰Hook + * @description 鎻愪緵鍦板潃鍒楄〃椤甸潰鎵�闇�鐨勭姸鎬佸拰鏂规硶 + */ +export function useAddressListPage() { + // 浠庡叡浜玸tore鑾峰彇鍝嶅簲寮忔暟鎹� + const addressList = addressStore.list; + + // 浣跨敤璁$畻灞炴�ц绠楁槸鍚︿负绌虹姸鎬� + const emptyStatus = computed(() => addressList.value.length === 0); + + // 鏇存柊鍦板潃鍒楄〃 + function refreshAddressList() { + addressList.value = sampleAddresses + // 瀹為檯椤圭洰涓紝杩欓噷搴旇璋冪敤API鑾峰彇鏈�鏂扮殑鍦板潃鍒楄〃 + // const response = await api.getAddressList(); + // addressList.value = response.data; + } + + // 璁剧疆榛樿鍦板潃 + function setDefaultAddress(id: string): boolean { + const index = addressList.value.findIndex(item => item.id === id); + + if (index === -1) return false; + + // 鏇存柊鎵�鏈夊湴鍧�鐨勯粯璁ょ姸鎬� + addressList.value = addressList.value.map(item => ({ + ...item, + isDefault: item.id === id + })); + + return true; + } + + // 鍒犻櫎鍦板潃 + function deleteAddress(id: string): boolean { + const initialLength = addressList.value.length; + addressList.value = addressList.value.filter(item => item.id !== id); + return addressList.value.length !== initialLength; + } + + // 椤甸潰鏄剧ず鏃跺埛鏂版暟鎹� + onShow(() => { + refreshAddressList(); + }); + + return { + // 鍝嶅簲寮忕姸鎬� + addressList, + emptyStatus, + // 鏂规硶 + setDefaultAddress, + deleteAddress, + refreshAddressList + }; +} + +/** + * 鍦板潃缂栬緫椤甸潰Hook + * @description 鎻愪緵鍦板潃缂栬緫椤甸潰鎵�闇�鐨勭姸鎬佸拰鏂规硶 + */ +export function useAddressEditPage() { + // 浠庡叡浜玸tore鑾峰彇鍝嶅簲寮忔暟鎹� + const addressList = addressStore.list; + const addressTags = addressStore.tags; + + // 椤甸潰鐘舵�� + const isEdit = ref(false); + const editId = ref(''); + const defaultAddress = ref(false); + const selectedTag = ref('瀹�'); + + // 琛ㄥ崟鏁版嵁 + const form = reactive({ + name: '', + phone: '', + region: '', + address: '' + }); + + // 鍔犺浇缂栬緫鏁版嵁 + function loadAddressData(id: string): boolean { + const address = addressList.value.find(item => item.id === id); + + if (!address) return false; + + // 濉厖琛ㄥ崟鏁版嵁 + form.name = address.name; + form.phone = address.phone; + form.region = address.region; + form.address = address.address; + selectedTag.value = address.tag; + defaultAddress.value = address.isDefault; + + return true; + } + + // 鍒濆鍖栭〉闈� + function initEditPage(id?: string) { + // 閲嶇疆鐘舵�� + isEdit.value = !!id; + editId.value = id || ''; + defaultAddress.value = false; + selectedTag.value = '瀹�'; + + form.name = ''; + form.phone = ''; + form.region = ''; + form.address = ''; + + // 濡傛灉鏄紪杈戞ā寮忥紝鍔犺浇鍦板潃鏁版嵁 + if (id) { + loadAddressData(id); + } + } + + // 淇濆瓨鍦板潃 + function saveAddress(): boolean { + if (isEdit.value) { + // 缂栬緫鐜版湁鍦板潃 + const index = addressList.value.findIndex(item => item.id === editId.value); + if (index === -1) return false; + + // 濡傛灉璁句负榛樿锛屾洿鏂板叾浠栧湴鍧� + if (defaultAddress.value) { + addressList.value = addressList.value.map(item => { + if (item.id !== editId.value) { + return { ...item, isDefault: false }; + } + return item; + }); + } + + // 鏇存柊褰撳墠鍦板潃 + addressList.value[index] = { + ...addressList.value[index], + name: form.name, + phone: form.phone, + region: form.region, + address: form.address, + tag: selectedTag.value, + isDefault: defaultAddress.value + }; + } else { + // 娣诲姞鏂板湴鍧� + const newId = Date.now().toString(); + + // 濡傛灉璁句负榛樿锛屾洿鏂板叾浠栧湴鍧� + if (defaultAddress.value) { + addressList.value = addressList.value.map(item => ({ + ...item, + isDefault: false + })); + } + + // 娣诲姞鏂板湴鍧� + addressList.value.push({ + id: newId, + name: form.name, + phone: form.phone, + region: form.region, + address: form.address, + tag: selectedTag.value, + isDefault: defaultAddress.value + }); + } + + return true; + } + + // 鍒犻櫎鍦板潃 + function deleteAddress(): boolean { + if (!isEdit.value) return false; + + const initialLength = addressList.value.length; + addressList.value = addressList.value.filter(item => item.id !== editId.value); + + return addressList.value.length !== initialLength; + } + + return { + // 鍝嶅簲寮忕姸鎬� + isEdit, + editId, + form, + defaultAddress, + selectedTag, + addressTags, + // 鏂规硶 + initEditPage, + saveAddress, + deleteAddress + }; +} \ No newline at end of file -- Gitblit v1.9.3