From 92230c9a97dc9ce9df3313d11d26999c04bb6b26 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期二, 15 七月 2025 13:12:48 +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