Git 提交规范
  - feat	新增功能
  - fix	修复 Bug
  - docs	文档更新（如 README、CHANGELOG 等）
  - style	代码样式调整（如空格、格式化等，不涉及功能变更）
  - refactor	代码重构（既不修复 Bug 也不新增功能）
  - perf	性能优化
  - test	添加或修改测试代码
  - chore	构建过程或辅助工具的变动（如依赖更新、配置文件修改等）
  - revert	回滚之前的提交


代码规范
  - 使用v-for时必须添加:key
  - 组件props必须定义类型和默认值
  - 复杂逻辑必须添加注释
  - 敏感信息不硬编码
  - 变量/函数：小驼峰式命名 (camelCase)
  - 组件/类：小驼峰式命名 (pascalCase)
  - 合理使用缓存
  - 避免不必要的重渲染
  - 工具函数放在/utils目录
  - 公共组件放在/components目录


常见 class 命名规范
  - container 用于页面最外层容器
  - header  头部区域
  - main 主要内容区域
  - footer 底部区域
  - left 左侧区域
  - right 右侧区域
  - title 标题
  - nav 导航区域
  - banner 轮播图/广告 区域
  - tabs 标签区域
  - list 列表区域


循环调用避坑指南:
 - 页面： page/shopcity/index.vue  城市选择列表页
 - 背景： 城市名称列表依赖于父级城市英文首字母简写例：A、B、C， 循环项下的list 进行循环展示
 - 场景： 城市列表点击，需要获取点击的城市信息
 - 问题： 触发点击事件函数无法接收入参item
 - 解决方案: 改为箭头函数 @click="() => { headerSelectMapClick(item) }"
    - 原因： 查询DeepSeek给出的解释是， 箭头函数创建了一个闭包，保留了 item 的引用 即使列表重新渲染，也能保持对正确 item 的引用
    - 该解释是否正确 不确定 有待考量
 - 示例代码
<!--  
  <scroll-view class="list-scroll" scroll-y :scroll-into-view="activeId" @scroll="handleScroll">
    <view v-for="(group, index) in groupedData" :key="index" class="white_container" :id="'group-' + group.letter">
      <view class="letter-title">{{ group.letter }}</view>
      <view v-for="(item, ind) in group.list"
        :key="item.id"
        :class="['list-item', ind === group.list.length - 1 && 'no_border']"
        @click="headerSelectMapClick(item)" // TODO：问题点  为什么无法获取点击的item参数
      >
        {{ item.name }}
      </view>
    </view>
  </scroll-view>
-->