@fcurd/naive-ui 0.1.0

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.
@@ -0,0 +1,70 @@
1
+ import type { CrudColumn, CrudField } from '@fcurd/core';
2
+ import type { DataTableColumn, SelectOption } from 'naive-ui';
3
+ import type { Component } from 'vue';
4
+ export declare const componentMap: Record<string, Component>;
5
+ export interface NaiveFieldUi {
6
+ /** Control props passed to the field component */
7
+ control?: Record<string, unknown> & {
8
+ form?: Record<string, unknown>;
9
+ search?: Record<string, unknown>;
10
+ };
11
+ /** FormItem props */
12
+ formItem?: {
13
+ form?: Record<string, unknown>;
14
+ search?: Record<string, unknown>;
15
+ };
16
+ /** Custom component override */
17
+ component?: Component;
18
+ /** Column props for table */
19
+ column?: Record<string, unknown>;
20
+ /** Select options (for select fields) */
21
+ options?: SelectOption[];
22
+ }
23
+ export type NaiveCrudField<Row = any, FormModel = Row> = CrudField<Row, FormModel, NaiveFieldUi>;
24
+ /**
25
+ * Get field label string
26
+ */
27
+ export declare function getFieldLabel(field: CrudField): string;
28
+ /**
29
+ * Resolve control props for a specific surface
30
+ */
31
+ export declare function resolveControlProps(field: NaiveCrudField, surface: 'form' | 'search'): Record<string, unknown>;
32
+ /**
33
+ * Resolve form item props for a specific surface
34
+ */
35
+ export declare function resolveFormItemProps(field: NaiveCrudField, surface: 'form' | 'search'): Record<string, unknown>;
36
+ /**
37
+ * Create Naive UI DataTable columns from CrudColumns
38
+ */
39
+ export declare function createTableColumns<Row = any>(columns: CrudColumn<Row, any>[], options?: {
40
+ slots?: Record<string, any>;
41
+ renderCell?: (column: CrudColumn<Row, any>, row: Row, value: any, rowIndex: number) => any;
42
+ }): DataTableColumn<Row>[];
43
+ /**
44
+ * Show confirmation dialog
45
+ */
46
+ export declare function confirmAction(message: string, options?: {
47
+ title?: string;
48
+ }): Promise<boolean>;
49
+ /**
50
+ * Handle export result (download file)
51
+ */
52
+ export declare function handleExportResult(result: Blob | {
53
+ blob: Blob;
54
+ filename?: string;
55
+ } | {
56
+ url: string;
57
+ filename?: string;
58
+ }, filename?: string): void;
59
+ /**
60
+ * Define a single field with Naive UI extensions
61
+ */
62
+ export declare function defineField<Row = any, FormModel = Row>(field: NaiveCrudField<Row, FormModel>): NaiveCrudField<Row, FormModel>;
63
+ /**
64
+ * Define multiple fields with Naive UI extensions
65
+ */
66
+ export declare function defineFields<Row = any, FormModel = Row, const Fields extends NaiveCrudField<Row, FormModel>[] = NaiveCrudField<Row, FormModel>[]>(fields: Fields): Fields;
67
+ /**
68
+ * Define table columns
69
+ */
70
+ export declare function defineColumns<Row = any, const Columns extends CrudColumn<Row>[] = CrudColumn<Row>[]>(columns: Columns): Columns;
@@ -0,0 +1,4 @@
1
+ export { default as AutoCrud } from './AutoCrud.vue';
2
+ export { default as CrudForm } from './CrudForm.vue';
3
+ export { default as CrudSearch } from './CrudSearch.vue';
4
+ export { default as CrudTable } from './CrudTable.vue';
@@ -0,0 +1,6 @@
1
+ export { default as DateField } from './DateField.vue';
2
+ export { default as DateRangeField } from './DateRangeField.vue';
3
+ export { default as NumberField } from './NumberField.vue';
4
+ export { default as SelectField } from './SelectField.vue';
5
+ export { default as SwitchField } from './SwitchField.vue';
6
+ export { default as TextField } from './TextField.vue';
@@ -0,0 +1,4 @@
1
+ export * from './adapter';
2
+ export * from './components';
3
+ export * from './controls';
4
+ export * from './render';
package/dist/index.js ADDED
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const p=require("naive-ui"),e=require("vue"),B=require("@fcurd/core"),J=require("vue-router"),U=e.defineComponent({__name:"DateField",props:e.mergeModels({field:{},surface:{default:"form"}},{modelValue:{},modelModifiers:{}}),emits:["update:modelValue"],setup(t){const r=t,o=e.useModel(t,"modelValue"),n=e.computed(()=>r.field?N(r.field,r.surface):{}),u=e.computed(()=>r.field?.type==="datetime"?"datetime":"date"),a=e.computed(()=>{const l=n.value.placeholder;if(typeof l=="string")return l;if(r.field)return typeof r.field.label=="function"?r.field.label():r.field.label});return(l,i)=>(e.openBlock(),e.createBlock(e.unref(p.NDatePicker),e.mergeProps({value:o.value,"onUpdate:value":i[0]||(i[0]=y=>o.value=y),type:u.value,placeholder:a.value},n.value),null,16,["value","type","placeholder"]))}}),L=e.defineComponent({__name:"DateRangeField",props:e.mergeModels({field:{},surface:{default:"form"}},{modelValue:{},modelModifiers:{}}),emits:["update:modelValue"],setup(t){const r=t,o=e.useModel(t,"modelValue"),n=e.computed(()=>r.field?N(r.field,r.surface):{}),u=e.computed(()=>r.field?.type==="datetimeRange"?"datetimerange":"daterange");return(a,l)=>(e.openBlock(),e.createBlock(e.unref(p.NDatePicker),e.mergeProps({value:o.value,"onUpdate:value":l[0]||(l[0]=i=>o.value=i),type:u.value},n.value),null,16,["value","type"]))}}),O=e.defineComponent({__name:"NumberField",props:e.mergeModels({field:{},surface:{default:"form"}},{modelValue:{},modelModifiers:{}}),emits:["update:modelValue"],setup(t){const r=t,o=e.useModel(t,"modelValue"),n=e.computed(()=>r.field?N(r.field,r.surface):{}),u=e.computed(()=>{const a=n.value.placeholder;if(typeof a=="string")return a;if(r.field)return typeof r.field.label=="function"?r.field.label():r.field.label});return(a,l)=>(e.openBlock(),e.createBlock(e.unref(p.NInputNumber),e.mergeProps({value:o.value,"onUpdate:value":l[0]||(l[0]=i=>o.value=i),placeholder:u.value},n.value),null,16,["value","placeholder"]))}}),_=e.defineComponent({__name:"SelectField",props:e.mergeModels({field:{},surface:{default:"form"}},{modelValue:{},modelModifiers:{}}),emits:["update:modelValue"],setup(t){const r=t,o=e.useModel(t,"modelValue"),n=e.computed(()=>{if(!r.field)return{};const a=N(r.field,r.surface),l=r.field.ui?.options??a.options;return{...a,options:l}}),u=e.computed(()=>{const a=n.value.placeholder;if(typeof a=="string")return a;if(r.field)return typeof r.field.label=="function"?r.field.label():r.field.label});return(a,l)=>(e.openBlock(),e.createBlock(e.unref(p.NSelect),e.mergeProps({value:o.value,"onUpdate:value":l[0]||(l[0]=i=>o.value=i),placeholder:u.value},n.value,{style:{"min-width":"140px"}}),null,16,["value","placeholder"]))}}),Y=e.defineComponent({__name:"SwitchField",props:e.mergeModels({field:{},surface:{default:"form"}},{modelValue:{type:Boolean},modelModifiers:{}}),emits:["update:modelValue"],setup(t){const r=t,o=e.useModel(t,"modelValue"),n=e.computed(()=>r.field?N(r.field,r.surface):{});return(u,a)=>(e.openBlock(),e.createBlock(e.unref(p.NSwitch),e.mergeProps({value:o.value,"onUpdate:value":a[0]||(a[0]=l=>o.value=l)},n.value),null,16,["value"]))}}),j=e.defineComponent({__name:"TextField",props:e.mergeModels({field:{},surface:{default:"form"}},{modelValue:{},modelModifiers:{}}),emits:["update:modelValue"],setup(t){const r=t,o=e.useModel(t,"modelValue"),n=e.computed(()=>r.field?N(r.field,r.surface):{}),u=e.computed(()=>{const l=n.value.placeholder;if(typeof l=="string")return l;if(r.field)return typeof r.field.label=="function"?r.field.label():r.field.label}),a=e.computed(()=>r.field?.type==="textarea");return(l,i)=>(e.openBlock(),e.createBlock(e.unref(p.NInput),e.mergeProps({value:o.value,"onUpdate:value":i[0]||(i[0]=y=>o.value=y),placeholder:u.value,type:a.value?"textarea":"text",autosize:a.value,resizable:a.value},n.value),null,16,["value","placeholder","type","autosize","resizable"]))}}),R={text:j,textarea:j,number:O,money:O,select:_,date:U,datetime:U,dateRange:L,datetimeRange:L,switch:Y};function A(t){return typeof t.label=="function"?t.label():t.label}function N(t,r){const n=(t.ui??{}).control??{},u=n[r];if(u&&typeof u=="object"){const{form:y,search:h,...d}=n;return{...d,...u}}const{form:a,search:l,...i}=n;return i}function D(t,r){return(t.ui?.formItem??{})[r]??{}}function G(t,r){return t.map(o=>{const n=typeof o.label=="function"?o.label():o.label,u=[`cell-${o.key}`,`cell_${o.key}`];let a=null;if(r?.slots){for(const i of u)if(r.slots[i]){a=r.slots[i];break}}const l=o.ui&&typeof o.ui=="object"&&!Array.isArray(o.ui)?o.ui:{};return{key:o.key,title:n??o.key,width:o.width,minWidth:o.minWidth,fixed:o.fixed,sorter:o.sortable?"default":void 0,render:a?(i,y)=>a({row:i,value:i[o.key],rowIndex:y}):o.render?(i,y)=>o.render({row:i,value:i[o.key],rowIndex:y}):r?.renderCell?(i,y)=>r.renderCell(o,i,i[o.key],y):void 0,...l}})}const ue=p.createDiscreteApi(["dialog","message","notification"]);async function H(t,r){return new Promise(o=>{let n=!1;function u(a){n||(n=!0,o(a))}ue.dialog.warning({title:r?.title??"确认",content:t,positiveText:"确定",negativeText:"取消",onPositiveClick:()=>u(!0),onNegativeClick:()=>u(!1),onClose:()=>u(!1)})})}function X(t,r){if(typeof window>"u")return;function o(u,a){const l=document.createElement("a");l.href=u,a&&(l.download=a),l.rel="noopener",l.target="_blank",l.click()}function n(u,a){const l=URL.createObjectURL(u);o(l,a??r??"export"),setTimeout(()=>URL.revokeObjectURL(l),3e3)}if(t instanceof Blob){n(t,r);return}if("blob"in t){n(t.blob,t.filename??r);return}"url"in t&&o(t.url,t.filename??r)}function se(t){return t}function ie(t){return t}function ce(t){return t}const de={key:0,class:"crud-form crud-form--inline"},fe=e.defineComponent({__name:"CrudForm",props:{form:{},fields:{},displayMode:{default:"modal"},visible:{type:Boolean,default:!1},title:{},resetOnClose:{type:Boolean,default:!0},formProps:{},modalProps:{},drawerProps:{},drawerContentProps:{}},emits:["update:visible","submit","cancel"],setup(t,{emit:r}){const o=t,n=r,u=e.useSlots(),a=e.ref(null),l=e.computed({get:()=>o.visible,set:f=>n("update:visible",f)}),i=e.computed(()=>typeof o.title=="function"?o.title(o.form.mode.value):o.title?o.title:o.form.mode.value==="edit"?"编辑":"新增");function y(){l.value=!1,n("cancel"),o.resetOnClose&&(o.form.reset(),a.value?.restoreValidation?.())}async function h(){if(a.value)try{await a.value.validate()}catch{return}const f=o.form.getSubmitData();n("submit",f)}function d(f){const g=D(f,"form").rule;if(!f.required)return g;const C={required:!0,message:`${A(f)}不能为空`,trigger:["input","blur","change"]};if((f.type==="number"||f.type==="money")&&(C.type="number"),!g)return[C];const P=Array.isArray(g)?g:[g];return P.some($=>$?.required===!0)?P:[C,...P]}function c(f){const k=R[f.type]??R.text,g=N(f,"form"),S=o.form.model;return e.h(k,{modelValue:S[f.key],"onUpdate:modelValue":C=>{S[f.key]=C},field:f,surface:"form",...g})}function b(){return e.h(p.NForm,{ref:a,model:o.form.model,...o.formProps,onSubmit:f=>{f.preventDefault(),h()}},()=>[o.form.visibleFields.value.map(f=>{const k=`field-${f.key}`,g=u[k],S=o.form.model,C=D(f,"form"),{rule:P,...x}=C??{};return e.h(p.NFormItem,{key:f.key,label:A(f),path:f.key,required:!!f.required,rule:d(f),...x},()=>g?g({field:f,model:S,mode:o.form.mode.value,value:S[f.key]}):c(f))}),e.h("div",{class:"crud-form__footer"},[u.footer?u.footer({mode:o.form.mode.value,dirty:o.form.dirty.value}):e.h(p.NSpace,{justify:"end"},()=>[e.h(p.NButton,{onClick:y},()=>"取消"),e.h(p.NButton,{type:"primary",attrType:"submit"},()=>"保存")])])])}return(f,k)=>t.displayMode==="inline"?(e.openBlock(),e.createElementBlock("div",de,[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(()=>b())))])):t.displayMode==="modal"?(e.openBlock(),e.createBlock(e.unref(p.NModal),e.mergeProps({key:1,show:l.value,"onUpdate:show":k[0]||(k[0]=g=>l.value=g),preset:"dialog",title:i.value},t.modalProps,{onAfterLeave:y}),{default:e.withCtx(()=>[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(()=>b())))]),_:1},16,["show","title"])):(e.openBlock(),e.createBlock(e.unref(p.NDrawer),e.mergeProps({key:2,show:l.value,"onUpdate:show":k[1]||(k[1]=g=>l.value=g),width:420,placement:"right"},t.drawerProps,{onAfterLeave:y}),{default:e.withCtx(()=>[e.createVNode(e.unref(p.NDrawerContent),e.mergeProps({title:i.value},t.drawerContentProps),{default:e.withCtx(()=>[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(()=>b())))]),_:1},16,["title"])]),_:1},16,["show"]))}}),M=(t,r)=>{const o=t.__vccOpts||t;for(const[n,u]of r)o[n]=u;return o},Z=M(fe,[["__scopeId","data-v-0bca27a9"]]),me={class:"crud-search"},pe=e.defineComponent({__name:"CrudSearch",props:{list:{},fields:{},queryKey:{},formProps:{},showReset:{type:Boolean,default:!0},showSearch:{type:Boolean,default:!0}},setup(t){const r=t;function o(d){return!!d&&typeof d=="object"&&!Array.isArray(d)}function n(d){if(!r.queryKey)return d;const c=d?.[r.queryKey];return o(c)?c:{}}const u=e.computed(()=>B.filterFieldsBySurface(r.fields,"search",{query:r.list.query.value})),a=e.computed(()=>u.value.map(d=>d.key)),l=e.reactive({});e.watch(()=>r.list.query.value,d=>{Object.keys(l).forEach(b=>{delete l[b]});const c=n(d);for(const b of a.value)b in c&&(l[b]=c[b])},{immediate:!0,deep:!0});function i(){if(!r.queryKey){r.list.setQuery(l,{mode:"merge",clearKeys:a.value,pruneEmpty:!0});return}r.list.setQuery({[r.queryKey]:{...l}},{mode:"merge",pruneEmpty:!0})}function y(){Object.keys(l).forEach(d=>{delete l[d]}),r.list.reset()}function h(d){const c=R[d.type]??R.text,b=N(d,"search");return e.h(c,{modelValue:l[d.key],"onUpdate:modelValue":f=>{l[d.key]=f},field:d,surface:"search",...b})}return(d,c)=>(e.openBlock(),e.createElementBlock("div",me,[e.createVNode(e.unref(p.NForm),e.mergeProps({inline:"","label-placement":"left"},t.formProps,{onSubmit:e.withModifiers(i,["prevent"])}),{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(u.value,b=>(e.openBlock(),e.createBlock(e.unref(p.NFormItem),e.mergeProps({key:b.key,label:e.unref(A)(b)},{ref_for:!0},e.unref(D)(b,"search")),{default:e.withCtx(()=>[e.renderSlot(d.$slots,`search-${b.key}`,{field:b,model:l},()=>[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(()=>h(b))))],!0)]),_:2},1040,["label"]))),128)),t.showSearch||t.showReset?(e.openBlock(),e.createBlock(e.unref(p.NFormItem),{key:0},{default:e.withCtx(()=>[e.createVNode(e.unref(p.NSpace),null,{default:e.withCtx(()=>[t.showSearch?(e.openBlock(),e.createBlock(e.unref(p.NButton),{key:0,type:"primary","attr-type":"submit"},{default:e.withCtx(()=>[...c[0]||(c[0]=[e.createTextVNode(" 搜索 ",-1)])]),_:1})):e.createCommentVNode("",!0),t.showReset?(e.openBlock(),e.createBlock(e.unref(p.NButton),{key:1,onClick:y},{default:e.withCtx(()=>[...c[1]||(c[1]=[e.createTextVNode(" 重置 ",-1)])]),_:1})):e.createCommentVNode("",!0)]),_:1})]),_:1})):e.createCommentVNode("",!0)]),_:3},16)]))}}),ee=M(pe,[["__scopeId","data-v-e009ac6b"]]),ye={class:"crud-table"},ve={key:0,class:"crud-table__header"},he={class:"crud-table__pagination"},be=e.defineComponent({__name:"CrudTable",props:{list:{},columns:{},selection:{},rowKey:{},showActionsColumn:{type:Boolean,default:!1},actionsColumnTitle:{default:"操作"},actionsColumnWidth:{default:120},tableProps:{},paginationProps:{},getRowActionsSlotProps:{}},emits:["sort"],setup(t,{emit:r}){const o=t,n=r,u=e.useSlots(),a=e.computed(()=>{const c=G(o.columns,{slots:u,renderCell:(b,f,k)=>k});return o.selection&&c.unshift({type:"selection"}),o.showActionsColumn&&u["row-actions"]&&c.push({key:"__actions",title:o.actionsColumnTitle,width:o.actionsColumnWidth,fixed:"right",render:(b,f)=>{const k=o.getRowActionsSlotProps?.(b)??{},g={row:b,rowIndex:f,...k};return e.h(p.NSpace,{size:8},()=>u["row-actions"](g))}}),c}),l=e.computed(()=>o.selection?[...o.selection.selectedIds.value]:[]);function i(c){o.selection&&o.selection.setSelectedIds(c)}function y(c){if(!c||Array.isArray(c)){o.list.setSort(null),n("sort",null);return}if(c.order===!1||c.order===void 0){o.list.setSort(null),n("sort",null);return}const b={field:String(c.columnKey),order:c.order};o.list.setSort(b),n("sort",b)}function h(c){o.list.setPage(c)}function d(c){o.list.setPageSize(c)}return(c,b)=>(e.openBlock(),e.createElementBlock("div",ye,[c.$slots["table-header"]?(e.openBlock(),e.createElementBlock("div",ve,[e.renderSlot(c.$slots,"table-header",{list:t.list,selection:t.selection},void 0,!0)])):e.createCommentVNode("",!0),e.createVNode(e.unref(p.NDataTable),e.mergeProps({columns:a.value,data:t.list.rows.value,loading:t.list.loading.value,"row-key":t.rowKey,"checked-row-keys":l.value,remote:""},t.tableProps,{"onUpdate:checkedRowKeys":i,"onUpdate:sorter":y}),null,16,["columns","data","loading","row-key","checked-row-keys"]),e.createElementVNode("div",he,[e.createVNode(e.unref(p.NPagination),e.mergeProps({page:t.list.page.value,"page-size":t.list.pageSize.value,"item-count":t.list.total.value,"show-size-picker":"","page-sizes":[10,20,50,100]},t.paginationProps,{"onUpdate:page":h,"onUpdate:pageSize":d}),null,16,["page","page-size","item-count"])])]))}}),te=M(be,[["__scopeId","data-v-0a031491"]]),ge={key:1,class:"auto-crud__before-table"},ke={key:2,class:"auto-crud__batch-actions"},we=e.defineComponent({__name:"AutoCrud",props:{adapter:{},fields:{},columns:{},searchFields:{},searchQueryKey:{},actions:{},formMode:{default:"modal"},showSelection:{type:Boolean,default:!1},showActionsColumn:{type:Boolean,default:!0},disableCreate:{type:Boolean,default:!1},disableEdit:{type:Boolean,default:!1},disableDelete:{type:Boolean,default:!1},disableExport:{type:Boolean,default:!1},title:{default:"列表"},paginationProps:{},routeSync:{type:Boolean,default:!1},routeQueryKey:{default:"q"}},emits:["submit","success","error"],setup(t,{expose:r,emit:o}){const n=t,u=o,a=e.useSlots();function l(s){return{openEdit:()=>P(s),actions:T.value,defaultButtons:ae}}const i=new Set(["toolbar","before-table","batch-actions","row-actions","search","table","form","table-header","footer"]),y=e.computed(()=>{const s={};for(const m of Object.keys(a))i.has(m)||(s[m]=a[m]);return s}),h=B.useCrudList({adapter:n.adapter,onError:s=>u("error",s)}),d=B.useCrudSelection({rows:h.rows,getId:n.adapter.getId}),c=B.useCrudForm({fields:n.fields});let b=null,f=null;try{b=J.useRouter(),f=J.useRoute()}catch{}n.routeSync&&b&&f&&B.useCrudRouteSync({query:h.query,setQuery:h.setQuery,router:b,route:f,queryKey:n.routeQueryKey});const k=e.ref(!1),g=e.ref(null);function S(s){k.value=s}function C(){g.value=null,c.reset(),c.setMode("create"),k.value=!0}function P(s){g.value=s,c.reset(s),c.setMode("edit"),k.value=!0}function x(s){return{row:s,selectedRows:d.selectedRows.value,selectedIds:[...d.selectedIds.value],query:h.query.value??{},sort:h.sort.value,page:h.page.value,pageSize:h.pageSize.value,refresh:h.refresh,clearSelection:d.clear}}async function $(s,m){const v=x(m);if(s.confirm){const w=typeof s.confirm=="string"?s.confirm:"确定要执行此操作吗?";if(!await H(w))return}await s.onClick(v)}const re=e.computed(()=>{const s=[];return!n.disableCreate&&n.adapter.create&&s.push(B.presetActions.create({onClick:C})),!n.disableEdit&&n.adapter.update&&s.push(B.presetActions.edit({onClick:P})),!n.disableDelete&&n.adapter.remove&&s.push(B.presetActions.delete({adapter:n.adapter,getId:n.adapter.getId,onError:m=>u("error",m)})),!n.disableExport&&n.adapter.export&&s.push(B.presetActions.export({adapter:n.adapter,handleExport:X,onError:m=>u("error",m)})),s}),ne=e.computed(()=>n.actions?n.actions:re.value);function q(s){return ne.value.filter(m=>{if(m.area!==s)return!1;const v=x();return!(m.visible&&!m.visible(v))}).sort((m,v)=>(m.order??0)-(v.order??0))}const T=e.computed(()=>q("row")),le=e.computed(()=>q("toolbar")),z=e.computed(()=>q("batch")),Q=e.computed(()=>n.columns?n.columns:B.createColumnsFromFields(n.fields)),K=e.computed(()=>n.adapter.getId??(s=>s.id));async function W(s){const m=c.mode.value;u("submit",{mode:m,data:s});try{if(m==="create"&&n.adapter.create){const v=await n.adapter.create(s);u("success",{mode:m,data:v})}else if(m==="edit"&&n.adapter.update&&g.value){const v=K.value(g.value),w=await n.adapter.update(v,s);u("success",{mode:m,data:w})}k.value=!1,await h.refresh()}catch(v){u("error",v)}}function V(s,m){const v=x(m),w=s.disabled?.(v)??!1;return e.h(p.NButton,{size:m?"small":void 0,type:s.type==="primary"?"primary":s.type==="error"?"error":void 0,disabled:w,onClick:()=>$(s,m)},()=>s.label)}const ae={Edit:s=>{const m=T.value.find(v=>v.id==="edit");return m?V(m,s.row):null},Delete:s=>{const m=T.value.find(v=>v.id==="delete");return m?V(m,s.row):null},View:s=>{const m=T.value.find(v=>v.id==="view");return m?V(m,s.row):null}};return r({list:h,selection:d,form:c,refresh:h.refresh,openCreate:C,openEdit:P}),(s,m)=>(e.openBlock(),e.createBlock(e.unref(p.NCard),{title:t.title},{"header-extra":e.withCtx(()=>[e.createVNode(e.unref(p.NSpace),null,{default:e.withCtx(()=>[e.renderSlot(s.$slots,"toolbar",{list:e.unref(h),selection:e.unref(d),openCreate:C},()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(le.value,v=>(e.openBlock(),e.createBlock(e.resolveDynamicComponent(()=>V(v)),{key:v.id}))),128))],!0)]),_:3})]),default:e.withCtx(()=>[t.searchFields?.length||t.fields.some(v=>v.visibleIn?.search!==!1)?e.renderSlot(s.$slots,"search",{key:0,list:e.unref(h),fields:t.searchFields??t.fields},()=>[e.createVNode(ee,{list:e.unref(h),fields:t.searchFields??t.fields,"query-key":t.searchQueryKey},e.createSlots({_:2},[e.renderList(y.value,(v,w)=>({name:w,fn:e.withCtx(E=>[e.renderSlot(s.$slots,w,e.normalizeProps(e.guardReactiveProps(E)),void 0,!0)])}))]),1032,["list","fields","query-key"])],!0):e.createCommentVNode("",!0),s.$slots["before-table"]?(e.openBlock(),e.createElementBlock("div",ge,[e.renderSlot(s.$slots,"before-table",{list:e.unref(h),selection:e.unref(d)},void 0,!0)])):e.createCommentVNode("",!0),z.value.length>0&&e.unref(d).selectedCount.value>0?(e.openBlock(),e.createElementBlock("div",ke,[e.renderSlot(s.$slots,"batch-actions",{list:e.unref(h),selection:e.unref(d),actions:z.value,renderActionButton:V},()=>[e.createVNode(e.unref(p.NSpace),null,{default:e.withCtx(()=>[e.createElementVNode("span",null,"已选择 "+e.toDisplayString(e.unref(d).selectedCount.value)+" 项",1),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(z.value,v=>(e.openBlock(),e.createBlock(e.resolveDynamicComponent(()=>V(v)),{key:v.id}))),128))]),_:1})],!0)])):e.createCommentVNode("",!0),e.renderSlot(s.$slots,"table",{list:e.unref(h),columns:Q.value,selection:t.showSelection?e.unref(d):void 0,rowKey:K.value,rowActions:T.value,renderActionButton:V,getRowActionsSlotProps:l},()=>[e.createVNode(te,{list:e.unref(h),columns:Q.value,selection:t.showSelection?e.unref(d):void 0,"row-key":K.value,"show-actions-column":t.showActionsColumn&&T.value.length>0,"pagination-props":t.paginationProps,"get-row-actions-slot-props":l},e.createSlots({"row-actions":e.withCtx(v=>[e.renderSlot(s.$slots,"row-actions",e.normalizeProps(e.guardReactiveProps(v)),()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(T.value,w=>(e.openBlock(),e.createBlock(e.resolveDynamicComponent(()=>V(w,v.row)),{key:w.id}))),128))],!0)]),_:2},[e.renderList(y.value,(v,w)=>({name:w,fn:e.withCtx(E=>[e.renderSlot(s.$slots,w,e.normalizeProps(e.guardReactiveProps(E)),void 0,!0)])}))]),1032,["list","columns","selection","row-key","show-actions-column","pagination-props"])],!0),e.renderSlot(s.$slots,"form",{form:e.unref(c),fields:t.fields,visible:k.value,setVisible:S,mode:e.unref(c).mode.value,editingRow:g.value,submit:W},()=>[e.createVNode(Z,{visible:k.value,"onUpdate:visible":m[0]||(m[0]=v=>k.value=v),form:e.unref(c),fields:t.fields,"display-mode":t.formMode,onSubmit:W},e.createSlots({_:2},[e.renderList(y.value,(v,w)=>({name:w,fn:e.withCtx(E=>[e.renderSlot(s.$slots,w,e.normalizeProps(e.guardReactiveProps(E)),void 0,!0)])}))]),1032,["visible","form","fields","display-mode"])],!0)]),_:3},8,["title"]))}}),Ce=M(we,[["__scopeId","data-v-299e1ff1"]]);function F(t){return t==null||t===""}function I(t){if(t==null)return"";if(typeof t=="string")return t;if(typeof t=="number"||typeof t=="bigint"||typeof t=="boolean")return String(t);try{return JSON.stringify(t)}catch{return String(t)}}function Be(t){if(t instanceof Date)return Number.isNaN(t.getTime())?null:t;if(typeof t=="number"){const r=new Date(t);return Number.isNaN(r.getTime())?null:r}if(typeof t=="string"){const r=t.trim();if(!r)return null;const o=Number(r);if(!Number.isNaN(o)){const u=new Date(o);return Number.isNaN(u.getTime())?null:u}const n=new Date(r);return Number.isNaN(n.getTime())?null:n}return null}function Ne(t={}){const{placeholder:r="-",parse:o=Be,locale:n="zh-CN",formatOptions:u={year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"}}=t,a=new Intl.DateTimeFormat(n,u);return l=>{if(F(l.value))return r;const i=o(l.value);return i?a.format(i):r}}function Se(t={}){const{placeholder:r="-",locale:o="zh-CN",currency:n="CNY",minimumFractionDigits:u=2,maximumFractionDigits:a=2}=t,l=new Intl.NumberFormat(o,{style:"currency",currency:n,minimumFractionDigits:u,maximumFractionDigits:a});return i=>{const y=i.value;if(F(y))return r;const h=typeof y=="number"?y:Number(y);return Number.isNaN(h)?r:l.format(h)}}function Pe(t={}){const{placeholder:r="-",popoverProps:o,previewMaxLen:n=60}=t;return u=>{if(F(u.value))return r;let a="";try{a=typeof u.value=="string"?u.value:JSON.stringify(u.value,null,2)}catch{a=String(u.value)}const l=a.length>n?`${a.slice(0,n)}…`:a;return e.h(p.NPopover,{trigger:"hover",placement:"top",...o??{}},{trigger:()=>e.h(p.NEllipsis,{tooltip:!1,lineClamp:1},{default:()=>l}),default:()=>e.h(p.NCode,{code:a,language:"json",wordWrap:!0})})}}function Ve(t={}){const{placeholder:r="-",width:o=32,height:n=32,previewDisabled:u=!0,getUrl:a}=t;return l=>{const i=a?a(l):typeof l.value=="string"?l.value:null;return i?e.h(p.NImage,{src:i,width:o,height:n,previewDisabled:u}):r}}function Fe(t={}){const{placeholder:r="-",trueText:o="是",falseText:n="否",trueType:u="success",falseType:a="default",nullText:l=r,nullType:i="default",size:y="small"}=t;return h=>{const d=h.value;return d===!0?e.h(p.NTag,{type:u,size:y},{default:()=>o}):d===!1?e.h(p.NTag,{type:a,size:y},{default:()=>n}):e.h(p.NTag,{type:i,size:y},{default:()=>l})}}function oe(t){const{placeholder:r="-",map:o,options:n}=t,u=new Map;for(const a of n??[])a.value===null||a.value===void 0||(typeof a.value=="string"||typeof a.value=="number")&&u.set(a.value,String(a.label??a.value));return a=>{if(F(a.value))return r;const l=a.value,i=String(l),y=o?o[i]??(typeof l=="number"?o[l]:void 0):void 0,h=typeof l=="string"||typeof l=="number"?u.get(l):void 0;return y??h??I(l)}}function Te(t){const{placeholder:r="-",typeMap:o,defaultType:n="default",size:u="small"}=t,a=oe(t);return l=>{if(F(l.value))return r;const i=l.value,y=String(i),d=(o?o[y]??(typeof i=="number"?o[i]:void 0):void 0)??n;return e.h(p.NTag,{type:d,size:u},{default:()=>a(l)})}}function xe(t={}){const{placeholder:r="-"}=t;return o=>F(o.value)?r:I(o.value)}function Ee(t={}){const{placeholder:r="-",lineClamp:o=1,tooltip:n=!0}=t;return u=>{if(F(u.value))return r;const a=I(u.value);return e.h(p.NEllipsis,{tooltip:n,lineClamp:o},{default:()=>a})}}exports.AutoCrud=Ce;exports.CrudForm=Z;exports.CrudSearch=ee;exports.CrudTable=te;exports.DateField=U;exports.DateRangeField=L;exports.NumberField=O;exports.SelectField=_;exports.SwitchField=Y;exports.TextField=j;exports.cellBooleanTag=Fe;exports.cellDateTime=Ne;exports.cellEllipsis=Ee;exports.cellEnumLabel=oe;exports.cellEnumTag=Te;exports.cellImage=Ve;exports.cellJsonPopover=Pe;exports.cellMoney=Se;exports.cellText=xe;exports.componentMap=R;exports.confirmAction=H;exports.createTableColumns=G;exports.defineColumns=ce;exports.defineField=se;exports.defineFields=ie;exports.getFieldLabel=A;exports.handleExportResult=X;exports.isEmptyValue=F;exports.resolveControlProps=N;exports.resolveFormItemProps=D;exports.toText=I;