Skip to content
本页目录

CreateView

基于视图渲染的一级列表的页面组件

说明

  • 表格的操作列不用代码写死,直接在视图按钮那配置,将是否操作按钮选择 true
  • 表格操作列中需要在单独 tab 中显示时,在备注配置 showTab=[tabIcon1,tabIcon2,...]
  • 表格中某些列需要单独在某个 tab 中显示时,在备注配置 showTab=[tabIcon1,tabIcon2,...]
  • 表格的功能按钮需要单独在某个 tab 中显示时,在备注配置 showTab=[tabIcon1,tabIcon2,...]
  • 表格的功能按钮的类型现在支持 主,次,普通 三种类型的按,默认是 default,在在备注配置 btnLevel 即可,比如 btnLevel=1
  • 视图没有页签的需要自己手动调一下 getTableList 方法
  • 金额范围查询框字段命名 filedCode1-filedCode2
  • 一级列表需要行内编辑时,配置data_type后再给remark配置:isForm=1,否则不会渲染表单组件
  • 列可点击时将列配置为链接类型,可直接使用handleItemClick执行列项的单击事件
  • 视图上给查询条件内某个字段配置了默认值,但是页面初次查询时没有带上默认值的,需要给createview组件加上v-if="allUiViews"和searchConfigs:{defaultData:{}}

基本用法

组件演示

示例
vue
<template>
  <div>
    <create-view
      :all-ui-views="allUiViews"
      :data-source="tableData"
      :is-scan="true"
      :table-configs="tableConfigs"
    />
  </div>
</template>
<script lang="ts" setup>
import { ref, reactive, onMounted } from 'vue'
// 引用组件
import { CreateView } from 'ctj-ui-next'

const allUiViews = reactive({})
const tableData = reactive([])

const tableConfigs = reactive<tableConfig>({
  request: {
    api: '/reBill/getBillPagination',
    params: {
      busiTypeId: '801',
      menuid: 'e56aeeb645184931bc2b44bbdb39f39f',
    },
  },
  viewConfig: {
    rowKey: 'bill_no',
    pagination: false,
    showIndex: true,
    checkType: 'checkbox',
  },
  cusPagination: {
    pageSize: 10,
    current: 1,
    total: 20,
  },
  footerConfig: {
    checkedSum: {
      title: '选中合计',
      titleKey: 'bill_no',
      totalKey: ['pay_money'],
    },
    totalSum: {
      title: '总计',
      titleKey: 'bill_no',
      totalKeys: ['pay_money'],
      data: {},
    },
  },
})

</script>
<style lang="less" scoped></style>
<template>
  <div>
    <create-view
      :all-ui-views="allUiViews"
      :data-source="tableData"
      :is-scan="true"
      :table-configs="tableConfigs"
    />
  </div>
</template>
<script lang="ts" setup>
import { ref, reactive, onMounted } from 'vue'
// 引用组件
import { CreateView } from 'ctj-ui-next'

const allUiViews = reactive({})
const tableData = reactive([])

const tableConfigs = reactive<tableConfig>({
  request: {
    api: '/reBill/getBillPagination',
    params: {
      busiTypeId: '801',
      menuid: 'e56aeeb645184931bc2b44bbdb39f39f',
    },
  },
  viewConfig: {
    rowKey: 'bill_no',
    pagination: false,
    showIndex: true,
    checkType: 'checkbox',
  },
  cusPagination: {
    pageSize: 10,
    current: 1,
    total: 20,
  },
  footerConfig: {
    checkedSum: {
      title: '选中合计',
      titleKey: 'bill_no',
      totalKey: ['pay_money'],
    },
    totalSum: {
      title: '总计',
      titleKey: 'bill_no',
      totalKeys: ['pay_money'],
      data: {},
    },
  },
})

</script>
<style lang="less" scoped></style>

属性 Props

参数说明类型可选值默认值
allUiViews视图数据(必填)UiData--
dataSource表格数据(api 和 dataSource 两个必传其中一个)any[]--
selectList新增需要的单据数据any[]--
tableConfigs表格配置数据tableConfig参考tableConfigs 配置-
isScan是否需要使用扫描仪boolean-false
options搜索框的下拉数据EleData--
defaultActiveTab默认高亮的 tabstringtab 的 icon 或者 status第一个 tab 的 tab 的 icon
tabCountParams请求页签数的接口参数TabCountParams参考tabCountParams 配置-
searchConfigs搜索框的配置SearchConfig参考SearchConfig 配置-
isTransferQuery是否转换查询参数boolean-false
tableExport导入的参数TableExportType参考tableExport 配置false
queryExtra通用的接口参数QueryExtra参考queryExtra 配置-
isCalcHeight是否在create-view计算表格高度boolean-true
tabsCountData页签数量数据Record<string, any>--
columnVisibleSet控制列显隐的按钮是否显示Booleantrue | fasletrue

事件 Events

事件名说明回调参数参数说明
tabChangetab 标签 change 事件(tabs_status:string,activeTab)tabs_status 当前 tab 的 tabs_status,activeTab是当前页签
doSearch搜索事件(queries:query)queries 当前页面所有的查询值
scanSearch扫描仪搜索事件(queries:query)queries 当前页面所有的查询值
resetQuery重置事件--
billChecked单据点击事件(menuitem:any)menuitem:当前点击的单据信息
btnClick按钮点击事件({icon,dataSource}:BtnClickParams)icon:当前点击的按钮的 icon,dataSource 当前页签下的表格数据
operate操作列点击事件(type, row, index, item)type:当前点击的按钮type,row 当前行数据, index序号,item当前点击按钮的全部信息
handlePageChange分页 change 事件(page,pageSize)page:当前页,pageSize 当前分页 size
handleItemClick表格列的点击事件(record, rowIndex, column)record:当前行数据,rowIndex 当前行 index,column:当前点击的 column
handleSelection选择 change 事件(selectedRows)selectedRows:选中的行数据
onExpand行展开时触发(expanded: boolean, record: any)expanded 是否展开 / record 展开的行的数据
formChange搜索框表单change事件(params: tableFormParams)-
importFulfill导入文件完成事件,没传tempType时的导入完成事件formData文件数据
downloadTemplate下载按钮点击事件,不传templatePath,tempType时抛出的事件--
tableFormChange表格可编辑时的change事件({value, column, index, record})value 当前值 / record 当前行数据 / index 当前行序号 / column 当前列

tableConfigs 配置

参数说明类型可选值默认值
request请求参数的设置,这个参数与 dataSource 两个必传其中一个,api 为列表的请求接口,params 为接口除了查询,分页额外需要传的参数ApiRequest参考request 配置默认请求method为get
viewConfigantd-vue 表格的配置参数tableViewConfig参考viewConfig 配置-
cusPagination分页配置pageConfig参考pageConfig 配置-
footerConfig合计行,选中合计配置summarys参考footerConfig 配置-
columnConfigs自定义列Record<string,CusColumn>参考columnConfigs 配置-
tableRequestCallback接口请求参数提前处理函数TableDataCallback参考tableRequestCallback 详情-
tableDataCallback接口返回数据处理函数TableDataCallback参考tableDataCallback 详情-

viewConfig 配置

参数说明类型可选值默认值
pagination是否需要自带分页boolean-false
scroll表格 Scroll 参数'{x:number,y:number}'--
customRow同 antd-vue 的 customRowFunction(record, index)--
bordered是否需要边框boolean-true
rowSelection同 gap-table---
size同 gap-tablestring--
isSticky同 gap-tableboolean--
stripe同 gap-tableboolean--
checkType同 gap-table'' / 'checkbox' /'radio'--
rowKey同 gap-tablestring--
showIndex同 gap-tableboolean--

viewConfig 的配置参考 gap-table 配置

pageConfig 配置

viewConfig 的配置参考 gap-table pageConfig 配置

footerConfig 配置

viewConfig 的配置参考 gap-table footerConfig 配置

columnConfigs 配置

参数说明类型可选值默认值
visible是否显示boolean--
slotName插槽名称string--
control_typecolumn 类型string--
customEllipsis是否显示提示boolean-false

操作列的配置 key 值为 operation

其余参数参考 gap-table column 配置

tabCountParams 配置

参数说明类型可选值默认值
businessType业务类型string--
其余参数--any-

SearchConfig 配置

参数说明类型可选值默认值
isConvert是否需要将搜索框内数组类的转成','连接boolean-内部默认会根据 method 去判断,get 为 true,post 为 false
columnConfigs查询项的配置columnConfigs--
buttonConfigs查询区按钮的配置'{icon:{visible:boolean,loading:boolean}}'-visible控制显隐,loading控制按钮的加载状态
defaultData查询表单默认值any--

其余参数参考 gic-search-form formConfig 配置

tableExport 配置

参数说明类型可选值默认值
visible是否需要显示导出boolean-先需要在视图上配一下导出,视图上显示导出的时候,这个visible会进一步控制显隐
request接口参数ApiRequest参考request 配置传了这个,导出的接口包括传参完全按这个来
dataCallback接口成功后的回调(data)=>{}-传了这个,接口请求的后续操作自己处理
excelCallback前端excel导出特殊列处理函数(row,column)=>{}-在函数里处理需要处理的列

request 配置

参数说明类型可选值默认值是否必传
servicePre接口服务前缀string--
api接口string--
method请求方式'get' / 'post''get' / 'post''get'
params接口paramsRecord<string, any>---
body接口bodyRecord<string, any>---

queryExtra 配置

因为create-view组件内部现在有很多内部请求,有很多接口用的参数有相同的,为了避免重复传,公共的参数放在这里

参数说明类型可选值默认值
businessType业务idstring--
menuId菜单idstring--

tableRequestCallback 详情

tableRequestCallback 函数主要用于接口请求不是queryDto的形式,自己通过该函数处理请求的参数

const tableConfigs = reactive<tableConfig>({
  tableRequestCallback: (data:any) => {
    // data 是组件传出来的查询条件,当前分页数据,页签状态
    return {
      query: { // 查询query
        ...data
      },
      body:{ // 接口body

      }
    }
  },
})
const tableConfigs = reactive<tableConfig>({
  tableRequestCallback: (data:any) => {
    // data 是组件传出来的查询条件,当前分页数据,页签状态
    return {
      query: { // 查询query
        ...data
      },
      body:{ // 接口body

      }
    }
  },
})

tableDataCallback 详情

tableDataCallback 函数主要用于表格接口返回的格式不是统一的格式,自己处理返回数据的格式

const tableConfigs = reactive<tableConfig>({
  tableDataCallback: (data: any) => {
    // data 是接口请求的返回数据
    const resultList = data?.resultList?.map((item: any) => item.kpiTemplateDTO)
    return {
      resultList: resultList || [], // 表格数据字段
      totalRows: data?.totalRows, // 总条数
      footer: [], // 底部总计数据
    }
  },
})
const tableConfigs = reactive<tableConfig>({
  tableDataCallback: (data: any) => {
    // data 是接口请求的返回数据
    const resultList = data?.resultList?.map((item: any) => item.kpiTemplateDTO)
    return {
      resultList: resultList || [], // 表格数据字段
      totalRows: data?.totalRows, // 总条数
      footer: [], // 底部总计数据
    }
  },
})

插槽

插槽名称说明
tableButtons搜索区按钮
tableInfo表格上的信息插槽
table表格区的插槽,自定义内容时可以使用这个
createViewEllipsis表格列显示tip的插槽
expandedRowRender表格展开的插槽

方法和数据

方法名说明参数参数说明
dataSource表格的数据--
queries搜索的数据--
transferQueryData模糊查询转化的数据--
getTableList获取表格数据的方法(isScan,isUpdateTab,isDelete)isScan 是否是扫描仪的获取数据,isUpdateTab 是否更新 tab 页签数,isDelete是否是删除之后调的更新
setSearchFieldValue设置查询项的值(fieldCode,value)fieldCode 需要设置的项 value 设置的值

接口形式以及参数 说明

  • 接口查询支持 get 和 post 请求,分页、totalRowColumns、taskStatus、查询条件在 get 请求时放在 params,post 请求放在 body
  • 接口获取方式
js
let queries = {
  nowPage: 1, // 当前页
  nowPageNo: 10, // pageSize
  taskStatus: 001, // 页签 taskStatus
  totalRowColumns, // 总计列
}
let body = {}
if(tableRequestCallback){
  const data = tableRequestCallback(queries);
  query = data.query || {}
  body = data.body || {}
} else if (method == 'post') {
  body = Object.assign({}, queries, body)
} else {
  query = Object.assign({}, queries, query)
}
const res = await getTableData(api, { query, body }, method)
if (res.status === ResStatus.success) {
  cusPagination.total = res.data.totalRows // 总行数
  totalSum.data = res.data.footer && res.data.footer[0] // 总计
  dataSource = res.data.resultList // 表数据
}
let queries = {
  nowPage: 1, // 当前页
  nowPageNo: 10, // pageSize
  taskStatus: 001, // 页签 taskStatus
  totalRowColumns, // 总计列
}
let body = {}
if(tableRequestCallback){
  const data = tableRequestCallback(queries);
  query = data.query || {}
  body = data.body || {}
} else if (method == 'post') {
  body = Object.assign({}, queries, body)
} else {
  query = Object.assign({}, queries, query)
}
const res = await getTableData(api, { query, body }, method)
if (res.status === ResStatus.success) {
  cusPagination.total = res.data.totalRows // 总行数
  totalSum.data = res.data.footer && res.data.footer[0] // 总计
  dataSource = res.data.resultList // 表数据
}
  • 接口请求标准格式
js
// get 请求 主要参数放在params
{
  nowPage: number
  nowPageNo: number
  taskStatus:string,
  totalRowColumns:string[]
  queryField?: {
    [key: string]: any
  }
}
// post请求 主要参数放在body
{
  paging?: {
    nowPage: number
    nowPageNo: number
  }
  queryMap?: {
    [key: string]: any
  }
  fuzzyMap?: {
    [key: string]: any
  }
  queryField?: {
    [key: string]: any
  }
  taskStatus:string,
  totalRowColumns:string[]
}
// get 请求 主要参数放在params
{
  nowPage: number
  nowPageNo: number
  taskStatus:string,
  totalRowColumns:string[]
  queryField?: {
    [key: string]: any
  }
}
// post请求 主要参数放在body
{
  paging?: {
    nowPage: number
    nowPageNo: number
  }
  queryMap?: {
    [key: string]: any
  }
  fuzzyMap?: {
    [key: string]: any
  }
  queryField?: {
    [key: string]: any
  }
  taskStatus:string,
  totalRowColumns:string[]
}
  • 接口返回标准格式
js
{
   status_code: "0000",
    reason: "查询成功",
    data: { // 只列了使用到了的数据
      totalRows: 1,
      resultList:[]
      footer:[]
    }
}
{
   status_code: "0000",
    reason: "查询成功",
    data: { // 只列了使用到了的数据
      totalRows: 1,
      resultList:[]
      footer:[]
    }
}

Demo

表格列显示自定义气泡提示

  1. columnConfigs 对应类 加上 customEllipsis 属性
vue
const tableConfigs = reactive<tableConfig>({
  columnConfigs: {
    bill_status_display: {
      customEllipsis: true,
    },
  },
})
const tableConfigs = reactive<tableConfig>({
  columnConfigs: {
    bill_status_display: {
      customEllipsis: true,
    },
  },
})
  1. 组件那自定义气泡内容插槽,插槽名称 createViewEllipsis,内容写的时候需要判断一下 column 是否是需要显示气泡的列
vue
<create-view
  ref="BillCreateView"
  v-if="allUiViews"
  :all-ui-views="allUiViews"
  :data-source="tableData"
  :selectList="selectData"
  :is-scan="true"
  :table-configs="tableConfigs"
  :search-configs="searchConfig"
  @billChecked="handleBillChecked"
  @tabChange="handleTabChange"
  @handleSelection="handleSelection"
  @btn-click="handleBtnClick"
>
    <template #createViewEllipsis="scope">
      <div>
        <div v-if="scope?.data?.column?.dataIndex === 'bill_status_display'">
          bill_status_display_test
        </div>
      </div>
    </template>
  </create-view>
<create-view
  ref="BillCreateView"
  v-if="allUiViews"
  :all-ui-views="allUiViews"
  :data-source="tableData"
  :selectList="selectData"
  :is-scan="true"
  :table-configs="tableConfigs"
  :search-configs="searchConfig"
  @billChecked="handleBillChecked"
  @tabChange="handleTabChange"
  @handleSelection="handleSelection"
  @btn-click="handleBtnClick"
>
    <template #createViewEllipsis="scope">
      <div>
        <div v-if="scope?.data?.column?.dataIndex === 'bill_status_display'">
          bill_status_display_test
        </div>
      </div>
    </template>
  </create-view>

表格前端导出特殊列处理

前端导出默认是数据没有处理过的值,比如状态列表格数据是code,页面代码根据code转化了name,导出时如果没做处理,就只会显示code,可以在excelCallback里面处理一下

js
const tableExport = reactive<TableExportType>({
  visible: true,
  excelCallback: (row: any, column: any) => {
    if (column.dataIndex === 'is_accept') {
      return row?.is_accept === 1 ? '已受理' : '待受理'; // 返回处理后的数据
    }
  },
});
const tableExport = reactive<TableExportType>({
  visible: true,
  excelCallback: (row: any, column: any) => {
    if (column.dataIndex === 'is_accept') {
      return row?.is_accept === 1 ? '已受理' : '待受理'; // 返回处理后的数据
    }
  },
});

FAQ

导出功能的使用

一, 使用内部导出

  1. 传queryExtra 里面 businessType 和 menuId
  2. 传 tableExport 的 visible 为true

二, 自己处理导出接口参数,接口路径

  1. 传 tableExport 的 request

预算单位软件产品开发部