feat: add google sign-in, utils, refactor imports

- Restructure API import paths from @/request/api/* to cleaner @/api/[module] format
- Add three new utility classes: PhoneUtils for phone validation, ThrottleUtils and DebounceUtils for rate limiting
- Implement official Google One Tap login flow, add the GIS client script to index.html
- Clean up long inline template attributes in multiple Vue components for better readability
- Fix constant import path and default object return values in booking components
This commit is contained in:
DEV_DSW
2026-05-27 18:51:17 +08:00
parent 5cdef2b692
commit e2891f5793
12 changed files with 209 additions and 132 deletions

View File

@@ -1,40 +1,26 @@
<template>
<div class="tab-container relative">
<div class="tab-wrapper flex flex-items-center">
<div
v-for="(item, index) in tabList"
:key="item.id"
:class="[
'tab-item flex flex-items-center flex-justify-center relative',
activeIndex === index && 'tab-item-active',
]"
@click="handleTabClick(index)"
>
<div v-for="(item, index) in tabList" :key="item.id" :class="[
'tab-item flex flex-items-center flex-justify-center relative',
activeIndex === index && 'tab-item-active',
]" @click="handleTabClick(index)">
<div class="tab-item-inner flex flex-items-center">
<uni-icons
:class="['icon mr-4', activeIndex === index && 'icon-active']"
fontFamily="znicons"
size="20"
color="opacity"
>
<uni-icons :class="['icon mr-4', activeIndex === index && 'icon-active']" fontFamily="znicons" size="20"
color="opacity">
{{ zniconsMap[item.iconCode] }}
</uni-icons>
<span
:class="[
'font-size-16 font-500 color-525866 ',
activeIndex === index && 'tab-span-active',
]"
>
<span :class="[
'font-size-16 font-500 color-525866 ',
activeIndex === index && 'tab-span-active',
]">
{{ item.iconTitle }}
</span>
</div>
<!-- 每项内的下划线指示器通过类控制显示/隐藏 -->
<div
class="tab-item-indicator"
:class="{ visible: activeIndex === index }"
></div>
<div class="tab-item-indicator" :class="{ visible: activeIndex === index }"></div>
</div>
</div>
</div>
@@ -43,7 +29,7 @@
<script setup>
import { onMounted, ref, watch } from "vue";
import { zniconsMap } from "@/static/fonts/znicons";
import { commodityTypePageList } from "@/request/api/GoodsApi";
import { commodityTypePageList } from "@/api/goods";
// Props
const props = defineProps({