@gopowerteam/table-render 0.0.1 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/config/provide.config.d.ts +6 -0
- package/dist/cjs/defines/define-columns.d.ts +2 -0
- package/dist/cjs/defines/define-table-load.d.ts +2 -0
- package/dist/cjs/defines/index.d.ts +2 -0
- package/dist/cjs/hooks/index.d.ts +2 -0
- package/dist/cjs/hooks/use-events.d.ts +26 -0
- package/dist/cjs/hooks/use-export.d.ts +7 -0
- package/dist/cjs/hooks/use-table.d.ts +13 -0
- package/dist/cjs/index.cjs +1 -1
- package/dist/cjs/index.d.ts +4 -1
- package/dist/cjs/interfaces/index.d.ts +9 -0
- package/dist/cjs/interfaces/table-column-options.d.ts +39 -0
- package/dist/cjs/interfaces/table-column-render.d.ts +28 -0
- package/dist/cjs/interfaces/table-load-params.d.ts +21 -0
- package/dist/cjs/render/table-column-render.d.ts +30 -0
- package/dist/cjs/render/table-view-render.d.ts +73 -0
- package/dist/cjs/table-columns/button/index.d.ts +26 -0
- package/dist/cjs/table-columns/currency/index.d.ts +9 -0
- package/dist/cjs/table-columns/date/index.d.ts +17 -0
- package/dist/cjs/table-columns/dict/index.d.ts +13 -0
- package/dist/cjs/table-columns/image/index.d.ts +10 -0
- package/dist/cjs/table-columns/index.d.ts +11 -0
- package/dist/cjs/table-columns/phone/index.d.ts +7 -0
- package/dist/cjs/table-columns/render/index.d.ts +5 -0
- package/dist/cjs/table-columns/tag/index.d.ts +8 -0
- package/dist/cjs/table-columns/text/index.d.ts +11 -0
- package/dist/cjs/utils/create-column-render.d.ts +7 -0
- package/dist/cjs/utils/create-table-form.d.ts +3 -0
- package/dist/cjs/utils/create-table-source.d.ts +3 -0
- package/dist/cjs/utils/get-column-value.d.ts +8 -0
- package/dist/cjs/utils/index.d.ts +5 -0
- package/dist/cjs/utils/set-column-value.d.ts +8 -0
- package/dist/cjs/utils/to-px.d.ts +1 -0
- package/dist/es/config/provide.config.d.ts +6 -0
- package/dist/es/defines/define-columns.d.ts +2 -0
- package/dist/es/defines/define-table-load.d.ts +2 -0
- package/dist/es/defines/index.d.ts +2 -0
- package/dist/es/hooks/index.d.ts +2 -0
- package/dist/es/hooks/use-events.d.ts +26 -0
- package/dist/es/hooks/use-export.d.ts +7 -0
- package/dist/es/hooks/use-table.d.ts +13 -0
- package/dist/es/index.d.ts +4 -1
- package/dist/es/index.mjs +494 -53
- package/dist/es/interfaces/index.d.ts +9 -0
- package/dist/es/interfaces/table-column-options.d.ts +39 -0
- package/dist/es/interfaces/table-column-render.d.ts +28 -0
- package/dist/es/interfaces/table-load-params.d.ts +21 -0
- package/dist/es/render/table-column-render.d.ts +30 -0
- package/dist/es/render/table-view-render.d.ts +73 -0
- package/dist/es/table-columns/button/index.d.ts +26 -0
- package/dist/es/table-columns/currency/index.d.ts +9 -0
- package/dist/es/table-columns/date/index.d.ts +17 -0
- package/dist/es/table-columns/dict/index.d.ts +13 -0
- package/dist/es/table-columns/image/index.d.ts +10 -0
- package/dist/es/table-columns/index.d.ts +11 -0
- package/dist/es/table-columns/phone/index.d.ts +7 -0
- package/dist/es/table-columns/render/index.d.ts +5 -0
- package/dist/es/table-columns/tag/index.d.ts +8 -0
- package/dist/es/table-columns/text/index.d.ts +11 -0
- package/dist/es/utils/create-column-render.d.ts +7 -0
- package/dist/es/utils/create-table-form.d.ts +3 -0
- package/dist/es/utils/create-table-source.d.ts +3 -0
- package/dist/es/utils/get-column-value.d.ts +8 -0
- package/dist/es/utils/index.d.ts +5 -0
- package/dist/es/utils/set-column-value.d.ts +8 -0
- package/dist/es/utils/to-px.d.ts +1 -0
- package/dist/style.css +1 -1
- package/package.json +9 -2
- package/dist/cjs/components/table-render.d.ts +0 -10
- package/dist/es/components/table-render.d.ts +0 -10
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export type TableEvent = 'export' | 'reload' | 'preview' | 'edit';
|
|
2
|
+
export interface TableReloadEventOptions {
|
|
3
|
+
reset?: boolean;
|
|
4
|
+
}
|
|
5
|
+
export interface TablePreviewEventOptions {
|
|
6
|
+
key: string | number;
|
|
7
|
+
mode: 'dialog' | 'drawer';
|
|
8
|
+
title?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface TableExportEventOptions {
|
|
11
|
+
}
|
|
12
|
+
export interface TableEditEventOptions {
|
|
13
|
+
}
|
|
14
|
+
export interface EventEmits {
|
|
15
|
+
(event: 'reload', options?: TableReloadEventOptions): void;
|
|
16
|
+
(event: 'preview', options?: TablePreviewEventOptions): void;
|
|
17
|
+
(event: 'export', options?: TableExportEventOptions): void;
|
|
18
|
+
(event: 'edit', options?: TableEditEventOptions): void;
|
|
19
|
+
(event: TableEvent, options?: TableExportEventOptions | TableReloadEventOptions | TablePreviewEventOptions | TableEditEventOptions): void;
|
|
20
|
+
}
|
|
21
|
+
export declare function useEvents(events: {
|
|
22
|
+
reload: (options?: TableReloadEventOptions) => void;
|
|
23
|
+
export: (options?: TableExportEventOptions) => void;
|
|
24
|
+
preview: (options?: TablePreviewEventOptions) => void;
|
|
25
|
+
edit: (options?: TableEditEventOptions) => void;
|
|
26
|
+
}): EventEmits;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { DataRecord, TableColumnsOptions } from '../interfaces';
|
|
2
|
+
export declare function getTableRowValue(columns: TableColumnsOptions<any>, record: DataRecord): Record<string, any>;
|
|
3
|
+
declare function exportExcel(columns: TableColumnsOptions, source: DataRecord[], filename?: string): void;
|
|
4
|
+
export declare function useExport(): {
|
|
5
|
+
exportExcel: typeof exportExcel;
|
|
6
|
+
};
|
|
7
|
+
export {};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type ComponentPublicInstance, type Ref } from 'vue';
|
|
2
|
+
import type { TableRender } from '../render/table-render';
|
|
3
|
+
type TableRenderInstance = InstanceType<typeof TableRender>;
|
|
4
|
+
type TableRenderExpose = {
|
|
5
|
+
-readonly [K in keyof Omit<TableRenderInstance, keyof ComponentPublicInstance>]: TableRenderInstance[K];
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* 获取TableRender实例
|
|
9
|
+
* @param key
|
|
10
|
+
* @returns
|
|
11
|
+
*/
|
|
12
|
+
export declare function useTable(key: string): Readonly<Ref<TableRenderExpose>>;
|
|
13
|
+
export {};
|
package/dist/cjs/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("vue"),d=require("@arco-design/web-vue");const o=n.defineComponent({props:{a:{type:String}},setup(e){console.log(e.a)},render(){const e=[{title:"Name",dataIndex:"name"},{title:"Salary",dataIndex:"salary"},{title:"Address",dataIndex:"address"},{title:"Email",dataIndex:"email"}],a=n.reactive([{key:"1",name:"Jane Doe",salary:23e3,address:"32 Park Road, London",email:"jane.doe@example.com"},{key:"2",name:"Alisa Ross",salary:25e3,address:"35 Park Road, London",email:"alisa.ross@example.com"},{key:"3",name:"Kevin Sandra",salary:22e3,address:"31 Park Road, London",email:"kevin.sandra@example.com"},{key:"4",name:"Ed Hellen",salary:17e3,address:"42 Park Road, London",email:"ed.hellen@example.com"},{key:"5",name:"William Smith",salary:27e3,address:"62 Park Road, London",email:"william.smith@example.com"}]);return n.createVNode(d.Table,{columns:e,data:a},null)}});exports.TableRender=o;
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const d=require("vue"),w=require("@arco-design/web-vue"),S=require("@gopowerteam/form-render"),T=require("@gopowerteam/modal-render");function R(e,t,r){const[u,...a]=(t.index||t.key).split(".").reverse(),l=a.reverse().reduce((n,f)=>n==null?void 0:n[f],e);l[u]=r}function E(e){const t=d.ref([]),r=a=>{const l=e.filter(n=>n.formatter);return l.length>0?a.map(n=>(l.forEach(f=>{f.formatter&&R(n,f,f.formatter(n))}),n)):a};return[t,a=>{t.value=r(a)}]}function I(e){return e.filter(t=>t.form).map(t=>({key:t.key,title:t.title,...typeof t.form=="boolean"?{}:t.form}))}function O(e){const t=d.getCurrentInstance(),r=d.ref();function u(){var l,n;const a=(n=(l=t==null?void 0:t.proxy)==null?void 0:l.$refs)==null?void 0:n[e];a&&(r.value=a)}return d.onMounted(u),d.onUpdated(u),r}function o(e){return(t,r)=>e[t](r)}const k=Symbol.for("RenderColumnType");function g(e,t,r){return t.$type=e,t.$disableColumnMode=r==null?void 0:r.disableColumnMode,t.$disableViewMode=r==null?void 0:r.disableViewMode,t.$options=(r==null?void 0:r.showOverflow)??!0,t}function h(e,t){return(t.index||t.key).split(".").reduce((r,u)=>r==null?void 0:r[u],e)}function F(e){return g("button",(r,u,a)=>{const l=T.useModal(),n=Array.isArray(e)?e:"buttons"in e?e.buttons:[e],f=(c,s)=>typeof c=="function"?c(r):c===void 0?s:c;async function i(c){await(c.confirm===!0?new Promise(b=>{l.confirm({title:"提示信息",content:c.confirmText??"您确定要执行该操作?",onOk:()=>b(!0),onCancel:()=>b(!1)})}):Promise.resolve(!0))&&(c!=null&&c.onClick)&&(await c.onClick(r),c.autoReload&&(a!=null&&a.emits)&&(a==null||a.emits("reload")))}return d.createVNode(d.Fragment,null,[n.filter(c=>f(c.visiable,!0)).map(c=>d.createVNode(w.Button,{onClick:()=>i(c),type:c.type||"text",shape:c.shape,disabled:f(c.disabled,!1)},{icon:c.icon,default:()=>(typeof c.content=="function"?c.content(r):c.content)||""}))])},{disableViewMode:!0})}function v(e){const t=a=>a.replace(/(\d{1,3})(?=(\d{3})+(?:$|\.))/g,"$1,"),r=a=>(parseFloat(a.toString())/((e==null?void 0:e.scale)||1)).toFixed((e==null?void 0:e.precision)||2);return g("dict",(a,l)=>{const n=h(a,l);return d.createVNode("div",null,[(e==null?void 0:e.prefix)!==void 0&&d.createVNode("span",null,[e==null?void 0:e.prefix]),d.createVNode("span",{class:"currency_value"},[(e==null?void 0:e.thousands)===!1?r(n):t(r(n))]),(e==null?void 0:e.suffix)!==void 0&&d.createVNode("span",null,[e==null?void 0:e.suffix])])})}const q={success:"arcoblue",warning:"orange",error:"red"};function P(e){return e instanceof Map?e:e.dict}function j(e){const t=e instanceof Map?!1:e.tag;return typeof t=="string"?q[t]:t}function z(e){const t=P(e),r=j(e);return g("dict",(a,l)=>{const n=h(a,l);return r?d.createVNode(w.Tag,{color:r===!0?void 0:r},{default:()=>[t.get(n)||n]}):d.createVNode("span",null,[t.get(n)||n])})}function A(e){function t(a,l){var f;const n=(f=document.getElementById(a))==null?void 0:f.getBoundingClientRect();if(n){const i=new Image(100,100);i.id=`IMAGE_${a}_PREVIEW`,i.src=l,i.setAttribute("style",["position:fixed;",`top:${n.top}px;`,`left:${n.left+n.width}px;`,"min-width:400px;","height:auto;","z-index:100;"].join("")),document.body.appendChild(i)}}function r(a){const l=document.getElementById(`IMAGE_${a}_PREVIEW`);l==null||l.remove()}return g("image",(a,l,n)=>{const f=h(a,l),i=Math.random().toString(32).slice(2).toUpperCase(),c={width:n!=null&&n.previewing?(e==null?void 0:e.width)||"auto":"40px",height:n!=null&&n.previewing&&(e==null?void 0:e.height)||"auto",borderRadius:e==null?void 0:e.radius,maxWidth:!(e!=null&&e.height)&&!(e!=null&&e.width)?"150px":"auto",display:"block",margin:"auto",objectFit:"contain",transform:`rotate(${(e==null?void 0:e.rotate)||0}deg)`,cursor:e!=null&&e.preview?"pointer":"unset"},s=`${l.index||l.key}_parsed`;if(e!=null&&e.parse&&(e==null||e.parse(f).then(b=>a[s]=b)),e!=null&&e.parse&&!a[s])return d.createVNode("div",null,[d.createTextVNode("Loading...")]);{const b=a[s]||f;return d.createVNode("img",{id:i,onMouseenter:()=>(e==null?void 0:e.preview)&&!(n!=null&&n.previewing)&&t(i,b),onMouseleave:()=>(e==null?void 0:e.preview)&&!(n!=null&&n.previewing)&&r(i),src:b,style:c},null)}})}const B=" ";function _(e){return e==null?void 0:e.replace(/(\d{3})\d*(\d{4})/g,"$1****$2")}function D(e,t){return e==null?void 0:e.replace(/\*/g,"M").replace(/\B(?=(?:\S{4})+$)/g,t??B).replace(/M/g,"*")}function W(e){return g("phone",(r,u)=>{const a=h(r,u),l=D(e!=null&&e.safe?_(a):a,e==null?void 0:e.separator);return e!=null&&e.callable?d.createVNode("a",{style:"text-decoration:none;",href:`tel:${a}`},[l]):d.createVNode("span",null,[l])})}function L(e){return g("render",r=>e(r),{showOverflow:!1})}function K(e){return g("tag",(r,u)=>{const a=h(r,u),l=(e==null?void 0:e.textColors)||["#F87335"],n=(e==null?void 0:e.backgroundColors)||["#FFF4E8"];return d.createVNode("div",{style:{display:"flex",flexWrap:"wrap"}},[a.map((f,i)=>d.createVNode("span",{style:{margin:"2px",padding:"2px 5px",border:`solid 2px ${(e==null?void 0:e.border)||"transparent"}`,borderRadius:`${(e==null?void 0:e.radius)||0}px`,color:typeof l=="function"?l(f,i):l[i%l.length],backgroundColor:typeof n=="function"?n(f,i):n[i%n.length]}},[f]))])},{showOverflow:!1})}function V(e){if(typeof e=="string")return e;if(typeof e=="number")return`${e}px`}function U(e,t,r){var u,a;return typeof e=="function"?(u=e(r))==null?void 0:u.toString():typeof(e==null?void 0:e.content)=="function"?(a=e==null?void 0:e.content(r))==null?void 0:a.toString():typeof(e==null?void 0:e.content)=="string"?e==null?void 0:e.content:h(r,t)}function G(e,t){if(typeof e!="function"){if(typeof(e==null?void 0:e.color)=="function")return e==null?void 0:e.color(t);if(typeof(e==null?void 0:e.color)=="string")return e==null?void 0:e.color}}function H(e,t){if(typeof e!="function")return typeof(e==null?void 0:e.size)=="function"?V(e==null?void 0:e.size(t)):V(e==null?void 0:e.size)}function J(e,t){let r="";const u=G(e,t),a=H(e,t);return u&&(r+=`color:${u};`),a&&(r+=`font-size:${a};`),r}function Q(e){return g("text",(r,u)=>{const a=U(e||{},u,r),l=J(e||{},r);return d.createVNode("span",{style:l},[a])})}function X(){return{text:Q,dict:z,tag:K,render:L,phone:W,image:A,currency:v,date:v,button:F}}function N(e,t){if(!(e!=null&&e.render))return;const r=e.render({...X()});return{render:({record:u})=>r(u,e,t),[k]:r.$type,disableColumnMode:r.$disableColumnMode,disableViewMode:r.$disableViewMode,showOverflow:r.$showOverflow,isRenderColumn:r.$type==="render",type:r.$type}}function Y(e,t,r){return e.map(u=>({...t||{},...u})).map(u=>Z(u,r)).filter(Boolean)}function Z(e,t){const{render:r}=N(e,{previewing:!1,emits:t})||{};if(!(e.visiable===!1||typeof e.visiable=="function"&&e.visiable()===!1))return{dataIndex:e.index||e.key,title:e.title,width:e.width==="auto"?void 0:e.width,align:e.align??"center",fixed:e.fixed,ellipsis:e.ellipsis??!0,tooltip:!0,...e.extraProps,render:r}}function p(e){return typeof e=="function"||Object.prototype.toString.call(e)==="[object Object]"&&!d.isVNode(e)}const ee=d.defineComponent({props:{record:{type:Object,required:!0},columns:{type:Array,required:!0},minWidth:{type:Number,required:!1,default:300},border:{type:Boolean,default:!0},exclude:{type:Array,default:()=>[]},layout:{type:String,required:!1,default:"horizontal"},buttons:{type:Array,default:()=>[]}},setup(e){const t=d.getCurrentInstance(),r=d.ref(0),u=e.columns.map(l=>({options:l,renderer:N(l,{previewing:!0})})).filter(({options:l})=>{var n;return!((n=e.exclude)!=null&&n.includes(l.key))}).filter(({renderer:l})=>!(l!=null&&l.disableViewMode));function a(){var l;if(t){const n=(l=t.proxy)==null?void 0:l.$el;console.log(n.offsetWidth),r.value=Math.floor(n.offsetWidth/e.minWidth)}}return d.onMounted(()=>{a()}),()=>{let l;return d.createVNode("div",{class:"preview-container"},[d.createVNode(w.Descriptions,{column:r.value,bordered:!0,align:"left",layout:e.layout},p(l=u.map(n=>d.createVNode(w.DescriptionsItem,{label:n.options.title},{default:()=>{var f,i;return[(f=n.renderer)!=null&&f.render?(i=n.renderer)==null?void 0:i.render({record:e.record}):h(e.record,n.options)]}})))?l:{default:()=>[l]})])}}}),re=d.defineComponent({props:{rowKey:{type:String,required:!0},form:{type:Object,required:!1},columns:{type:Object,required:!0},autoLoad:{type:Boolean,required:!1,default:!0},loadData:{type:Function,required:!1},height:{type:Number,required:!1},size:{type:String,required:!1,default:"large"},columnsOptions:{type:Object,required:!1}},expose:["preview","export"],setup(e){const t=Math.random().toString(32).slice(2).toUpperCase(),r=d.ref(),u=d.ref(),a=d.ref(),[l,n]=E(e.columns),f={rowKey:e.rowKey,size:e.size,scroll:{x:e.columns.reduce((m,y)=>m+=typeof y.width!="number"?Math.max(y.title.length*16,80):y.width,0),y:e.height??"100%"}};d.provide("a","xxxxasdasdasd");const i=e.form||I(e.columns),c=m=>{var x;if(!e.loadData)return;m!=null&&m.reset;const y={...((x=u.value)==null?void 0:x.formSource)||{}};Object.keys(y).forEach($=>{[null,void 0,""].includes(y[$])&&delete y[$]}),e.loadData({form:y,update:n})},s=m=>{const y=l.value.find(x=>x[e.rowKey]===m.key);if(!y)throw new Error("未找到需要预览的数据");a.value.open(ee,{record:y,columns:e.columns},{title:m.title||"详情",mode:m.mode})},C=o({reload:c,preview:s,export:m=>{},edit:m=>{}}),M=Y(e.columns,e.columnsOptions,C);return d.onMounted(()=>{e.autoLoad&&c()}),{tableId:t,tableInstance:r,tableSource:l,tableOptions:f,tableColumns:M,tableEvents:C,tableForm:i,formInstance:u,modalInstance:a,reload:c,preview:s}},render(){const e=()=>{if(this.tableForm)return d.createVNode("div",{class:"table-form"},[d.createVNode(S.FormRender,{form:this.tableForm,ref:r=>this.formInstance=r,searchable:!0,onSubmit:()=>this.tableEvents("reload")},null)])},t=()=>d.createVNode("div",{class:"table-body"},[d.createVNode(w.Table,d.mergeProps({data:this.tableSource,columns:this.tableColumns,ref:r=>this.tableInstance=r},this.tableOptions),null)]);return d.createVNode("div",{class:"table-render"},[d.createVNode(T.ModalProvider,{ref:r=>this.modalInstance=r},{default:()=>[d.createVNode("div",{class:"table-render-content"},[e(),t()])]})])}});function te(e){return e}function ne(e){return e}exports.TableRender=re;exports.defineColumns=te;exports.defineTableLoad=ne;exports.useEvents=o;exports.useTable=O;
|
package/dist/cjs/index.d.ts
CHANGED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { FormItemOptions } from '@gopowerteam/form-render';
|
|
2
|
+
import type { TableColumnData } from '@arco-design/web-vue';
|
|
3
|
+
import type { TableColumnRender } from './table-column-render';
|
|
4
|
+
import type { DataRecord } from '.';
|
|
5
|
+
export interface TableColumnPreviewOptions {
|
|
6
|
+
span?: number;
|
|
7
|
+
}
|
|
8
|
+
export interface TableColumnSharedOptions {
|
|
9
|
+
align?: 'left' | 'right' | 'center';
|
|
10
|
+
width?: number;
|
|
11
|
+
ellipsis?: boolean;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* 列配置
|
|
15
|
+
*/
|
|
16
|
+
export interface TableColumnOptions<T> {
|
|
17
|
+
key: string;
|
|
18
|
+
title: string;
|
|
19
|
+
index?: string;
|
|
20
|
+
fixed?: 'left' | 'right';
|
|
21
|
+
align?: 'left' | 'right' | 'center';
|
|
22
|
+
width?: number | 'auto';
|
|
23
|
+
render?: TableColumnRender<T>;
|
|
24
|
+
form?: boolean | Omit<FormItemOptions, 'key' | 'title'>;
|
|
25
|
+
formatter?: DataFormatter<T>;
|
|
26
|
+
ellipsis?: boolean;
|
|
27
|
+
preview?: TableColumnPreviewOptions;
|
|
28
|
+
exportable?: ExportColumnOptions | boolean;
|
|
29
|
+
treeNode?: boolean;
|
|
30
|
+
visiable?: boolean | (() => boolean);
|
|
31
|
+
extraProps?: Partial<Omit<TableColumnData, 'dataIndex' | 'title' | 'fixed' | 'align' | 'width'>>;
|
|
32
|
+
}
|
|
33
|
+
export interface ExportColumnOptions {
|
|
34
|
+
header?: string;
|
|
35
|
+
width?: number;
|
|
36
|
+
content?: (record: DataRecord) => string | number | undefined;
|
|
37
|
+
}
|
|
38
|
+
export type TableColumnsOptions<T = DataRecord> = TableColumnOptions<T>[];
|
|
39
|
+
export type DataFormatter<T> = (record: T) => string | number | Date | undefined;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { EventEmits } from '../hooks';
|
|
2
|
+
import type { TableColumnRenders } from '../table-columns';
|
|
3
|
+
import type { TableColumnOptions } from './table-column-options';
|
|
4
|
+
interface TableColumnRenderResultType {
|
|
5
|
+
$type?: string;
|
|
6
|
+
$disableColumnMode?: boolean;
|
|
7
|
+
$disableViewMode?: boolean;
|
|
8
|
+
$showOverflow?: boolean;
|
|
9
|
+
}
|
|
10
|
+
export interface TableColumnRenderResult<T> extends TableColumnRenderResultType {
|
|
11
|
+
(record: T, columnOptions: TableColumnOptions<T>, ctx?: {
|
|
12
|
+
previewing?: boolean;
|
|
13
|
+
emits?: EventEmits;
|
|
14
|
+
}): JSX.Element;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Render函数
|
|
18
|
+
*/
|
|
19
|
+
export interface TableColumnRender<T> {
|
|
20
|
+
(render: TableColumnRenderFun<T>): TableColumnRenderResult<T>;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Render函数模板
|
|
24
|
+
*/
|
|
25
|
+
type TableColumnRenderFun<T> = ReturnType<typeof TableColumnRenders<T>> & {
|
|
26
|
+
[key: string]: any;
|
|
27
|
+
};
|
|
28
|
+
export {};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export interface DataRecord {
|
|
2
|
+
[key: string]: any;
|
|
3
|
+
}
|
|
4
|
+
export interface DataProp {
|
|
5
|
+
[key: string]: any;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* 分页接口
|
|
9
|
+
*/
|
|
10
|
+
export interface PageService {
|
|
11
|
+
page: number;
|
|
12
|
+
size: number;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* 数据加载参数
|
|
16
|
+
*/
|
|
17
|
+
export interface TableLoadParams {
|
|
18
|
+
form: DataRecord;
|
|
19
|
+
page?: PageService;
|
|
20
|
+
update: (data: DataRecord[]) => void;
|
|
21
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { type TableColumnData, type TableData } from '@arco-design/web-vue';
|
|
2
|
+
import type { TableColumnOptions, TableColumnSharedOptions, TableColumnsOptions } from '../interfaces';
|
|
3
|
+
import { RenderColumnType } from '../utils';
|
|
4
|
+
import type { EventEmits } from '../hooks';
|
|
5
|
+
/**
|
|
6
|
+
* 生成Render模板
|
|
7
|
+
* @param render
|
|
8
|
+
* @returns
|
|
9
|
+
*/
|
|
10
|
+
export declare function toRenderColumn<T>(options?: TableColumnOptions<T>, context?: {
|
|
11
|
+
previewing?: boolean;
|
|
12
|
+
emits?: EventEmits;
|
|
13
|
+
}): {
|
|
14
|
+
render: ({ record }: {
|
|
15
|
+
record: TableData;
|
|
16
|
+
}) => JSX.Element;
|
|
17
|
+
[RenderColumnType]: string | undefined;
|
|
18
|
+
disableColumnMode: boolean | undefined;
|
|
19
|
+
disableViewMode: boolean | undefined;
|
|
20
|
+
showOverflow: boolean | undefined;
|
|
21
|
+
isRenderColumn: boolean;
|
|
22
|
+
type: string | undefined;
|
|
23
|
+
} | undefined;
|
|
24
|
+
export declare function renderTableColumns(columns: TableColumnsOptions, columnsOptions: TableColumnSharedOptions | undefined, events: EventEmits): TableColumnData[];
|
|
25
|
+
/**
|
|
26
|
+
* 创建表格列
|
|
27
|
+
* @param options
|
|
28
|
+
* @returns
|
|
29
|
+
*/
|
|
30
|
+
export declare function renderTableColumn<T>(options: TableColumnOptions<T>, events: EventEmits): TableColumnData | undefined;
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { type PropType } from 'vue';
|
|
2
|
+
import type { DataRecord, TableColumnsOptions } from '..';
|
|
3
|
+
import type { RenderSingleButtonColumnOptions } from '../table-columns/button';
|
|
4
|
+
declare const _default: import("vue").DefineComponent<{
|
|
5
|
+
record: {
|
|
6
|
+
type: ObjectConstructor;
|
|
7
|
+
required: true;
|
|
8
|
+
};
|
|
9
|
+
columns: {
|
|
10
|
+
type: PropType<TableColumnsOptions<any>>;
|
|
11
|
+
required: true;
|
|
12
|
+
};
|
|
13
|
+
minWidth: {
|
|
14
|
+
type: NumberConstructor;
|
|
15
|
+
required: false;
|
|
16
|
+
default: number;
|
|
17
|
+
};
|
|
18
|
+
border: {
|
|
19
|
+
type: BooleanConstructor;
|
|
20
|
+
default: boolean;
|
|
21
|
+
};
|
|
22
|
+
exclude: {
|
|
23
|
+
type: PropType<string[]>;
|
|
24
|
+
default: () => never[];
|
|
25
|
+
};
|
|
26
|
+
layout: {
|
|
27
|
+
type: PropType<"horizontal" | "vertical" | "inline-horizontal" | "inline-vertical">;
|
|
28
|
+
required: false;
|
|
29
|
+
default: string;
|
|
30
|
+
};
|
|
31
|
+
buttons: {
|
|
32
|
+
type: PropType<RenderSingleButtonColumnOptions<DataRecord>[]>;
|
|
33
|
+
default: () => never[];
|
|
34
|
+
};
|
|
35
|
+
}, () => import("vue/jsx-runtime").JSX.Element, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
|
|
36
|
+
record: {
|
|
37
|
+
type: ObjectConstructor;
|
|
38
|
+
required: true;
|
|
39
|
+
};
|
|
40
|
+
columns: {
|
|
41
|
+
type: PropType<TableColumnsOptions<any>>;
|
|
42
|
+
required: true;
|
|
43
|
+
};
|
|
44
|
+
minWidth: {
|
|
45
|
+
type: NumberConstructor;
|
|
46
|
+
required: false;
|
|
47
|
+
default: number;
|
|
48
|
+
};
|
|
49
|
+
border: {
|
|
50
|
+
type: BooleanConstructor;
|
|
51
|
+
default: boolean;
|
|
52
|
+
};
|
|
53
|
+
exclude: {
|
|
54
|
+
type: PropType<string[]>;
|
|
55
|
+
default: () => never[];
|
|
56
|
+
};
|
|
57
|
+
layout: {
|
|
58
|
+
type: PropType<"horizontal" | "vertical" | "inline-horizontal" | "inline-vertical">;
|
|
59
|
+
required: false;
|
|
60
|
+
default: string;
|
|
61
|
+
};
|
|
62
|
+
buttons: {
|
|
63
|
+
type: PropType<RenderSingleButtonColumnOptions<DataRecord>[]>;
|
|
64
|
+
default: () => never[];
|
|
65
|
+
};
|
|
66
|
+
}>>, {
|
|
67
|
+
minWidth: number;
|
|
68
|
+
buttons: RenderSingleButtonColumnOptions<DataRecord>[];
|
|
69
|
+
border: boolean;
|
|
70
|
+
exclude: string[];
|
|
71
|
+
layout: "horizontal" | "vertical" | "inline-horizontal" | "inline-vertical";
|
|
72
|
+
}, {}>;
|
|
73
|
+
export default _default;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export type RenderButtonColumnOptions<T> = RenderSingleButtonColumnOptions<T> | RenderSingleButtonColumnOptions<T>[] | RenderMultipleButtonColumnOptions<T>;
|
|
2
|
+
export interface RenderSingleButtonColumnOptions<T> {
|
|
3
|
+
content?: string | ((record: T) => string | number | undefined);
|
|
4
|
+
onClick?: (record: T) => Promise<void> | void;
|
|
5
|
+
autoReload?: boolean;
|
|
6
|
+
type?: 'primary' | 'secondary' | 'outline' | 'dashed' | 'text';
|
|
7
|
+
shape?: 'square' | 'round' | 'circle';
|
|
8
|
+
visiable?: boolean | ((record: T) => boolean);
|
|
9
|
+
disabled?: boolean | ((record: T) => boolean);
|
|
10
|
+
confirm?: boolean;
|
|
11
|
+
icon?: () => JSX.Element;
|
|
12
|
+
confirmText?: string;
|
|
13
|
+
confirmAppend?: string | HTMLElement;
|
|
14
|
+
confirmOffset?: {
|
|
15
|
+
left: number;
|
|
16
|
+
top: number;
|
|
17
|
+
};
|
|
18
|
+
confirmPosition?: {
|
|
19
|
+
left: number;
|
|
20
|
+
top: number;
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
export interface RenderMultipleButtonColumnOptions<T> {
|
|
24
|
+
buttons?: RenderSingleButtonColumnOptions<T>[];
|
|
25
|
+
}
|
|
26
|
+
export declare function renderButtonColumn<T>(options: RenderButtonColumnOptions<T>): import("../..").TableColumnRenderResult<T>;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { DataRecord } from '../../interfaces';
|
|
2
|
+
export interface CurrencyColumnOptions {
|
|
3
|
+
prefix?: string;
|
|
4
|
+
suffix?: string;
|
|
5
|
+
precision?: number;
|
|
6
|
+
scale?: number;
|
|
7
|
+
thousands?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare function renderCurrencyColumn<T = DataRecord>(options?: CurrencyColumnOptions): import("../../interfaces").TableColumnRenderResult<T>;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { DataRecord } from '../../interfaces';
|
|
2
|
+
export interface DateColumnOptions {
|
|
3
|
+
format?: keyof typeof dateFormats | (() => string);
|
|
4
|
+
}
|
|
5
|
+
declare const dateFormats: {
|
|
6
|
+
date: string;
|
|
7
|
+
datetime: string;
|
|
8
|
+
time: string;
|
|
9
|
+
week: string;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* 渲染Date Column
|
|
13
|
+
* @param options DateColumn列选项
|
|
14
|
+
* @returns JSX
|
|
15
|
+
*/
|
|
16
|
+
export declare function renderDateColumn<T = DataRecord>(options?: DateColumnOptions): import("../../interfaces").TableColumnRenderResult<T>;
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { DataRecord } from '../../interfaces';
|
|
2
|
+
type Dict = Map<string | number | boolean, string | number | boolean>;
|
|
3
|
+
declare const TagType: {
|
|
4
|
+
success: string;
|
|
5
|
+
warning: string;
|
|
6
|
+
error: string;
|
|
7
|
+
};
|
|
8
|
+
export type DictColumnOptions = Dict | {
|
|
9
|
+
dict: Dict;
|
|
10
|
+
tag: boolean | keyof typeof TagType;
|
|
11
|
+
};
|
|
12
|
+
export declare function renderDictColumn<T = DataRecord>(options: DictColumnOptions): import("../../interfaces").TableColumnRenderResult<T>;
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { DataRecord } from '../../interfaces';
|
|
2
|
+
export interface ImageColumnOptions {
|
|
3
|
+
width?: string;
|
|
4
|
+
height?: string;
|
|
5
|
+
radius?: string;
|
|
6
|
+
preview?: boolean;
|
|
7
|
+
rotate?: number;
|
|
8
|
+
parse?: (key: string) => Promise<string>;
|
|
9
|
+
}
|
|
10
|
+
export declare function renderImageColumn<T = DataRecord>(options?: ImageColumnOptions): import("../..").TableColumnRenderResult<T>;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare function TableColumnRenders<T>(): {
|
|
2
|
+
text: (options?: import("./text").TextColumnOptions<T> | undefined) => import("..").TableColumnRenderResult<T>;
|
|
3
|
+
dict: (options: import("./dict").DictColumnOptions) => import("..").TableColumnRenderResult<T>;
|
|
4
|
+
tag: (options?: import("./tag").TagColumnOptions | undefined) => import("..").TableColumnRenderResult<T>;
|
|
5
|
+
render: (renderer: import("./render").RenderColumnOptions<T>) => import("..").TableColumnRenderResult<T>;
|
|
6
|
+
phone: (options?: import("./phone").PhoneColumnOptions | undefined) => import("..").TableColumnRenderResult<T>;
|
|
7
|
+
image: (options?: import("./image").ImageColumnOptions | undefined) => import("..").TableColumnRenderResult<T>;
|
|
8
|
+
currency: (options?: import("./currency").CurrencyColumnOptions | undefined) => import("..").TableColumnRenderResult<T>;
|
|
9
|
+
date: (options?: import("./currency").CurrencyColumnOptions | undefined) => import("..").TableColumnRenderResult<T>;
|
|
10
|
+
button: (options: import("./button").RenderButtonColumnOptions<T>) => import("..").TableColumnRenderResult<T>;
|
|
11
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { DataRecord } from '../../interfaces';
|
|
2
|
+
export interface PhoneColumnOptions {
|
|
3
|
+
safe?: boolean;
|
|
4
|
+
separator?: string;
|
|
5
|
+
callable?: boolean;
|
|
6
|
+
}
|
|
7
|
+
export declare function renderPhoneColumn<T = DataRecord>(options?: PhoneColumnOptions): import("../../interfaces").TableColumnRenderResult<T>;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { DataRecord } from '../../interfaces';
|
|
2
|
+
export interface RenderColumnOptions<T> {
|
|
3
|
+
(record: T): JSX.Element;
|
|
4
|
+
}
|
|
5
|
+
export declare function renderRenderColumn<T = DataRecord>(renderer: RenderColumnOptions<T>): import("../../interfaces").TableColumnRenderResult<T>;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { DataRecord } from '../../interfaces';
|
|
2
|
+
export interface TagColumnOptions {
|
|
3
|
+
textColors?: string[] | ((tag: any, index: number) => string);
|
|
4
|
+
backgroundColors?: string[] | ((tag: any, index: number) => string);
|
|
5
|
+
border?: string;
|
|
6
|
+
radius?: number;
|
|
7
|
+
}
|
|
8
|
+
export declare function renderTagColumn<T = DataRecord>(options?: TagColumnOptions): import("../../interfaces").TableColumnRenderResult<T>;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { DataRecord } from '../../interfaces';
|
|
2
|
+
export type TextColumnOptions<T> = TextColumnObjectOptions<T> | TextColumnFunctionOptions<T>;
|
|
3
|
+
export interface TextColumnObjectOptions<T> {
|
|
4
|
+
color?: string | ((record: T) => string);
|
|
5
|
+
content?: string | ((record: T) => string | number | undefined);
|
|
6
|
+
size?: string | number | ((record: T) => string | number);
|
|
7
|
+
}
|
|
8
|
+
export interface TextColumnFunctionOptions<T> {
|
|
9
|
+
(record: T): string | number | undefined;
|
|
10
|
+
}
|
|
11
|
+
export declare function renderTextColumn<T = DataRecord>(options?: TextColumnOptions<T>): import("../../interfaces").TableColumnRenderResult<T>;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { TableColumnRenderResult } from '../interfaces';
|
|
2
|
+
export declare const RenderColumnType: unique symbol;
|
|
3
|
+
export declare function createColumnRender<T>(type: string, render: TableColumnRenderResult<T>, options?: {
|
|
4
|
+
disableColumnMode?: boolean;
|
|
5
|
+
disableViewMode?: boolean;
|
|
6
|
+
showOverflow?: boolean;
|
|
7
|
+
}): TableColumnRenderResult<T>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function toPx(value: string | number | undefined): string | undefined;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export type TableEvent = 'export' | 'reload' | 'preview' | 'edit';
|
|
2
|
+
export interface TableReloadEventOptions {
|
|
3
|
+
reset?: boolean;
|
|
4
|
+
}
|
|
5
|
+
export interface TablePreviewEventOptions {
|
|
6
|
+
key: string | number;
|
|
7
|
+
mode: 'dialog' | 'drawer';
|
|
8
|
+
title?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface TableExportEventOptions {
|
|
11
|
+
}
|
|
12
|
+
export interface TableEditEventOptions {
|
|
13
|
+
}
|
|
14
|
+
export interface EventEmits {
|
|
15
|
+
(event: 'reload', options?: TableReloadEventOptions): void;
|
|
16
|
+
(event: 'preview', options?: TablePreviewEventOptions): void;
|
|
17
|
+
(event: 'export', options?: TableExportEventOptions): void;
|
|
18
|
+
(event: 'edit', options?: TableEditEventOptions): void;
|
|
19
|
+
(event: TableEvent, options?: TableExportEventOptions | TableReloadEventOptions | TablePreviewEventOptions | TableEditEventOptions): void;
|
|
20
|
+
}
|
|
21
|
+
export declare function useEvents(events: {
|
|
22
|
+
reload: (options?: TableReloadEventOptions) => void;
|
|
23
|
+
export: (options?: TableExportEventOptions) => void;
|
|
24
|
+
preview: (options?: TablePreviewEventOptions) => void;
|
|
25
|
+
edit: (options?: TableEditEventOptions) => void;
|
|
26
|
+
}): EventEmits;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { DataRecord, TableColumnsOptions } from '../interfaces';
|
|
2
|
+
export declare function getTableRowValue(columns: TableColumnsOptions<any>, record: DataRecord): Record<string, any>;
|
|
3
|
+
declare function exportExcel(columns: TableColumnsOptions, source: DataRecord[], filename?: string): void;
|
|
4
|
+
export declare function useExport(): {
|
|
5
|
+
exportExcel: typeof exportExcel;
|
|
6
|
+
};
|
|
7
|
+
export {};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type ComponentPublicInstance, type Ref } from 'vue';
|
|
2
|
+
import type { TableRender } from '../render/table-render';
|
|
3
|
+
type TableRenderInstance = InstanceType<typeof TableRender>;
|
|
4
|
+
type TableRenderExpose = {
|
|
5
|
+
-readonly [K in keyof Omit<TableRenderInstance, keyof ComponentPublicInstance>]: TableRenderInstance[K];
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* 获取TableRender实例
|
|
9
|
+
* @param key
|
|
10
|
+
* @returns
|
|
11
|
+
*/
|
|
12
|
+
export declare function useTable(key: string): Readonly<Ref<TableRenderExpose>>;
|
|
13
|
+
export {};
|
package/dist/es/index.d.ts
CHANGED