Components 组件库
共享组件库存放于根目录 components/,通过 @Pcomponents 别名引用。base/ 为基础组件,more/ 为扩展组件,另有 page/error.vue 作为 403 / 404 错误页(由主应用路由复用)。
组件为命名导出,使用前需从
@Pcomponents引入(项目未做全量全局注册)。
Base 基础组件
More 扩展组件
p-title 标题组件
功能说明
带切换功能的标题栏组件,支持右侧区域通过插槽自定义。
Props
| 参数 | 说明 | 类型 | 默认值 | 示例 |
|---|---|---|---|---|
| list | 标题列表 | Array | [] | ['订单管理'] |
| modelValue | 当前激活 tab 下标(受控用法可配合 v-model) | Number | 0 | 0 |
Events
| 事件名 | 说明 | 回调参数 |
|---|---|---|
| change | 标题切换事件 | { value: 当前值, index: 当前索引 } |
| update:modelValue | 受控切换 | Number |
Slots
| 名称 | 说明 |
|---|---|
| default | 右侧区域插槽 |
使用示例
javascript
import { pTitle } from "@Pcomponents";vue
<p-title :list="['订单', '物流']" @change="handleTitleChange" />p-icon 图标组件
功能说明
图标组件,支持 Element Plus 图标(el-icon-* 前缀)和 iconfont 图标(p-icon-* 前缀),按前缀自动识别类型。
Props
| 参数 | 说明 | 类型 | 默认值 | 示例 |
|---|---|---|---|---|
| name | 图标名称 | String | "" | 'el-icon-edit' |
| size | 图标大小 | String/Number | 16 | 24 |
| color | 图标颜色 | String | "" | '#ff0000' |
使用示例
javascript
import { pIcon } from "@Pcomponents";vue
<p-icon name="el-icon-edit" size="24" color="#ff0000" />p-item 基础项组件
功能说明
基础表单项布局组件,提供标签和内容的统一布局,支持插槽自定义内容。标签超过 8 个字符自动以 tooltip 完整显示。
Props
| 参数 | 说明 | 类型 | 默认值 | 示例 |
|---|---|---|---|---|
| label | 标签文本 | String | "" | "用户名" |
| showText | 是否为文本展示模式 | Boolean | false | true |
| text | 文本内容 | String/Number | "" | "张三" |
| isRequired | 是否必填(显示红色星号) | Boolean | false | true |
| isTextWrap | 文本是否换行 | Boolean | false | true |
| labelWidth | 标签宽度 | String | "100px" | "120px" |
Slots
| 名称 | 说明 |
|---|---|
| default | 主内容区域 |
| right | 右侧区域 |
| bottom | 底部提示区域 |
使用示例
javascript
import { pItem } from "@Pcomponents";vue
<!-- 表单输入模式 -->
<p-item label="用户名" :isRequired="true">
<el-input v-model="form.name" placeholder="请输入用户名" />
</p-item>
<!-- 文本展示模式 -->
<p-item label="用户名" :showText="true" text="张三" />
<!-- 带右侧插槽 -->
<p-item label="金额" :labelWidth="'120px'">
<el-input v-model="form.amount" />
<template #right>元</template>
</p-item>
<!-- 带底部提示 -->
<p-item label="密码">
<el-input type="password" v-model="form.password" />
<template #bottom>
<span style="color: #999; font-size: 12px">密码长度为6-20位</span>
</template>
</p-item>p-search 搜索组件
功能说明
搜索表单组件,支持设置标题与重置按钮,通过插槽自定义搜索项。
Props
| 参数 | 说明 | 类型 | 默认值 | 示例 |
|---|---|---|---|---|
| title | 搜索区标题 | String | "查询条件" | "筛选" |
| showReset | 是否显示重置按钮 | Boolean | true | true |
Events
| 事件名 | 说明 | 回调参数 |
|---|---|---|
| search | 搜索按钮点击事件 | - |
| reset | 重置按钮点击事件 | - |
Slots
| 名称 | 说明 |
|---|---|
| default | 自定义搜索项插槽 |
使用示例
javascript
import { pSearch } from "@Pcomponents";vue
<p-search title="查询条件" @search="toSearch" @reset="toReset">
<p-item class="item" label="姓名">
<el-input v-model="searchValue.name" placeholder="请输入姓名" />
</p-item>
</p-search>p-table 表格组件
功能说明
增强型表格组件,支持分页、多选、序号列、行展开(树形)等功能。
Props
| 参数 | 说明 | 类型 | 默认值 | 示例 |
|---|---|---|---|---|
| data | 表格数据 | Array | [] | [] |
| rowKey | 行唯一键(如 id) | String/Function | undefined | 'id' |
| pagination | 分页配置 | Object | {} | { total }:... |
| showSelection | 显示多选框 | Boolean | false | false |
| showIndex | 显示序号列 | Boolean | true | true |
| maxHeight | 表格最大高度 | String/Number | "800" | 800 |
| loading | 表格加载态 | Boolean | false | false |
| pageSizes | 分页条数选项 | Array | [10, 20, 50, 100] | [10, 30, 50] |
rowKey设置后,若数据含children,el-table 会自动开启树形表格。
pagination 分页配置
| 参数 | 说明 | 类型 | 默认值 | 示例 |
|---|---|---|---|---|
| pageNumber | 页码 | Number | 1 | 1 |
| pageSize | 每页条数 | Number | 10 | 10 |
| total | 总条数 | Number | 0 | 0 |
Events
| 事件名 | 说明 | 回调参数 |
|---|---|---|
| selectionChange | 选择项变化事件 | selectionList: 选中行数据 |
| paginationChange | 分页变化事件 | { pageNumber, pageSize } |
Slots
| 名称 | 说明 |
|---|---|
| topLeft | 表格左上角区域 |
| topRight | 表格右上角区域 |
| column | 表格列(操作列) |
| botLeft | 表格左下角区域 |
使用示例
javascript
import { pTable } from "@Pcomponents";vue
<p-table
:data="data"
:pagination="pagination"
@paginationChange="toPageChange"
>
<template #column>
<el-table-column prop="name" label="姓名" />
<el-table-column prop="age" label="年龄">
<template #default="{ row }">
<span v-show="row.age < 25">{{ row.age }}</span>
<span v-show="row.age >= 25">{{ row.age }}(老年人)</span>
</template>
</el-table-column>
<el-table-column prop="operation" label="操作" fixed="right" width="200">
<template #default="{ row }">
<el-button type="primary" size="small" link @click="handleView(row)">
查看
</el-button>
<el-button type="primary" size="small" link @click="handleEdit(row)">
编辑
</el-button>
</template>
</el-table-column>
</template>
<template #topLeft>
<el-button type="primary" @click="handleAdd()"> 新增 </el-button>
</template>
</p-table>p-dialog 对话框组件
功能说明
支持两种形态的对话框组件(box 弹窗 / drawer 抽屉),内置全屏切换功能。
Props
| 参数 | 说明 | 类型 | 默认值 | 示例 |
|---|---|---|---|---|
| type | 类型:box(弹窗)/drawer(抽屉) | String | "box" | "drawer" |
| modelValue | 显示/隐藏状态 | Boolean | false | true |
| title | 对话框标题 | String | "" | "用户信息" |
| width | 宽度(box 默认带全屏切换,drawer 侧边抽屉) | String | "" | "600px" |
Events
| 事件名 | 说明 | 回调参数 |
|---|---|---|
| update:modelValue | 显示状态变化 | Boolean |
Slots
| 名称 | 说明 |
|---|---|
| default | 对话框主体内容 |
| footer | 页脚区域 |
使用示例
javascript
import { pDialog } from "@Pcomponents";vue
<p-dialog
title="用户列表详情页"
type="drawer"
width="1000px"
v-model="isDetail"
>
<Detail ref="detailRef" :type="detailType" :id="detailId" />
<template #footer>
<el-button type="primary" v-if="detailType !== 'view'" @click="handleSave()">
保存
</el-button>
<el-button @click="handleBack()"> 返回 </el-button>
</template>
</p-dialog>p-collapse 折叠组件
功能说明
可折叠内容区域组件。
Props
| 参数 | 说明 | 类型 | 默认值 | 示例 |
|---|---|---|---|---|
| title | 标题内容 | String | "" | "订单明细" |
| isCollapse | 初始是否展开 | Boolean | false | false |
| isControl | 是否允许折叠 | Boolean | true | true |
| showDownLine | 是否显示底部边框 | Boolean | true | true |
Slots
| 名称 | 说明 |
|---|---|
| default | 折叠面板内容区域 |
使用示例
javascript
import { pCollapse } from "@Pcomponents";vue
<p-collapse title="详细信息">
<p>这里是折叠内容</p>
</p-collapse>p-iconSelect 图标选择组件
功能说明
图标选择组件,内置 Element Plus 图标与 Iconfont 图标两个 Tab,支持关键词搜索。
Props
| 参数 | 说明 | 类型 | 默认值 | 示例 |
|---|---|---|---|---|
| title | 弹窗标题 | String | "选择图标" | "选择图标" |
| modelValue | 当前选中的图标名 | String | "" | "el-icon-edit" |
Events
| 事件名 | 说明 | 回调参数 |
|---|---|---|
| update:modelValue | 选中图标变化 | String |
使用示例
javascript
import { pIconSelect } from "@Pcomponents";vue
<p-iconSelect v-model="form.icon" title="选择图标" />p-verificationCode 图形验证码组件
功能说明
canvas 图形验证码组件,可配置字符集、颜色区间与画布尺寸。
Props
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| identifyCodes | 验证码字符集 | String | "1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ" |
| fontSizeMin | 字号最小值 | Number | 24 |
| fontSizeMax | 字号最大值 | Number | 28 |
| backgroundColorMin | 背景色分量下限 | Number | 200 |
| backgroundColorMax | 背景色分量上限 | Number | 220 |
| contentWidth | 画布宽度 | Number | 100 |
| contentHeight | 画布高度 | Number | 30 |
Events
| 事件名 | 说明 | 回调参数 |
|---|---|---|
| changeCode | 验证码变化 | String |
使用示例
javascript
import { pVerificationCode } from "@Pcomponents";vue
<p-verificationCode @changeCode="handleChangeCode" />