From 829f164833ca2186df541c8c6307e78cd1530920 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E5=BF=97=E9=B9=8F?= <2916022834@qq.com> Date: Thu, 23 Apr 2026 14:28:26 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B4=AD=E7=89=A9=E8=BD=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/assets/images/shopping-cart-null.png | Bin 0 -> 14965 bytes src/utils/tools.ts | 78 ++++++++++-------- src/views/shoppingCart/index.vue | 8 +- src/views/shoppingCart/order-summary.vue | 52 +++++++----- src/views/shoppingCart/sc-list.vue | 100 +++++++++++++++++++---- 5 files changed, 164 insertions(+), 74 deletions(-) create mode 100644 src/assets/images/shopping-cart-null.png diff --git a/src/assets/images/shopping-cart-null.png b/src/assets/images/shopping-cart-null.png new file mode 100644 index 0000000000000000000000000000000000000000..545cee801bbf78da6c8196d0b6c9f2c17afd859d GIT binary patch literal 14965 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 A4gdfE literal 0 HcmV?d00001 diff --git a/src/utils/tools.ts b/src/utils/tools.ts index 69403ed..738e4b2 100644 --- a/src/utils/tools.ts +++ b/src/utils/tools.ts @@ -53,9 +53,9 @@ export function generateUUID(): string { if (typeof crypto !== 'undefined' && crypto.randomUUID) { return crypto.randomUUID() } - + // 备用方案:手动生成UUID v4 - return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { + return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { const r = Math.random() * 16 | 0 const v = c === 'x' ? r : (r & 0x3 | 0x8) return v.toString(16) @@ -70,39 +70,37 @@ export { /** 时间格式化-自定义格式 * @param value 时间对象|时间戳|时间字符串 - * @param format 格式化字符串,默认值为 'yyyy-MM-dd HH:mm:ss' + * @param format 格式化字符串,默认值为 'YYYY-MM-DD HH:mm:ss' * @returns 格式化后的时间字符串 */ -export function FormatDate(value: Date | number | string, format: string = 'yyyy-MM-dd HH:mm:ss') { - const date = new Date(value); - const yyyy = String(date.getFullYear()); - const yy = String(date.getFullYear()).slice(-2); - const MM = String(date.getMonth() + 1).padStart(2, '0'); - const M = String(date.getMonth() + 1); - const dd = String(date.getDate()).padStart(2, '0'); - const d = String(date.getDate()); - const HH = String(date.getHours()).padStart(2, '0'); - const H = String(date.getHours()); - const mm = String(date.getMinutes()).padStart(2, '0'); - const m = String(date.getMinutes()); - const ss = String(date.getSeconds()).padStart(2, '0'); - const s = String(date.getSeconds()); - const str = format.replaceAll('yyyy', yyyy) - .replaceAll('yy', yy) - .replaceAll('MM', MM) - .replaceAll('M', M) - .replaceAll('dd', dd) - .replaceAll('d', d) - .replaceAll('HH', HH) - .replaceAll('H', H) - .replaceAll('mm', mm) - .replaceAll('m', m) - .replaceAll('ss', ss) - .replaceAll('s', s); - return str; +export function FormatDate(value: Date | number | string, format: string = 'YYYY-MM-DD HH:mm:ss') { + const d = new Date(value); + if (!d || isNaN(d.getTime())) return 'Invalid Date'; + const pad = (n) => String(n).padStart(2, '0'); + const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; + const tokens = { + YYYY: d.getFullYear(), + YY: String(d.getFullYear()).slice(-2), + MM: pad(d.getMonth() + 1), + M: d.getMonth() + 1, + SM: months[d.getMonth()], + DD: pad(d.getDate()), + D: d.getDate(), + HH: pad(d.getHours()), + H: d.getHours(), + hh: pad(d.getHours() % 12 || 12), + h: d.getHours() % 12 || 12, + mm: pad(d.getMinutes()), + m: d.getMinutes(), + ss: pad(d.getSeconds()), + s: d.getSeconds(), + A: d.getHours() < 12 ? 'AM' : 'PM', + a: d.getHours() < 12 ? 'am' : 'pm' + } + const reg = new RegExp(Object.keys(tokens).join('|'), 'g') + return format.replace(reg, match => tokens[match]); } - /** * 下载图片 * @param list 图片列表 @@ -163,7 +161,7 @@ export function encryptPassword(password: string): string { * @param url 图片URL * @returns 无 */ -export async function shareImageToWhatsapp (url: string){ +export async function shareImageToWhatsapp(url: string) { // 把图片 URL 转为 Blob const blob = await fetch(url).then((res) => res.blob()) @@ -195,3 +193,19 @@ export function CountDown(time: number) { const ss = String(time % 60).padStart(2, '0'); return `${mm}:${ss}`; } + +/** + * 字节转换为可读格式 + * @param {number} bytes - 字节数 + * @param {number} decimals - 保留小数位数,默认2位 + * @returns {string} 格式化后的字符串 + */ +export function FormatBytes(bytes, decimals = 2) { + if (bytes === 0) return '0 B'; + if (!bytes || isNaN(bytes)) return '0 B'; + const k = 1024; + const sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']; + const i = Math.floor(Math.log(bytes) / Math.log(k)); + const value = bytes / Math.pow(k, i); + return `${Number(value.toFixed(decimals))} ${sizes[i]}`; +} diff --git a/src/views/shoppingCart/index.vue b/src/views/shoppingCart/index.vue index c4c7e0f..961ee40 100644 --- a/src/views/shoppingCart/index.vue +++ b/src/views/shoppingCart/index.vue @@ -1,19 +1,19 @@