Skip to content

配置

本文档详细介绍 vue-admin-kit 的各项配置,包含每个参数的完整示例。

搜索配置 (searchConfig)

搜索配置用于定义搜索表单的字段,支持多种组件类型。

完整参数示例

typescript
import { defineSearchConfig } from "vue-admin-kit";

const searchConfig = defineSearchConfig([
  // ========== 输入框 ==========
  {
    type: "input",
    prop: "customerName",        // 字段名(必填)
    label: "客户名称",            // 标签文本
    span: 8,                     // 栅格占比(24栅格系统,默认8)
    placeholder: "请输入客户名称", // 占位文本
    defaultValue: "",            // 默认值
    disabled: false,             // 是否禁用
    labelWidth: "100px",         // 标签宽度
    show: true,                  // 是否显示(支持函数)
  },

  // ========== 下拉选择(字典) ==========
  {
    type: "select",
    prop: "status",
    label: "状态",
    dictType: "sys_status",      // 字典类型(从 DictManager 获取)
    filterable: true,            // 是否可搜索
    multiple: false,             // 是否多选
    placeholder: "请选择状态",
  },

  // ========== 下拉选择(静态选项) ==========
  {
    type: "select",
    prop: "category",
    label: "分类",
    options: [                   // 静态选项列表
      { label: "全部", value: "" },
      { label: "分类A", value: "a" },
      { label: "分类B", value: "b" },
    ],
    filterable: true,
  },

// ========== 下拉选择(远程搜索) ========== { type: "select", prop: "userId", label: "负责人", dictType: "user_list", // 自定义适配器 filterable: true, remote: true, // 开启远程搜索 remoteParam: "userName", // 搜索关键词参数名 },

// ========== 日期选择 ========== { type: "date", prop: "createDate", label: "创建日期", dateType: "date", // 日期类型:date/datetime/daterange/datetimerange/month/year/week },

// ========== 日期范围 ========== { type: "date", prop: "dateRange", label: "日期范围", dateType: "daterange", span: 12, // 日期范围通常需要更宽 },

// ========== 时间选择 ========== { type: "time", prop: "workTime", label: "工作时间", timeFormat: "HH:mm", // 时间格式:HH:mm:ss/HH:mm/mm:ss },

// ========== 数字输入 ========== { type: "number", prop: "minPrice", label: "最低价格", min: 0, // 最小值 max: 999999, // 最大值 precision: 2, // 小数位数 },

// ========== 条件显示 ========== { type: "input", prop: "remark", label: "备注", // 函数形式:根据其他参数动态显示 show: (params) => params.status === "1", }, ]);

表单配置 (formConfig)

表单配置用于定义新增/编辑弹窗的表单字段。

完整参数示例

typescript
import { defineFormConfig } from "vue-admin-kit";

const formConfig = defineFormConfig([
  // ========== 输入框 ==========
  {
    type: "input",
    prop: "name",                // 字段名(必填)
    label: "名称",               // 标签文本
    span: 12,                    // 栅格占比(24栅格,默认12)
    required: true,              // 是否必填
    placeholder: "请输入名称",
    defaultValue: "",            // 新增时的默认值
    disabled: false,             // 是否禁用
    readonly: false,             // 是否只读
    editDisabled: false,         // 编辑时禁用(新增可用)
    rules: [                     // 自定义校验规则
      { min: 2, max: 50, message: "长度在 2 到 50 个字符", trigger: "blur" },
      { pattern: /^[a-zA-Z0-9]+$/, message: "只能包含字母和数字", trigger: "blur" },
    ],
    suffix: "",                  // 后缀内容
    suffixType: "text",          // 后缀类型:text/icon/component
  },

  // ========== 动态必填 ==========
  {
    type: "input",
    prop: "reason",
    label: "原因",
    // 函数形式:根据表单数据动态判断是否必填
    required: ({ formData }) => formData.status === "0",
  },

  // ========== 多行文本 ==========
  {
    type: "textarea",
    prop: "description",
    label: "描述",
    span: 24,                    // 占满一行
    rows: 4,                     // 显示行数
    placeholder: "请输入详细描述",
  },

// ========== 数字输入 ========== { type: "number", prop: "price", label: "价格", span: 12, required: true, min: 0, // 最小值 max: 999999.99, // 最大值 precision: 2, // 小数位数 step: 0.01, // 步长 stepStrictly: false, // 是否只能输入步长的倍数 suffix: "元", // 后缀文本 width: "200px", // 组件宽度 defaultValue: 0, },

// ========== 下拉选择(字典) ========== { type: "select", prop: "status", label: "状态", dictType: "sys_status", // 字典类型 required: true, filterable: true, // 可搜索 multiple: false, // 是否多选 defaultValue: "1", // 默认值 },

// ========== 下拉选择(静态选项) ========== { type: "select", prop: "type", label: "类型", options: [ { label: "类型 A", value: "a" }, { label: "类型 B", value: "b" }, { label: "类型 C", value: "c" }, ], multiple: true, // 多选 filterable: true, },

// ========== 下拉选择(带变化回调) ========== { type: "select", prop: "provinceId", label: "省份", dictType: "province_list", // 值变化时的回调 change: ({ pageData, formData, value, dictItem }) => { // 清空城市选择 formData.cityId = ""; // 可以访问选中项的完整数据 console.log("选中省份:", dictItem.label, dictItem.raw); }, },

// ========== 单选框 ========== { type: "radio", prop: "sex", label: "性别", dictType: "sys_user_sex", // 使用字典 required: true, defaultValue: "1", },

// ========== 单选框(静态选项) ========== { type: "radio", prop: "isVip", label: "是否 VIP", options: [ { label: "是", value: "1" }, { label: "否", value: "0" }, ], defaultValue: "0", },

// ========== 日期选择 ========== { type: "date", prop: "birthday", label: "生日", dateType: "date", // date/datetime/daterange/datetimerange/month/year/week },

// ========== 日期时间选择 ========== { type: "date", prop: "appointmentTime", label: "预约时间", dateType: "datetime", required: true, },

// ========== 时间选择 ========== { type: "time", prop: "workStartTime", label: "上班时间", timeFormat: "HH:mm", // HH:mm:ss/HH:mm/mm:ss },

// ========== 分割线 ========== { type: "line", label: "附件信息", // 分割线标题 span: 24, },

// ========== 分割线(带按钮) ========== { type: "line", label: "联系人信息", btnTitle: "添加联系人", // 按钮文本 btnClick: ({ formData }) => { // 点击按钮的回调 formData.contacts = formData.contacts || []; formData.contacts.push({ name: "", phone: "" }); }, },

// ========== 文件上传 ========== { type: "upload", prop: "files", label: "附件", span: 24, uploadConfigList: [ { prop: "contractFile", // 字段名 label: "合同文件", // 标签 bizType: "contract", // 业务类型 limit: 5, // 最大文件数 accept: ".pdf,.doc,.docx", // 允许的文件类型 multiple: true, // 是否支持多选 drag: false, // 是否启用拖拽上传 required: true, // 是否必填 disabled: false, // 是否禁用 compress: false, // 是否压缩图片 }, ], },

// ========== 卡片式上传(图片) ========== { type: "uploadCard", prop: "images", label: "图片", span: 24, uploadConfigList: [ { prop: "coverImage", label: "封面图", bizType: "cover", limit: 1, accept: "image/*", required: true, }, { prop: "gallery", label: "图片集", bizType: "gallery", limit: 9, accept: ".jpg,.jpeg,.png,.gif", compress: true, // 压缩图片 }, ], },

// ========== 富文本编辑器 ========== { type: "editor", prop: "content", label: "详细内容", span: 24, required: true, },

// ========== 输入组 ========== { type: "inputGroup", prop: "address", label: "地址", span: 24, children: [ { type: "input", prop: "province", label: "省" }, { type: "input", prop: "city", label: "市" }, { type: "input", prop: "district", label: "区" }, { type: "input", prop: "detail", label: "详细地址" }, ], },

// ========== 条件显示 ========== { type: "input", prop: "rejectReason", label: "拒绝原因", span: 24, required: ({ formData }) => formData.auditStatus === "2", // 仅当审核状态为"拒绝"时显示 show: ({ formData }) => formData.auditStatus === "2", }, ]);

列配置 (columnsConfig)

列配置用于定义表格的列。

完整参数示例

typescript
import { defineColumnsConfig } from "vue-admin-kit";

const columnsConfig = defineColumnsConfig([
  // ========== 复选框列 ==========
  {
    type: "checkbox",            // 列类型
    width: 50,                   // 列宽度(固定)
    fixed: "left",               // 固定位置:left/right
  },

  // ========== 序号列 ==========
  {
    type: "seq",
    title: "序号",
    width: 60,
    fixed: "left",
  },

  // ========== 普通列 ==========
  {
    field: "customerName",       // 字段名
    title: "客户名称",           // 列标题
    minWidth: 150,               // 最小宽度(自适应)
    showOverflow: "tooltip",     // 溢出处理:true/false/'tooltip'
    align: "left",               // 对齐方式:left/center/right
    sortable: false,             // 是否可排序
  },

  // ========== 固定宽度列 ==========
  {
    field: "orderNo",
    title: "订单号",
    width: 180,                  // 固定宽度
    fixed: "left",               // 固定在左侧
  },

  // ========== 字典列(文本显示) ==========
  {
    field: "status",
    title: "状态",
    width: 100,
    dictType: "sys_status",      // 字典类型
    displayType: "text",         // 显示类型:text(默认)
  },

  // ========== 字典列(标签显示) ==========
  {
    field: "auditStatus",
    title: "审核状态",
    width: 100,
    dictType: "audit_status",
    displayType: "tag",          // 显示为带颜色的标签
  },

// ========== 自定义格式化 ========== { field: "price", title: "价格", width: 120, align: "right", formatter: ({ cellValue }) => { if (cellValue === null || cellValue === undefined) return "-"; return ¥${Number(cellValue).toFixed(2)}; }, },

// ========== 日期格式化 ========== { field: "createTime", title: "创建时间", width: 160, sortable: true, // 可排序 formatter: ({ cellValue }) => { if (!cellValue) return "-"; return new Date(cellValue).toLocaleString("zh-CN"); }, },

// ========== 条件显示列 ========== { field: "adminRemark", title: "管理员备注", minWidth: 200, // 仅管理员可见 show: ({ pageData }) => pageData.params?.isAdmin === true, },

// ========== 标签列 ========== { field: "customerName", title: "客户名称", minWidth: 200, tags: { field: "customerTags", // 标签数据来源字段 typeMap: { // 按文本映射标签类型 "VIP": "success", "高风险": "danger", "新客户": "info", "重点客户": "warning", }, max: 3, // 最多显示 3 个标签 size: "small", // 标签尺寸 effect: "light", // 标签主题:dark/light/plain }, },

// ========== 标签列(静态数据) ========== { field: "vipLevel", title: "VIP 等级", width: 120, tags: { data: [ // 静态标签数据 { label: "VIP", type: "success" }, ], }, },

// ========== 标签列(完整属性映射) ========== { field: "riskLevel", title: "风险等级", width: 120, tags: { field: "riskTags", propsMap: { // 按文本映射完整 Tag 属性 "高风险": { type: "danger", effect: "dark" }, "中风险": { type: "warning", effect: "light" }, "低风险": { type: "success", effect: "plain" }, }, }, }, ]);

API 配置

API 配置定义 CRUD 操作的接口。

完整参数示例

typescript
import { defineApiConfig } from "vue-admin-kit";

const api = defineApiConfig({
  // 列表查询(必填)
  list: (params) => request.get("/api/customer/list", { params }),

  // 新增
  add: (data) => request.post("/api/customer/add", data),

  // 编辑
  edit: (data) => request.put("/api/customer/edit", data),

  // 删除(单条)
  delete: (id) => request.delete(`/api/customer/delete/${id}`),

  // 详情
  detail: (id) => request.get(`/api/customer/detail/${id}`),

  // 批量删除
  batchDelete: (ids) =>
    request.delete("/api/customer/batch", { data: { ids } }),

  // 导出
  export: (params) =>
    request.get("/api/customer/export", {
      params,
      responseType: "blob",
    }),

  // 导入
  import: (formData) =>
    request.post("/api/customer/import", formData, {
      headers: { "Content-Type": "multipart/form-data" },
    }),
});

权限配置

权限配置定义各操作按钮的权限码。

完整参数示例

typescript
import { definePermissions } from "vue-admin-kit";

const permissions = definePermissions({
  add: ["system:customer:add"], // 新增权限
  edit: ["system:customer:edit"], // 编辑权限
  delete: ["system:customer:remove"], // 删除权限
  detail: ["system:customer:query"], // 详情权限
  batchDelete: ["system:customer:remove"], // 批量删除权限
  export: ["system:customer:export"], // 导出权限
  import: ["system:customer:import"], // 导入权限
  template: ["system:customer:import"], // 模板下载权限
  // 自定义权限
  audit: ["system:customer:audit"],
  assign: ["system:customer:assign"],
});

工具栏按钮配置

工具栏按钮显示在表格上方。

完整参数示例

typescript
import { defineTableOperations } from "vue-admin-kit";

const tableOperationConfig = defineTableOperations([
  // ========== 新增按钮 ==========
  {
    title: "新增", // 按钮文本
    type: "primary", // 按钮类型:primary/success/warning/danger/info
    icon: "Plus", // 图标名称(Element Plus 图标)
    fixed: "left", // 固定位置:left/right
    hasPermi: ["system:customer:add"], // 权限码
    onClick: () => {
      pageTemplateRef.value?.handleAdd();
    },
  },

  // ========== 批量删除按钮 ==========
  {
    title: "批量删除",
    type: "danger",
    icon: "Delete",
    fixed: "left",
    hasPermi: ["system:customer:remove"],
    // 条件显示:有选中数据时才显示
    show: (data) => data.checkTableData?.length > 0,
    onClick: (data) => {
      const rows = data.checkTableData;
      if (rows?.length) {
        pageTemplateRef.value?.handleDelete(rows);
      }
    },
  },

  // ========== 导出按钮 ==========
  {
    title: "导出",
    type: "warning",
    icon: "Download",
    fixed: "right",
    hasPermi: ["system:customer:export"],
    onClick: () => {
      pageTemplateRef.value?.downloadFile(api.export, "客户列表");
    },
  },

  // ========== 导入按钮 ==========
  {
    title: "导入",
    type: "info",
    icon: "Upload",
    fixed: "right",
    hasPermi: ["system:customer:import"],
    onClick: () => {
      pageTemplateRef.value?.importFile(api.import, "客户导入模板");
    },
  },
]);

行操作按钮配置

行操作按钮显示在表格每行的操作列。

完整参数示例

typescript
import {
  defineOperateColumns,
  showWhen,
  showWhenIn,
  showAll,
  showAny,
} from "vue-admin-kit";

const operateColumns = defineOperateColumns([
  // ========== 详情按钮 ==========
  {
    title: "详情",
    type: "info",                // 按钮类型
    link: true,                  // 链接样式
    onClick: (row) => {
      pageTemplateRef.value?.handleDetail(row);
    },
  },

  // ========== 编辑按钮(带权限和条件显示) ==========
  {
    title: "编辑",
    type: "primary",
    link: true,
    hasPermi: ["system:customer:edit"],  // 权限控制
    hasRole: ["admin", "manager"],       // 角色控制(可选)
    // 条件显示:状态为"正常"时显示
    show: showWhen("status", "1"),
    onClick: (row) => {
      pageTemplateRef.value?.handleEdit(row);
    },
  },

  // ========== 删除按钮 ==========
  {
    title: "删除",
    type: "danger",
    link: true,
    hasPermi: ["system:customer:remove"],
    // 条件显示:状态为"正常"或"停用"时显示
    show: showWhenIn("status", ["0", "1"]),
    onClick: (row) => {
      pageTemplateRef.value?.handleDelete(row);
    },
  },

  // ========== 启用按钮 ==========
  {
    title: "启用",
    type: "success",
    link: true,
    hasPermi: ["system:customer:edit"],
    // 仅状态为"停用"时显示
    show: showWhen("status", "0"),
    onClick: (row) => {
      toggleStatus(row.id, "1", "确定启用该客户吗?");
    },
  },

  // ========== 停用按钮 ==========
  {
    title: "停用",
    type: "warning",
    link: true,
    hasPermi: ["system:customer:edit"],
    // 仅状态为"正常"时显示
    show: showWhen("status", "1"),
    onClick: (row) => {
      toggleStatus(row.id, "0", "确定停用该客户吗?");
    },
  },

// ========== 组合条件(AND) ========== { title: "高级编辑", type: "primary", link: true, // 状态为"正常" 且 是 VIP 客户 时显示 show: showAll( showWhen("status", "1"), (data) => data.row?.isVip === true ), onClick: (row) => handleAdvancedEdit(row), },

// ========== 组合条件(OR) ========== { title: "特殊操作", type: "warning", link: true, // 是管理员 或 是创建者 时显示 show: showAny( (data) => data.params?.isAdmin === true, (data) => data.row?.createBy === currentUser.value ), onClick: (row) => handleSpecialAction(row), },

// ========== 下拉菜单 ========== { title: "更多", dropdown: true, // 启用下拉菜单 children: [ { title: "复制", onClick: (row) => handleCopy(row), }, { title: "转移", onClick: (row) => handleTransfer(row), hasPermi: ["system:customer:transfer"], }, { title: "归档", type: "warning", onClick: (row) => handleArchive(row), show: showWhen("status", "1"), }, ], }, ]);

Released under the MIT License.