mirror of
				https://github.com/unanmed/HumanBreak.git
				synced 2025-10-31 20:32:58 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			227 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			227 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| # ListPage 列表页面组件 API 文档
 | |
| 
 | |
| 本文档由 `DeepSeek` 生成并微调。
 | |
| 
 | |
| ## 组件描述
 | |
| 
 | |
| 列表页面组件结合了列表选择和内容展示功能,左侧显示可选项列表,右侧显示选中项的详细内容。适用于说明文档、设置界面、内容导航等场景。
 | |
| 
 | |
| ---
 | |
| 
 | |
| ## Props 属性说明
 | |
| 
 | |
| | 属性名             | 类型             | 默认值  | 描述                                           |
 | |
| | ------------------ | ---------------- | ------- | ---------------------------------------------- |
 | |
| | `loc`              | `ElementLocator` | 必填    | 组件整体位置和尺寸                             |
 | |
| | `basis`            | `number`         | -       | 列表区域所占比例                               |
 | |
| | `right`            | `boolean`        | `false` | 列表是否排列在右侧                             |
 | |
| | `close`            | `boolean`        | `false` | 是否显示关闭按钮                               |
 | |
| | `closeLoc`         | `ElementLocator` | -       | 关闭按钮的位置(相对于组件定位)               |
 | |
| | 继承自 `ListProps` | -                | -       | [查看完整属性](./组件%20List#Props%20属性说明) |
 | |
| 
 | |
| ---
 | |
| 
 | |
| ## Events 事件说明
 | |
| 
 | |
| | 事件名            | 参数类型          | 触发时机                             |
 | |
| | ----------------- | ----------------- | ------------------------------------ |
 | |
| | `close`           | -                 | 当用户点击关闭按钮时触发             |
 | |
| | `update`          | `(key: string)`   | 继承自 List - 当用户选中某一项时触发 |
 | |
| | `update:selected` | `(value: string)` | 继承自 List - v-model 双向绑定事件   |
 | |
| 
 | |
| ---
 | |
| 
 | |
| ## Slots 插槽说明
 | |
| 
 | |
| ### `default`
 | |
| 
 | |
| 接收当前选中的 key 并返回对应的内容
 | |
| 
 | |
| **参数**
 | |
| 
 | |
| - `key: string` 当前选中的项 ID
 | |
| 
 | |
| ### 具名插槽
 | |
| 
 | |
| 以列表项 ID 为名称的具名插槽,用于定义每个选项对应的详细内容
 | |
| 
 | |
| ---
 | |
| 
 | |
| ## 使用示例
 | |
| 
 | |
| ### 基础用法 - 说明文档界面
 | |
| 
 | |
| ```tsx
 | |
| import { defineComponent, ref } from 'vue';
 | |
| import { ListPage } from '@user/client-modules';
 | |
| 
 | |
| export const HelpCom = defineComponent(() => {
 | |
|     const selected = ref('intro');
 | |
| 
 | |
|     const helpTopics = [
 | |
|         ['intro', '功能介绍'],
 | |
|         ['usage', '使用方法'],
 | |
|         ['settings', '设置说明'],
 | |
|         ['faq', '常见问题']
 | |
|     ];
 | |
| 
 | |
|     return () => (
 | |
|         <ListPage
 | |
|             list={helpTopics}
 | |
|             v-model:selected={selected.value}
 | |
|             loc={[208, 208, 400, 300, 0.5, 0.5]}
 | |
|             basis={0.3}
 | |
|         >
 | |
|             {{
 | |
|                 // 使用具名插槽定义每个选项的内容
 | |
|                 intro: () => (
 | |
|                     <container>
 | |
|                         <text text="这里是最新版本的功能介绍..." loc={[0, 0]} />
 | |
|                         <text text="欢迎使用本系统" loc={[0, 40]} />
 | |
|                     </container>
 | |
|                 ),
 | |
|                 usage: () => (
 | |
|                     <container>
 | |
|                         <text text="使用方法指南" loc={[0, 0]} />
 | |
|                         <text text="1. 点击左侧菜单选择功能" loc={[0, 40]} />
 | |
|                         <text text="2. 在右侧查看详细说明" loc={[0, 80]} />
 | |
|                     </container>
 | |
|                 ),
 | |
|                 settings: () => <text text="设置说明内容..." loc={[0, 0]} />,
 | |
|                 faq: () => <text text="常见问题解答..." loc={[0, 0]} />
 | |
|             }}
 | |
|         </ListPage>
 | |
|     );
 | |
| });
 | |
| ```
 | |
| 
 | |
| ### 使用默认插槽
 | |
| 
 | |
| ```tsx
 | |
| import { defineComponent, ref } from 'vue';
 | |
| import { ListPage } from '@user/client-modules';
 | |
| 
 | |
| export const SimpleCom = defineComponent(() => {
 | |
|     const selected = ref('item1');
 | |
| 
 | |
|     const items = [
 | |
|         ['item1', '选项一'],
 | |
|         ['item2', '选项二'],
 | |
|         ['item3', '选项三']
 | |
|     ];
 | |
| 
 | |
|     return () => (
 | |
|         <ListPage
 | |
|             list={items}
 | |
|             v-model:selected={selected.value}
 | |
|             loc={[208, 208, 350, 250, 0.5, 0.5]}
 | |
|         >
 | |
|             {key => (
 | |
|                 <container>
 | |
|                     <text
 | |
|                         text={`当前选中: ${items.find(item => item[0] === key)?.[1]}`}
 | |
|                         loc={[0, 0]}
 | |
|                     />
 | |
|                     <text text={`ID: ${key}`} loc={[0, 30]} />
 | |
|                 </container>
 | |
|             )}
 | |
|         </ListPage>
 | |
|     );
 | |
| });
 | |
| ```
 | |
| 
 | |
| ### 带关闭按钮的弹窗
 | |
| 
 | |
| ```tsx
 | |
| import { defineComponent, ref } from 'vue';
 | |
| import { ListPage } from '@user/client-modules';
 | |
| 
 | |
| export const ModalCom = defineComponent(props => {
 | |
|     const selected = ref('weapon');
 | |
| 
 | |
|     const gameItems = [
 | |
|         ['weapon', '武器'],
 | |
|         ['armor', '防具'],
 | |
|         ['potion', '药水'],
 | |
|         ['material', '材料']
 | |
|     ];
 | |
| 
 | |
|     const handleClose = () => {
 | |
|         props.controller.close(props.instance);
 | |
|         console.log('关闭物品栏');
 | |
|     };
 | |
| 
 | |
|     return () => (
 | |
|         <ListPage
 | |
|             list={gameItems}
 | |
|             v-model:selected={selected.value}
 | |
|             loc={[208, 208, 400, 320, 0.5, 0.5]}
 | |
|             close
 | |
|             // 设定关闭按钮的位置
 | |
|             closeLoc={[0, 300]}
 | |
|             basis={0.35}
 | |
|             onClose={handleClose}
 | |
|         >
 | |
|             {{
 | |
|                 weapon: () => (
 | |
|                     <container>
 | |
|                         <text text="武器列表" loc={[0, 0]} />
 | |
|                         <text text="• 长剑" loc={[0, 30]} />
 | |
|                         <text text="• 弓箭" loc={[0, 60]} />
 | |
|                         <text text="• 法杖" loc={[0, 90]} />
 | |
|                     </container>
 | |
|                 ),
 | |
|                 armor: () => <text text="防具装备信息..." loc={[0, 0]} />,
 | |
|                 potion: () => <text text="药水效果说明..." loc={[0, 0]} />,
 | |
|                 material: () => <text text="合成材料列表..." loc={[0, 0]} />
 | |
|             }}
 | |
|         </ListPage>
 | |
|     );
 | |
| });
 | |
| ```
 | |
| 
 | |
| ### 列表在右侧的布局
 | |
| 
 | |
| ```tsx
 | |
| import { defineComponent, ref } from 'vue';
 | |
| import { ListPage } from '@user/client-modules';
 | |
| 
 | |
| export const RightListCom = defineComponent(() => {
 | |
|     const selected = ref('profile');
 | |
| 
 | |
|     const menuItems = [
 | |
|         ['profile', '个人资料'],
 | |
|         ['security', '安全设置'],
 | |
|         ['privacy', '隐私设置'],
 | |
|         ['notifications', '通知设置']
 | |
|     ];
 | |
| 
 | |
|     return () => (
 | |
|         <ListPage
 | |
|             list={menuItems}
 | |
|             v-model:selected={selected.value}
 | |
|             loc={[240, 240, 500, 280, 0.5, 0.5]}
 | |
|             right
 | |
|             basis={0.4}
 | |
|         >
 | |
|             {key => (
 | |
|                 <container>
 | |
|                     <text text="显示一些内容..." loc={[0, 60]} />
 | |
|                     <text text="这里是详细的设置内容..." loc={[0, 0]} />
 | |
|                 </container>
 | |
|             )}
 | |
|         </ListPage>
 | |
|     );
 | |
| });
 | |
| ```
 | |
| 
 | |
| ---
 | |
| 
 | |
| ## 注意事项
 | |
| 
 | |
| 1. **插槽使用**: 可以使用具名插槽(以列表项 ID 为名)或默认插槽来定义内容
 | |
| 2. **布局控制**: 通过 `basis` 控制列表区域比例,`right` 控制列表位置
 | |
| 3. **关闭功能**: 设置 `close` 为 `true` 显示关闭按钮,通过 `closeLoc` 自定义位置
 | |
| 4. **事件处理**: `close` 事件需要手动处理界面关闭逻辑
 | |
| 5. **内容更新**: 切换列表选项时,右侧内容会自动更新为对应插槽的内容
 |