Vol移动端 AI Skill(uni-app / Vue3)


当前ai skill用于实现移动端、app、小程序生成页面及完全自定义页面功能开发 【点击下载 ai skill】

1. 使用方式:点击下载ai skill,将下载的skill放在vol-app-next项目里,以 Cursor为例,打开移动端项目 vol-app-next,

AI 执行契约(最高优先级,冲突时以本节为准)

收到需求
  → §12.Z 关键词检索
  → 判定:独立 vol-form / 独立 vol-table / 生成列表 vol-view / 编辑页 vol-edit / 自定义页
  → 写文件:{表}.vue | {表}Edit.vue | 同目录子组件.vue | 必要时 pages.json
  → 禁止:改 {表}Options.js | 改 components/ 源码 | 把 Web 的 view-grid / .jsx 写法套到 App
  → 后台:只调 api/{表}/{Action};实现细节读本地 vol-skill.md,不要在本 Skill 编造 Service 代码
需求信号AI 动作Skill在线文档
列表查询、底部按钮、快捷搜索、当前页弹框编辑{表}.vue + vol-view + 内嵌 vol-table§六/docs/app/page/
独立页新建/编辑、主从明细{表}Edit.vue + vol-edit§七/docs/app/edit/
表单字段、校验、插槽、联动、计算{表}.vue / Edit.vue 改 Options 引用后的对象,或独立 vol-form§四/docs/app/form/
表格/列表展示、分页、列插槽、行内编辑vol-table columns§五/docs/app/table/
自定义 API / 查不到数据 / 保存写库移动端 proxy.http;后台 vol-skill.md§八见 vol-skill.md

文档源: 优先本 Skill 模板 → 不足时 WebFetch http://app.volcore.xyz/docs/app/{分区}/。不要假设用户仓库有 doc.app。

技术栈(仅移动端): Vue 3 script setup(无 lang="jsx")、uni-app、uView、vol-form / vol-table / vol-view / vol-edit。HTTP:proxy.http.get/post。提示:proxy.$toast / proxy.$message。


零、AI 工作流

官方在线文档:http://app.volcore.xyz

开发者描述业务
    ↓
① 本 Skill §12.Z 检索 → 定位 §四–§十 模板
    ↓
② 不够 → 访问 app.volcore.xyz 对应分区
    ↓
③ 读用户项目 pages/.../{表}/{表}.vue、{表}Edit.vue、{表}Options.js(只读 Options,改写在 vue)
    ↓
④ 只改业务 vue / 新建子组件;禁止改 components/、禁止手改 Options.js
    ↓
⑤ 需要改后台 → 打开本地 vol-skill.md(若存在)写 Partial;移动端只调接口
步骤数据源
优先本 Skill 可执行模板
补充http://app.volcore.xyz
必须用户 vol-app-next 实际生成页
后台本地 vol-skill.md;没有则只写前端 http 调用并说明需后端配合
不依赖本地 doc.app、Demo_Order 是否存在

文档体系(AI 路由必读)

四类文档职责不同。vol-view 是生成列表页容器,内嵌 vol-table;编辑独立页用 vol-edit。

分区在线入口讲什么不是什么
表单 docs/app/form/formopen in new windowvol-form 完整字段 API、插槽、校验不是生成页容器
表格 docs/app/table/tableopen in new windowvol-table:horizontal 表格 / list 列表不是 vol-view
生成页面 docs/app/page/pageopen in new windowvol-view 列表页 Hook、插槽、查询不是 Edit 页
编辑页面 docs/app/edit/editopen in new windowvol-edit 独立新建/编辑、明细不是列表 vol-view
通用方法 docs/app/guide/guideopen in new windowhttp、base 工具、权限—
其他组件 docs/app/other/otheropen in new windowvol-button / vol-box / 图表等—

生成页组件关系(必知)

页面容器内嵌配置来源
{表}.vue 列表vol-view默认插槽里的 vol-table;查询/弹框编辑用 vol-form{表}Options.js → vue 里改
{表}Edit.vuevol-edit主表 vol-form + 明细 vol-table同上 editForm* / detail / details
自定义页直接 vol-form / vol-table—页面内声明

三层扩展: ① vol-view / vol-edit 的 props Hook → ② onInited($vm) 改 buttons → ③ 字段/列事件写在 formOptions / columns 项上。


一、项目结构

vol-app-next/
├── pages/{模块}/{表}/
│   ├── {表}.vue              ← 【列表】vol-view 业务(★)
│   ├── {表}Edit.vue          ← 【独立编辑】vol-edit 业务(★)
│   └── {表}Options.js        ← 生成器配置(会被覆盖,禁止手改)
├── pages.json                ← 新页面必须注册 path
├── components/               ← 框架组件,禁止改业务
│   ├── vol-form / vol-table / vol-view / vol-edit
│   └── vol-permission        ← proxy.base.getPermission

路径以用户项目实际生成为准(常见 pages/dbtest/{表}/)。路由:/{表}、/{表}Edit?id=。

1.0 业务写哪里

场景写这里禁止
列表查询/按钮/插槽/当前页弹框{表}.vueOptions.js、components
独立新建编辑、明细{表}Edit.vueOptions.js
弹框选数、复杂 UI同目录新建 SelectXxx.vue改 vol-box 源码
字典/列静态项onInited 或 vue 里改 reactive 后的 options 对象改 Options.js 文件
后台 CRUD/自定义 APIvol-skill.md + api Partial在 App 里写假后端

二、核心原则(MUST)

  1. Vue 写法: script setup。不要用 Web 的 script setup lang="jsx"、不要用 view-grid、el-button、gridRef.getFormOption(App 用 proxy.base.getFormOption(editFormOptions, field))。
  2. 小程序插槽: 只能固定插槽名(#field #title #extra #header #bottom 等)。列/字段必须设 slot:true / titleSlot:true / extraSlot:true / headerSlot:true,漏配不生效。用 v-if="data.item.field === 'xxx'" 或 data.field === 'xxx' 区分字段。禁止动态插槽名。
  3. saveBefore: 签名 (formData, isAdd, callback),必须 callback(true) 才会保存;callback(false) 中止。不要只 return true。
  4. searchBefore / loadBefore: return true/false。生成列表页须把 vol-view 查询条件写入 params.wheres。
  5. Options.js 会被生成覆盖。 动态改 searchFormOptions、columns、editFormOptions 在 vue 的 onInited 或加载后执行。
  6. 不要改 components/。
  7. 新页面: 同步改 pages.json;跳转 uni.navigateTo({ url: '/pages/.../{表}Edit?id=' + id })。
  8. 后台: 标准接口已存在。自定义查询/写库打开 vol-skill.md。移动端 proxy.http.post('api/{表}/{Action}', body, true),第三参数 true=显示 loading。

三、代码生成默认能力

生成表后已具备(业务用 Hook 扩展,不要重写组件):

端能力
接口api/{表}/getPageData 分页;add / update / del;upload;明细随 Edit 保存
列表 vol-view快捷搜索(table.quickSearchFields)、筛选弹框、底部权限按钮、当前页弹框编辑或跳转 Edit
表格 vol-tableurl 滚动分页;direction list/horizontal;字典 bind.key
编辑 vol-edit主表表单、主从 detail、一对多 details[]、权限隐藏保存/删除

保存体:

// 无明细 / 弹框编辑
{ mainData: proxy.base.getFormValues(editFormFields, editFormOptions) }

// 单明细
{ mainData, detailData: details[0].tableData, delKeys }

// 一对多
{ mainData, details: [{ table, data, delKeys }, ...] }

四、vol-form(重点)

在线:http://app.volcore.xyz/docs/app/form/params.html · 插槽 http://app.volcore.xyz/docs/app/form/slot.html

4.1 最小用法

<template>
  <vol-form ref="formRef" :form-options="formOptions" :formFields="formFields" :labelWidth="80" labelPosition="left"
    @onChange="onChange">
    <template #field="{ data }">
      <view v-if="data.item.field === 'custom'">自定义</view>
    </template>
  </vol-form>
</template>
<script setup>
import { ref, reactive, getCurrentInstance } from 'vue'
const { proxy } = getCurrentInstance()
const formRef = ref(null)
const formFields = reactive({ name: '', orderType: '' })
const formOptions = reactive([
  { title: '名称', field: 'name', type: 'input', required: true },
  { title: '类型', field: 'orderType', type: 'select', data: [], key: '订单类型' }
])
const onChange = (field, value, item, data) => {}
</script>

4.2 组件 props

formOptions formFields inline(快捷搜索等宽、隐藏标题) height loadKey labelWidth labelPosition padding titleFontSize valueFontSize textAlign titleStyle valueStyle getStyle uploadBefore

4.3 字段 type

分类type
文本input(默认) password textarea text editor
数字number decimal(range:true 值为 [min,max])
选择select selectList radio checkbox switch(1/0)
树cascader treeSelect city
日期date datetime time month(可 range)
上传img file(值为文件数组;提交用 getFormValues)
布局group;同行多列:[{...},{...}]

常用项:title field required readonly hidden placeholder data key/dataKey 字典、bind、extra、slot/titleSlot/extraSlot、formatter、min/max/range。

extra: { text, button:true, type:'primary', icon:'search', color, size, style }

4.4 字段事件(写在 option 项上,优先)

const opt = proxy.base.getFormOption(editFormOptions, 'Qty')
opt.onChange = (field, value, item, data) => { editFormFields.Amount = value * editFormFields.Price }
opt.onKeyPress = (field, value, item, e) => {}
opt.onInputConfirm = (field, value, item, e) => {}
opt.onExtraClick = (item, formFields) => {}
opt.click = (item, formFields) => {}

组件也可 @onChange @inputConfirm @extraClick。实时计算也可用 watch(() => editFormFields.Qty, ...)。

4.5 插槽

插槽条件
#header / 默认底部无
#title="{ data }"titleSlot:true
#field="{ data }"slot:true;title:'' 为整行自定义
#extra="{ data }"extraSlot:true

data:item value formFields readonly。

4.6 方法 / base

formRef.value.validate()           // false 时已 toast
formRef.value.reset(source?)
formRef.value.setReadonly(true)
formRef.value.initDicKeys()
proxy.base.getFormValues(fields, options)     // 提交
proxy.base.resetForm(fields, options, row)    // 回填(图片走 getImg)
proxy.base.getFormOption(options, field)
proxy.base.getFormDicData(options, field)
proxy.base.setFormFocus(options, field, 400)

五、vol-table(重点)

在线:http://app.volcore.xyz/docs/app/table/params.html

5.1 两种 direction(MUST 先判定)

direction形态要点
horizontal表格列宽、横向滚动、固定列、ck 复选框
list列表表单字段能力对齐 vol-form;titleField 行标题;可 readonly:false 行内编辑

生成页 table.direction 写在 Options 的 table 上,vue 里改 table.direction。

5.2 最小用法

<vol-table ref="tableRef" :url="table.pageUrl" :columns="columns" :table-data="tableData"
  :direction="table.direction" :titleField="table.titleField" :ck="table.ck" :index="table.rowIndex"
  :loadBefore="loadBefore" :loadAfter="loadAfter" @rowClick="rowClick">
  <template #field="{ data }">
    <view v-if="data.field === 'oper'">
      <vol-button size="small" type="primary" :block="false" @click="viewClick(data.row)">查看</vol-button>
    </view>
  </template>
</vol-table>

自定义 url 时后台须返回 { rows, total },查询体含 wheres/page/rows/sort(实现见 vol-skill.md ConvertQueryFilter + TakePage)。

5.3 组件 props(常用)

url tableData columns direction titleField index ck height(0 占满 / -1 自适应) minHeight readonly(默认 true) textInline textAlign labelWidth labelPosition loadKey defaultLoad padding paddingBottom contentPadding rowStyle columnStyle selectable formatter getButtons loadBefore loadAfter getStyle titleStyle valueStyle

5.4 columns

通用:title field width align fixed hidden type bind:{key,data} slot headerSlot formatter click btn cellStyle。

list 另:titleSlot extraSlot extra readonly required 及与 vol-form 相同的 type。

操作列:{ field:'oper', title:'操作', width:140, slot:true, headerSlot:true } + #field。

5.5 插槽

#data 替代整表;#columnHeader(headerSlot);#field(slot);#custom horizontal 追加;list:#header #title #extra #bottom;默认插槽=表底。

5.6 事件与方法

事件:onChange inputConfirm rowClick cellClick ckChange ckChangeAll extraClick dicInited。list 编辑事件写在 列上:onChange:(value,item,row)=>{}。

tableRef.value.load()
tableRef.value.load(null, true) // 重置第一页
tableRef.value.getSelectedRows()
tableRef.value.clearSelectedRows()
tableRef.value.delRows()
const col = proxy.base.getColumn(columns, 'Qty')

5.7 loadBefore

const loadBefore = (params) => {
  params.wheres = params.wheres || []
  params.wheres.push({ name: 'OrderNo', value: kw, displayType: 'like' })
  params.sort = params.sort || table.sortName
  return true
}

displayType 常用:equal like thanorequal lessorequal。


六、vol-view 生成列表页(重点)

在线:http://app.volcore.xyz/docs/app/page/params.html · 插槽 /docs/app/page/slot.html

这是代码生成后的列表页容器。 业务写 {表}.vue。

6.1 标准结构(按此改,不要换成 view-grid)

<template>
  <vol-view ref="viewRef" :table="table" :columns="columns" :table-data="tableData"
    :searchFormFields="searchFormFields" :searchFormOptions="searchFormOptions"
    :editFormFields="editFormFields" :editFormOptions="editFormOptions"
    @searchClick="loadData" @addClick="modelOpenBefore"
    :saveBefore="saveBefore" :saveAfter="saveAfter" :delBefore="delBefore" :onInited="onInited">
    <template #button><!-- 右上筛选旁 --></template>
    <template #search-input><!-- 快捷搜索右侧,如扫码 --></template>
    <template #content><!-- 表格上方 --></template>
    <vol-table ref="tableRef" :ck="table.ck" :index="table.rowIndex" :default-load="true"
      :url="table.pageUrl" :direction="table.direction" :titleField="table.titleField"
      :columns="columns" :table-data="tableData" :padding-bottom="table.paddingBottom"
      :loadBefore="searchBefore" :loadAfter="searchAfter"
      @rowClick="(row) => modelOpenBefore(row, false)">
    </vol-table>
  </vol-view>
</template>
<script setup>
import options from './{表}Options.js'
import { onLoad } from '@dcloudio/uni-app'
import { ref, reactive, getCurrentInstance, nextTick } from 'vue'
const { proxy } = getCurrentInstance()
const viewRef = ref(null)
const tableRef = ref(null)
const tableData = ref([])
const { table, searchFormFields, searchFormOptions, editFormFields, editFormOptions, columns } = reactive(options())
let gridRef
const onInited = async ($vm) => { gridRef = $vm }
const loadData = () => { tableRef.value?.load(null, true) }
</script>

6.2 table(Options.js,vue 里改对象不要改文件)

table = {
  tableName, tableCNName, titleField, key, sortName,
  pageUrl: 'api/{表}/getPageData',
  quickSearchFields: 'Field1,Field2',
  direction: 'horizontal', // 或 list
  ck: true, rowIndex: true, paddingBottom: 0
}

vol-view 常用 props:tableAction(权限表名) showTotal searchInput/showSearchInput searchField labelWidth labelPosition defaultLoad
Hooks:searchBefore/After searchModelOpenBefore addBefore/After updateBefore/After delBefore/delBeforeAsync/delAfter modelOpenBefore* saveBefore/After rowClick onInited getBottomButton

6.3 查询(生成页固定套路)

const searchBefore = (params) => {
  if (viewRef.value && !params.wheres?.length) {
    params.wheres = viewRef.value.getSearchParameters().wheres
  }
  params.sort = params.sort || table.sortName
  return true
}
const searchAfter = (res) => {
  nextTick(() => { viewRef.value?.searchAfter(res) })
  return true
}

默认查询值:vol-table :default-load="false",onLoad 里给 searchFormFields 赋值后 loadData()。日期区间:searchFormFields.date = [begin, end],datetime 必须带时分秒。proxy.base.getDate(true) / addDays。

6.4 新建/编辑打开

const modelOpenBefore = (row, isAdd) => {
  // A. 独立编辑页
  uni.navigateTo({
    url: '/pages/{模块}/{表}/{表}Edit?id=' + ((row || {})[table.key] || '')
  })
  // B. 当前页弹框(不要同时开两种)
  // viewRef.value.showEdit(row, isAdd)
}

弹框保存:saveBefore(formData, isAdd, callback){ callback(true) }。删除:delBefore 返回 false 中止。

6.5 按钮

const onInited = async ($vm) => {
  gridRef = $vm
  gridRef.buttons.push({
    name: '测试', value: '', hidden: false, type: 'success',
    onClick: () => { proxy.$toast('点击了测试') }
  })
}

权限按钮由 vol-view 按 table.tableName 自动过滤。插槽按钮:#button #btn-left #btn-right #search-button。

6.6 vol-view 插槽

#header #button #content #quick-search #search-input 默认(vol-table) #btn-left #btn-right #search-header #search-button #modelHeader #modelBody #edit-button #modelFooter

表格行插槽写在 内嵌 vol-table 上(#header #bottom #field)。

6.7 实例方法

viewRef.getSearchParameters() searchAfter(res) showEdit(row,isAdd) search();tableRef.load。

列格式化:columns 项 formatter / cellStyle / rowStyle;见 /docs/app/page/format1.html。


七、vol-edit 编辑页(重点)

在线:http://app.volcore.xyz/docs/app/edit/params.html · 插槽 /docs/app/edit/slot.html

有 {表}Edit.vue 即独立页编辑。列表点新建/编辑 navigateTo 带 id。

7.1 标准结构

<template>
  <vol-edit ref="editRef" :id="id" :table="table" :detail="detail" :details="details"
    :editFormFields="editFormFields" :editFormOptions="editFormOptions"
    :saveBefore="saveBefore" :saveAfter="saveAfter" :delBefore="delBefore"
    :loadFormAfter="loadFormAfter" :delRowBefore="delRowBefore" :delRowAfter="delRowAfter"
    :onInited="onInited" @onChange="onChange" :labelWidth="70" labelPosition="right">
    <template #content="{ editFormFields }"><!-- 主表与明细之间 --></template>
    <template #button><!-- 底栏左侧 --></template>
    <template #detail-button><!-- 明细表头 --></template>
  </vol-edit>
</template>
<script setup>
import options from './{表}Options.js'
import { onLoad } from '@dcloudio/uni-app'
import { ref, reactive, getCurrentInstance } from 'vue'
const props = defineProps({ id: '' })
const id = ref(props.id)
const isAdd = !id.value
const { proxy } = getCurrentInstance()
const editRef = ref(null)
const { table, editFormFields, editFormOptions, detail, details } = reactive(options())
onLoad((ops) => { if (ops?.id) id.value = ops.id })
</script>

加载主表:api/{表}/getPageData,wheres 主键。保存 api/{表}/add|update。删除 api/{表}/del 传 [id]。

7.2 常用 props / Hook

checkAuth readonly editChange(新建保存后变编辑) tableAction saveName direction(明细 horizontal/list) index ck
onInited loadFormBefore/After saveBefore/After delBefore/After loadDetailBefore/After delRowBefore/After addRow detailFormInited detailFormSaveBefore/After modelOpenBefore* rowClick

事件:onChange inputConfirm extraClick detailOnChange detailInputConfirm detailExtraClick dicInited

7.3 onInited 追加按钮

const onInited = async ($vm) => {
  $vm.buttons.push({ name: '扫码', type: 'success', onClick: () => {
    uni.scanCode({ success: (res) => { editFormFields.OrderNo = res.result } })
  }})
  $vm.detailButtons.push({ name: '选择商品', type: 'success', onClick: () => {} })
  $vm.boxOptions.buttons.unshift({ name: '测试', type: 'success', onClick: () => {} })
}

隐藏:$vm.buttons.forEach(c => { c.hidden = true })(同样 detailButtons)。

7.4 保存 / 明细

const saveBefore = (formData, isAdd, callback) => {
  // formData.mainData / detailData / details
  callback(true)
}
const loadFormAfter = (result, row) => {
  // editFormFields.xxx = 默认值
}
const delRowBefore = async (rows, table, ops) => { return true }

明细弹框字段 extra:在 detailFormInited(table) 里 table.edit.formOptions.find(x => x.field==='GoodsName').extra = { text:'选择', button:true, type:'primary', icon:'search' },点击走 @detailExtraClick。

明细列事件写在 detail.columns(与 vol-table list 相同)。

一对多:Options 的 details 数组,多项 tab;加载 params.tableName、params.value=主键。

7.5 vol-edit 插槽

#header #form #content 默认 #detail-button #detail-header #detail-footer #button #buttonRight #modelHeader #modelBody #modelData #box-button #modelFooter

主表字段插槽仍是 vol-form 规则;明细单元格是 vol-table 规则。

方法:editRef.save() reset() search() getTable()。


八、HTTP、权限、base、后台

在线:http://app.volcore.xyz/docs/app/guide/

8.1 HTTP

const { proxy } = getCurrentInstance()
proxy.http.post('api/{表}/{Action}', { ... }, true).then((res) => {
  proxy.$toast(res.message)
})
proxy.http.get('api/{表}/{Action}', {}, true)

标准:getPageData add update del upload。自定义 Action 与 Web 相同,见 vol-skill.md(Partial 三件套、JsonNormal、EF TakePage)。

8.2 权限

const permission = await proxy.base.getPermission('Demo_Order') // 菜单 tableName
const btns = permission?.permission || [] // Search Add Update Delete
const hasAdd = btns.includes('Add')

vol-view / vol-edit 已自动按表名过滤按钮。tableAction 可指定另一张表的权限。

8.3 base 常用

getDate(withTime) addDays addMonth isEmpty getImg setItem/getItem(全局缓存) getColumn getColumnDicData

8.4 后台(本 Skill 不展开)

若工作区有 vol-skill.md:查询过滤、保存前后、自定义分页按该文件写 Partial/{表}Service.cs。
禁止在本 Skill 中发明 Web view-grid / .jsx / Element Plus 代码。
无 vol-skill.md 时:只完成 App 调用,接口约定 { status, message, data } 或表格 { rows, total },并提示用户补后端。


九、其他组件(次要)

在线:http://app.volcore.xyz/docs/app/other/

组件要点
vol-buttontype variant/plain size shape block(默认 true,工具栏设 false) icon loading @click
vol-boxv-model title @confirm @cancel;#footer 替换默认底栏
vol-alert提示条
vol-progress / vol-line进度
图表分包 pagesCharts,见 /docs/app/other/charts.html

弹框选数:vol-box + vol-table url + getSelectedRows() 回写 editFormFields。


十、业务场景模板

10.1 列表扫码搜

<template #search-input>
  <vol-button @click="scanClick" type="success" :block="false" customStyle="margin-left:8rpx;">扫码</vol-button>
</template>
const scanClick = () => {
  uni.scanCode({
    success: (res) => { searchFormFields.OrderNo = res.result; loadData() }
  })
}

10.2 表单 extra 弹框选数据

const opt = proxy.base.getFormOption(editFormOptions, 'Customer')
opt.readonly = true
opt.extra = { text: '选择', button: true, type: 'primary', icon: 'search' }
opt.onExtraClick = () => { boxVisible.value = true }
const onSelect = (rows) => {
  editFormFields.Customer = rows[0].Customer
  editFormFields.CustomerId = rows[0].CustomerId
  boxVisible.value = false
}

10.3 下拉联动

proxy.base.getFormOption(editFormOptions, 'Province').onChange = (field, val) => {
  editFormFields.City = ''
  const city = proxy.base.getFormOption(editFormOptions, 'City')
  proxy.http.post('api/{表}/GetCity', { parentId: val }, true).then((res) => { city.data = res })
}

10.4 列操作按钮

columns 增加 { field:'oper', title:'操作', width:140, slot:true },#field 里 v-if="data.field==='oper'"。

10.5 行样式

const rowStyle = (row, index) => row.OrderStatus == 1 ? { background: '#fef0f0' } : {}
const columnStyle = (row, column) => column.field === 'TotalPrice' ? { color: 'red' } : {}

十一、自然语言 → 解析

【表名】{TableName}
【页面】列表 {表}.vue / 编辑 {表}Edit.vue / 独立表单或表格
【direction】horizontal 表格 / list 列表(未说则看现有 table.direction)
【业务】查询条件、按钮、扫码、弹框选数、明细、跳转编辑还是当前页弹框
【后台】若需新接口 → vol-skill.md

判定:存在 {表}Edit.vue 且需求是保存主从 → §七;只改列表查询/按钮 → §六;纯表单页 → §四;纯表格页 → §五。


十二、全量索引(§12.Z)

收到需求先检索本表。

开发者说法章节
生成页 / 列表页 / vol-view§六
编辑页 / 新建页 / vol-edit / 主从§七
表单字段 / 必填 / 字典 / extra / 插槽§四
表格 / 列表 list / 分页 / 列插槽§五
查询条件 / searchBefore / 默认日期§六.3
当前页弹框编辑 showEdit§六.4
navigateTo 编辑页§六.4 §七
底部按钮 / onInited buttons§六.5 §七.3
扫码§十.1 §七.3
弹框选数据 / vol-box§十.2 §九
联动 / onChange / 计算§四.4 §十.3
明细 extra / detailFormInited§七.4
权限 getPermission§八.2
http / 自定义接口 / 写库§八 + vol-skill.md
小程序插槽不生效§二.2 §四.5 §五.5
Options 改了被覆盖§二.5 改 vue
saveBefore 不保存§二.3 必须 callback
复选框行号table.ck / rowIndex;page/ck
格式化颜色columns.formatter / cellStyle
一对多 details§七.4
vol-button / vol-box§九

十三、在线文档 URL

站点: http://app.volcore.xyz/
拼接:http://app.volcore.xyz/docs/app/{form|table|page|edit|guide|other}/{页名}.html(部分为目录 /)。

内容URL
表单参数http://app.volcore.xyz/docs/app/form/params.html
表单插槽http://app.volcore.xyz/docs/app/form/slot.html
表格参数/插槽http://app.volcore.xyz/docs/app/table/params.html
表格形式http://app.volcore.xyz/docs/app/table/basic.html 等
表格列表http://app.volcore.xyz/docs/app/table/list.html 等
生成页参数http://app.volcore.xyz/docs/app/page/params.html
生成页插槽http://app.volcore.xyz/docs/app/page/slot.html
生成页方法http://app.volcore.xyz/docs/app/page/methods.html
编辑页参数http://app.volcore.xyz/docs/app/edit/params.html
编辑页插槽http://app.volcore.xyz/docs/app/edit/slot.html
通用 http/权限http://app.volcore.xyz/docs/app/guide/
其他组件http://app.volcore.xyz/docs/app/other/

本 Skill 不覆盖: HBuilder 安装、菜单配置、代码生成器操作界面、Web PC、审批流程设计器。表级 App 业务用 §四–§十;后台用 vol-skill.md。

AI 勿混淆:

  • App 生成列表 = vol-view,不是 view-grid
  • App 编辑独立页 = vol-edit 在 {表}Edit.vue
  • 字段配置数组名是 formOptions,不是 Web 的 formRules
  • 不要改 Options.js,不要改 components/

Vol.Pro 移动端 AI 开发技能 · vol-form / vol-table / vol-view / vol-edit · 在线文档 app.volcore.xyz · 后台参照 vol-skill.md

Last Updated 2026/10/23 16:24:28