# 学业邑规划 - 组件文档 本文档定义了小程序中需要开发的公共组件和业务组件。 --- ## 一、组件分类 ``` components/ ├── common/ # 通用组件(与业务无关) ├── business/ # 业务组件(与业务相关) └── layout/ # 布局组件 ``` --- ## 二、通用组件 ### 2.1 AppButton 按钮 **文件**:`components/common/AppButton.vue` **功能**:统一的按钮组件,支持多种样式和状态 **Props**: | 属性 | 类型 | 默认值 | 说明 | |------|------|--------|------| | type | string | 'primary' | 按钮类型:primary / secondary / text | | size | string | 'medium' | 按钮大小:small / medium / large | | disabled | boolean | false | 是否禁用 | | loading | boolean | false | 是否加载中 | | block | boolean | false | 是否块级按钮 | **使用示例**: ```vue 提交 取消 支付¥99元 开始测评 ``` --- ### 2.2 AppModal 弹窗 **文件**:`components/common/AppModal.vue` **功能**:统一的弹窗组件 **Props**: | 属性 | 类型 | 默认值 | 说明 | |------|------|--------|------| | visible | boolean | false | 是否显示 | | title | string | '' | 标题 | | showClose | boolean | true | 是否显示关闭按钮 | | maskClosable | boolean | true | 点击遮罩是否关闭 | **Emits**: | 事件 | 参数 | 说明 | |------|------|------| | update:visible | boolean | 显示状态变化 | | close | - | 关闭事件 | **使用示例**: ```vue 确定要退出登录吗? ``` --- ### 2.3 AppEmpty 空状态 **文件**:`components/common/AppEmpty.vue` **功能**:列表为空时的占位组件 **Props**: | 属性 | 类型 | 默认值 | 说明 | |------|------|--------|------| | image | string | 默认图片 | 空状态图片 | | text | string | '暂无数据' | 提示文字 | | showButton | boolean | false | 是否显示按钮 | | buttonText | string | '' | 按钮文字 | **使用示例**: ```vue ``` --- ### 2.4 AppLoading 加载 **文件**:`components/common/AppLoading.vue` **功能**:加载状态组件 **Props**: | 属性 | 类型 | 默认值 | 说明 | |------|------|--------|------| | loading | boolean | false | 是否加载中 | | text | string | '加载中...' | 加载文字 | | fullscreen | boolean | false | 是否全屏 | **使用示例**: ```vue ``` --- ### 2.5 AppNavbar 导航栏 **文件**:`components/common/AppNavbar.vue` **功能**:自定义导航栏(用于 navigationStyle: custom 的页面) **Props**: | 属性 | 类型 | 默认值 | 说明 | |------|------|--------|------| | title | string | '' | 标题 | | showBack | boolean | true | 是否显示返回按钮 | | showHome | boolean | false | 是否显示首页按钮 | | bgColor | string | '#fff' | 背景色 | | textColor | string | '#333' | 文字颜色 | **使用示例**: ```vue ``` --- ### 2.6 AppInput 输入框 **文件**:`components/common/AppInput.vue` **功能**:统一的输入框组件 **Props**: | 属性 | 类型 | 默认值 | 说明 | |------|------|--------|------| | modelValue | string | '' | 输入值 | | type | string | 'text' | 输入类型 | | placeholder | string | '' | 占位文字 | | disabled | boolean | false | 是否禁用 | | maxlength | number | -1 | 最大长度 | | error | string | '' | 错误提示 | **使用示例**: ```vue ``` --- ### 2.7 AppPicker 选择器 **文件**:`components/common/AppPicker.vue` **功能**:统一的选择器组件 **Props**: | 属性 | 类型 | 默认值 | 说明 | |------|------|--------|------| | modelValue | any | null | 选中值 | | options | array | [] | 选项列表 | | placeholder | string | '请选择' | 占位文字 | | labelKey | string | 'label' | 显示字段 | | valueKey | string | 'value' | 值字段 | **使用示例**: ```vue ``` --- ### 2.8 AppRegionPicker 地区选择器 **文件**:`components/common/AppRegionPicker.vue` **功能**:省市区三级联动选择器 **Props**: | 属性 | 类型 | 默认值 | 说明 | |------|------|--------|------| | province | string | '' | 省份 | | city | string | '' | 城市 | | district | string | '' | 区县 | **Emits**: | 事件 | 参数 | 说明 | |------|------|------| | change | { province, city, district } | 选择变化 | **使用示例**: ```vue ``` --- ## 三、业务组件 ### 3.1 UserAvatar 用户头像 **文件**:`components/business/UserAvatar.vue` **功能**:用户头像展示组件 **Props**: | 属性 | 类型 | 默认值 | 说明 | |------|------|--------|------| | src | string | '' | 头像地址 | | size | string | 'medium' | 大小:small / medium / large | | showLevel | boolean | false | 是否显示等级标识 | | level | number | 1 | 用户等级 | **使用示例**: ```vue ``` --- ### 3.2 OrderCard 订单卡片 **文件**:`components/business/OrderCard.vue` **功能**:订单列表项组件 **Props**: | 属性 | 类型 | 默认值 | 说明 | |------|------|--------|------| | order | OrderItem | required | 订单数据 | **Emits**: | 事件 | 参数 | 说明 | |------|------|------| | action | { type, order } | 操作按钮点击 | **使用示例**: ```vue ``` --- ### 3.3 AssessmentCard 测评入口卡片 **文件**:`components/business/AssessmentCard.vue` **功能**:首页测评入口组件 **Props**: | 属性 | 类型 | 默认值 | 说明 | |------|------|--------|------| | assessment | AssessmentType | required | 测评类型数据 | **Emits**: | 事件 | 参数 | 说明 | |------|------|------| | click | AssessmentType | 点击事件 | **使用示例**: ```vue ``` --- ### 3.4 PlannerCard 规划师卡片 **文件**:`components/business/PlannerCard.vue` **功能**:规划师列表项组件 **Props**: | 属性 | 类型 | 默认值 | 说明 | |------|------|--------|------| | planner | PlannerInfo | required | 规划师数据 | | selected | boolean | false | 是否选中 | **Emits**: | 事件 | 参数 | 说明 | |------|------|------| | select | PlannerInfo | 选择事件 | **使用示例**: ```vue ``` --- ### 3.5 QuestionItem 题目组件 **文件**:`components/business/QuestionItem.vue` **功能**:测评答题页的题目组件 **Props**: | 属性 | 类型 | 默认值 | 说明 | |------|------|--------|------| | question | Question | required | 题目数据 | | answer | number | null | 当前答案 | | index | number | required | 题目序号 | **Emits**: | 事件 | 参数 | 说明 | |------|------|------| | change | { questionId, value } | 答案变化 | **使用示例**: ```vue ``` --- ### 3.6 InviteRecord 邀请记录项 **文件**:`components/business/InviteRecord.vue` **功能**:邀请记录列表项组件 **Props**: | 属性 | 类型 | 默认值 | 说明 | |------|------|--------|------| | record | InviteRecord | required | 邀请记录数据 | **使用示例**: ```vue ``` --- ### 3.7 WithdrawRecord 提现记录项 **文件**:`components/business/WithdrawRecord.vue` **功能**:提现记录列表项组件 **Props**: | 属性 | 类型 | 默认值 | 说明 | |------|------|--------|------| | record | WithdrawRecord | required | 提现记录数据 | **使用示例**: ```vue ``` --- ## 四、布局组件 ### 4.1 PageContainer 页面容器 **文件**:`components/layout/PageContainer.vue` **功能**:统一的页面容器,处理安全区域 **Props**: | 属性 | 类型 | 默认值 | 说明 | |------|------|--------|------| | safeBottom | boolean | true | 是否适配底部安全区域 | | bgColor | string | '#f5f5f5' | 背景色 | **使用示例**: ```vue ``` --- ### 4.2 ListContainer 列表容器 **文件**:`components/layout/ListContainer.vue` **功能**:带下拉刷新和上拉加载的列表容器 **Props**: | 属性 | 类型 | 默认值 | 说明 | |------|------|--------|------| | loading | boolean | false | 是否加载中 | | finished | boolean | false | 是否加载完成 | | emptyText | string | '暂无数据' | 空状态文字 | **Emits**: | 事件 | 参数 | 说明 | |------|------|------| | refresh | - | 下拉刷新 | | loadMore | - | 上拉加载 | **使用示例**: ```vue ``` --- ## 五、组件开发规范 ### 5.1 组件命名 - 通用组件以 `App` 开头:`AppButton`, `AppModal` - 业务组件使用业务名词:`UserAvatar`, `OrderCard` - 布局组件以 `Container` 结尾:`PageContainer`, `ListContainer` ### 5.2 Props 规范 - 使用 TypeScript 接口定义 - 必填属性标注 `required` - 提供合理的默认值 - 添加 JSDoc 注释 ### 5.3 样式规范 - 使用 BEM 命名 - 使用 `scoped` 限制作用域 - 引用全局变量 - 避免使用 `!important` ### 5.4 事件规范 - 使用 `emit` 定义类型 - 事件名使用 kebab-case - 提供完整的事件参数类型