@hbdlzy/ui-core 0.1.0 → 0.1.1

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/README.md CHANGED
@@ -4,17 +4,40 @@
4
4
 
5
5
  ## 当前内容
6
6
 
7
+ - `BaseTable`
8
+ - `BaseCard`
9
+ - `BaseEChart`
7
10
  - `BaseExportButton`
11
+ - `echarts`
8
12
  - `exportExcel`
9
13
 
10
14
  ## 使用方式
11
15
 
12
16
  ```ts
13
- import { BaseExportButton, exportExcel } from '@hbdlzy/ui-core'
17
+ import { BaseTable, BaseCard, BaseEChart, BaseExportButton, echarts, exportExcel } from '@hbdlzy/ui-core'
14
18
  ```
15
19
 
20
+ ## 详细文档
21
+
22
+ - `BaseTable`: [src/components/BaseTable/README.md](./src/components/BaseTable/README.md)
23
+ - `BaseCard`: [src/components/BaseCard/README.md](./src/components/BaseCard/README.md)
24
+ - `BaseEChart`: [src/components/BaseEChart/README.md](./src/components/BaseEChart/README.md)
25
+ - `BaseExportButton`: [src/components/BaseExportButton/README.md](./src/components/BaseExportButton/README.md)
26
+ - AI 清单: [components.manifest.json](./components.manifest.json)
27
+
28
+ ## 当前导出能力
29
+
30
+ - 组件
31
+ - `BaseTable`
32
+ - `BaseCard`
33
+ - `BaseEChart`
34
+ - `BaseExportButton`
35
+ - 工具
36
+ - `echarts`
37
+ - `exportExcel`
38
+
16
39
  ## 设计原则
17
40
 
18
41
  - 只做基础 UI 和交互
19
42
  - 不直接依赖接口、路由、store
20
- - 每个组件必须配套 README 和 AI manifest
43
+ - 每个组件必须配套 README 和 AI manifest
@@ -3,13 +3,191 @@
3
3
  "version": 1,
4
4
  "updatedAt": "2026-04-21",
5
5
  "components": [
6
+ {
7
+ "name": "BaseTable",
8
+ "category": "ui-core",
9
+ "entry": "@hbdlzy/ui-core",
10
+ "importName": "BaseTable",
11
+ "docs": "packages/ui-core/src/components/BaseTable/README.md",
12
+ "description": "统一封装分页、远程请求、勾选列、索引列、操作列和常见表格列渲染能力的基础表格组件。",
13
+ "props": [
14
+ {
15
+ "name": "columns",
16
+ "type": "BaseTableColumn[]",
17
+ "required": true
18
+ },
19
+ {
20
+ "name": "data",
21
+ "type": "Record<string, any>[]",
22
+ "required": false
23
+ },
24
+ {
25
+ "name": "request",
26
+ "type": "BaseTableRequestHandler",
27
+ "required": false
28
+ },
29
+ {
30
+ "name": "requestParams",
31
+ "type": "Record<string, unknown>",
32
+ "required": false
33
+ },
34
+ {
35
+ "name": "resultAdapter",
36
+ "type": "(result: unknown, params: BaseTableRequestParams) => { rows?: Record<string, any>[]; total?: number }",
37
+ "required": false
38
+ },
39
+ {
40
+ "name": "defaultSort",
41
+ "type": "BaseTableSortState",
42
+ "required": false
43
+ },
44
+ {
45
+ "name": "sortFieldKey",
46
+ "type": "string",
47
+ "default": "sortField"
48
+ },
49
+ {
50
+ "name": "sortOrderKey",
51
+ "type": "string",
52
+ "default": "sortOrder"
53
+ },
54
+ {
55
+ "name": "sortMapper",
56
+ "type": "(payload: BaseTableSortPayload) => Record<string, unknown> | void",
57
+ "required": false
58
+ },
59
+ {
60
+ "name": "hasSelection",
61
+ "type": "boolean",
62
+ "default": false
63
+ },
64
+ {
65
+ "name": "hasIndex",
66
+ "type": "boolean",
67
+ "default": false
68
+ },
69
+ {
70
+ "name": "showPagination",
71
+ "type": "boolean",
72
+ "default": true
73
+ }
74
+ ],
75
+ "emits": ["row-action", "selection-change", "sort-change", "page-change", "size-change", "loaded"]
76
+ },
77
+ {
78
+ "name": "BaseCard",
79
+ "category": "ui-core",
80
+ "entry": "@hbdlzy/ui-core",
81
+ "importName": "BaseCard",
82
+ "docs": "packages/ui-core/src/components/BaseCard/README.md",
83
+ "description": "统一封装卡片标题区、右侧信息区、导出触发区和常用卡片视觉样式的基础容器组件。",
84
+ "props": [
85
+ {
86
+ "name": "title",
87
+ "type": "string",
88
+ "default": ""
89
+ },
90
+ {
91
+ "name": "metaText",
92
+ "type": "string",
93
+ "default": ""
94
+ },
95
+ {
96
+ "name": "showHeader",
97
+ "type": "boolean",
98
+ "default": true
99
+ },
100
+ {
101
+ "name": "showTitleMarker",
102
+ "type": "boolean",
103
+ "default": true
104
+ },
105
+ {
106
+ "name": "showExport",
107
+ "type": "boolean",
108
+ "default": false
109
+ },
110
+ {
111
+ "name": "exportPayload",
112
+ "type": "unknown",
113
+ "required": false
114
+ },
115
+ {
116
+ "name": "padding",
117
+ "type": "string | number",
118
+ "default": 20
119
+ },
120
+ {
121
+ "name": "borderColor",
122
+ "type": "string",
123
+ "default": "var(--border-color)"
124
+ },
125
+ {
126
+ "name": "backgroundColor",
127
+ "type": "string",
128
+ "default": "var(--border-bg-color)"
129
+ },
130
+ {
131
+ "name": "markerColor",
132
+ "type": "string",
133
+ "default": "var(--el-color-primary)"
134
+ }
135
+ ],
136
+ "emits": ["export"]
137
+ },
138
+ {
139
+ "name": "BaseEChart",
140
+ "category": "ui-core",
141
+ "entry": "@hbdlzy/ui-core",
142
+ "importName": "BaseEChart",
143
+ "docs": "packages/ui-core/src/components/BaseEChart/README.md",
144
+ "description": "统一封装 ECharts 的初始化、setOption、自动 resize、实例销毁和常用实例方法暴露。",
145
+ "props": [
146
+ {
147
+ "name": "option",
148
+ "type": "EChartOption",
149
+ "required": false
150
+ },
151
+ {
152
+ "name": "theme",
153
+ "type": "string | object",
154
+ "required": false
155
+ },
156
+ {
157
+ "name": "initOptions",
158
+ "type": "EChartInitOptions",
159
+ "required": false
160
+ },
161
+ {
162
+ "name": "setOptionOptions",
163
+ "type": "boolean | EChartSetOptionOptions",
164
+ "required": false
165
+ },
166
+ {
167
+ "name": "loading",
168
+ "type": "boolean",
169
+ "default": false
170
+ },
171
+ {
172
+ "name": "autoResize",
173
+ "type": "boolean",
174
+ "default": true
175
+ },
176
+ {
177
+ "name": "useDefaultColors",
178
+ "type": "boolean",
179
+ "default": true
180
+ }
181
+ ],
182
+ "emits": ["ready"]
183
+ },
6
184
  {
7
185
  "name": "BaseExportButton",
8
186
  "category": "ui-core",
9
187
  "entry": "@hbdlzy/ui-core",
10
188
  "importName": "BaseExportButton",
11
189
  "docs": "packages/ui-core/src/components/BaseExportButton/README.md",
12
- "description": "统一处理前端 Excel 导出和后�?blob 下载的基础导出按钮�?,
190
+ "description": "统一处理前端 Excel 导出和后端 blob 下载的基础导出按钮。",
13
191
  "props": [
14
192
  {
15
193
  "name": "label",
@@ -41,10 +219,15 @@
41
219
  }
42
220
  ],
43
221
  "utilities": [
222
+ {
223
+ "name": "echarts",
224
+ "entry": "@hbdlzy/ui-core",
225
+ "description": "统一导出的 echarts 对象,可直接调用 graphic、format 等内置能力。"
226
+ },
44
227
  {
45
228
  "name": "exportExcel",
46
229
  "entry": "@hbdlzy/ui-core",
47
- "description": "支持多级表头和自动列宽的纯前�?Excel 导出工具�?
230
+ "description": "支持多级表头和自动列宽的纯前端 Excel 导出工具。"
48
231
  }
49
232
  ]
50
233
  }
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});var c=require("vue"),g=require("element-plus"),w=require("xlsx"),O=require("file-saver");function D(e){if(e&&e.__esModule)return e;var r=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});return e&&Object.keys(e).forEach(function(t){if(t!=="default"){var n=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,n.get?n:{enumerable:!0,get:function(){return e[t]}})}}),r.default=e,Object.freeze(r)}var x=D(w);const S="Sheet1",A=16;function h(e){var r;return(r=e.children)!=null&&r.length?e.children.reduce((t,n)=>t+h(n),0):1}function y(e,r=1){return e.reduce((t,n)=>{var o;return(o=n.children)!=null&&o.length?Math.max(t,y(n.children,r+1)):Math.max(t,r)},r)}function b(e){const r=`${e!=null?e:""}`;return Array.from(r).reduce((t,n)=>t+(n.charCodeAt(0)>255?2:1),0)}function _(e,r){return r?r.split(".").reduce((t,n)=>{if(t!=null)return t[n]},e):""}function N(e,r,t){return typeof t.formatter=="function"?t.formatter(e,r,t):_(e,t.key)}function q(e){const r=y(e),t=e.reduce((u,s)=>u+h(s),0),n=Array.from({length:r},()=>Array.from({length:t}).fill("")),o=[],l=[];let f=0;const d=(u,s)=>{var p;const a=f,i=h(u);if(n[s][a]=u.label,(p=u.children)!=null&&p.length){u.children.forEach(m=>d(m,s+1)),i>1&&o.push({s:{r:s,c:a},e:{r:s,c:a+i-1}});return}l.push(u),f+=1,s<r-1&&o.push({s:{r:s,c:a},e:{r:r-1,c:a}})};return e.forEach(u=>d(u,0)),{headerRows:n,leafColumns:l,merges:o}}function H(e,r,t,n){return e.map((o,l)=>{var s;const f=b(o.label),d=r.reduce((a,i)=>Math.max(a,b(i[l])),0);return{wch:(s=o.width)!=null?s:n?Math.max(t,f,d):t}})}function k(e){return e.endsWith(".xlsx")?e:`${e}.xlsx`}function F(e){const{fileName:r,sheetName:t=S,data:n,autoWidth:o=!0,defaultColumnWidth:l=A}=e,f=e.columns.filter(m=>!!m);if(!f.length)throw new Error("Excel export columns can not be empty.");const{headerRows:d,leafColumns:u,merges:s}=q(f),a=n.map((m,B)=>u.map(M=>N(m,B,M))),i=x.utils.aoa_to_sheet([...d,...a]);i["!merges"]=s,i["!cols"]=H(u,a,l,o);const p=x.utils.book_new();x.utils.book_append_sheet(p,i,t),x.writeFile(p,k(r))}const L="export-file";function z(e,r){var o;if(!e)return"";const t=r.toLowerCase(),n=Object.keys(e).find(l=>l.toLowerCase()===t);return n&&(o=e[n])!=null?o:""}function C(e){if(!e)return"";const r=e.match(/filename\*=UTF-8''([^;]+)/i);if(r!=null&&r[1])return decodeURIComponent(r[1].replace(/["']/g,""));const t=e.match(/filename="?([^";]+)"?/i);return t!=null&&t[1]?decodeURIComponent(t[1].replace(/["']/g,"")):""}function E(e){return`${e!=null?e:""}`.trim()||L}function T(e){return e instanceof Blob?e:new Blob([e])}function v(e,r=""){const t=z(e.headers,"content-disposition"),n=E(C(t)||r);return O.saveAs(T(e.data),n),n}const j=c.defineComponent({__name:"BaseExportButton",props:{label:{type:String,default:"\u5BFC\u51FA"},type:{type:String,default:"primary"},size:{type:String,default:"default"},plain:{type:Boolean,default:!1},link:{type:Boolean,default:!1},text:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},fileName:{type:String,default:""},excelOptions:Object,requestHandler:Function,beforeExport:Function,successMessage:{type:String,default:"\u5BFC\u51FA\u6210\u529F"},errorMessage:{type:String,default:"\u5BFC\u51FA\u5931\u8D25\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5"},autoMessage:{type:Boolean,default:!0}},emits:["start","success","error"],setup(e,{emit:r}){const t=e,n=r,o=c.ref(!1),l=c.computed(()=>t.excelOptions&&t.requestHandler?"invalid":t.excelOptions?"excel":t.requestHandler?"request":"none"),f=c.computed(()=>t.disabled||o.value||l.value==="none");async function d(){return t.beforeExport?await t.beforeExport()!==!1:!0}async function u(){if(o.value||t.disabled)return;if(l.value==="none"){g.ElMessage.warning("\u8BF7\u5148\u914D\u7F6E\u5BFC\u51FA\u903B\u8F91");return}if(l.value==="invalid"){const a=new Error("BaseExportButton \u4E0D\u80FD\u540C\u65F6\u63A5\u6536 excelOptions \u548C requestHandler");n("error",a),g.ElMessage.error(a.message);return}if(!!await d()){o.value=!0,n("start");try{if(l.value==="excel"&&t.excelOptions){F(t.excelOptions),t.autoMessage&&g.ElMessage.success(t.successMessage),n("success",{mode:"excel",fileName:E(t.excelOptions.fileName)});return}if(l.value==="request"&&t.requestHandler){const a=await t.requestHandler(),i=v(a,t.fileName);t.autoMessage&&g.ElMessage.success(t.successMessage),n("success",{mode:"request",fileName:i})}}catch(a){console.error(a),t.autoMessage&&g.ElMessage.error(t.errorMessage),n("error",a)}finally{o.value=!1}}}return(s,a)=>{const i=c.resolveComponent("el-button");return c.openBlock(),c.createBlock(i,{class:"base-export-button",type:e.type,size:e.size,plain:e.plain,link:e.link,text:e.text,disabled:f.value,loading:o.value,onClick:u},{default:c.withCtx(()=>[c.renderSlot(s.$slots,"default",{},()=>[c.createTextVNode(c.toDisplayString(e.label),1)])]),_:3},8,["type","size","plain","link","text","disabled","loading"])}}});exports.BaseExportButton=j;exports.downloadExportResponse=v;exports.exportExcel=F;exports.extractFileNameFromDisposition=C;exports.normalizeExportFileName=E;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});var Oe=require("echarts"),e=require("vue"),W=require("element-plus"),Ae=require("exceljs"),ge=require("file-saver");function De(a){return a&&typeof a=="object"&&"default"in a?a:{default:a}}function Re(a){if(a&&a.__esModule)return a;var i=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});return a&&Object.keys(a).forEach(function(o){if(o!=="default"){var r=Object.getOwnPropertyDescriptor(a,o);Object.defineProperty(i,o,r.get?r:{enumerable:!0,get:function(){return a[o]}})}}),i.default=a,Object.freeze(i)}var te=Re(Oe),$e=De(Ae);var oe=(a,i)=>{const o=a.__vccOpts||a;for(const[r,u]of i)o[r]=u;return o};const qe={key:0,class:"base-card__header"},Ve={class:"base-card__header-left"},Le={key:0,class:"base-card__title-wrap"},He={key:0,class:"base-card__title-marker"},We={key:2,class:"base-card__title"},Ie={key:0,class:"base-card__header-right"},Ke={key:0,class:"base-card__meta"},je=["disabled"],Ue={class:"base-card__body"},Ge={key:0,class:"base-card__tip"},Je={class:"base-card__content"},Xe=e.defineComponent({name:"BaseCard",__name:"BaseCard",props:{title:{default:""},metaText:{default:""},showHeader:{type:Boolean,default:!0},showRight:{type:Boolean,default:!0},showTitleMarker:{type:Boolean,default:!0},showExport:{type:Boolean,default:!1},exportText:{default:"\u5BFC\u51FA"},exportDisabled:{type:Boolean,default:!1},exportPayload:{},padding:{default:20},radius:{default:8},borderColor:{default:"var(--border-color)"},backgroundColor:{default:"var(--border-bg-color)"},shadowColor:{default:"var(--border-projection)"},headerGap:{default:16},headerMarginBottom:{default:20},leftGap:{default:16},rightGap:{default:16},titleColor:{default:"var(--el-text-color-primary)"},titleSize:{default:18},titleWeight:{default:500},markerColor:{default:"var(--el-color-primary)"},markerWidth:{default:4},markerHeight:{default:24},markerRadius:{default:"0 4px 4px 0"},markerGap:{default:10},metaColor:{default:"#808080"},metaSize:{default:16},exportColor:{default:"var(--el-color-primary)"}},emits:["export"],setup(a,{emit:i}){const o=a,r=i,u=e.useSlots(),b=e.computed(()=>Boolean(o.title)||Boolean(u["title-label"])),_=e.computed(()=>Boolean(u.title)),h=e.computed(()=>Boolean(u["header-right"])),p=e.computed(()=>o.showRight&&(h.value||Boolean(o.metaText)||o.showExport)),m=e.computed(()=>o.showHeader&&(b.value||_.value||p.value)),f=e.computed(()=>({title:o.title||void 0,metaText:o.metaText||void 0})),s=e.computed(()=>({"--base-card-padding":k(o.padding),"--base-card-radius":k(o.radius),"--base-card-border-color":o.borderColor,"--base-card-background-color":o.backgroundColor,"--base-card-shadow-color":o.shadowColor,"--base-card-header-gap":k(o.headerGap),"--base-card-header-margin-bottom":k(o.headerMarginBottom),"--base-card-left-gap":k(o.leftGap),"--base-card-right-gap":k(o.rightGap),"--base-card-title-color":o.titleColor,"--base-card-title-size":k(o.titleSize),"--base-card-title-weight":P(o.titleWeight),"--base-card-marker-color":o.markerColor,"--base-card-marker-width":k(o.markerWidth),"--base-card-marker-height":k(o.markerHeight),"--base-card-marker-radius":k(o.markerRadius),"--base-card-marker-gap":k(o.markerGap),"--base-card-meta-color":o.metaColor,"--base-card-meta-size":k(o.metaSize),"--base-card-export-color":o.exportColor})),T=()=>{r("export",o.exportPayload===void 0?f.value:o.exportPayload)};function k(y,v="px"){if(!(y==null||y===""))return typeof y=="number"?`${y}${v}`:y}function P(y){if(!(y==null||y===""))return String(y)}return(y,v)=>(e.openBlock(),e.createElementBlock("div",{class:"base-card",style:e.normalizeStyle(s.value)},[m.value?(e.openBlock(),e.createElementBlock("div",qe,[e.createElementVNode("div",Ve,[b.value?(e.openBlock(),e.createElementBlock("div",Le,[a.showTitleMarker?(e.openBlock(),e.createElementBlock("span",He)):e.createCommentVNode("",!0),y.$slots["title-label"]?e.renderSlot(y.$slots,"title-label",{key:1},void 0,!0):(e.openBlock(),e.createElementBlock("h4",We,e.toDisplayString(a.title),1))])):e.createCommentVNode("",!0),e.renderSlot(y.$slots,"title",{},void 0,!0)]),p.value?(e.openBlock(),e.createElementBlock("div",Ie,[e.renderSlot(y.$slots,"header-right",{},void 0,!0),a.metaText?(e.openBlock(),e.createElementBlock("span",Ke,e.toDisplayString(a.metaText),1)):e.createCommentVNode("",!0),a.showExport?(e.openBlock(),e.createElementBlock("button",{key:1,class:"base-card__export",type:"button",disabled:a.exportDisabled,onClick:T},e.toDisplayString(a.exportText),9,je)):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0),e.createElementVNode("div",Ue,[y.$slots.tip?(e.openBlock(),e.createElementBlock("div",Ge,[e.renderSlot(y.$slots,"tip",{},void 0,!0)])):e.createCommentVNode("",!0),e.createElementVNode("div",Je,[e.renderSlot(y.$slots,"default",{},void 0,!0)])])],4))}});var Ye=oe(Xe,[["__scopeId","data-v-6bfddf1c"]]);const Qe={class:"base-table"},Ze={key:0,class:"base-table__toolbar"},et={class:"base-table__toolbar-left"},tt={key:0,class:"base-table__toolbar-right"},rt={key:0,class:"base-table__actions"},ot={key:2,class:"base-table__tags"},at={key:1},nt=["innerHTML"],lt=["onClick"],it={key:6,class:"base-table__text"},st=e.defineComponent({name:"BaseTable",__name:"BaseTable",props:{columns:{},data:{default:()=>[]},request:{},requestParams:{default:()=>({})},resultAdapter:{},autoLoad:{type:Boolean,default:!0},reloadOnParamsChange:{type:Boolean,default:!0},reloadOnSortChange:{type:Boolean,default:!0},rowKey:{default:"id"},height:{default:"100%"},border:{type:Boolean,default:!1},stripe:{type:Boolean,default:!1},showToolbar:{type:Boolean,default:!0},showPagination:{type:Boolean,default:!0},hasSelection:{type:Boolean,default:!1},hasIndex:{type:Boolean,default:!1},indexLabel:{default:"\u5E8F\u53F7"},indexWidth:{default:60},selectionWidth:{default:50},rowSelectable:{},pagination:{default:()=>({})},currentPageKey:{default:"pageNum"},pageSizeKey:{default:"pageSize"},defaultSort:{default:()=>({prop:void 0,order:null})},sortFieldKey:{default:"sortField"},sortOrderKey:{default:"sortOrder"},sortOrderMap:{default:()=>({ascending:"asc",descending:"desc"})},sortMapper:{},emptyText:{default:"\u6682\u65E0\u6570\u636E"},loadingText:{default:"\u52A0\u8F7D\u4E2D..."}},emits:["selection-change","sort-change","row-action","cell-click","cell-input","page-change","size-change","update:pagination","loaded","request-error"],setup(a,{expose:i,emit:o}){var ue,fe;const r=a,u=o,b=e.useSlots(),_=e.ref(),h=e.ref(!1),p=e.ref(S(r.data)),m=e.ref([]),f=e.reactive({prop:(ue=r.defaultSort)==null?void 0:ue.prop,order:((fe=r.defaultSort)==null?void 0:fe.order)||null}),s=e.reactive({currentPage:1,pageSize:20,total:0,pageSizes:[10,20,50,100]});y(r.pagination);const T=e.computed(()=>H(r.height)),k=e.computed(()=>r.showToolbar&&(Boolean(b.toolbar)||r.showPagination)),P=e.computed(()=>{if(!(!f.prop||!f.order))return{prop:f.prop,order:f.order}});e.watch(()=>r.data,t=>{r.request||N(t||[])},{deep:!0}),e.watch(()=>r.pagination,t=>{y(t)},{deep:!0}),e.watch(()=>r.requestParams,()=>{r.request&&r.reloadOnParamsChange&&r.autoLoad&&(s.currentPage=1,x())},{deep:!0}),e.watch(()=>r.defaultSort,t=>{f.prop=t==null?void 0:t.prop,f.order=(t==null?void 0:t.order)||null},{deep:!0}),e.onMounted(()=>{var t;if(r.request&&r.autoLoad){x();return}r.request||(p.value=S(r.data),(t=r.pagination)!=null&&t.total||(s.total=p.value.length,v()))});function y(t){s.currentPage=Number((t==null?void 0:t.currentPage)||s.currentPage||1),s.pageSize=Number((t==null?void 0:t.pageSize)||s.pageSize||20),s.total=Number((t==null?void 0:t.total)||(t==null?void 0:t.total)===0?t.total:s.total||p.value.length),s.pageSizes=Array.isArray(t==null?void 0:t.pageSizes)&&t.pageSizes.length?[...t.pageSizes]:[...s.pageSizes.length?s.pageSizes:[10,20,50,100]]}function v(){u("update:pagination",{currentPage:s.currentPage,pageSize:s.pageSize,total:s.total,pageSizes:[...s.pageSizes]})}async function x(t){if(Array.isArray(t)){N(t);return}if(!r.request){N(r.data||[]);return}h.value=!0;const n=c();try{const l=await r.request(n),w=g(l,n);p.value=w.rows,s.total=w.total,v(),u("loaded",{rows:[...p.value],total:s.total,params:n})}catch(l){p.value=[],s.total=0,v(),u("request-error",l)}finally{h.value=!1}}async function D(){await x()}async function I(){s.currentPage=1,v(),await x()}function N(t){var n,l;p.value=S(t),r.request||(s.total=Number((l=(n=r.pagination)==null?void 0:n.total)!=null?l:p.value.length),v())}function M(){var t;(t=_.value)==null||t.clearSelection(),m.value=[]}function K(t,n){var l;(l=_.value)==null||l.toggleRowSelection(t,n)}function V(){return[...m.value]}function j(){return[...p.value]}function G(t){m.value=t,u("selection-change",t)}function L(t){const n=r.columns.find(w=>String(w.prop||"")===String(t.prop||""));f.prop=t.prop,f.order=t.order;const l=de(n,t.prop,t.order);u("sort-change",l),r.request&&r.reloadOnSortChange&&(s.currentPage=1,v(),x())}function J(t){s.currentPage=t,v(),u("page-change",t),r.request&&x()}function X(t){s.pageSize=t,s.currentPage=1,v(),u("size-change",t),r.request&&x()}function Y(t,n,l){u("row-action",{row:t,action:n,column:l})}function Q(t,n){var l;(l=n.clickHandler)==null||l.call(n,t,n),u("cell-click",{row:t,column:n,value:A(t,n)})}function U(t,n,l){var w;!l.prop||(n[l.prop]=t,(w=l.inputHandler)==null||w.call(l,t,n,l),u("cell-input",{row:n,column:l,value:t}))}function c(){const t={...r.requestParams,currentPage:s.currentPage,pageSize:s.pageSize,[r.currentPageKey]:s.currentPage,[r.pageSizeKey]:s.pageSize},n=r.columns.find(F=>String(F.prop||"")===String(f.prop||"")),l=de(n,f.prop,f.order),w=Fe(l);return{...t,...w}}function g(t,n){var $,z;if(r.resultAdapter){const E=r.resultAdapter(t,n),q=S(E==null?void 0:E.rows);return{rows:q,total:Number(($=E==null?void 0:E.total)!=null?$:q.length)}}if(Array.isArray(t))return{rows:S(t),total:t.length};const l=t||{},w=l.data&&typeof l.data=="object"?l.data:l,F=w.records||w.list||w.items||[],R=S(F);return{rows:R,total:Number((z=w.total)!=null?z:R.length)}}function S(t){return Array.isArray(t)?[...t]:[]}function O(t){return String(t.prop||t.label)}function ke(t){return t.prop?String(t.prop):void 0}function A(t,n){if(!!n.prop)return t[n.prop]}function ne(t,n){if(n.formatter){const l=n.formatter(t,n);return ee(l,Z(n))}return ee(A(t,n),Z(n))}function ve(t,n){if(n.html)return n.html(t,n);const l=A(t,n);return l==null?"":String(l)}function _e(t){var n;return t.kind==="actions"||Boolean((n=t.actions)==null?void 0:n.length)}function we(t){return t.kind==="link"||Boolean(t.clickable)}function Be(t,n){return(t.actions||[]).filter(l=>typeof l.visible=="function"?l.visible(n):l.visible!==!1)}function Ce(t,n){return typeof t.disabled=="function"?t.disabled(n):Boolean(t.disabled)}function le(t){return t.slotName||(t.prop?`cell-${String(t.prop)}`:"")}function ie(t){return t.headerSlotName||(t.prop?`header-${String(t.prop)}`:"")}function Se(t){const n=le(t);return Boolean(n&&b[n])}function xe(t){const n=ie(t);return Boolean(n&&b[n])}function se(t,n){const l=A(t,n),w=Array.isArray(l)?l:[l],F=n.optionValueKey||"value",R=n.optionLabelKey||"label",$=n.optionTagTypeKey||"tagType";return w.filter(z=>z!=null&&z!=="").map(z=>{const E=(n.options||[]).find(q=>q[F]===z);return E?{label:String(E[R]),value:E[F],tagType:E[$],color:E.color}:{label:String(z),value:z,tagType:"info"}})}function Ee(t){return{width:H(t.imageWidth||50),height:H(t.imageHeight||50)}}function ce(t){return typeof t=="string"?t:t&&typeof t=="object"&&"url"in t?String(t.url||""):""}function ze(t,n){const l=ce(A(t,n));return l?[l]:[]}function Z(t){return t.emptyText||"--"}function Te(t){return r.request&&t.sortable===!0?"custom":t.sortable||!1}function de(t,n,l=null){return{column:t,prop:n,order:l,field:Pe(t,n),direction:Ne(l)}}function Fe(t){var l;if(!t.field||!t.direction)return{};const n=(l=r.sortMapper)==null?void 0:l.call(r,t);return n&&typeof n=="object"?n:{[r.sortFieldKey]:t.field,[r.sortOrderKey]:t.direction}}function Pe(t,n){return(t==null?void 0:t.sortField)||n}function Ne(t){return t==="ascending"?r.sortOrderMap.ascending:t==="descending"?r.sortOrderMap.descending:null}function ee(t,n="--"){return t===0?"0":t==null||t===""?n:String(t)}function H(t){if(!(t==null||t===""))return typeof t=="number"?`${t}px`:t}return i({load:x,refresh:D,setData:N,resetPage:I,clearSelection:M,toggleRowSelection:K,getSelectionRows:V,getRows:j}),(t,n)=>{const l=e.resolveComponent("el-pagination"),w=e.resolveComponent("el-empty"),F=e.resolveComponent("el-table-column"),R=e.resolveComponent("el-button"),$=e.resolveComponent("el-image"),z=e.resolveComponent("el-tag"),E=e.resolveComponent("el-input"),q=e.resolveComponent("el-table"),Me=e.resolveDirective("loading");return e.openBlock(),e.createElementBlock("div",Qe,[k.value?(e.openBlock(),e.createElementBlock("div",Ze,[e.createElementVNode("div",et,[e.renderSlot(t.$slots,"toolbar",{},void 0,!0)]),a.showPagination?(e.openBlock(),e.createElementBlock("div",tt,[e.createVNode(l,{small:"",background:"",layout:"total, prev, pager, next, sizes, jumper",total:s.total,"current-page":s.currentPage,"page-size":s.pageSize,"page-sizes":s.pageSizes,"pager-count":5,"popper-append-to-body":!1,onSizeChange:X,onCurrentChange:J},null,8,["total","current-page","page-size","page-sizes"])])):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0),e.withDirectives((e.openBlock(),e.createBlock(q,{ref_key:"tableRef",ref:_,data:p.value,"row-key":a.rowKey,height:T.value,border:a.border,stripe:a.stripe,"default-sort":P.value,"highlight-current-row":"",onSelectionChange:G,onSortChange:L},{empty:e.withCtx(()=>[e.createVNode(w,{description:a.emptyText},null,8,["description"])]),default:e.withCtx(()=>[a.hasSelection?(e.openBlock(),e.createBlock(F,{key:0,type:"selection",width:a.selectionWidth,align:"center",selectable:a.rowSelectable},null,8,["width","selectable"])):e.createCommentVNode("",!0),a.hasIndex?(e.openBlock(),e.createBlock(F,{key:1,type:"index",label:a.indexLabel,width:a.indexWidth,fixed:"left",align:"center"},null,8,["label","width"])):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(a.columns,d=>(e.openBlock(),e.createBlock(F,{key:O(d),prop:ke(d),label:d.label,type:d.type||void 0,width:H(d.width),"min-width":H(d.minWidth),fixed:d.fixed,align:d.align||"left","header-align":d.headerAlign||d.align||"left",sortable:Te(d),"show-overflow-tooltip":d.showOverflowTooltip!==!1,"class-name":d.className,"label-class-name":d.headerClassName},e.createSlots({default:e.withCtx(B=>[Se(d)?e.renderSlot(t.$slots,le(d),{key:0,row:B.row,columnConfig:d,columnIndex:B.$index,value:A(B.row,d)},void 0,!0):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[_e(d)?(e.openBlock(),e.createElementBlock("div",rt,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Be(d,B.row),C=>(e.openBlock(),e.createBlock(R,{key:`${C.type}-${C.label}`,link:"",type:C.buttonType||(C.type==="delete"?"danger":"primary"),disabled:Ce(C,B.row),onClick:xt=>Y(B.row,C,d)},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(C.label),1)]),_:2},1032,["type","disabled","onClick"]))),128))])):d.kind==="image"?(e.openBlock(),e.createBlock($,{key:1,class:"base-table__image",style:e.normalizeStyle(Ee(d)),src:ce(A(B.row,d)),"preview-src-list":ze(B.row,d),fit:d.imageFit||"cover"},null,8,["style","src","preview-src-list","fit"])):d.kind==="tag"?(e.openBlock(),e.createElementBlock("div",ot,[se(B.row,d).length?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(se(B.row,d),C=>(e.openBlock(),e.createBlock(z,{key:String(C.value),type:C.tagType||"info",style:e.normalizeStyle(C.color?{color:C.color,borderColor:`${C.color}33`,backgroundColor:`${C.color}1a`}:void 0),size:"small"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(C.label),1)]),_:2},1032,["type","style"]))),128)):(e.openBlock(),e.createElementBlock("span",at,e.toDisplayString(Z(d)),1))])):d.kind==="html"?(e.openBlock(),e.createElementBlock("div",{key:3,innerHTML:ve(B.row,d)},null,8,nt)):d.kind==="input"?(e.openBlock(),e.createBlock(E,{key:4,"model-value":ee(A(B.row,d),""),type:d.inputType||"text","onUpdate:modelValue":C=>U(C,B.row,d)},null,8,["model-value","type","onUpdate:modelValue"])):we(d)?(e.openBlock(),e.createElementBlock("button",{key:5,class:"base-table__link",type:"button",onClick:C=>Q(B.row,d)},e.toDisplayString(ne(B.row,d)),9,lt)):(e.openBlock(),e.createElementBlock("div",it,e.toDisplayString(ne(B.row,d)),1))],64))]),_:2},[xe(d)?{name:"header",fn:e.withCtx(B=>[e.renderSlot(t.$slots,ie(d),e.mergeProps({ref_for:!0},B,{columnConfig:d}),void 0,!0)]),key:"0"}:void 0]),1032,["prop","label","type","width","min-width","fixed","align","header-align","sortable","show-overflow-tooltip","class-name","label-class-name"]))),128))]),_:3},8,["data","row-key","height","border","stripe","default-sort"])),[[Me,h.value]])])}}});var ct=oe(st,[["__scopeId","data-v-429ba785"]]);const dt=e.defineComponent({__name:"BaseEChart",props:{option:{default:()=>({})},theme:{},initOptions:{default:()=>({renderer:"canvas"})},setOptionOptions:{type:Boolean,default:()=>({notMerge:!1,lazyUpdate:!0})},loading:{type:Boolean,default:!1},loadingOptions:{},autoResize:{type:Boolean,default:!0},useDefaultColors:{type:Boolean,default:!0},colorStorageKey:{default:"echartsColor"},defaultColors:{default:()=>[]},group:{default:void 0}},emits:["ready"],setup(a,{expose:i,emit:o}){const r=a,u=o,b=e.ref(null),_=e.ref(null),h=e.shallowRef(null);let p=null,m=null,f;const s=()=>{m!==null&&(cancelAnimationFrame(m),m=null)},T=()=>{if(!r.useDefaultColors||typeof window=="undefined")return r.defaultColors;try{const c=window.sessionStorage.getItem(r.colorStorageKey),g=c?JSON.parse(c):[];return g.length>0?g:r.defaultColors}catch{return r.defaultColors}},k=(c={})=>{if(c.color)return c;const g=T();return!g||g.length===0?c:{...c,color:g}},P=()=>{if(!_.value)return null;const c=te.getInstanceByDom(_.value);c==null||c.dispose();const g=te.init(_.value,r.theme,r.initOptions);return r.group&&(g.group=r.group),h.value=g,u("ready",g),g},y=()=>h.value,v=()=>{var c;return(c=h.value)!=null?c:P()},x=(c,g=r.setOptionOptions)=>{const S=v();if(!S)return null;const O=k(c);return S.setOption(O,g),S},D=(c="default",g)=>{const S=v();!S||S.showLoading(c,g)},I=()=>{var c;(c=h.value)==null||c.hideLoading()},N=()=>{if(r.loading){D("default",r.loadingOptions);return}I()},M=c=>{f=c,s(),m=requestAnimationFrame(()=>{var g;(g=h.value)==null||g.resize(f),f=void 0,m=null})},K=()=>{M()},V=()=>{p==null||p.disconnect(),p=null,window.removeEventListener("resize",K)},j=()=>{V(),!(!r.autoResize||!b.value)&&(p=new ResizeObserver(()=>{M()}),p.observe(b.value),window.addEventListener("resize",K))},G=()=>{var c;(c=h.value)==null||c.clear()},L=()=>{var c;(c=h.value)==null||c.dispose(),h.value=null},J=()=>{L()},X=c=>{var g;(g=h.value)==null||g.dispatchAction(c)},Y=(c,g,S)=>{const O=v();O==null||O.on(c,g,S)},Q=(c,g)=>{if(!!h.value){if(!c){h.value.off();return}if(g){h.value.off(c,g);return}h.value.off(c)}},U=async()=>{L(),await e.nextTick(),P(),x(r.option),N(),M()};return e.watch(()=>r.option,c=>{x(c)},{deep:!0}),e.watch(()=>r.loading,()=>{N()}),e.watch(()=>r.loadingOptions,()=>{r.loading&&N()},{deep:!0}),e.watch(()=>r.group,c=>{!h.value||(h.value.group=c!=null?c:"")}),e.watch(()=>r.autoResize,async c=>{V(),c&&(await e.nextTick(),j(),M())}),e.watch(()=>r.theme,()=>{U()},{deep:!0}),e.watch(()=>r.initOptions,()=>{U()},{deep:!0}),e.onMounted(async()=>{await e.nextTick(),P(),x(r.option),N(),j(),M()}),e.onUnmounted(()=>{V(),s(),L()}),i({getInstance:y,setOption:x,resize:M,dispatchAction:X,showLoading:D,hideLoading:I,clear:G,dispose:J,on:Y,off:Q}),(c,g)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"containerRef",ref:b,class:"base-echart"},[e.createElementVNode("div",{ref_key:"chartRef",ref:_,class:"base-echart__inner"},null,512)],512))}});var ut=oe(dt,[["__scopeId","data-v-51bc4772"]]);const ft="Sheet1",pt=16,gt="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";function re(a){var i;return(i=a.children)!=null&&i.length?a.children.reduce((o,r)=>o+re(r),0):1}function he(a,i=1){return a.reduce((o,r)=>{var u;return(u=r.children)!=null&&u.length?Math.max(o,he(r.children,i+1)):Math.max(o,i)},i)}function pe(a){const i=`${a!=null?a:""}`;return Array.from(i).reduce((o,r)=>o+(r.charCodeAt(0)>255?2:1),0)}function ht(a,i){return i?i.split(".").reduce((o,r)=>{if(o!=null)return o[r]},a):""}function mt(a,i,o){return typeof o.formatter=="function"?o.formatter(a,i,o):ht(a,o.key)}function yt(a){const i=he(a),o=a.reduce((p,m)=>p+re(m),0),r=Array.from({length:i},()=>Array.from({length:o}).fill("")),u=[],b=[];let _=0;const h=(p,m)=>{var T;const f=_,s=re(p);if(r[m][f]=p.label,(T=p.children)!=null&&T.length){p.children.forEach(k=>h(k,m+1)),s>1&&u.push({s:{r:m,c:f},e:{r:m,c:f+s-1}});return}b.push(p),_+=1,m<i-1&&u.push({s:{r:m,c:f},e:{r:i-1,c:f}})};return a.forEach(p=>h(p,0)),{headerRows:r,leafColumns:b,merges:u}}function bt(a,i,o,r){return a.map((u,b)=>{var m;const _=pe(u.label),h=i.reduce((f,s)=>Math.max(f,pe(s[b])),0);return(m=u.width)!=null?m:r?Math.max(o,_,h):o})}function kt(a){return a.endsWith(".xlsx")?a:`${a}.xlsx`}function vt(a,i){i.forEach((o,r)=>{a.getColumn(r+1).width=o})}function _t(a,i){i.forEach(o=>{a.mergeCells(o.s.r+1,o.s.c+1,o.e.r+1,o.e.c+1)})}async function me(a){const{fileName:i,sheetName:o=ft,data:r,autoWidth:u=!0,defaultColumnWidth:b=pt}=a,_=a.columns.filter(v=>!!v);if(!_.length)throw new Error("Excel export columns can not be empty.");const{headerRows:h,leafColumns:p,merges:m}=yt(_),f=r.map((v,x)=>p.map(D=>mt(v,x,D))),s=bt(p,f,b,u),T=new $e.default.Workbook,k=T.addWorksheet(o);[...h,...f].forEach(v=>{k.addRow(v)}),_t(k,m),vt(k,s);const P=await T.xlsx.writeBuffer(),y=new Blob([P],{type:gt});ge.saveAs(y,kt(i))}const wt="export-file";function Bt(a,i){var u;if(!a)return"";const o=i.toLowerCase(),r=Object.keys(a).find(b=>b.toLowerCase()===o);return r&&(u=a[r])!=null?u:""}function ye(a){if(!a)return"";const i=a.match(/filename\*=UTF-8''([^;]+)/i);if(i!=null&&i[1])return decodeURIComponent(i[1].replace(/["']/g,""));const o=a.match(/filename="?([^";]+)"?/i);return o!=null&&o[1]?decodeURIComponent(o[1].replace(/["']/g,"")):""}function ae(a){return`${a!=null?a:""}`.trim()||wt}function Ct(a){return a instanceof Blob?a:new Blob([a])}function be(a,i=""){const o=Bt(a.headers,"content-disposition"),r=ae(ye(o)||i);return ge.saveAs(Ct(a.data),r),r}const St=e.defineComponent({__name:"BaseExportButton",props:{label:{type:String,default:"\u5BFC\u51FA"},type:{type:String,default:"primary"},size:{type:String,default:"default"},plain:{type:Boolean,default:!1},link:{type:Boolean,default:!1},text:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},fileName:{type:String,default:""},excelOptions:Object,requestHandler:Function,beforeExport:Function,successMessage:{type:String,default:"\u5BFC\u51FA\u6210\u529F"},errorMessage:{type:String,default:"\u5BFC\u51FA\u5931\u8D25\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5"},autoMessage:{type:Boolean,default:!0}},emits:["start","success","error"],setup(a,{emit:i}){const o=a,r=i,u=e.ref(!1),b=e.computed(()=>o.excelOptions&&o.requestHandler?"invalid":o.excelOptions?"excel":o.requestHandler?"request":"none"),_=e.computed(()=>o.disabled||u.value||b.value==="none");async function h(){return o.beforeExport?await o.beforeExport()!==!1:!0}async function p(){if(u.value||o.disabled)return;if(b.value==="none"){W.ElMessage.warning("\u8BF7\u5148\u914D\u7F6E\u5BFC\u51FA\u903B\u8F91");return}if(b.value==="invalid"){const f=new Error("BaseExportButton \u4E0D\u80FD\u540C\u65F6\u63A5\u6536 excelOptions \u548C requestHandler");r("error",f),W.ElMessage.error(f.message);return}if(!!await h()){u.value=!0,r("start");try{if(b.value==="excel"&&o.excelOptions){await me(o.excelOptions),o.autoMessage&&W.ElMessage.success(o.successMessage),r("success",{mode:"excel",fileName:ae(o.excelOptions.fileName)});return}if(b.value==="request"&&o.requestHandler){const f=await o.requestHandler(),s=be(f,o.fileName);o.autoMessage&&W.ElMessage.success(o.successMessage),r("success",{mode:"request",fileName:s})}}catch(f){console.error(f),o.autoMessage&&W.ElMessage.error(o.errorMessage),r("error",f)}finally{u.value=!1}}}return(m,f)=>{const s=e.resolveComponent("el-button");return e.openBlock(),e.createBlock(s,{class:"base-export-button",type:a.type,size:a.size,plain:a.plain,link:a.link,text:a.text,disabled:_.value,loading:u.value,onClick:p},{default:e.withCtx(()=>[e.renderSlot(m.$slots,"default",{},()=>[e.createTextVNode(e.toDisplayString(a.label),1)])]),_:3},8,["type","size","plain","link","text","disabled","loading"])}}});exports.echarts=te;exports.BaseCard=Ye;exports.BaseEChart=ut;exports.BaseExportButton=St;exports.BaseTable=ct;exports.downloadExportResponse=be;exports.exportExcel=me;exports.extractFileNameFromDisposition=ye;exports.normalizeExportFileName=ae;