import{_ as i,o as a,c as t,a2 as h}from"./chunks/framework.BbmSSMjL.js";const F=JSON.parse('{"title":"G. 前端组件速查","description":"","frontmatter":{},"headers":[],"relativePath":"zh/appendix/components.md","filePath":"zh/appendix/components.md"}'),n={name:"zh/appendix/components.md"};function l(e,s,k,p,d,r){return a(),t("div",null,[...s[0]||(s[0]=[h(`

G. 前端组件速查 ​

概述

公共组件定义在 ui/src/components/ 目录下。其中 PageWrapper、PageFooter、BasicTable、BasicForm、NumberInput、PriceInput、pagination、icon 已在 ui/src/plugins/customComponents.ts 中全局注册,模板里可直接使用;其余组件按需 import。

全局注册组件 ​

以下组件由 setupCustomComponents(app) 注册,无需 import:

组件来源说明
PageWrapper / PageFootercomponents/Page/页面容器 / 页脚
BasicTablecomponents/Table/数据表格(通过 props 传数据)
BasicFormcomponents/Form/动态表单(配合 useForm 的 register)
NumberInputcomponents/numberInput/数字输入
PriceInputcomponents/numberInput/价格输入
paginationcomponents/pagination/分页
iconcomponents/icon/图标

数据展示 ​

组件路径说明引入方式
BasicTablecomponents/Table/数据表格(含 TableAction 行操作)全局注册
PageWrappercomponents/Page/页面容器全局注册
CountTocomponents/CountTo/数字动画按需 import
Qrcodecomponents/Qrcode/二维码按需 import
TableSelectcomponents/TableSelect/表格选择器按需 import

数据录入 ​

组件路径说明引入方式
BasicFormcomponents/Form/动态表单(useForm hook)全局注册
BasicSelectcomponents/Select/选择器按需 import
BasicUploadcomponents/Upload/文件上传按需 import
UploadImg / UploadImagescomponents/Upload/Image.vue、Images.vue图片/多图上传(生成页面 edit.vue 使用)按需 import
Editorcomponents/Editor/富文本编辑器(TinyMCE)按需 import
Passwordcomponents/Password/密码强度按需 import
ChinaAreacomponents/ChinaArea/省市区联动按需 import
Regioncomponents/Region/行政区划按需 import
Croppercomponents/Cropper/头像裁剪按需 import
NumberInput / PriceInputcomponents/numberInput/、priceInput/数字 / 价格输入全局注册

Excel 与导入导出 ​

组件路径说明
importFilecomponents/importFile/index.vue导入对话框(api + templateCode,下载模板 + 上传解析一体化)
ImpExcelcomponents/Excel/Excel 导入解析组件
jsonToSheetXlsx / aoaToSheetXlsxcomponents/Excel/src/Export2Excel.tsExcel 导出(前端生成文件)
导出接口GET /api/{module}/export后端生成文件(ExcelService),生成页面统一走此接口

其他 ​

组件路径说明
Authoritycomponents/Authority/权限组件(根据权限显示/隐藏)
CheckTokencomponents/CheckToken/Token 校验组件
Lockscreencomponents/Lockscreen/锁屏组件
Websocketcomponents/Websocket/WebSocket 组件
Rendercomponents/Render/函数式渲染组件

使用示例 ​

BasicForm(配合 useForm,摘自 views/tool/example/index.vue) ​

vue
<template>
  <BasicForm @register="register" @submit="handleSubmit" @reset="handleReset" />
</template>

<script setup>
import { useForm } from '@/components/Form/index';
import { schemas } from './querySchemas';

const [register, { getFieldsValue }] = useForm({
  schemas,
  labelWidth: 80,
});
</script>

BasicTable(props 传数据,摘自 views/tool/example/index.vue) ​

vue
<template>
  <BasicTable
    :columns="columns"
    :request="loadDataTable"
    :row-key="(row) => row.id"
    ref="tableRef"
    :actionColumn="actionColumn"
    @update:checked-row-keys="onCheckedRow"
  >
    <template #tableTitle>
      <n-button type="primary" @click="handleAdd" v-perm="['sys:example:add']">
        添加案例演示
      </n-button>
    </template>
  </BasicTable>
</template>

<script setup>
import { TableAction } from '@/components/Table';
import { getExamplePage } from '@/api/tool/example';
import { columns } from './columns';

// 分页请求函数(返回 {records, total, current, size, pages})
const loadDataTable = (params) => getExamplePage(params);
</script>

没有 useTable hook

本项目 BasicTable 通过 :request 传入分页请求函数,行操作用 TableAction 组件,无需 useTable 注册模式。

行操作列(TableAction) ​

typescript
import { h } from 'vue';
import { TableAction } from '@/components/Table';

const actionColumn = {
  width: 200,
  title: '操作',
  key: 'action',
  fixed: 'right',
  render(record) {
    return h(TableAction as any, {
      actions: [
        { label: '编辑', type: 'info', onClick: () => handleEdit(record), auth: ['sys:example:update'] },
        { label: '删除', type: 'error', onClick: () => handleDelete(record), auth: ['sys:example:delete'] },
      ],
    });
  },
};

导入对话框(importFile) ​

vue
<fileUpload
  v-if="importVisible"
  v-model:visible="importVisible"
  api="/api/example/import"
  templateCode="example_import"
  @success="fetchData"
/>

(templateCode 对应文件模板表 file_template 中的模板编码,用于提供 Excel 下载模板。)

`,24)])])}const c=i(n,[["render",l]]);export{F as __pageData,c as default};