@qin-ui/element-plus-pro 1.0.8 → 1.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.
Files changed (131) hide show
  1. package/AI-CONTEXT.md +49 -37
  2. package/LICENSE +9 -0
  3. package/api.json +44 -27
  4. package/bin/init-ai.mjs +0 -0
  5. package/es/component-provider/{index-Bmx9Q9Q-.js → index-BGGIWSkO.js} +2 -1
  6. package/es/component-provider/index-BGGIWSkO.js.map +1 -0
  7. package/es/component-provider/index.js +2 -1
  8. package/es/component-provider/index.js.map +1 -0
  9. package/es/components/component-provider/components/index.vue.d.ts +27 -0
  10. package/es/components/component-provider/components/index.vue.d.ts.map +1 -0
  11. package/es/components/component-provider/constants/index.d.ts +16 -0
  12. package/es/components/component-provider/constants/index.d.ts.map +1 -0
  13. package/es/components/component-provider/index.d.ts +4 -0
  14. package/es/components/component-provider/index.d.ts.map +1 -0
  15. package/es/components/component-provider/types/index.d.ts +35 -0
  16. package/es/components/component-provider/types/index.d.ts.map +1 -0
  17. package/es/components/form/components/BaseField/index.vue.d.ts +13 -0
  18. package/es/components/form/components/BaseField/index.vue.d.ts.map +1 -0
  19. package/es/components/form/components/BaseField/utils/index.d.ts +3 -0
  20. package/es/components/form/components/BaseField/utils/index.d.ts.map +1 -0
  21. package/es/components/form/components/BaseFormItem/index.vue.d.ts +9 -0
  22. package/es/components/form/components/BaseFormItem/index.vue.d.ts.map +1 -0
  23. package/es/components/form/components/ContainerFragment/index.vue.d.ts +23 -0
  24. package/es/components/form/components/ContainerFragment/index.vue.d.ts.map +1 -0
  25. package/es/components/form/components/GroupedFieldAttrs/index.vue.d.ts +31 -0
  26. package/es/components/form/components/GroupedFieldAttrs/index.vue.d.ts.map +1 -0
  27. package/es/components/form/components/PathProvider/index.vue.d.ts +24 -0
  28. package/es/components/form/components/PathProvider/index.vue.d.ts.map +1 -0
  29. package/es/components/form/components/ProForm/index.vue.d.ts +36 -0
  30. package/es/components/form/components/ProForm/index.vue.d.ts.map +1 -0
  31. package/es/components/form/components/SlotComponent/index.vue.d.ts +7 -0
  32. package/es/components/form/components/SlotComponent/index.vue.d.ts.map +1 -0
  33. package/es/components/form/components/index.d.ts +12 -0
  34. package/es/components/form/components/index.d.ts.map +1 -0
  35. package/es/components/form/constants/index.d.ts +67 -0
  36. package/es/components/form/constants/index.d.ts.map +1 -0
  37. package/es/components/form/hooks/index.d.ts +5 -0
  38. package/es/components/form/hooks/index.d.ts.map +1 -0
  39. package/es/components/form/hooks/useFields.d.ts +57 -0
  40. package/es/components/form/hooks/useFields.d.ts.map +1 -0
  41. package/es/components/form/hooks/useForm.d.ts +93 -0
  42. package/es/components/form/hooks/useForm.d.ts.map +1 -0
  43. package/es/components/form/hooks/useFormRef.d.ts +30 -0
  44. package/es/components/form/hooks/useFormRef.d.ts.map +1 -0
  45. package/es/components/form/index.d.ts +7 -0
  46. package/es/components/form/index.d.ts.map +1 -0
  47. package/es/components/form/types/index.d.ts +234 -0
  48. package/es/components/form/types/index.d.ts.map +1 -0
  49. package/es/components/table/components/ColumnControl.vue.d.ts +9 -0
  50. package/es/components/table/components/ColumnControl.vue.d.ts.map +1 -0
  51. package/es/components/table/components/DefaultSearchFormContainer.vue.d.ts +18 -0
  52. package/es/components/table/components/DefaultSearchFormContainer.vue.d.ts.map +1 -0
  53. package/es/components/table/components/DefaultTableContainer.vue.d.ts +18 -0
  54. package/es/components/table/components/DefaultTableContainer.vue.d.ts.map +1 -0
  55. package/es/components/table/components/ProTable.vue.d.ts +47 -0
  56. package/es/components/table/components/ProTable.vue.d.ts.map +1 -0
  57. package/es/components/table/components/SearchForm.vue.d.ts +48 -0
  58. package/es/components/table/components/SearchForm.vue.d.ts.map +1 -0
  59. package/es/components/table/components/SizeControl.vue.d.ts +12 -0
  60. package/es/components/table/components/SizeControl.vue.d.ts.map +1 -0
  61. package/es/components/table/components/TableColumnRenderer.vue.d.ts +17 -0
  62. package/es/components/table/components/TableColumnRenderer.vue.d.ts.map +1 -0
  63. package/es/components/table/components/icons/ColumnHeightOutlined.vue.d.ts +3 -0
  64. package/es/components/table/components/icons/ColumnHeightOutlined.vue.d.ts.map +1 -0
  65. package/es/components/table/components/icons/DownOutlined.vue.d.ts +3 -0
  66. package/es/components/table/components/icons/DownOutlined.vue.d.ts.map +1 -0
  67. package/es/components/table/components/icons/FilterOutlined.vue.d.ts +3 -0
  68. package/es/components/table/components/icons/FilterOutlined.vue.d.ts.map +1 -0
  69. package/es/components/table/components/index.d.ts +5 -0
  70. package/es/components/table/components/index.d.ts.map +1 -0
  71. package/es/components/table/index.d.ts +33 -0
  72. package/es/components/table/index.d.ts.map +1 -0
  73. package/es/components/table/types/index.d.ts +67 -0
  74. package/es/components/table/types/index.d.ts.map +1 -0
  75. package/es/components/table/useTable.d.ts +111 -0
  76. package/es/components/table/useTable.d.ts.map +1 -0
  77. package/es/element-plus-pro.css +10 -10
  78. package/es/form/{index-D8btGgqa.js → index-oI6LGSpA.js} +13 -7
  79. package/es/form/index-oI6LGSpA.js.map +1 -0
  80. package/es/form/index.js +4 -3
  81. package/es/form/index.js.map +1 -0
  82. package/es/index.d.ts +76 -1472
  83. package/es/index.d.ts.map +1 -0
  84. package/es/index.js +14 -23
  85. package/es/index.js.map +1 -0
  86. package/es/shared/core/index.d.ts +6 -0
  87. package/es/shared/core/index.d.ts.map +1 -0
  88. package/es/shared/ui/index.d.ts +12 -0
  89. package/es/shared/ui/index.d.ts.map +1 -0
  90. package/es/table/index.js +10 -10
  91. package/es/table/index.js.map +1 -0
  92. package/package.json +10 -11
  93. package/src/components/component-provider/components/index.vue +67 -0
  94. package/src/components/component-provider/constants/index.ts +209 -0
  95. package/src/components/component-provider/index.ts +6 -0
  96. package/src/components/component-provider/types/index.ts +64 -0
  97. package/src/components/form/components/BaseField/index.vue +181 -0
  98. package/src/components/form/components/BaseField/utils/index.ts +15 -0
  99. package/src/components/form/components/BaseFormItem/index.vue +170 -0
  100. package/src/components/form/components/ContainerFragment/index.vue +24 -0
  101. package/src/components/form/components/GroupedFieldAttrs/index.vue +115 -0
  102. package/src/components/form/components/PathProvider/index.vue +19 -0
  103. package/src/components/form/components/ProForm/index.vue +106 -0
  104. package/src/components/form/components/SlotComponent/index.vue +26 -0
  105. package/src/components/form/components/index.ts +15 -0
  106. package/src/components/form/constants/index.ts +116 -0
  107. package/src/components/form/hooks/index.ts +5 -0
  108. package/src/components/form/hooks/useFields.ts +67 -0
  109. package/src/components/form/hooks/useForm.ts +110 -0
  110. package/src/components/form/hooks/useFormRef.ts +35 -0
  111. package/src/components/form/index.ts +29 -0
  112. package/src/components/form/types/index.ts +300 -0
  113. package/src/components/table/components/ColumnControl.vue +136 -0
  114. package/src/components/table/components/DefaultSearchFormContainer.vue +14 -0
  115. package/src/components/table/components/DefaultTableContainer.vue +14 -0
  116. package/src/components/table/components/ProTable.vue +420 -0
  117. package/src/components/table/components/SearchForm.vue +302 -0
  118. package/src/components/table/components/SizeControl.vue +55 -0
  119. package/src/components/table/components/TableColumnRenderer.vue +71 -0
  120. package/src/components/table/components/icons/ColumnHeightOutlined.vue +4 -0
  121. package/src/components/table/components/icons/DownOutlined.vue +4 -0
  122. package/src/components/table/components/icons/FilterOutlined.vue +4 -0
  123. package/src/components/table/components/index.ts +4 -0
  124. package/src/components/table/index.ts +38 -0
  125. package/src/components/table/types/index.ts +77 -0
  126. package/src/components/table/useTable.ts +144 -0
  127. package/src/index.ts +81 -0
  128. package/src/shared/core/index.ts +38 -0
  129. package/src/shared/ui/index.ts +106 -0
  130. package/es/core/index-C0Pbv44C.js +0 -360
  131. package/es/vendor/utils/lodash-es-p6jau26B.js +0 -1120
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC/B,OAAO,OAAO,MAAM,mBAAmB,CAAC;AACxC,OAAO,QAAQ,MAAM,oBAAoB,CAAC;AAC1C,OAAO,oBAAoB,MAAM,iCAAiC,CAAC;AAEnE,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iCAAiC,CAAC;AAEhD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AACH,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,oBAAoB,EAAE,CAAC;;IAGjD;;;;;;;;;;;;;OAaG;iBACU,GAAG;;AAflB,wBAoBE"}
package/es/index.js CHANGED
@@ -1,22 +1,12 @@
1
1
  import "./element-plus-pro.css";
2
- import { a as _sfc_main } from "./form/index-D8btGgqa.js";
3
- import { b, c, d, u, e } from "./form/index-D8btGgqa.js";
2
+ import { a as _sfc_main } from "./form/index-oI6LGSpA.js";
3
+ import { b, c, d, u, e } from "./form/index-oI6LGSpA.js";
4
4
  import "vue";
5
- import { e as e2 } from "./core/index-C0Pbv44C.js";
5
+ import { useFormData } from "@qin-ui/pro-components-core";
6
6
  import "element-plus";
7
- import BaseTable from "./table/index.js";
7
+ import ProTable from "./table/index.js";
8
8
  import { useTable } from "./table/index.js";
9
- import { _ as _sfc_main$1 } from "./component-provider/index-Bmx9Q9Q-.js";
10
- const withInstall = (comp) => {
11
- comp.install = (app) => {
12
- app.component(comp.name, comp);
13
- };
14
- return comp;
15
- };
16
- const ProForm = withInstall(_sfc_main);
17
- const ProTable = withInstall(BaseTable);
18
- const ProComponentProvider = withInstall(_sfc_main$1);
19
- const components = [ProForm, ProTable, ProComponentProvider];
9
+ import { _ as _sfc_main$1 } from "./component-provider/index-BGGIWSkO.js";
20
10
  const index = {
21
11
  /**
22
12
  * @qin-ui/element-plus-pro 安装方法
@@ -27,27 +17,28 @@ const index = {
27
17
  * @example
28
18
  * ```ts
29
19
  * import { createApp } from 'vue'
30
- * import QinUI from '@qin-ui/element-plus-pro'
20
+ * import ProComponents from '@qin-ui/element-plus-pro'
31
21
  * const app = createApp(App)
32
- * app.use(QinUI)
22
+ * app.use(ProComponents)
33
23
  * ```
34
24
  */
35
25
  install(app) {
36
- components.forEach((component) => {
37
- app.component(component.name, component);
38
- });
26
+ app.component(_sfc_main.name, _sfc_main);
27
+ app.component(ProTable.name, ProTable);
28
+ app.component(_sfc_main$1.name, _sfc_main$1);
39
29
  }
40
30
  };
41
31
  export {
42
32
  b as ContainerFragment,
43
- ProComponentProvider,
44
- ProForm,
33
+ _sfc_main$1 as ProComponentProvider,
34
+ _sfc_main as ProForm,
45
35
  ProTable,
46
36
  c as SlotComponent,
47
37
  index as default,
48
38
  d as useFields,
49
39
  u as useForm,
50
- e2 as useFormData,
40
+ useFormData,
51
41
  e as useFormRef,
52
42
  useTable
53
43
  };
44
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["import type { App } from 'vue';\nimport ProForm from './components/form';\nimport ProTable from './components/table';\nimport ProComponentProvider from './components/component-provider';\n\nexport * from './components/form';\nexport * from './components/table';\nexport * from './components/component-provider';\n\n/**\n * Schema 驱动的表单组件,基于 element-plus Form 封装\n *\n * @description 通过声明式 JSON Schema 配置即可快速生成表单,\n * 提供极致的 TypeScript 类型推导与组件库插槽扩展能力。\n *\n * @example\n * ```vue\n * <script setup lang=\"ts\">\n * import { ProForm, useForm } from '@qin-ui/element-plus-pro'\n * const form = useForm<User>({ name: '' }, [\n * { path: 'name', label: '姓名', component: 'input' }\n * ])\n * </script>\n * <template>\n * <ProForm :form=\"form\" />\n * </template>\n * ```\n *\n * Schema 驱动的表格组件,基于 element-plus Table 封装\n *\n * @description 通过声明式列配置即可生成功能完整的表格,\n * 支持列动态控制、搜索表单集成、分页管理等企业级能力。\n *\n * @example\n * ```vue\n * <script setup lang=\"ts\">\n * import { ProTable, useTable } from '@qin-ui/element-plus-pro'\n * const table = useTable<User>({ columns: [{ key: 'name', title: '姓名' }] })\n * </script>\n * <template>\n * <ProTable :table=\"table\" />\n * </template>\n * ```\n *\n * 组件提供者,用于全局配置 ProForm 和 ProTable 的默认行为\n *\n * @description 通过 `ProComponentProvider` 包裹应用根组件,\n * 可以全局覆盖组件的默认属性(如表单布局、表格尺寸等)。\n *\n * @example\n * ```vue\n * <template>\n * <ProComponentProvider :component-props=\"customProps\">\n * <App />\n * </ProComponentProvider>\n * </template>\n * ```\n */\nexport { ProForm, ProTable, ProComponentProvider };\n\nexport default {\n /**\n * @qin-ui/element-plus-pro 安装方法\n * @description 全局注册所有组件(ProForm、ProTable、ProComponentProvider)\n *\n * @param {App} app - Vue 应用实例\n *\n * @example\n * ```ts\n * import { createApp } from 'vue'\n * import ProComponents from '@qin-ui/element-plus-pro'\n * const app = createApp(App)\n * app.use(ProComponents)\n * ```\n */\n install(app: App) {\n app.component(ProForm.name, ProForm);\n app.component(ProTable.name, ProTable);\n app.component(ProComponentProvider.name!, ProComponentProvider);\n },\n};\n"],"names":["ProForm","ProComponentProvider"],"mappings":";;;;;;;;;AA4DA,MAAA,QAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeb,QAAQ,KAAU;AAChB,QAAI,UAAUA,UAAQ,MAAMA,SAAO;AACnC,QAAI,UAAU,SAAS,MAAM,QAAQ;AACrC,QAAI,UAAUC,YAAqB,MAAOA,WAAoB;AAAA,EAChE;AACF;"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * 统一 re-export @qin-ui/pro-components-core,包内所有文件通过此文件引入 core 内容,
3
+ * 避免直接散列依赖 @qin-ui/pro-components-core,便于将来统一维护。
4
+ */
5
+ export { useForm, useTable, useFields, useFormData, useFormRef, InjectionFormKey, InjectionPathKey, get, getObject, toPath, camelizeProperties, cloneDeep, omit, pick, isPlainObject, type Data, type Path, type Paths, type KeyExpandString, type ExtendWithAny, type DeepPartial, type PageParam, type Fields, type Form, type Table, type UseFieldsReturn, type UseFormDataReturn, type UseFormRefReturn, } from '@qin-ui/pro-components-core';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/shared/core/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAEL,OAAO,EACP,QAAQ,EACR,SAAS,EACT,WAAW,EACX,UAAU,EAEV,gBAAgB,EAChB,gBAAgB,EAEhB,GAAG,EACH,SAAS,EACT,MAAM,EACN,kBAAkB,EAClB,SAAS,EACT,IAAI,EACJ,IAAI,EACJ,aAAa,EAEb,KAAK,IAAI,EACT,KAAK,IAAI,EACT,KAAK,KAAK,EACV,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,MAAM,EACX,KAAK,IAAI,EACT,KAAK,KAAK,EACV,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,GACtB,MAAM,6BAA6B,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { ElForm as Form, ElFormItem as FormItem, ElRow as Grid, ElCol as GridItem, ElTable as Table, ElTableColumn as TableColumn, ElSpace as Space, ElDropdown as Dropdown, ElDropdownMenu as DropdownMenu, ElDropdownItem as DropdownItem, ElCheckbox as Checkbox, ElCheckboxGroup as CheckboxGroup, ElButton as Button, ElAutocomplete as AutoComplete, ElCascader as Cascader, ElDatePicker as DatePicker, ElInput as Input, ElInputNumber as InputNumber, ElSelect as Select, ElSlider as Slider, ElSwitch as Switch, ElTransfer as Transfer, ElTreeSelect as TreeSelect, ElRadioGroup as RadioGroup, ElTimePicker as TimePicker, ElTimeSelect as TimeSelect, ElPagination as Pagination, FormItemInstance, FormInstance, FormProps, FormItemProps, TableProps as _TableProps, TableColumnCtx as ColumnType, PaginationProps, RowProps as GridProps, ColProps as GridItemProps } from 'element-plus';
2
+ import { MaybeRefOrGetter } from 'vue';
3
+ export { Form, FormItem, Grid, GridItem, Table, TableColumn, Space, Dropdown, DropdownMenu, DropdownItem, Checkbox, CheckboxGroup, Button, AutoComplete, Cascader, DatePicker, Input, InputNumber, Select, Slider, Switch, Transfer, TreeSelect, RadioGroup, TimePicker, TimeSelect, Pagination, type FormItemInstance, type FormInstance, type FormProps, type FormItemProps, type PaginationProps, type GridProps, type GridItemProps, type ColumnType, };
4
+ export type TableProps = _TableProps<any>;
5
+ export declare const tableProps: () => any;
6
+ export declare const paginationProps: () => any;
7
+ export declare const gridItemProps: () => any;
8
+ export declare const formItemProps: () => any;
9
+ export declare const useDisabledContext: () => import('vue').ComputedRef<boolean>;
10
+ export declare const useDisabledContextProvider: (disabled: MaybeRefOrGetter<boolean | undefined>) => void;
11
+ export type NamePath = string | number | (string | number)[];
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/shared/ui/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,IAAI,IAAI,EACd,UAAU,IAAI,QAAQ,EACtB,KAAK,IAAI,IAAI,EACb,KAAK,IAAI,QAAQ,EACjB,OAAO,IAAI,KAAK,EAChB,aAAa,IAAI,WAAW,EAC5B,OAAO,IAAI,KAAK,EAChB,UAAU,IAAI,QAAQ,EACtB,cAAc,IAAI,YAAY,EAC9B,cAAc,IAAI,YAAY,EAC9B,UAAU,IAAI,QAAQ,EACtB,eAAe,IAAI,aAAa,EAChC,QAAQ,IAAI,MAAM,EAClB,cAAc,IAAI,YAAY,EAC9B,UAAU,IAAI,QAAQ,EACtB,YAAY,IAAI,UAAU,EAC1B,OAAO,IAAI,KAAK,EAChB,aAAa,IAAI,WAAW,EAC5B,QAAQ,IAAI,MAAM,EAClB,QAAQ,IAAI,MAAM,EAClB,QAAQ,IAAI,MAAM,EAClB,UAAU,IAAI,QAAQ,EACtB,YAAY,IAAI,UAAU,EAC1B,YAAY,IAAI,UAAU,EAC1B,YAAY,IAAI,UAAU,EAC1B,YAAY,IAAI,UAAU,EAC1B,YAAY,IAAI,UAAU,EAE1B,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,KAAK,aAAa,EAClB,KAAK,UAAU,IAAI,WAAW,EAC9B,KAAK,cAAc,IAAI,UAAU,EACjC,KAAK,eAAe,EACpB,KAAK,QAAQ,IAAI,SAAS,EAC1B,KAAK,QAAQ,IAAI,aAAa,EAC/B,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,KAAK,gBAAgB,EAAsC,MAAM,KAAK,CAAC;AAEhF,OAAO,EACL,IAAI,EACJ,QAAQ,EACR,IAAI,EACJ,QAAQ,EACR,KAAK,EACL,WAAW,EACX,KAAK,EACL,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,QAAQ,EACR,aAAa,EACb,MAAM,EACN,YAAY,EACZ,QAAQ,EACR,UAAU,EACV,KAAK,EACL,WAAW,EACX,MAAM,EACN,MAAM,EACN,MAAM,EACN,QAAQ,EACR,UAAU,EACV,UAAU,EACV,UAAU,EACV,UAAU,EACV,UAAU,EACV,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,SAAS,EACd,KAAK,aAAa,EAClB,KAAK,UAAU,GAChB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;AAE1C,eAAO,MAAM,UAAU,WAAmC,CAAC;AAC3D,eAAO,MAAM,eAAe,WAAwC,CAAC;AACrE,eAAO,MAAM,aAAa,WAAsC,CAAC;AACjE,eAAO,MAAM,aAAa,WAAsC,CAAC;AAIjE,eAAO,MAAM,kBAAkB,0CAM9B,CAAC;AAEF,eAAO,MAAM,0BAA0B,GACrC,UAAU,gBAAgB,CAAC,OAAO,GAAG,SAAS,CAAC,SAMhD,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC"}
package/es/table/index.js CHANGED
@@ -1,9 +1,8 @@
1
1
  import { createElementBlock, openBlock, createElementVNode, defineComponent, ref, computed, watch, watchEffect, createBlock, unref, mergeProps, withKeys, withCtx, createVNode, renderSlot, createCommentVNode, Fragment, resolveDynamicComponent, createTextVNode, toDisplayString, normalizeStyle, useModel, renderList, withModifiers, mergeModels, inject, useAttrs, useSlots, onMounted, resolveDirective, normalizeClass, withDirectives, createSlots, normalizeProps, guardReactiveProps, nextTick } from "vue";
2
2
  import { ElSpace, ElButton, ElDropdown, ElDropdownMenu, ElDropdownItem, ElCheckbox, ElTableColumn, ElTable, ElPagination } from "element-plus";
3
- import { _ as _export_sfc, a as _sfc_main$a, t as tableProps, p as paginationProps, b as _sfc_main$b } from "../form/index-D8btGgqa.js";
4
- import { I as INJECT_CONFIG } from "../component-provider/index-Bmx9Q9Q-.js";
5
- import { c as camelizeProperties, g as getObject, f as useTable$1 } from "../core/index-C0Pbv44C.js";
6
- import { g as get, t as toPath, p as pick } from "../vendor/utils/lodash-es-p6jau26B.js";
3
+ import { _ as _export_sfc, a as _sfc_main$a, t as tableProps, p as paginationProps, b as _sfc_main$b } from "../form/index-oI6LGSpA.js";
4
+ import { I as INJECT_CONFIG } from "../component-provider/index-BGGIWSkO.js";
5
+ import { get, toPath, pick, camelizeProperties, getObject, useTable as useTable$1 } from "@qin-ui/pro-components-core";
7
6
  const _sfc_main$9 = {};
8
7
  const _hoisted_1$5 = {
9
8
  focusable: "false",
@@ -227,7 +226,7 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
227
226
  };
228
227
  }
229
228
  });
230
- const SearchForm = /* @__PURE__ */ _export_sfc(_sfc_main$8, [["__scopeId", "data-v-d286f62d"]]);
229
+ const SearchForm = /* @__PURE__ */ _export_sfc(_sfc_main$8, [["__scopeId", "data-v-512bc2e5"]]);
231
230
  const _sfc_main$7 = {};
232
231
  const _hoisted_1$4 = { class: "pro-table_search-form-container" };
233
232
  function _sfc_render$3(_ctx, _cache) {
@@ -534,7 +533,7 @@ const _hoisted_5 = {
534
533
  };
535
534
  const _sfc_main = /* @__PURE__ */ defineComponent({
536
535
  ...{ name: "ProTable", inheritAttrs: false },
537
- __name: "BaseTable",
536
+ __name: "ProTable",
538
537
  props: /* @__PURE__ */ mergeModels({
539
538
  table: { default: () => void 0 },
540
539
  search: { type: Function, default: void 0 },
@@ -836,8 +835,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
836
835
  };
837
836
  }
838
837
  });
839
- const BaseTable = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-939fc661"]]);
840
- const useTable = (params = {}) => {
838
+ const ProTable = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-8617780a"]]);
839
+ function useTable(params = {}) {
841
840
  const { data, ...rest } = params;
842
841
  const coreTable = useTable$1({
843
842
  ...rest,
@@ -849,8 +848,9 @@ const useTable = (params = {}) => {
849
848
  data: dataSource
850
849
  };
851
850
  return table;
852
- };
851
+ }
853
852
  export {
854
- BaseTable as default,
853
+ ProTable as default,
855
854
  useTable
856
855
  };
856
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../src/components/table/components/icons/DownOutlined.vue","../../src/components/table/components/SearchForm.vue","../../src/components/table/components/DefaultSearchFormContainer.vue","../../src/components/table/components/DefaultTableContainer.vue","../../src/components/table/components/icons/ColumnHeightOutlined.vue","../../src/components/table/components/SizeControl.vue","../../src/components/table/components/icons/FilterOutlined.vue","../../src/components/table/components/ColumnControl.vue","../../src/components/table/components/TableColumnRenderer.vue","../../src/components/table/components/ProTable.vue","../../src/components/table/useTable.ts"],"sourcesContent":["<template>\n <!-- prettier-ignore -->\n <svg focusable=\"false\" data-icon=\"down\" width=\"1em\" height=\"1em\" fill=\"currentColor\" aria-hidden=\"true\" viewBox=\"64 64 896 896\"><path d=\"M884 256h-75c-5.1 0-9.9 2.5-12.9 6.6L512 654.2 227.9 262.6c-3-4.1-7.8-6.6-12.9-6.6h-75c-6.5 0-10.3 7.4-6.5 12.7l352.6 486.1c12.8 17.6 39 17.6 51.7 0l352.6-486.1c3.9-5.3.1-12.7-6.4-12.7z\"></path></svg>\n</template>\n","<script lang=\"ts\">\ntype Expand = {\n // 网格布局时默认展开行数量\n minExpandRows?: number;\n // 网格布局时展开状态\n expandStatus?: boolean;\n};\n\ntype _FormProps = Pick<\n Partial<FormProps>,\n | 'disabled'\n | 'labelPosition'\n | 'labelWidth'\n | 'inline'\n | 'inlineMessage'\n | 'statusIcon'\n | 'showMessage'\n | 'size'\n>;\n\ntype ButtonProps = { onClick: () => void };\ntype ExpandButtonProps = ButtonProps & { expandStatus: boolean };\n\nexport type SearchFormProps = {\n form: Form;\n layout?: 'grid' | 'inline';\n expand?: boolean | Expand;\n searchButton?: Component<ButtonProps> | DefineComponent<ButtonProps> | false;\n resetButton?: Component<ButtonProps> | DefineComponent<ButtonProps> | false;\n expandButton?:\n | Component<ExpandButtonProps>\n | DefineComponent<ExpandButtonProps>\n | false;\n rowGap?: number;\n columnGap?: number;\n} & /* @vue-ignore */ _FormProps &\n AllowedComponentProps;\n</script>\n\n<script lang=\"ts\" setup>\n/**\n * @component SearchForm\n * @description ProTable 的搜索表单子组件\n *\n * ## 核心功能\n *\n * 1. 内部渲染 ProForm,使用 table.searchForm 管理搜索条件\n * 2. 支持 grid(网格)和 inline(行内)两种布局\n * 3. 网格布局下支持展开/折叠:通过 IntersectionObserver 自动检测哪些字段溢出\n * 4. 提供搜索、重置、展开/折叠按钮(支持自定义)\n *\n * ## 展开/折叠机制\n *\n * 1. 首次渲染后,测量 ProForm 的实际高度\n * 2. 根据 minExpandRows 计算折叠高度(默认 2 行)\n * 3. 如果实际高度 > 折叠高度,显示展开/折叠按钮\n * 4. 使用 IntersectionObserver 检测隐藏字段是否有值,有值则自动展开\n */\nimport { Space, Button, FormProps } from '../../../shared/ui';\nimport {\n AllowedComponentProps,\n computed,\n ref,\n watch,\n watchEffect,\n type Component,\n type DefineComponent,\n} from 'vue';\nimport ProForm from '../../form';\nimport { type Form } from '../../form';\nimport DownOutlined from './icons/DownOutlined.vue';\n\ndefineOptions({ name: 'SearchForm' });\n\nconst {\n layout = 'grid',\n expand = true,\n searchButton = undefined,\n resetButton = undefined,\n expandButton = undefined,\n rowGap = 16,\n columnGap = 24,\n form,\n} = defineProps<SearchFormProps>();\n\ntype Emits = {\n (e: 'search'): void;\n (e: 'reset'): void;\n};\nconst emit = defineEmits<Emits>();\n\nconst proFormHeight = ref<'unset' | number>('unset');\nconst collapseHeight = ref(0);\nlet rowHeight = 32;\n\nconst computedExpand = computed(() => {\n if (!expand) return false;\n if (expand === true) return { minExpandRows: 2, expandStatus: false };\n return {\n minExpandRows: Math.max(Math.floor(expand.minExpandRows ?? 2), 1),\n expandStatus: expand.expandStatus ?? false,\n };\n});\n\nconst showExpandToggle = ref(false);\n\nconst expandStatus = ref(true);\n\nconst changeExpandStatus = () => {\n expandStatus.value = !expandStatus.value;\n};\n\nconst { formRef, getFormData } = form;\n\n/*\n * 使用 IntersectionObserver 检测折叠状态下隐藏字段是否有值\n * 如果有值则自动展开,让用户看到已填写的搜索条件\n */\nconst setInitExpandStatus = () => {\n expandStatus.value = false;\n if (formRef.value && expand) {\n const formEl = (formRef.value as any).$el;\n const formItemsEl = formEl.querySelectorAll(\n \"[class*='-form-item'] > [path]\"\n );\n const observer = new IntersectionObserver(\n entries => {\n expandStatus.value = entries.some(e => {\n // 如果隐藏字段(intersectionRatio === 0)有值,则自动展开\n if (e.intersectionRatio === 0) {\n const path = e.target.getAttribute('path');\n const searchFieldValue = path ? getFormData?.(path) : undefined;\n return ![null, undefined].includes(searchFieldValue);\n }\n return (expand as any).expandStatus;\n });\n observer.disconnect();\n },\n { root: formEl }\n );\n formItemsEl.forEach((element: Element) => {\n observer.observe(element);\n });\n }\n};\n\nwatch(\n [\n () => form?.fields.value?.filter((f: any) => !f.hidden)?.length,\n () => formRef.value,\n () => expand,\n ],\n () => {\n if (!expand || !expandStatus.value || !formRef.value) return;\n const proFormEl = (formRef.value as any)?.$el;\n const { height = 0 } = proFormEl?.getBoundingClientRect?.() || {};\n proFormHeight.value = height;\n rowHeight = proFormEl\n ?.querySelector(\"[class*='-form-item']\")\n ?.getBoundingClientRect?.()?.height;\n },\n { flush: 'post', immediate: true }\n);\n\n/*\n * 计算折叠高度和是否显示展开按钮\n * 折叠高度 = minExpandRows * 行高 + (minExpandRows - 1) * 行间距\n * 如果实际高度与折叠高度差异 > 1px,说明有字段溢出,显示展开按钮\n */\nwatchEffect(\n () => {\n if (typeof proFormHeight.value !== 'number') return;\n if (layout === 'grid' && computedExpand.value) {\n const { minExpandRows } = computedExpand.value;\n collapseHeight.value = Math.min(\n minExpandRows * rowHeight + (minExpandRows - 1) * rowGap,\n +proFormHeight.value\n );\n showExpandToggle.value = +proFormHeight.value - collapseHeight.value > 1;\n if (showExpandToggle.value) {\n setInitExpandStatus();\n }\n } else {\n showExpandToggle.value = false;\n }\n },\n { flush: 'post' }\n);\n\nconst layoutProps = computed(() =>\n layout === 'grid'\n ? {\n grid: {\n gutter: columnGap,\n style: { rowGap: `${rowGap}px` },\n },\n style: {\n display: 'flex',\n overflow: 'hidden',\n columnGap: `${columnGap}px`,\n height: `${expandStatus.value ? proFormHeight.value : collapseHeight.value}px`,\n },\n }\n : {\n inline: true,\n style: {\n display: 'flex',\n flexWrap: 'wrap',\n gap: `${rowGap}px ${columnGap}px`,\n },\n grid: false,\n }\n);\n\nconst onReset = () => {\n emit('reset');\n};\n\nconst onSearch = () => {\n emit('search');\n};\n</script>\n\n<template>\n <ProForm\n v-bind=\"layoutProps\"\n :form=\"form\"\n class=\"pro-table_search-form transition\"\n @keyup.enter=\"onSearch\"\n >\n <Space alignment=\"start\" class=\"pro-table_search-form_button-group\">\n <slot name=\"reset-button\" @click=\"onReset\">\n <template v-if=\"resetButton !== false\">\n <component :is=\"resetButton\" v-if=\"resetButton\" @click=\"onReset\" />\n <Button\n v-else\n class=\"pro-table_search-form_reset-button\"\n @click=\"onReset\"\n >重置</Button\n >\n </template>\n </slot>\n <slot name=\"search-button\" @click=\"onSearch\">\n <template v-if=\"searchButton !== false\">\n <component :is=\"searchButton\" v-if=\"searchButton\" @click=\"onSearch\" />\n <Button\n v-else\n class=\"pro-table_search-form_search-button\"\n type=\"primary\"\n native-type=\"submit\"\n @click=\"onSearch\"\n >\n 查询\n </Button>\n </template>\n </slot>\n <slot name=\"expand-button\" @click=\"changeExpandStatus\">\n <template v-if=\"expandButton !== false && showExpandToggle\">\n <component\n :is=\"expandButton\"\n v-if=\"expandButton\"\n :expand-status=\"expandStatus\"\n @click=\"changeExpandStatus\"\n />\n <Button\n v-else\n text\n class=\"pro-table_search-form_expand-toggle-button\"\n @click=\"changeExpandStatus\"\n >\n {{ expandStatus ? '收起' : '展开' }}\n <DownOutlined\n class=\"transition\"\n style=\"margin-left: 4px\"\n :style=\"{ transform: `rotate(${expandStatus ? -180 : 0}deg)` }\"\n />\n </Button>\n </template>\n </slot>\n </Space>\n </ProForm>\n</template>\n\n<style scoped lang=\"less\">\n.pro-table_search-form {\n :deep {\n [class*='-form-item'] {\n margin: 0;\n }\n }\n &_expand-toggle-button {\n display: flex;\n align-items: center;\n padding: 0;\n padding-left: 4px;\n }\n\n .transition {\n transition: all 0.25s;\n }\n}\n</style>\n","<template>\n <div class=\"pro-table_search-form-container\">\n <slot />\n </div>\n</template>\n\n<style scoped lang=\"less\">\n.pro-table_search-form-container {\n margin-bottom: 24px;\n padding: 24px;\n background-color: var(--el-bg-color, #fff);\n border-radius: 4px;\n}\n</style>\n","<template>\n <div class=\"pro-table_table-container\">\n <slot />\n </div>\n</template>\n\n<style scoped lang=\"less\">\n.pro-table_table-container {\n flex: 1;\n padding: 24px 24px 0;\n background-color: var(--el-bg-color, #fff);\n border-radius: 4px;\n}\n</style>\n","<template>\n <!-- prettier-ignore -->\n <svg focusable=\"false\" data-icon=\"column-height\" width=\"1em\" height=\"1em\" fill=\"currentColor\" aria-hidden=\"true\" viewBox=\"64 64 896 896\"><path d=\"M840 836H184c-4.4 0-8 3.6-8 8v60c0 4.4 3.6 8 8 8h656c4.4 0 8-3.6 8-8v-60c0-4.4-3.6-8-8-8zm0-724H184c-4.4 0-8 3.6-8 8v60c0 4.4 3.6 8 8 8h656c4.4 0 8-3.6 8-8v-60c0-4.4-3.6-8-8-8zM610.8 378c6 0 9.4-7 5.7-11.7L515.7 238.7a7.14 7.14 0 00-11.3 0L403.6 366.3a7.23 7.23 0 005.7 11.7H476v268h-62.8c-6 0-9.4 7-5.7 11.7l100.8 127.5c2.9 3.7 8.5 3.7 11.3 0l100.8-127.5c3.7-4.7.4-11.7-5.7-11.7H548V378h62.8z\"></path></svg>\n</template>\n","<script lang=\"ts\" setup>\nimport {\n Dropdown,\n DropdownMenu,\n DropdownItem,\n Button,\n type TableProps,\n} from '../../../shared/ui';\nimport ColumnHeightOutlined from './icons/ColumnHeightOutlined.vue';\n\ntype Size = TableProps['size'];\n\nconst size = defineModel<Size>('size');\n\nsize.value = size.value ?? 'default';\n\nconst items: Array<{ label: string; key: NonNullable<Size> }> = [\n { label: '默认', key: 'default' },\n { label: '中等', key: 'large' },\n { label: '紧凑', key: 'small' },\n];\n</script>\n\n<template>\n <Dropdown trigger=\"click\" @command=\"val => (size = val as any)\">\n <Button text class=\"pro-table_size-control_button\">\n <ColumnHeightOutlined />\n </Button>\n <template #dropdown>\n <DropdownMenu>\n <DropdownItem\n v-for=\"item in items\"\n :key=\"item.key\"\n :command=\"item.key\"\n :disabled=\"item.key === size\"\n >\n {{ item.label }}\n </DropdownItem>\n </DropdownMenu>\n </template>\n </Dropdown>\n</template>\n\n<style scoped lang=\"less\">\n.pro-table_size-control_button {\n display: flex;\n align-items: center;\n padding-right: 12px;\n padding-left: 12px;\n\n :deep(svg) {\n transform: scale(1.3);\n }\n}\n</style>\n","<template>\n <!-- prettier-ignore -->\n <svg focusable=\"false\" data-icon=\"filter\" width=\"1em\" height=\"1em\" fill=\"currentColor\" aria-hidden=\"true\" viewBox=\"64 64 896 896\"><path d=\"M880.1 154H143.9c-24.5 0-39.8 26.7-27.5 48L349 597.4V838c0 17.7 14.2 32 31.8 32h262.4c17.6 0 31.8-14.3 31.8-32V597.4L907.7 202c12.2-21.3-3.1-48-27.6-48zM603.4 798H420.6V642h182.9v156zm9.6-236.6l-9.5 16.6h-183l-9.5-16.6L212.7 226h598.6L613 561.4z\"></path></svg>\n</template>\n","<script lang=\"ts\" setup>\nimport {\n Button,\n Dropdown,\n DropdownMenu,\n DropdownItem,\n Checkbox,\n} from '../../../shared/ui';\nimport { computed, ref, watch } from 'vue';\nimport type { Column, Columns } from '../types';\nimport { type Table } from '../useTable';\nimport FilterOutlined from './icons/FilterOutlined.vue';\n\ntype Props = {\n columns: Columns;\n table?: Table;\n};\nconst { columns, table = undefined } = defineProps<Props>();\n\nconst open = ref(false);\nconst checkAll = ref(false);\nconst indeterminate = ref(false);\n\nconst getColumnKey = (column: Column, index: number) => {\n const key = column.key ?? column.prop;\n if (key === undefined || key === null) return `__idx_${index}`;\n return Array.isArray(key) ? key.join('.') : String(key);\n};\n\nconst checkedColumnsOptions = computed<\n Array<{ label: string; value: string; checked: boolean; column: Column }>\n>(() =>\n columns.map((item, index) => ({\n label: String(item.label ?? item.prop ?? `列${index + 1}`),\n value: getColumnKey(item, index),\n checked: !item.hidden,\n column: item,\n }))\n);\n\nconst checkedColumnKeys = computed({\n get() {\n return checkedColumnsOptions.value.flatMap(item =>\n item.checked ? item.value : []\n );\n },\n set(val: string[]) {\n checkedColumnsOptions.value.forEach(item => {\n table?.setColumn(item.value as any, {\n hidden: !val.includes(item.value),\n });\n });\n },\n});\n\nconst onCheckAllChange = (value: any) => {\n const checked = !!(value?.target?.checked ?? value);\n checkedColumnKeys.value = checked\n ? checkedColumnsOptions.value.map(item => item.value)\n : [];\n indeterminate.value = false;\n};\n\nconst toggleColumnsItem = (val: string) => {\n if (checkedColumnKeys.value.includes(val)) {\n checkedColumnKeys.value = checkedColumnKeys.value.filter(\n item => item !== val\n );\n } else {\n checkedColumnKeys.value = [...checkedColumnKeys.value, val];\n }\n};\n\nwatch(\n checkedColumnKeys,\n val => {\n indeterminate.value =\n !!val.length && val.length < checkedColumnsOptions.value.length;\n checkAll.value =\n val.length > 0 && val.length === checkedColumnsOptions.value.length;\n },\n { immediate: true }\n);\n</script>\n\n<template>\n <Dropdown\n trigger=\"click\"\n :hide-on-click=\"false\"\n :visible=\"open\"\n @visible-change=\"val => (open = val)\"\n >\n <Button text class=\"pro-table_column-control_button\">\n <FilterOutlined />\n </Button>\n <template #dropdown>\n <DropdownMenu>\n <DropdownItem :disabled=\"true\" :divided=\"false\">\n <Checkbox\n :model-value=\"checkAll\"\n :indeterminate=\"indeterminate\"\n @change=\"onCheckAllChange\"\n >\n 全选\n </Checkbox>\n </DropdownItem>\n <DropdownItem\n v-for=\"item in checkedColumnsOptions\"\n :key=\"item.value\"\n :command=\"item.value\"\n @click.stop=\"toggleColumnsItem(item.value)\"\n >\n <Checkbox\n :model-value=\"item.checked\"\n @change=\"() => toggleColumnsItem(item.value)\"\n >\n {{ item.label }}\n </Checkbox>\n </DropdownItem>\n </DropdownMenu>\n </template>\n </Dropdown>\n</template>\n\n<style scoped lang=\"less\">\n.pro-table_column-control_button {\n display: flex;\n align-items: center;\n padding-right: 12px;\n padding-left: 12px;\n\n :deep(svg) {\n transform: scale(1.2, 1.4);\n }\n}\n</style>\n","<script\n lang=\"ts\"\n setup\n generic=\"D extends Record<string, any> = Record<string, any>\"\n>\nimport { get, toPath } from '../../../shared/core';\nimport { TableColumn } from '../../../shared/ui';\nimport type { Column, Columns } from '../types';\nimport { computed } from 'vue';\n\ndefineOptions({ name: 'TableColumnRenderer' });\n\ntype Props = {\n columns: Columns<D>;\n};\nconst { columns } = defineProps<Props>();\n\nconst getColumnKey = (column: Column<D>, index: number) => {\n const key = column.key ?? column.prop;\n if (key === undefined || key === null) return `__idx_${index}`;\n return Array.isArray(key) ? key.join('.') : String(key);\n};\n\nconst getCellValue = (row: Record<string, any>, column: Column<D>) => {\n const path = column.prop;\n if (!path) return undefined;\n return get(row, toPath(path));\n};\n\nconst normalizedColumns = computed(() => {\n return columns.filter(column => !column.hidden);\n});\n\nconst getColumnProps = (column: Column<D>) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { hidden, render, key, ...rest } = column;\n const prop = Array.isArray(column.prop)\n ? column.prop.join('.')\n : column.prop\n ? String(column.prop)\n : undefined;\n return {\n ...rest,\n prop,\n columnKey: key ? String(key) : prop,\n };\n};\n</script>\n\n<template>\n <template\n v-for=\"(column, index) in normalizedColumns\"\n :key=\"getColumnKey(column, index)\"\n >\n <TableColumn v-bind=\"getColumnProps(column)\">\n <template #default=\"scope\">\n <template v-if=\"typeof column.render === 'function'\">\n <component\n :is=\"\n column.render?.({\n ...scope,\n column,\n cellValue: getCellValue(scope.row, column),\n })\n \"\n />\n </template>\n </template>\n </TableColumn>\n </template>\n</template>\n","<script lang=\"ts\" setup generic=\"T extends Table<any> = Table\">\n/**\n * @component ProTable\n * @description 配置驱动的表格组件\n *\n * ## 架构概览\n *\n * ProTable 是表格系统的顶层容器,负责:\n * 1. 接收 useTable() 创建的表格实例,驱动列、数据源、分页的渲染\n * 2. 内部集成 SearchForm 搜索区域(基于 ProForm)\n * 3. 支持列动态控制(显示/隐藏)和尺寸控制\n * 4. 将分页变化和搜索事件串联到数据查询流程\n *\n * ## 数据流\n *\n * ```\n * useTable({ columns, dataSource, searchFields, ... })\n * ↓ 传入 :table prop\n * ProTable\n * ├── SearchForm (使用 table.searchForm 管理搜索条件)\n * │ └── ProForm\n * ├── SizeControl (表格尺寸切换)\n * ├── ColumnControl (列显示/隐藏)\n * └── ElTable (element-plus Table)\n * └── 转发所有 table 插槽\n * ```\n *\n * ## 搜索流程\n *\n * 1. 用户点击搜索 → SearchForm @search → searchPage1st()\n * 2. searchPage1st 重置分页到第一页,触发 _search()\n * 3. 分页变化 → onTableChange → setPageParam + _search()\n * 4. 重置 → reset() → resetQueryParams + _search()\n */\nimport {\n Pagination as ElPagination,\n type PaginationProps,\n Table as ElTable,\n type TableProps,\n tableProps,\n paginationProps,\n} from '../../../shared/ui';\nimport {\n computed,\n nextTick,\n useAttrs,\n onMounted,\n inject,\n type Slot,\n useSlots,\n} from 'vue';\nimport { INJECT_CONFIG } from '../../component-provider/constants';\nimport { ContainerFragment } from '../../form';\nimport type { ContainerComponent } from '../../form/types';\nimport SearchForm from './SearchForm.vue';\nimport type { SearchFormProps } from './SearchForm.vue';\nimport type { Table } from '../useTable';\nimport { camelizeProperties, getObject, pick } from '../../../shared/core';\nimport {\n DefaultSearchFormContainer,\n DefaultTableContainer,\n SizeControl,\n ColumnControl,\n} from '.';\nimport type { Columns } from '../types';\nimport TableColumnRenderer from './TableColumnRenderer.vue';\n\ndefineOptions({ name: 'ProTable', inheritAttrs: false });\n\ntype Control = { sizeControl: boolean; columnControl: boolean };\n\ntype SearchFormConfig = Omit<SearchFormProps, 'form'> & {\n // 是否隐藏搜索表单\n hidden?: boolean;\n // 搜索区域包裹容器\n container?: ContainerComponent | false;\n};\n\ntype ReturnTableRecord<V> = V extends Table<any, infer R> ? R : any;\ntype RecordType = ReturnTableRecord<T>;\n\ntype Props = {\n // 列表表格对象,returns from useTable\n table?: T;\n // 列表数据查询方法\n search?: () => Promise<unknown>;\n // 是否在首列插入index列\n addIndexColumn?: boolean;\n // onMounted 时立即触发一次 search 事件\n immediateSearch?: boolean;\n // 是否展示表格 size 和 column 控制按钮\n control?: boolean | Partial<Control>;\n // 搜索栏查询字段表单配置\n searchFormConfig?: SearchFormConfig;\n // 表格区域包裹容器\n tableContainer?: ContainerComponent | false;\n columns?: Columns<RecordType>;\n data?: RecordType[];\n pagination?: false | Partial<PaginationProps>;\n} & Omit<TableProps, 'data'>;\n\nconst {\n table = undefined,\n search = undefined,\n addIndexColumn = undefined,\n control = undefined,\n tableContainer = undefined,\n immediateSearch = undefined,\n searchFormConfig = undefined,\n columns = undefined,\n data = undefined,\n pagination = undefined,\n} = defineProps<Props>();\n\nconst config = INJECT_CONFIG['pro-table'];\nconst injectProps = inject(config.injectionKey, config.default) as any;\n\nconst tableProperties = Object.keys(tableProps());\nconst paginationProperties = Object.keys(paginationProps());\n\nconst attrs = useAttrs() as Record<string, any>;\n\nconst injectTableAttrs = computed(() => {\n return pick(injectProps, tableProperties) as Partial<TableProps>;\n});\n\nconst attrsTableProps = computed(() => {\n return pick(\n camelizeProperties(attrs),\n tableProperties\n ) as Partial<TableProps>;\n});\n\nconst {\n columns: tableColumns,\n data: tableData,\n searchForm,\n pageParam,\n setPageParam,\n} = table || {};\n\nconst size = defineModel<TableProps['size']>('size');\nconst loading = defineModel<boolean>('loading');\n\n// 核心搜索方法:设置 loading 状态,调用外部 search 函数\nconst _search = async () => {\n try {\n loading.value = true;\n await search?.();\n } finally {\n loading.value = false;\n }\n};\n\n// 重置:恢复查询参数到初始值,重新搜索\nconst reset = () => {\n table?.resetQueryParams();\n nextTick(() => {\n _search();\n });\n};\n\ntype CustomSlots = Readonly<\n Partial<Record<'search-form' | 'button-bar' | 'toolbar' | 'table', Slot>>\n>;\n\ntype Slots = CustomSlots & Readonly<Record<string, Slot>>;\n\nconst slots = useSlots() as Slots;\nconst searchFormSlot = slots['search-form'];\nconst buttonBarSlot = slots['button-bar'];\nconst toolbarSlot = slots['toolbar'];\n\nconst tableSlots = computed(() => {\n const customNames = new Set([\n 'search-form',\n 'button-bar',\n 'toolbar',\n 'table',\n ]);\n return Object.fromEntries(\n Object.entries(slots).filter(([name]) => !customNames.has(name))\n ) as Record<string, Slot>;\n});\nconst tableSlotNames = computed(() => Object.keys(tableSlots.value));\n\nconst searchPage1st = () => {\n setPageParam?.({ current: 1 });\n _search();\n};\n\nconst computedSearchFormConfig = computed(() => {\n const container =\n searchFormConfig?.container ??\n injectProps.searchFormConfig?.container ??\n DefaultSearchFormContainer;\n return {\n ...injectProps.searchFormConfig,\n ...getObject(searchFormConfig),\n container: container ? container : undefined,\n };\n});\n\nconst computedTableContainer = computed(() => {\n const container =\n tableContainer ?? injectProps.tableContainer ?? DefaultTableContainer;\n return container ? container : undefined;\n});\n\nconst normalizedRawColumns = computed(() => {\n const source = (columns ?? tableColumns?.value ?? []) as any[];\n\n const normalized = source.map((item, index) => {\n const current: any = { ...item };\n if (current.label === undefined && current.title !== undefined) {\n current.label = current.title;\n }\n if (current.prop === undefined && current.dataIndex !== undefined) {\n current.prop = Array.isArray(current.dataIndex)\n ? current.dataIndex.join('.')\n : current.dataIndex;\n }\n if (current.key === undefined) {\n current.key =\n current.prop ??\n (typeof current.columnKey === 'string'\n ? current.columnKey\n : undefined) ??\n `col-${index}`;\n }\n return current;\n });\n if (addIndexColumn ?? injectProps.addIndexColumn) {\n return [\n {\n key: '_index',\n type: 'index',\n label: '序号',\n width: 80,\n },\n ...normalized,\n ];\n }\n return normalized;\n});\n\nconst computedDataSource = computed<any[]>(() => {\n const attrsData = attrsTableProps.value.data as any[] | undefined;\n return data ?? attrsData ?? tableData?.value ?? [];\n});\n\nconst computedTableProps = computed<TableProps>(() => {\n const merged = {\n ...injectTableAttrs.value,\n ...attrsTableProps.value,\n } as TableProps;\n delete (merged as any).data;\n return merged;\n});\n\nconst computedPagination = computed<false | Partial<PaginationProps>>(() => {\n if (pagination === false) return false;\n const pageConfig = pagination ?? {};\n return {\n ...injectProps.pagination,\n ...pick(pageConfig as Record<string, any>, paginationProperties),\n currentPage: (pageConfig as any).currentPage ?? pageParam?.current ?? 1,\n pageSize: (pageConfig as any).pageSize ?? pageParam?.pageSize ?? 10,\n total: (pageConfig as any).total ?? pageParam?.total ?? 0,\n };\n});\n\nconst showPagination = computed(() => computedPagination.value !== false);\n\nconst onCurrentChange = (current: number) => {\n setPageParam?.({ current });\n _search();\n};\n\nconst onSizeChange = (pageSize: number) => {\n setPageParam?.({ pageSize, current: 1 });\n _search();\n};\n\nconst onPaginationChange = (currentPage: number, pageSize: number) => {\n attrs.onChange?.(currentPage, pageSize);\n};\n\nconst showSearch = computed(() => {\n return !!(\n searchFormSlot ||\n (computedSearchFormConfig.value?.hidden !== true &&\n searchForm &&\n searchForm.fields.value.filter(item => !item.hidden)?.length > 0)\n );\n});\n\nconst computedControl = computed<Control>(() => {\n const mergedControl = control ?? injectProps.control;\n const sizeControl = (mergedControl as Control)?.sizeControl ?? mergedControl;\n const columnControl =\n (mergedControl as Control)?.columnControl ?? mergedControl;\n return { sizeControl: !!sizeControl, columnControl: !!columnControl };\n});\n\nconst resolvedSize = computed(() => {\n return (\n size.value ??\n (attrsTableProps.value.size as any) ??\n injectTableAttrs.value.size\n );\n});\n\nonMounted(() => {\n if (immediateSearch ?? injectProps.immediateSearch) {\n _search();\n }\n});\n</script>\n\n<template>\n <div\n class=\"pro-table\"\n :class=\"($attrs as any).class\"\n :style=\"($attrs as any).style\"\n >\n <ContainerFragment\n v-if=\"showSearch\"\n :component=\"computedSearchFormConfig.container\"\n >\n <slot name=\"search-form\">\n <SearchForm\n v-if=\"searchForm\"\n :form=\"searchForm\"\n v-bind=\"computedSearchFormConfig\"\n @search=\"searchPage1st\"\n @reset=\"reset\"\n />\n </slot>\n </ContainerFragment>\n\n <ContainerFragment :component=\"computedTableContainer\">\n <div class=\"pro-table_header\">\n <div v-if=\"buttonBarSlot\" class=\"pro-table_header_button-bar\">\n <slot name=\"button-bar\" />\n </div>\n <div v-if=\"toolbarSlot\" class=\"pro-table_header_toolbar\">\n <slot name=\"toolbar\" />\n </div>\n <div\n v-if=\"computedControl.sizeControl\"\n class=\"pro-table_header_size-control\"\n >\n <SizeControl v-model:size=\"size\" />\n </div>\n <div\n v-if=\"computedControl.columnControl\"\n class=\"pro-table_header_column-control\"\n >\n <ColumnControl :columns=\"normalizedRawColumns\" :table=\"table\" />\n </div>\n </div>\n\n <slot name=\"table\">\n <ElTable\n v-loading=\"loading\"\n class=\"pro-table_content\"\n v-bind=\"computedTableProps\"\n :size=\"resolvedSize\"\n :data=\"computedDataSource\"\n >\n <TableColumnRenderer :columns=\"normalizedRawColumns\" />\n <template v-for=\"name in tableSlotNames\" :key=\"name\" #[name]=\"scoped\">\n <slot :name=\"name\" v-bind=\"scoped\" />\n </template>\n </ElTable>\n </slot>\n\n <ElPagination\n v-if=\"showPagination\"\n class=\"pro-table_pagination\"\n v-bind=\"computedPagination\"\n @current-change=\"onCurrentChange\"\n @size-change=\"onSizeChange\"\n @change=\"onPaginationChange\"\n />\n </ContainerFragment>\n </div>\n</template>\n\n<style scoped lang=\"less\">\n.pro-table {\n &_header {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n\n &:empty {\n display: none;\n }\n\n & + &_content {\n margin-top: 16px;\n }\n\n &_button-bar {\n flex: 1;\n }\n\n &_toolbar {\n margin-left: 12px;\n }\n }\n\n &_pagination {\n justify-content: flex-end;\n padding: 16px 0;\n }\n}\n</style>\n","import {\n useTable as coreUseTable,\n type Table as _Table,\n} from '../../shared/core';\nimport type {\n Data,\n ExtendWithAny,\n DeepPartial,\n PageParam,\n} from '../../shared/core';\nimport { Fields } from '../form/types';\nimport type { Column, Columns } from './types';\nimport type { Ref } from 'vue';\n\n/**\n * 表格实例类型\n *\n * @description 在 core Table 类型的基础上,将列类型 C 绑定为本地 Column<T>,\n * 并将 dataSource 重命名为 data(Element Plus 使用 data 而非 dataSource),\n * 使 columns 操作获得 Element Plus 表格列的完整属性类型提示。\n *\n * @template D - 搜索表单数据类型\n * @template T - 表格行数据类型(一行数据的类型)\n *\n * @property columns - 列配置数组(响应式 Ref),用于渲染表格列\n * @property data - 表格数据源(响应式 Ref),对应 Element Plus Table 的 data 属性\n * @property pageParam - 分页参数(响应式 reactive),包含 current、pageSize、total\n * @property searchForm - 搜索表单实例(Form 类型),用于管理搜索区域的字段和数据\n * @property setColumn - 更新列配置,支持合并/覆盖两种模式,用法同 setField\n * @property deleteColumn - 删除列,支持路径或查找函数\n * @property appendColumn - 在指定列后追加新列,传 undefined 在末尾追加\n * @property prependColumn - 在指定列前插入新列,传 undefined 在开头插入\n * @property setPageParam - 设置分页参数,支持部分更新和函数式更新\n * @property resetQueryParams - 重置分页到第一页并恢复搜索条件到初始值\n *\n * @example\n * ```ts\n * interface SearchParams { keyword: string }\n * interface User { name: string; age: number }\n *\n * const table: Table<SearchParams, User> = useTable({\n * columns: [{ prop: 'name', title: '姓名' }],\n * })\n *\n * table.columns.value // 访问列配置\n * table.setColumn('name', { width: 150 }) // 更新列\n * table.setPageParam({ current: 2 }) // 切换页码\n * table.searchForm.setFormData('keyword', '搜索词') // 操作搜索表单\n * ```\n *\n * @public\n */\nexport type Table<\n D extends Data = Data,\n T extends Data = ExtendWithAny<D>,\n> = Omit<_Table<D, T, Column<T>>, 'dataSource'> & {\n /**\n * Element Plus 数据源(与 core 的 dataSource 对应)\n */\n data: Ref<T[]>;\n};\n\ntype UseTableParams<\n D extends Data = Data,\n T extends Data = ExtendWithAny<D>,\n> = {\n /** 列配置数组 */\n columns?: Columns<T>;\n /** 数据源数组(Element Plus 使用 data 而非 dataSource) */\n data?: T[];\n /** 初始分页参数 */\n pageParam?: PageParam;\n /** 初始搜索参数 */\n searchParam?: ExtendWithAny<DeepPartial<D>>;\n /** 搜索表单字段配置 */\n searchFields?: Fields<D>;\n};\n\n/**\n * 创建表格实例的 Hook\n *\n * @description 基于 `@qin-ui/pro-components-core` 的 `useTable` 封装,适配 Element Plus 的 API 风格:\n * - 数据源使用 `data` 而非 `dataSource`\n *\n * 是 ProTable 组件的核心 Hook,提供了:\n * - 列配置管理(增删改查)\n * - 数据源管理\n * - 分页管理\n * - 搜索表单集成(内部使用 useForm)\n * - 查询参数重置\n *\n * @template D - 搜索表单数据类型\n * @template T - 表格行数据类型\n *\n * @param {object} params - 表格配置参数\n * @param {Columns<T>} [params.columns] - 初始列配置数组\n * @param {T[]} [params.data] - 初始数据源(Element Plus 风格)\n * @param {PageParam} [params.pageParam] - 初始分页参数,默认 `{ current: 1, pageSize: 10, total: 0 }`\n * @param {ExtendWithAny<DeepPartial<D>>} [params.searchParam] - 初始搜索参数\n * @param {Fields<D>} [params.searchFields] - 搜索表单字段配置\n *\n * @returns {Table<D, T>} 表格实例\n *\n * @example\n * ```ts\n * interface SearchParams { keyword: string }\n * interface User { name: string; age: number; email: string }\n *\n * const table = useTable<SearchParams, User>({\n * columns: [\n * { prop: 'name', title: '姓名', width: 120 },\n * { prop: 'age', title: '年龄', width: 80 },\n * ],\n * data: [],\n * pageParam: { current: 1, pageSize: 20, total: 0 },\n * searchParam: { keyword: '' },\n * searchFields: [\n * { path: 'keyword', label: '关键词', component: 'input' },\n * ],\n * })\n * ```\n *\n * @see {@link coreUseTable} 底层核心实现(来自 @qin-ui/pro-components-core)\n *\n * @public\n */\nexport function useTable<\n D extends Data = Data,\n T extends Data = ExtendWithAny<D>,\n>(params: UseTableParams<D, T> = {}): Table<D, T> {\n const { data, ...rest } = params;\n const coreTable = (coreUseTable as any)({\n ...rest,\n dataSource: data,\n }) as _Table<D, T, Column<T>>;\n\n const { dataSource, ...tableWithoutDataSource } = coreTable as any;\n const table = {\n ...tableWithoutDataSource,\n data: dataSource as Ref<T[]>,\n } as Table<D, T>;\n\n return table;\n}\n"],"names":["_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_createBlock","_unref","ProForm","_mergeProps","_createVNode","Space","_renderSlot","_Fragment","_resolveDynamicComponent","Button","_createTextVNode","_toDisplayString","_normalizeStyle","_useModel","Dropdown","DropdownMenu","_renderList","DropdownItem","Checkbox","_withModifiers","_withCtx","_normalizeClass","$attrs","ContainerFragment","_withDirectives","TableColumnRenderer","_normalizeProps","_guardReactiveProps","coreUseTable"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qin-ui/element-plus-pro",
3
- "version": "1.0.8",
3
+ "version": "1.1.0",
4
4
  "description": "基于 element-plus 的二次封装组件",
5
5
  "bin": {
6
6
  "element-plus-pro": "./bin/init-ai.mjs"
@@ -17,6 +17,7 @@
17
17
  },
18
18
  "files": [
19
19
  "es",
20
+ "src",
20
21
  "bin",
21
22
  "README.md",
22
23
  "LICENSE",
@@ -28,10 +29,6 @@
28
29
  "type": "git",
29
30
  "url": "git+https://github.com/dufan3715/pro-components.git"
30
31
  },
31
- "scripts": {
32
- "prebuild": "tsx ../../scripts/generate-api-json.ts element-plus-pro",
33
- "build": "vue-tsc && vite build"
34
- },
35
32
  "author": "dufan3715",
36
33
  "license": "MIT",
37
34
  "private": false,
@@ -40,16 +37,18 @@
40
37
  "vue": "^3.5.0"
41
38
  },
42
39
  "dependencies": {
43
- "vue-component-type-helpers": "^3.2.5"
40
+ "vue-component-type-helpers": "^3.2.5",
41
+ "@qin-ui/pro-components-core": "^1.0.0"
44
42
  },
45
43
  "devDependencies": {
46
- "@qin-ui/core": "workspace:^",
47
- "@types/lodash-es": "^4.17.12",
48
- "element-plus": "^2.13.6",
49
- "lodash-es": "^4.17.21"
44
+ "element-plus": "^2.13.6"
50
45
  },
51
46
  "publishConfig": {
52
47
  "access": "public",
53
48
  "registry": "https://registry.npmjs.org/"
49
+ },
50
+ "scripts": {
51
+ "prebuild": "tsx ../../scripts/generate-api-json.ts element-plus-pro",
52
+ "build": "vue-tsc && vite build"
54
53
  }
55
- }
54
+ }
@@ -0,0 +1,67 @@
1
+ <script lang="ts" setup>
2
+ /**
3
+ * @component ProComponentProvider
4
+ * @description @qin-ui/element-plus-pro 全局配置提供者组件
5
+ *
6
+ * 用于在组件树的顶层配置所有子组件的全局默认属性。
7
+ *
8
+ * @param {ComponentVars} [componentVars] - 组件全局配置变量
9
+ * @param {Record<ComponentName, any>} [componentMap] - 自定义组件映射
10
+ *
11
+ * @slot default - 子组件内容
12
+ *
13
+ * @example
14
+ * ```vue
15
+ * <ProComponentProvider
16
+ * :componentVars="{ 'input': { placeholder: '请输入' } }"
17
+ * >
18
+ * <ProForm :form="form" :fields="fields" />
19
+ * </ProComponentProvider>
20
+ * ```
21
+
22
+ * @public
23
+ */
24
+ import { ComponentVars } from '../types';
25
+ import { INJECT_COMPONENTS, ensureInjectConfig } from '../constants';
26
+ import { provide } from 'vue';
27
+ import { getObject } from '../../../shared/core';
28
+ import { ComponentName } from '../../form/constants';
29
+
30
+ type ComponentMap = Partial<Record<ComponentName, any>>;
31
+
32
+ defineOptions({
33
+ name: 'ProComponentProvider',
34
+ inheritAttrs: false,
35
+ });
36
+
37
+ type Props = {
38
+ /** 组件全局配置,可配置所有内置组件的默认属性 */
39
+ componentVars?: ComponentVars;
40
+ /** 自定义组件映射,用于替换或扩展内置组件 */
41
+ componentMap?: ComponentMap;
42
+ };
43
+
44
+ const props = defineProps<Props>();
45
+
46
+ /*
47
+ * 遍历 componentVars 的每个 key,获取或创建对应的 inject 配置
48
+ * 将用户提供的值合并到默认值上,通过 provide 注入到子组件树
49
+ * 子组件通过 inject(config.injectionKey) 获取合并后的配置
50
+ */
51
+ if (props.componentVars) {
52
+ Object.entries(props.componentVars).forEach(([key, val]) => {
53
+ const config = ensureInjectConfig(key);
54
+ // 用户配置覆盖默认值
55
+ provide(config.injectionKey, { ...config.default, ...getObject(val) });
56
+ });
57
+ }
58
+
59
+ // 注入自定义组件映射,BaseField 在解析组件时会优先使用此映射
60
+ if (props.componentMap) {
61
+ provide(INJECT_COMPONENTS, props.componentMap);
62
+ }
63
+ </script>
64
+
65
+ <template>
66
+ <slot />
67
+ </template>
@@ -0,0 +1,209 @@
1
+ import { RequiredComponentVars } from '../types';
2
+ import { InjectionKey, Component } from 'vue';
3
+
4
+ export type InjectConfigEntry<T = any> = {
5
+ injectionKey: InjectionKey<T>;
6
+ default: T;
7
+ };
8
+
9
+ export const INJECT_CONFIG: {
10
+ [key in keyof RequiredComponentVars]: {
11
+ injectionKey: InjectionKey<RequiredComponentVars[key]>;
12
+ default: RequiredComponentVars[key];
13
+ };
14
+ } = {
15
+ 'pro-table': {
16
+ injectionKey: Symbol(''),
17
+ default: {
18
+ pagination: {
19
+ layout: 'total, sizes, prev, pager, next, jumper',
20
+ pageSizes: [10, 20, 30, 40, 50, 100],
21
+ background: true,
22
+ },
23
+ searchFormConfig: {
24
+ layout: 'grid',
25
+ expand: { minExpandRows: 2, expandStatus: false },
26
+ },
27
+ control: true,
28
+ addIndexColumn: true,
29
+ },
30
+ },
31
+ 'pro-form': {
32
+ injectionKey: Symbol(''),
33
+ default: { grid: { gutter: 24 } } as any,
34
+ },
35
+ 'pro-form-item': {
36
+ injectionKey: Symbol(''),
37
+ default: { span: 8 } as any,
38
+ },
39
+ input: {
40
+ injectionKey: Symbol(''),
41
+ default: { maxlength: 100, clearable: true, placeholder: '请输入' },
42
+ },
43
+ 'input.textarea': {
44
+ injectionKey: Symbol(''),
45
+ default: {
46
+ maxlength: 200,
47
+ autosize: { minRows: 3, maxRows: 6 },
48
+ showWordLimit: true,
49
+ clearable: true,
50
+ placeholder: '请输入',
51
+ },
52
+ },
53
+ 'input.password': {
54
+ injectionKey: Symbol(''),
55
+ default: {
56
+ showPassword: true,
57
+ maxlength: 100,
58
+ clearable: true,
59
+ placeholder: '请输入',
60
+ },
61
+ },
62
+ 'input-number': {
63
+ injectionKey: Symbol(''),
64
+ default: {
65
+ max: 10 ** 15 - 1,
66
+ min: -(10 ** 15 + 1),
67
+ controls: false,
68
+ placeholder: '请输入',
69
+ style: { width: '100%' },
70
+ },
71
+ },
72
+ autocomplete: {
73
+ injectionKey: Symbol(''),
74
+ default: { clearable: true, placeholder: '请输入' },
75
+ },
76
+ select: {
77
+ injectionKey: Symbol(''),
78
+ default: { clearable: true, placeholder: '请选择' },
79
+ },
80
+ cascader: {
81
+ injectionKey: Symbol(''),
82
+ default: { clearable: true, placeholder: '请选择' },
83
+ },
84
+ 'date-picker': {
85
+ injectionKey: Symbol(''),
86
+ default: { style: { width: '100%' }, placeholder: '请选择' },
87
+ },
88
+ 'date-picker.date': {
89
+ injectionKey: Symbol(''),
90
+ default: { style: { width: '100%' }, placeholder: '请选择' },
91
+ },
92
+ 'date-picker.dates': {
93
+ injectionKey: Symbol(''),
94
+ default: { style: { width: '100%' }, placeholder: '请选择' },
95
+ },
96
+ 'date-picker.daterange': {
97
+ injectionKey: Symbol(''),
98
+ default: {
99
+ style: { width: '100%' },
100
+ startPlaceholder: '开始日期',
101
+ endPlaceholder: '结束日期',
102
+ },
103
+ },
104
+ 'date-picker.week': {
105
+ injectionKey: Symbol(''),
106
+ default: { style: { width: '100%' }, placeholder: '请选择' },
107
+ },
108
+ 'date-picker.month': {
109
+ injectionKey: Symbol(''),
110
+ default: { style: { width: '100%' }, placeholder: '请选择' },
111
+ },
112
+ 'date-picker.monthrange': {
113
+ injectionKey: Symbol(''),
114
+ default: {
115
+ style: { width: '100%' },
116
+ startPlaceholder: '开始月份',
117
+ endPlaceholder: '结束月份',
118
+ },
119
+ },
120
+ 'date-picker.months': {
121
+ injectionKey: Symbol(''),
122
+ default: { style: { width: '100%' }, placeholder: '请选择' },
123
+ },
124
+ 'date-picker.yearrange': {
125
+ injectionKey: Symbol(''),
126
+ default: {
127
+ style: { width: '100%' },
128
+ startPlaceholder: '开始年份',
129
+ endPlaceholder: '结束年份',
130
+ },
131
+ },
132
+ 'date-picker.year': {
133
+ injectionKey: Symbol(''),
134
+ default: { style: { width: '100%' }, placeholder: '请选择' },
135
+ },
136
+ 'date-picker.years': {
137
+ injectionKey: Symbol(''),
138
+ default: { style: { width: '100%' }, placeholder: '请选择' },
139
+ },
140
+ 'date-picker.datetime': {
141
+ injectionKey: Symbol(''),
142
+ default: { style: { width: '100%' }, placeholder: '请选择' },
143
+ },
144
+ 'date-picker.datetimerange': {
145
+ injectionKey: Symbol(''),
146
+ default: {
147
+ style: { width: '100%' },
148
+ startPlaceholder: '开始时间',
149
+ endPlaceholder: '结束时间',
150
+ },
151
+ },
152
+ 'time-picker': {
153
+ injectionKey: Symbol(''),
154
+ default: { style: { width: '100%' }, placeholder: '请选择' },
155
+ },
156
+ 'time-select': {
157
+ injectionKey: Symbol(''),
158
+ default: { style: { width: '100%' }, placeholder: '请选择' },
159
+ },
160
+ 'checkbox-group': {
161
+ injectionKey: Symbol(''),
162
+ default: {},
163
+ },
164
+ 'radio-group': {
165
+ injectionKey: Symbol(''),
166
+ default: {},
167
+ },
168
+ switch: {
169
+ injectionKey: Symbol(''),
170
+ default: { modelProp: 'modelValue' },
171
+ },
172
+ slider: {
173
+ injectionKey: Symbol(''),
174
+ default: {},
175
+ },
176
+ 'tree-select': {
177
+ injectionKey: Symbol(''),
178
+ default: { clearable: true, placeholder: '请选择' },
179
+ },
180
+ transfer: {
181
+ injectionKey: Symbol(''),
182
+ default: {},
183
+ },
184
+ };
185
+
186
+ export const INJECT_COMPONENTS: InjectionKey<
187
+ Partial<Record<string, Component>>
188
+ > = Symbol('INJECT_COMPONENTS');
189
+
190
+ const DYNAMIC_INJECT_CONFIG: Record<string, InjectConfigEntry> =
191
+ Object.create(null);
192
+
193
+ export const getInjectConfig = (key: string): InjectConfigEntry | undefined => {
194
+ return (
195
+ (INJECT_CONFIG as Record<string, InjectConfigEntry>)[key] ||
196
+ DYNAMIC_INJECT_CONFIG[key]
197
+ );
198
+ };
199
+
200
+ export const ensureInjectConfig = (key: string): InjectConfigEntry => {
201
+ const existing = getInjectConfig(key);
202
+ if (existing) return existing;
203
+ const created: InjectConfigEntry = {
204
+ injectionKey: Symbol(`dynamic:${key}`),
205
+ default: {},
206
+ };
207
+ DYNAMIC_INJECT_CONFIG[key] = created;
208
+ return created;
209
+ };
@@ -0,0 +1,6 @@
1
+ import ComponentProvider from './components/index.vue';
2
+
3
+ // 仅导出全局属性配置类型,隐藏所有底层的 INJECT_CONFIG 与工具函数
4
+ export { type ComponentVars } from './types';
5
+
6
+ export default ComponentProvider;