jky-component-lib 0.0.64 → 0.0.67

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 (71) hide show
  1. package/dist/es/components.d.ts +1 -0
  2. package/dist/es/components.js +4 -1
  3. package/dist/es/form/Form.vue.d.ts +10 -6
  4. package/dist/es/form/Form.vue.js +131 -81
  5. package/dist/es/form/FormItem.vue.js +55 -3
  6. package/dist/es/form/SelectTable.vue.d.ts +38 -0
  7. package/dist/es/form/SelectTable.vue.js +217 -0
  8. package/dist/es/form/SelectTable.vue3.js +5 -0
  9. package/dist/es/form/style.css +56 -0
  10. package/dist/es/index.js +15 -0
  11. package/dist/es/package.json.js +1 -1
  12. package/dist/es/page-header/PageHeader.vue.js +2 -2
  13. package/dist/es/page-header/PopoverMenu.vue.js +2 -2
  14. package/dist/es/page-layout/PageLayout.vue.js +1 -1
  15. package/dist/es/page-layout/style.css +2 -0
  16. package/dist/es/page-table/PageTable.vue.d.ts +44 -28
  17. package/dist/es/page-table/PageTable.vue.js +91 -25
  18. package/dist/es/page-table/style.css +9 -1
  19. package/dist/es/style.css +164 -26
  20. package/dist/es/styles.css +1 -1
  21. package/dist/es/tabs/TabContent.vue.d.ts +16 -0
  22. package/dist/es/tabs/TabContent.vue.js +65 -0
  23. package/dist/es/tabs/TabContent.vue3.js +5 -0
  24. package/dist/es/tabs/Tabs.vue.d.ts +46 -0
  25. package/dist/es/tabs/Tabs.vue.js +275 -0
  26. package/dist/es/tabs/Tabs.vue3.js +5 -0
  27. package/dist/es/tabs/index.d.ts +9 -0
  28. package/dist/es/tabs/index.js +8 -0
  29. package/dist/es/tabs/routeListener.d.ts +19 -0
  30. package/dist/es/tabs/routeListener.js +26 -0
  31. package/dist/es/tabs/style.css +29 -0
  32. package/dist/es/tabs/useTabs.d.ts +27 -0
  33. package/dist/es/tabs/useTabs.js +59 -0
  34. package/dist/es/tabs/useTabsStore.d.ts +53 -0
  35. package/dist/es/tabs/useTabsStore.js +208 -0
  36. package/dist/lib/components.d.ts +1 -0
  37. package/dist/lib/components.js +4 -1
  38. package/dist/lib/form/Form.vue.d.ts +10 -6
  39. package/dist/lib/form/Form.vue.js +129 -79
  40. package/dist/lib/form/FormItem.vue.js +54 -2
  41. package/dist/lib/form/SelectTable.vue.d.ts +38 -0
  42. package/dist/lib/form/SelectTable.vue.js +217 -0
  43. package/dist/lib/form/SelectTable.vue3.js +5 -0
  44. package/dist/lib/form/style.css +56 -0
  45. package/dist/lib/index.js +15 -0
  46. package/dist/lib/package.json.js +1 -1
  47. package/dist/lib/page-header/PageHeader.vue.js +3 -3
  48. package/dist/lib/page-header/PopoverMenu.vue.js +2 -2
  49. package/dist/lib/page-layout/PageLayout.vue.js +1 -1
  50. package/dist/lib/page-layout/style.css +2 -0
  51. package/dist/lib/page-table/PageTable.vue.d.ts +44 -28
  52. package/dist/lib/page-table/PageTable.vue.js +90 -24
  53. package/dist/lib/page-table/style.css +9 -1
  54. package/dist/lib/style.css +164 -26
  55. package/dist/lib/styles.css +1 -1
  56. package/dist/lib/tabs/TabContent.vue.d.ts +16 -0
  57. package/dist/lib/tabs/TabContent.vue.js +65 -0
  58. package/dist/lib/tabs/TabContent.vue3.js +5 -0
  59. package/dist/lib/tabs/Tabs.vue.d.ts +46 -0
  60. package/dist/lib/tabs/Tabs.vue.js +275 -0
  61. package/dist/lib/tabs/Tabs.vue3.js +5 -0
  62. package/dist/lib/tabs/index.d.ts +9 -0
  63. package/dist/lib/tabs/index.js +8 -0
  64. package/dist/lib/tabs/routeListener.d.ts +19 -0
  65. package/dist/lib/tabs/routeListener.js +26 -0
  66. package/dist/lib/tabs/style.css +29 -0
  67. package/dist/lib/tabs/useTabs.d.ts +27 -0
  68. package/dist/lib/tabs/useTabs.js +59 -0
  69. package/dist/lib/tabs/useTabsStore.d.ts +53 -0
  70. package/dist/lib/tabs/useTabsStore.js +208 -0
  71. package/package.json +10 -2
@@ -0,0 +1,217 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __defProps = Object.defineProperties;
3
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
7
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
8
+ var __spreadValues = (a, b) => {
9
+ for (var prop in b || (b = {}))
10
+ if (__hasOwnProp.call(b, prop))
11
+ __defNormalProp(a, prop, b[prop]);
12
+ if (__getOwnPropSymbols)
13
+ for (var prop of __getOwnPropSymbols(b)) {
14
+ if (__propIsEnum.call(b, prop))
15
+ __defNormalProp(a, prop, b[prop]);
16
+ }
17
+ return a;
18
+ };
19
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
20
+ var __async = (__this, __arguments, generator) => {
21
+ return new Promise((resolve, reject) => {
22
+ var fulfilled = (value) => {
23
+ try {
24
+ step(generator.next(value));
25
+ } catch (e) {
26
+ reject(e);
27
+ }
28
+ };
29
+ var rejected = (value) => {
30
+ try {
31
+ step(generator.throw(value));
32
+ } catch (e) {
33
+ reject(e);
34
+ }
35
+ };
36
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
37
+ step((generator = generator.apply(__this, __arguments)).next());
38
+ });
39
+ };
40
+ import { defineComponent, ref, computed, watch, openBlock, createElementBlock, createElementVNode, Fragment, renderList, createBlock, unref, withCtx, createTextVNode, toDisplayString, createCommentVNode, withDirectives, createVNode, mergeProps, vShow } from "vue";
41
+ import { ElTag, ElButton } from "element-plus";
42
+ import { JkyPageTable } from "../page-table/index.js";
43
+ const _hoisted_1 = { class: "jky-select-table" };
44
+ const _hoisted_2 = { class: "jky-select-table__tags" };
45
+ const _hoisted_3 = { class: "jky-select-table__dropdown" };
46
+ const __default__ = {
47
+ name: "JkySelectTable"
48
+ };
49
+ const _sfc_main = /* @__PURE__ */ defineComponent(__spreadProps(__spreadValues(__spreadValues({}, __default__), {
50
+ name: "JkySelectTable",
51
+ inheritAttrs: false
52
+ }), {
53
+ props: {
54
+ modelValue: {},
55
+ multiple: { type: Boolean, default: false },
56
+ labelField: { default: "label" },
57
+ idField: { default: "id" },
58
+ detailApi: {},
59
+ tableProps: {},
60
+ filterItems: {},
61
+ dataSource: {},
62
+ responseProps: {},
63
+ pagination: { type: Boolean },
64
+ readonly: { type: Boolean, default: false },
65
+ disabled: { type: Boolean, default: false }
66
+ },
67
+ emits: ["update:modelValue", "change"],
68
+ setup(__props, { emit: __emit }) {
69
+ const props = __props;
70
+ const emit = __emit;
71
+ const showTable = ref(false);
72
+ const selectedData = ref([]);
73
+ const selectedRows = ref([]);
74
+ const selectedValue = computed({
75
+ get: () => props.modelValue,
76
+ set: (val) => {
77
+ emit("update:modelValue", val);
78
+ }
79
+ });
80
+ function initSelectedData() {
81
+ return __async(this, null, function* () {
82
+ const ids = getIdsFromModelValue(props.modelValue);
83
+ if (!ids || ids.length === 0) {
84
+ selectedData.value = [];
85
+ selectedRows.value = [];
86
+ return;
87
+ }
88
+ if (props.detailApi) {
89
+ try {
90
+ const result = yield props.detailApi({ ids: ids.join(",") });
91
+ selectedData.value = Array.isArray(result) ? result : [result];
92
+ selectedRows.value = [...selectedData.value];
93
+ } catch (error) {
94
+ console.error("加载已选数据失败:", error);
95
+ selectedData.value = [];
96
+ selectedRows.value = [];
97
+ }
98
+ } else {
99
+ selectedData.value = ids.map((id) => ({
100
+ [props.idField]: id,
101
+ [props.labelField]: id
102
+ }));
103
+ selectedRows.value = [...selectedData.value];
104
+ }
105
+ });
106
+ }
107
+ function getIdsFromModelValue(modelValue) {
108
+ if (!modelValue)
109
+ return [];
110
+ if (Array.isArray(modelValue))
111
+ return modelValue;
112
+ return [modelValue];
113
+ }
114
+ function removeTag(item) {
115
+ if (props.disabled || props.readonly)
116
+ return;
117
+ const id = item[props.idField];
118
+ if (props.multiple) {
119
+ const currentIds = getIdsFromModelValue(props.modelValue);
120
+ const newIds = currentIds.filter((v) => v !== id);
121
+ selectedValue.value = newIds;
122
+ } else {
123
+ selectedValue.value = "";
124
+ }
125
+ selectedData.value = selectedData.value.filter((v) => v[props.idField] !== id);
126
+ selectedRows.value = selectedRows.value.filter((v) => v[props.idField] !== id);
127
+ emit("change", selectedValue.value, selectedData.value);
128
+ }
129
+ function handleSelectionChange(selection) {
130
+ selectedRows.value = selection;
131
+ if (props.multiple) {
132
+ const ids = selection.map((item) => item[props.idField]);
133
+ selectedValue.value = ids;
134
+ selectedData.value = selection;
135
+ } else {
136
+ if (selection.length > 0) {
137
+ const item = selection[0];
138
+ selectedValue.value = item[props.idField];
139
+ selectedData.value = [item];
140
+ } else {
141
+ selectedValue.value = "";
142
+ selectedData.value = [];
143
+ }
144
+ }
145
+ emit("change", selectedValue.value, selectedData.value);
146
+ }
147
+ watch(
148
+ () => props.modelValue,
149
+ (newVal) => {
150
+ if (newVal && (Array.isArray(newVal) ? newVal.length > 0 : newVal)) {
151
+ initSelectedData();
152
+ }
153
+ },
154
+ { immediate: true }
155
+ );
156
+ function toggleTable() {
157
+ if (props.disabled || props.readonly)
158
+ return;
159
+ showTable.value = !showTable.value;
160
+ }
161
+ const pageTableProps = computed(() => {
162
+ var _a, _b, _c;
163
+ const dataSource = ((_a = props.tableProps) == null ? void 0 : _a.dataSource) || props.dataSource;
164
+ const filterItems = ((_b = props.tableProps) == null ? void 0 : _b.filterItems) || props.filterItems;
165
+ const columns = ((_c = props.tableProps) == null ? void 0 : _c.columns) || [];
166
+ return __spreadProps(__spreadValues({}, props.tableProps), {
167
+ columns,
168
+ dataSource,
169
+ filterItems,
170
+ selection: true,
171
+ selectedRows: selectedRows.value
172
+ });
173
+ });
174
+ return (_ctx, _cache) => {
175
+ return openBlock(), createElementBlock("div", _hoisted_1, [
176
+ createElementVNode("div", _hoisted_2, [
177
+ (openBlock(true), createElementBlock(Fragment, null, renderList(selectedData.value, (item) => {
178
+ return openBlock(), createBlock(unref(ElTag), {
179
+ key: item[__props.idField],
180
+ closable: "",
181
+ "disable-transitions": false,
182
+ onClose: ($event) => removeTag(item)
183
+ }, {
184
+ default: withCtx(() => [
185
+ createTextVNode(toDisplayString(item[__props.labelField]), 1)
186
+ ]),
187
+ _: 2
188
+ }, 1032, ["onClose"]);
189
+ }), 128)),
190
+ !__props.readonly && !__props.disabled ? (openBlock(), createBlock(unref(ElButton), {
191
+ key: 0,
192
+ text: "",
193
+ type: "primary",
194
+ onClick: toggleTable
195
+ }, {
196
+ default: withCtx(() => [
197
+ createTextVNode(toDisplayString(selectedData.value.length > 0 ? "更换" : "选择"), 1)
198
+ ]),
199
+ _: 1
200
+ })) : createCommentVNode("", true)
201
+ ]),
202
+ withDirectives(createElementVNode("div", _hoisted_3, [
203
+ createVNode(unref(JkyPageTable), mergeProps(pageTableProps.value, {
204
+ selection: true,
205
+ "selected-rows": selectedRows.value,
206
+ onSelectionChange: handleSelectionChange
207
+ }), null, 16, ["selected-rows"])
208
+ ], 512), [
209
+ [vShow, showTable.value]
210
+ ])
211
+ ]);
212
+ };
213
+ }
214
+ }));
215
+ export {
216
+ _sfc_main as default
217
+ };
@@ -0,0 +1,5 @@
1
+ import _sfc_main from "./SelectTable.vue.js";
2
+ /* empty css */
3
+ export {
4
+ _sfc_main as default
5
+ };
@@ -4,6 +4,15 @@
4
4
  --jky-form-item-border-width: 4px;
5
5
  --jky-form-item-border-color: var(--el-color-primary);
6
6
  --jky-form-item-bg-color: rgba(var(--el-color-primary-rgb), 0.5);
7
+
8
+ /* Grid 布局默认列数(可通过响应式变量覆盖) */
9
+ --jky-form-grid-cols-xs: 1;
10
+ --jky-form-grid-cols-sm: 2;
11
+ --jky-form-grid-cols-md: 2;
12
+ --jky-form-grid-cols-lg: 3;
13
+ --jky-form-grid-cols-xl: 3;
14
+ --jky-form-grid-cols-2xl: 4;
15
+ --jky-form-grid-cols-3xl: 4;
7
16
  }
8
17
 
9
18
 
@@ -11,6 +20,53 @@
11
20
  .jky-form {
12
21
  /* 表单容器样式 */
13
22
  }
23
+
24
+
25
+ /* Grid 布局模式 */
26
+ .jky-form--grid {
27
+ display: grid;
28
+ grid-template-columns: repeat(var(--jky-form-grid-cols-xs), minmax(0, 1fr));
29
+ gap: var(--el-form-item-gutter, 16px);
30
+ }
31
+ .el-form--inline.jky-form--grid .el-form-item {
32
+ margin-right: 0;
33
+ .el-form-item__content {
34
+ align-items: flex-start;
35
+ }
36
+ }
37
+
38
+
39
+ /* 响应式断点 */
40
+ @media (min-width: 640px) {
41
+ .jky-form--grid {
42
+ grid-template-columns: repeat(var(--jky-form-grid-cols-sm, var(--jky-form-grid-cols-xs)), minmax(0, 1fr));
43
+ }
44
+ }
45
+ @media (min-width: 768px) {
46
+ .jky-form--grid {
47
+ grid-template-columns: repeat(var(--jky-form-grid-cols-md, var(--jky-form-grid-cols-sm)), minmax(0, 1fr));
48
+ }
49
+ }
50
+ @media (min-width: 1024px) {
51
+ .jky-form--grid {
52
+ grid-template-columns: repeat(var(--jky-form-grid-cols-lg, var(--jky-form-grid-cols-md)), minmax(0, 1fr));
53
+ }
54
+ }
55
+ @media (min-width: 1280px) {
56
+ .jky-form--grid {
57
+ grid-template-columns: repeat(var(--jky-form-grid-cols-xl, var(--jky-form-grid-cols-lg)), minmax(0, 1fr));
58
+ }
59
+ }
60
+ @media (min-width: 1536px) {
61
+ .jky-form--grid {
62
+ grid-template-columns: repeat(var(--jky-form-grid-cols-2xl, var(--jky-form-grid-cols-xl)), minmax(0, 1fr));
63
+ }
64
+ }
65
+ @media (min-width: 1920px) {
66
+ .jky-form--grid {
67
+ grid-template-columns: repeat(var(--jky-form-grid-cols-3xl, var(--jky-form-grid-cols-2xl)), minmax(0, 1fr));
68
+ }
69
+ }
14
70
  .jky-form__title {
15
71
  /* 表单标题样式 */
16
72
  }
package/dist/es/index.js CHANGED
@@ -2,6 +2,8 @@ import { components } from "./components.js";
2
2
  import { createInstaller } from "./utils/installer.js";
3
3
  /* empty css */
4
4
  import { JkyComponentLibResolver } from "./resolver.js";
5
+ import { default as default2 } from "./tabs/TabContent.vue.js";
6
+ /* empty css */
5
7
  import { JkyAddInput } from "./add-input/index.js";
6
8
  import { JkyButton } from "./button/index.js";
7
9
  import { JkyButtonNav } from "./button-nav/index.js";
@@ -13,6 +15,10 @@ import { JkyPageLayout } from "./page-layout/index.js";
13
15
  import { JkyPageTable } from "./page-table/index.js";
14
16
  import { JkyRichEditor } from "./rich-editor/index.js";
15
17
  import { JkySayHello } from "./say-hello/index.js";
18
+ import { JkyTabs } from "./tabs/index.js";
19
+ import { clearRouteListeners, emitRouteChange, onRouteChange } from "./tabs/routeListener.js";
20
+ import { createTabsStore, resetTabsStore, useTabsStore } from "./tabs/useTabsStore.js";
21
+ import { useTabs } from "./tabs/useTabs.js";
16
22
  const installer = createInstaller(components);
17
23
  const install = installer.install;
18
24
  const version = installer.version;
@@ -29,8 +35,17 @@ export {
29
35
  JkyPageTable,
30
36
  JkyRichEditor,
31
37
  JkySayHello,
38
+ default2 as JkyTabContent,
39
+ JkyTabs,
40
+ clearRouteListeners,
32
41
  components,
42
+ createTabsStore,
33
43
  installer as default,
44
+ emitRouteChange,
34
45
  install,
46
+ onRouteChange,
47
+ resetTabsStore,
48
+ useTabs,
49
+ useTabsStore,
35
50
  version
36
51
  };
@@ -1,4 +1,4 @@
1
- const version = "0.0.64";
1
+ const version = "0.0.67";
2
2
  export {
3
3
  version
4
4
  };
@@ -17,7 +17,7 @@ var __spreadValues = (a, b) => {
17
17
  return a;
18
18
  };
19
19
  var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
20
- import { defineComponent, openBlock, createElementBlock, normalizeStyle, unref, createElementVNode, createBlock, normalizeProps, mergeProps, createCommentVNode, toDisplayString, renderSlot, Fragment, renderList, normalizeClass, withCtx, resolveDynamicComponent, createVNode, createTextVNode } from "vue";
20
+ import { defineComponent, computed, openBlock, createElementBlock, normalizeStyle, createElementVNode, createBlock, normalizeProps, mergeProps, createCommentVNode, toDisplayString, renderSlot, Fragment, renderList, normalizeClass, unref, withCtx, resolveDynamicComponent, createVNode, createTextVNode } from "vue";
21
21
  import { ElIcon, ElDropdown, ElDropdownMenu, ElDropdownItem } from "element-plus";
22
22
  import _sfc_main$1 from "./PopoverMenu.vue.js";
23
23
  const _hoisted_1 = { class: "jky-page-header__container" };
@@ -96,7 +96,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent(__spreadProps(__spreadValues({
96
96
  var _a, _b, _c, _d;
97
97
  return openBlock(), createElementBlock("header", {
98
98
  class: "jky-page-header",
99
- style: normalizeStyle([unref(backgroundStyle), { height: unref(heightValue) }])
99
+ style: normalizeStyle([backgroundStyle.value, { height: heightValue.value }])
100
100
  }, [
101
101
  createElementVNode("div", _hoisted_1, [
102
102
  __props.showPopover && ((_b = (_a = __props.popover) == null ? void 0 : _a.menus) == null ? void 0 : _b.length) ? (openBlock(), createBlock(_sfc_main$1, normalizeProps(mergeProps({ key: 0 }, __props.popover)), null, 16)) : createCommentVNode("", true),
@@ -1,4 +1,4 @@
1
- import { defineComponent, openBlock, createElementBlock, createVNode, unref, withCtx, createElementVNode, Fragment, renderList, createBlock, normalizeClass, createCommentVNode, toDisplayString } from "vue";
1
+ import { defineComponent, ref, openBlock, createElementBlock, createVNode, unref, withCtx, createElementVNode, Fragment, renderList, createBlock, normalizeClass, createCommentVNode, toDisplayString } from "vue";
2
2
  import { ElPopover, ElButton } from "element-plus";
3
3
  const _hoisted_1 = {
4
4
  key: 0,
@@ -59,7 +59,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
59
59
  key: item.value,
60
60
  disabled: item.disabled,
61
61
  class: normalizeClass(["w-fit! h-fit! ml-0!", [__props.elButtonClass, item.elButtonClass]]),
62
- type: unref(popoverIndex) === item.value ? "primary" : __props.elButtonType || "default",
62
+ type: popoverIndex.value === item.value ? "primary" : __props.elButtonType || "default",
63
63
  onClick: ($event) => onPopoverButtonClick(item)
64
64
  }, {
65
65
  default: withCtx(() => [
@@ -20,7 +20,7 @@ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
20
20
  import { defineComponent, resolveComponent, openBlock, createElementBlock, createVNode, unref, normalizeClass, createSlots, withCtx, createBlock, renderSlot, createCommentVNode, createElementVNode, resolveDynamicComponent } from "vue";
21
21
  import { ElCard, ElScrollbar } from "element-plus";
22
22
  const _hoisted_1 = {
23
- class: "jky-page-layout flex h-full w-full overflow-hidden gap-x-4",
23
+ class: "jky-page-layout flex h-full w-full overflow-hidden",
24
24
  style: { "--el-menu-border-color": "transparent" }
25
25
  };
26
26
  const _sfc_main = /* @__PURE__ */ defineComponent(__spreadProps(__spreadValues({}, {
@@ -1,7 +1,9 @@
1
1
  :root {
2
2
  /* PageLayout 布局组件 CSS 变量 */
3
+ --jky-page-layout-gap: 5;
3
4
  }
4
5
  .jky-page-layout {
6
+ column-gap: calc(var(--spacing) * var(--jky-page-layout-gap));
5
7
  .el-menu {
6
8
  border-right: none;
7
9
  }