Agent skill

Vue Pages

by JaguarJack in JaguarJack/catch-admin

Generate Vue frontend pages using catch-table for CatchAdmin module with full component features.

Apache-2.0Auto-check passedDocuments & Office

Install Vue Pages

skills CLI
$ npx skills add JaguarJack/catch-admin --skill vue-pages -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install JaguarJack/catch-admin vue-pages --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/JaguarJack/catch-admin.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/09-vue-pages .claude/skills/vue-pages && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
vue-pages
GitHub stars
935
Token cost
~2.6k tokens
SKILL.md length
162 words
Files
1
Skills in repo
10
Repo updated
First seen
Licence
Apache-2.0

At a glance

Generate Vue frontend pages using catch-table for CatchAdmin module with full component features.

  • Documents & Office work in your project
  • SKILL.md covers File Locations, catch-table 完整 Props, Column 配置详解 and 搜索表单配置, plus 7 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Vue Pages is an agent skill from JaguarJack/catch-admin. Generate Vue frontend pages using catch-table for CatchAdmin module with full component features.

Its SKILL.md is about 2.6k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Documents & Office. It works with Vue.js and Laravel. The repository describes itself as: CatchAdmin 是一个功能强大、易于扩展的现代化 PHP 后台管理系统。它采用前后端分离架构,CatchAdmin 集成了 Token 鉴权、权限管理、动态路由、动态表格、分页封装、资源权限、上传下载、代码生成器支持一键导出导入,数据回收站,附件管理的等等一系列实用的开发功能的模块化框架。官网地址:. The licence is Apache-2.0.

When your agent uses it

  • Documents & Office work in your project

Example prompts

  • “/vue-pages”

What it can do on your machine

Read from SKILL.md and the folder at commit e83d5aa. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md (its code samples are javascript, typescript and vue).

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Vue Pages loads about 2.6k tokens when it runs. Until then it costs about 27 tokens; SKILL.md has 162 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~27
When it runs · the whole SKILL.md, loaded when a task matches
~2.6k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from JaguarJack/catch-admin at commit e83d5aa, republished under its Apache-2.0 licence (© JaguarJack). 162 words, ~2,576 tokens.

Download SKILL.mdSave it as .claude/skills/vue-pages/SKILL.md (or your agent's skills folder).
name
vue-pages
description
Generate Vue frontend pages using catch-table for CatchAdmin module with full component features.

Step 9: Generate Vue Pages

创建前端页面,使用 catch-table 组件。

File Locations

web/src/views/{module}/
├── index.vue    # List page
└── create.vue   # Form component

catch-table 完整 Props

Prop类型默认值说明
apistringnullAPI 接口路径
columnsColumn[][]表格列配置
search-formSItem[][]搜索表单配置
permissionstringnull权限前缀
heightstring/number'auto'表格高度
borderbooleantrue是否显示边框
sizestring'default'尺寸: large/default/small
row-keystring''行数据 Key (树形必填)
empty-textstring'暂无数据'空数据文本
paginationbooleantrue是否显示分页
limitnumber10每页数量
limitsnumber[][10,20,30,40,50]可选每页数量
operationbooleantrue是否显示新增按钮
show-toolsbooleantrue是否显示工具栏
show-headerbooleantrue是否显示表头工具
exportsbooleanfalse是否显示导出
export-urlstring''导出接口
import-urlstring''导入接口
trashbooleanfalse是否启用回收站
multi-del-showbooleantrue是否显示批量删除
primary-namestring'id'主键字段名
default-paramsobject{}默认查询参数
destroy-confirmstring'确定删除吗'删除确认文本
dialog-widthstring''弹窗宽度
dialog-heightstring''弹窗高度
searchablebooleantrue是否显示搜索

Column 配置详解

typescript
interface Column {
  // 基础配置
  type?: 'selection' | 'expand' | 'index' | 'operate'
  label?: string           // 列标题
  prop?: string            // 字段名 (支持 'category.name' 嵌套)
  width?: number | string  // 列宽
  'min-width'?: number     // 最小宽度
  align?: string           // 对齐: left/center/right
  fixed?: 'left' | 'right' // 固定列
  
  // 显示控制
  show?: boolean           // 是否显示 (默认 true)
  sortable?: boolean       // 是否可排序
  
  // 特殊列类型
  slot?: string            // 自定义插槽名
  header?: string          // 自定义表头插槽
  ellipsis?: boolean | number  // 文本溢出 (true=20字符)
  switch?: boolean         // 状态开关
  switchRefresh?: Function // 开关后回调
  image?: boolean          // 图片显示
  preview?: boolean        // 图片预览 (默认 false)
  link?: boolean           // 链接
  link_text?: string       // 链接文本
  route?: string           // Vue 路由 (支持 :id 参数)
  tags?: boolean | number[]  // 标签显示
  mask?: boolean           // 脱敏显示 (****)
  filter?: Function        // 数据过滤函数
  class?: string           // 自定义 CSS 类
  
  // 操作列配置 (type='operate')
  update?: boolean         // 显示编辑按钮 (默认 true)
  destroy?: boolean        // 显示删除按钮 (默认 true)
  
  // 多级表头
  children?: Column[]      // 子列配置
}

搜索表单配置

typescript
interface SearchField {
  type: 'input' | 'select' | 'input-number' | 'date' | 'datetime' | 'range'
  label: string           // 标签
  name: string            // 字段名
  api?: string            // 下拉选项 API
  options?: Array<{       // 静态选项
    label: string
    value: string | number
  }>
  placeholder?: string
  default?: any           // 默认值
  props?: object          // 树形选择器 props
  show?: boolean          // 是否显示
}

catch-table Slots

插槽说明
#dialog="row"表单弹窗内容 (必填)
#{prop}="scope"自定义列内容
#operate="scope"额外操作按钮
#_operate="scope"完全自定义操作列
#operation左侧工具栏按钮
#multiOperate批量操作按钮
#csearch搜索表单额外内容
#middle搜索和表格之间内容

catch-table Methods (ref 调用)

typescript
const catchtable = ref()

// 执行搜索
catchtable.value.doSearch(params, merge)

// 打开弹窗
catchtable.value.openDialog(row, title)

// 关闭弹窗
catchtable.value.closeDialog(isReset)

// 重置搜索
catchtable.value.reset()

// 删除
catchtable.value.del(api, id)

// 设置默认参数
catchtable.value.setDefaultParams(params)

// 获取多选 IDs
catchtable.value.getMultiSelectIds()

// 获取当前查询参数
catchtable.value.getTableQuery()

Provide/Inject

typescript
// catch-table 提供
provide('closeDialog', (isReset) => {})
provide('refresh', () => {})

// 在 create.vue 中使用
const closeDialog = inject('closeDialog')
const refresh = inject('refresh')

完整示例 index.vue

vue
<template>
  <div>
    <catch-table
      ref="catchtable"
      :columns="columns"
      :api="api"
      :exports="true"
      :trash="true"
      permission="product.product"
      exportUrl="/product/export"
      importUrl="/product/import"
      :search-form="searchForm"
      :default-params="{ type: 1 }"
      row-key="id"
    >
      <!-- 自定义列 -->
      <template #image="scope">
        <el-image :src="scope.row.image" style="width: 50px" />
      </template>
      
      <template #price="scope">
        <span class="text-red-500">¥{{ scope.row.price }}</span>
      </template>
      
      <!-- 额外操作按钮 -->
      <template #operate="scope">
        <el-button type="primary" link @click="handleDetail(scope.row)">
          详情
        </el-button>
      </template>
      
      <!-- 左侧工具栏 -->
      <template #operation>
        <el-button @click="handleBatchExport">批量导出</el-button>
      </template>
      
      <!-- 批量操作 -->
      <template #multiOperate>
        <el-button type="warning" @click="handleBatchUpdate">
          批量更新
        </el-button>
      </template>
      
      <!-- 表单弹窗 -->
      <template #dialog="row">
        <Create :primary="row?.id" :api="api" />
      </template>
    </catch-table>
  </div>
</template>

<script lang="ts" setup>
import { ref } from 'vue'
import Create from './create.vue'

const api = 'products'
const catchtable = ref()

const columns = [
  { type: 'selection' },
  { label: 'ID', prop: 'id', width: 80, sortable: true },
  { label: '图片', prop: 'image', slot: 'image', width: 80 },
  { label: '名称', prop: 'name', ellipsis: 30 },
  { label: '分类', prop: 'category.name', width: 120 },
  { label: '价格', prop: 'price', slot: 'price', width: 100 },
  { label: '库存', prop: 'stock', width: 80 },
  { 
    label: '状态', 
    prop: 'status', 
    switch: true, 
    width: 80,
    tags: ['success', 'danger']  // 1=success, 2=danger
  },
  { label: '创建时间', prop: 'created_at', width: 180, sortable: true },
  { 
    type: 'operate', 
    label: '操作', 
    width: 200, 
    fixed: 'right',
    update: true, 
    destroy: true 
  }
]

const searchForm = [
  { type: 'input', label: '名称', name: 'name' },
  { type: 'select', label: '分类', name: 'category_id', api: 'categories' },
  { type: 'select', label: '状态', name: 'status', options: [
    { label: '启用', value: 1 },
    { label: '禁用', value: 2 }
  ]},
  { type: 'range', label: '创建时间', name: 'created_at' }
]

// 自定义搜索
const handleSearch = (params) => {
  catchtable.value.doSearch(params)
}

// 详情
const handleDetail = (row) => {
  // router.push(`/product/detail/${row.id}`)
}

// 批量导出
const handleBatchExport = () => {
  const ids = catchtable.value.getMultiSelectIds()
  // ...
}
</script>

完整示例 create.vue

vue
<template>
  <el-form :model="formData" label-width="100px" ref="form" v-loading="loading">
    <el-form-item
      label="名称"
      prop="name"
      :rules="[{ required: true, message: '请输入名称' }]"
    >
      <el-input v-model="formData.name" placeholder="请输入名称" maxlength="100" />
    </el-form-item>

    <el-form-item
      label="分类"
      prop="category_id"
      :rules="[{ required: true, message: '请选择分类' }]"
    >
      <el-select v-model="formData.category_id" placeholder="请选择" class="w-full">
        <el-option
          v-for="item in categories"
          :key="item.id"
          :label="item.name"
          :value="item.id"
        />
      </el-select>
    </el-form-item>

    <el-form-item
      label="价格"
      prop="price"
      :rules="[{ required: true, message: '请输入价格' }]"
    >
      <el-input-number v-model="formData.price" :precision="2" :min="0" class="w-full" />
    </el-form-item>

    <el-form-item label="库存" prop="stock">
      <el-input-number v-model="formData.stock" :min="0" class="w-full" />
    </el-form-item>

    <el-form-item label="图片" prop="image">
      <upload v-model="formData.image" />
    </el-form-item>

    <el-form-item label="描述" prop="description">
      <el-input v-model="formData.description" type="textarea" :rows="4" />
    </el-form-item>

    <el-form-item label="状态" prop="status">
      <el-radio-group v-model="formData.status">
        <el-radio :value="1">启用</el-radio>
        <el-radio :value="2">禁用</el-radio>
      </el-radio-group>
    </el-form-item>

    <div class="flex justify-end">
      <el-button type="primary" @click="submitForm(form)">提交</el-button>
    </div>
  </el-form>
</template>

<script lang="ts" setup>
import { inject, onMounted, ref } from 'vue'
import { useCreate } from '@/composables/curd/useCreate'
import { useShow } from '@/composables/curd/useShow'
import http from '@/support/http'

const props = defineProps<{
  primary?: string | number
  api: string
}>()

// CRUD composables
const { formData, form, loading, submitForm, close } = useCreate(props.api, props.primary)

// 编辑模式加载数据
if (props.primary) {
  useShow(props.api, props.primary, formData)
}

// 关闭弹窗
const closeDialog = inject('closeDialog')
onMounted(() => {
  close(() => closeDialog?.())
})

// 加载分类选项
const categories = ref([])
onMounted(async () => {
  const res = await http.get('categories')
  categories.value = res.data.data
})
</script>

特殊列用法

嵌套字段
javascript
{ label: '分类', prop: 'category.name' }  // 访问关联对象
图片列
javascript
{ label: '图片', prop: 'image', image: true }           // 不可预览
{ label: '图片', prop: 'image', image: true, preview: true }  // 可预览
链接列
javascript
{ label: '链接', prop: 'url', link: true }
{ label: '链接', prop: 'url', link: true, link_text: '查看' }
路由链接
javascript
{ label: '详情', prop: 'name', route: '/product/detail/:id' }
标签列
javascript
{ label: '状态', prop: 'status', tags: true }  // 默认样式
{ label: '状态', prop: 'status', tags: ['success', 'danger', 'warning'] }
数据过滤
javascript
{ 
  label: '价格', 
  prop: 'price', 
  filter: (val) => `¥${val.toFixed(2)}`
}
脱敏显示
javascript
{ label: '手机', prop: 'mobile', mask: true }  // 138****8888

树形表格

vue
<catch-table
  :columns="columns"
  api="categories"
  row-key="id"
  :pagination="false"
>

后端需返回嵌套结构或使用 asTree() 方法。

© JaguarJack, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .claude/skills/09-vue-pages of JaguarJack/catch-admin.

Open the folder on GitHubat commit e83d5aa

Compare with similar skills

Vue Pages next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Vue Pages compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Vue Pages this skillJaguarJack/catch-admin935—~2.6kAutomated safety check: PassApache-2.0
Livewire Developmentcoollabsio/coolify63k—~964Automated safety check: PassMIT
Livewire Developmentyungifez/skuul4091 repos~1.9kAutomated safety check: PassMIT
Medialibrary Developmentgdarko/laravel-vue-starter1453 repos~880Automated safety check: PassMIT
Wayfinder Developmentslimani-dev/muraqib1291 repos~622Automated safety check: PassMIT
Configure Nightwatchtrypostit/trypost692—~2.7kAutomated safety check: PassMIT

Similar skills

  • Livewire Development

    coollabsio/coolify

    A skill your agent uses for any task or question involving Livewire.

    63k GitHub stars~964 tokensUpdated yesterday
    Backend & APIsAuto-check passed
  • Livewire Development

    yungifez/skuul

    A skill your agent uses for any task or question involving Livewire.

    409 GitHub starsUsed in 1 repo~1.9k tokens
    Backend & APIsAuto-check passed
  • Medialibrary Development

    gdarko/laravel-vue-starter

    Build and work with spatie/laravel-medialibrary features including associating files with Eloquent models, defining media collections and conversions, generating responsive images, and retrieving…

    145 GitHub starsUsed in 3 repos~880 tokens
    Backend & APIsAuto-check passed
  • Wayfinder Development

    slimani-dev/muraqib

    A skill your agent uses for Laravel Wayfinder which auto-generates typed functions for Laravel controllers and routes.

    129 GitHub starsUsed in 1 repo~622 tokens
    Backend & APIsAuto-check passed
  • Configure Nightwatch

    trypostit/trypost

    Configures Laravel Nightwatch data collection, sampling rates, filtering rules, and redaction policies.

    692 GitHub stars~2.7k tokensUpdated today
    Backend & APIsAuto-check passed
  • Passport Development

    trypostit/trypost

    Develops OAuth2 API authentication with Laravel Passport. An agent skill from trypostit/trypost.

    692 GitHub stars~1.9k tokensUpdated today
    Backend & APIsAuto-check passed

More from JaguarJack/catch-admin

All 10 skills in this repo
  • Curd

    JaguarJack/catch-admin

    Generates complete CRUD module from database table definition.

    935 GitHub stars~3.3k tokensUpdated 25 days ago
    Auto-check passed
  • Controller

    JaguarJack/catch-admin

    Generate CRUD controller for CatchAdmin module. An agent skill from JaguarJack/catch-admin.

    935 GitHub stars~523 tokensUpdated 25 days ago
    Auto-check passed
  • Migration

    JaguarJack/catch-admin

    Generate database migration file for CatchAdmin module. An agent skill from JaguarJack/catch-admin.

    935 GitHub stars~474 tokensUpdated 25 days ago
    Auto-check passed
  • Model

    JaguarJack/catch-admin

    Generate Eloquent model for CatchAdmin module with full CatchModel features.

    935 GitHub stars~1.7k tokensUpdated 25 days ago
    Auto-check passed
  • Parse Table

    JaguarJack/catch-admin

    Parse table definition to extract module name, model name, table name, and field definitions.

    935 GitHub stars~520 tokensUpdated 25 days ago
    Auto-check passed
  • Export

    JaguarJack/catch-admin

    Generate Excel export class for CatchAdmin module. An agent skill from JaguarJack/catch-admin.

    935 GitHub stars~321 tokensUpdated 25 days ago
    Auto-check passed

Works with

Questions about Vue Pages

What does Vue Pages do?

Generate Vue frontend pages using catch-table for CatchAdmin module with full component features. Vue Pages is an agent skill from JaguarJack/catch-admin. Generate Vue frontend pages using catch-table for CatchAdmin module with full component features.

When should I use Vue Pages?

Vue Pages fits situations like: documents & Office work in your project.

How do I install Vue Pages in Claude Code?

Run `npx skills add JaguarJack/catch-admin --skill vue-pages -a claude-code`. Or copy the skill folder (.claude/skills/09-vue-pages in JaguarJack/catch-admin) into .claude/skills/vue-pages in your project. Claude Code loads it when a task matches its description.

How do I install Vue Pages in Codex?

Run `npx skills add JaguarJack/catch-admin --skill vue-pages -a codex`. Or copy the skill folder (.claude/skills/09-vue-pages in JaguarJack/catch-admin) into .agents/skills/vue-pages in your project. Codex loads it when a task matches its description.

Can I use Vue Pages in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add JaguarJack/catch-admin --skill vue-pages -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/vue-pages, .gemini/skills/vue-pages, .github/skills/vue-pages and .opencode/skills/vue-pages in your project.

What does Vue Pages need to run?

SKILL.md names no scripts, command-line tools or credentials: Vue Pages is instructions for the agent only.

Does Vue Pages access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Vue Pages safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Vue Pages use?

Vue Pages is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Vue Pages use?

About 2.6k tokens (SKILL.md is roughly 10k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Vue Pages?

Skills that share tags, products or a category with Vue Pages: Livewire Development (coollabsio/coolify, 63k stars), Livewire Development (yungifez/skuul, 409 stars), Medialibrary Development (gdarko/laravel-vue-starter, 145 stars) and Wayfinder Development (slimani-dev/muraqib, 129 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Vue Pages?

JaguarJack (a GitHub user) maintains it in JaguarJack/catch-admin, which has 935 GitHub stars. The repository holds 10 skills in this directory. The repository was last updated on September 16, 2026.

Source: JaguarJack/catch-admin on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.