@ditari/bsui 5.0.29 → 5.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.
- package/dist/cjs/components/card/Card.cjs +49 -0
- package/dist/cjs/components/card/Card.cjs.map +1 -0
- package/dist/cjs/components/card/index.cjs +8 -0
- package/dist/cjs/components/card/index.cjs.map +1 -0
- package/dist/cjs/components/card/style.cjs +40 -0
- package/dist/cjs/components/card/style.cjs.map +1 -0
- package/dist/cjs/components/index.cjs +11 -0
- package/dist/cjs/components/index.cjs.map +1 -1
- package/dist/cjs/components/layout/AppContext.cjs +7 -0
- package/dist/cjs/components/layout/AppContext.cjs.map +1 -0
- package/dist/cjs/components/layout/Layout.vue2.cjs +11 -16
- package/dist/cjs/components/layout/Layout.vue2.cjs.map +1 -1
- package/dist/cjs/components/layout/Show.cjs +6 -1
- package/dist/cjs/components/layout/Show.cjs.map +1 -1
- package/dist/cjs/components/layout/components/layout/ThemeApp.vue2.cjs +0 -1
- package/dist/cjs/components/layout/components/layout/ThemeApp.vue2.cjs.map +1 -1
- package/dist/cjs/components/layout/components/menu/Menu.cjs +38 -39
- package/dist/cjs/components/layout/components/menu/Menu.cjs.map +1 -1
- package/dist/cjs/components/table-form/TableForm.cjs +109 -0
- package/dist/cjs/components/table-form/TableForm.cjs.map +1 -0
- package/dist/cjs/components/table-form/TableFormItem.cjs +112 -0
- package/dist/cjs/components/table-form/TableFormItem.cjs.map +1 -0
- package/dist/cjs/components/table-form/index.cjs +16 -0
- package/dist/cjs/components/table-form/index.cjs.map +1 -0
- package/dist/cjs/components/table-form/interface.cjs +58 -0
- package/dist/cjs/components/table-form/interface.cjs.map +1 -0
- package/dist/cjs/components/table-form/style.cjs +124 -0
- package/dist/cjs/components/table-form/style.cjs.map +1 -0
- package/dist/cjs/hooks/useDesign.cjs +31 -0
- package/dist/cjs/hooks/useDesign.cjs.map +1 -0
- package/dist/cjs/index.cjs +13 -3
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/utils/withInstall.cjs +18 -0
- package/dist/cjs/utils/withInstall.cjs.map +1 -0
- package/dist/esm/components/card/Card.mjs +47 -0
- package/dist/esm/components/card/Card.mjs.map +1 -0
- package/dist/esm/components/card/index.mjs +4 -0
- package/dist/esm/components/card/index.mjs.map +1 -0
- package/dist/esm/components/card/style.mjs +38 -0
- package/dist/esm/components/card/style.mjs.map +1 -0
- package/dist/esm/components/index.mjs +5 -0
- package/dist/esm/components/index.mjs.map +1 -1
- package/dist/esm/components/layout/AppContext.mjs +5 -0
- package/dist/esm/components/layout/AppContext.mjs.map +1 -0
- package/dist/esm/components/layout/Layout.vue2.mjs +12 -17
- package/dist/esm/components/layout/Layout.vue2.mjs.map +1 -1
- package/dist/esm/components/layout/Show.mjs +7 -2
- package/dist/esm/components/layout/Show.mjs.map +1 -1
- package/dist/esm/components/layout/components/layout/ThemeApp.vue2.mjs +0 -1
- package/dist/esm/components/layout/components/layout/ThemeApp.vue2.mjs.map +1 -1
- package/dist/esm/components/layout/components/menu/Menu.mjs +41 -42
- package/dist/esm/components/layout/components/menu/Menu.mjs.map +1 -1
- package/dist/esm/components/table-form/TableForm.mjs +106 -0
- package/dist/esm/components/table-form/TableForm.mjs.map +1 -0
- package/dist/esm/components/table-form/TableFormItem.mjs +110 -0
- package/dist/esm/components/table-form/TableFormItem.mjs.map +1 -0
- package/dist/esm/components/table-form/index.mjs +10 -0
- package/dist/esm/components/table-form/index.mjs.map +1 -0
- package/dist/esm/components/table-form/interface.mjs +54 -0
- package/dist/esm/components/table-form/interface.mjs.map +1 -0
- package/dist/esm/components/table-form/style.mjs +122 -0
- package/dist/esm/components/table-form/style.mjs.map +1 -0
- package/dist/esm/hooks/useDesign.mjs +28 -0
- package/dist/esm/hooks/useDesign.mjs.map +1 -0
- package/dist/esm/index.mjs +4 -0
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/utils/withInstall.mjs +16 -0
- package/dist/esm/utils/withInstall.mjs.map +1 -0
- package/dist/types/components/card/Card.d.ts +6 -0
- package/dist/types/components/card/Card.d.ts.map +1 -0
- package/dist/types/components/card/index.d.ts +3 -0
- package/dist/types/components/card/index.d.ts.map +1 -0
- package/dist/types/components/card/style.d.ts +9 -0
- package/dist/types/components/card/style.d.ts.map +1 -0
- package/dist/types/components/index.d.ts +2 -0
- package/dist/types/components/index.d.ts.map +1 -1
- package/dist/types/components/layout/AppContext.d.ts +11 -0
- package/dist/types/components/layout/AppContext.d.ts.map +1 -0
- package/dist/types/components/layout/Layout.vue.d.ts +11 -2
- package/dist/types/components/layout/Layout.vue.d.ts.map +1 -1
- package/dist/types/components/layout/Show.d.ts.map +1 -1
- package/dist/types/components/layout/components/layout/ThemeApp.vue.d.ts.map +1 -1
- package/dist/types/components/layout/components/menu/Menu.d.ts.map +1 -1
- package/dist/types/components/table-form/TableForm.d.ts +57 -0
- package/dist/types/components/table-form/TableForm.d.ts.map +1 -0
- package/dist/types/components/table-form/TableFormItem.d.ts +23 -0
- package/dist/types/components/table-form/TableFormItem.d.ts.map +1 -0
- package/dist/types/components/table-form/index.d.ts +9 -0
- package/dist/types/components/table-form/index.d.ts.map +1 -0
- package/dist/types/components/table-form/interface.d.ts +57 -0
- package/dist/types/components/table-form/interface.d.ts.map +1 -0
- package/dist/types/components/table-form/style.d.ts +12 -0
- package/dist/types/components/table-form/style.d.ts.map +1 -0
- package/dist/types/hooks/useDesign.d.ts +8 -0
- package/dist/types/hooks/useDesign.d.ts.map +1 -0
- package/dist/types/utils/withInstall.d.ts +12 -0
- package/dist/types/utils/withInstall.d.ts.map +1 -0
- package/package.json +3 -3
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var vue = require('vue');
|
|
4
|
+
var antDesignVue = require('ant-design-vue');
|
|
5
|
+
var _interface = require('./interface.cjs');
|
|
6
|
+
var style = require('./style.cjs');
|
|
7
|
+
var css = require('@emotion/css');
|
|
8
|
+
var lodash = require('lodash');
|
|
9
|
+
var useDesign = require('../../hooks/useDesign.cjs');
|
|
10
|
+
var withInstall = require('../../utils/withInstall.cjs');
|
|
11
|
+
|
|
12
|
+
"use strict";
|
|
13
|
+
const FormContextKey = Symbol("d-table-form-context");
|
|
14
|
+
const getValidVNodesCount = (vnodes) => {
|
|
15
|
+
let count = 0;
|
|
16
|
+
if (Array.isArray(vnodes)) {
|
|
17
|
+
vnodes.forEach((vnode) => {
|
|
18
|
+
if (vue.isVNode(vnode)) {
|
|
19
|
+
if (vnode.type !== vue.Comment && vnode.type !== vue.Text && vnode.children !== " ") {
|
|
20
|
+
count++;
|
|
21
|
+
}
|
|
22
|
+
} else if (Array.isArray(vnode)) {
|
|
23
|
+
count += getValidVNodesCount(vnode);
|
|
24
|
+
} else if (typeof vnode === "string" && vnode.trim() !== "") {
|
|
25
|
+
count++;
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
return count;
|
|
30
|
+
};
|
|
31
|
+
const containerBorderStyle = css.css`
|
|
32
|
+
/* 顶部边框 */
|
|
33
|
+
border-top: 1px solid #d9d9d9;
|
|
34
|
+
/* 左侧边框 */
|
|
35
|
+
border-left: 1px solid #d9d9d9;
|
|
36
|
+
`;
|
|
37
|
+
const _TableForm = /* @__PURE__ */ vue.defineComponent({
|
|
38
|
+
name: "DTableForm",
|
|
39
|
+
props: _interface.tableFormProps,
|
|
40
|
+
setup(props, {
|
|
41
|
+
slots,
|
|
42
|
+
attrs,
|
|
43
|
+
expose
|
|
44
|
+
}) {
|
|
45
|
+
const token = useDesign.useAntdToken();
|
|
46
|
+
const {
|
|
47
|
+
getPrefixCls
|
|
48
|
+
} = useDesign.useDesign("table-form");
|
|
49
|
+
const formRef = vue.ref();
|
|
50
|
+
const calculatedSpan = vue.computed(() => Math.floor(24 / props.colCount));
|
|
51
|
+
const isReadonly = vue.computed(() => props.readonly);
|
|
52
|
+
const finalStylesConfig = vue.computed(() => {
|
|
53
|
+
const defaultCopy = JSON.parse(JSON.stringify(_interface.DEFAULT_STYLES_CONFIG));
|
|
54
|
+
return lodash.merge(defaultCopy, props.stylesConfig);
|
|
55
|
+
});
|
|
56
|
+
const modelState = vue.computed(() => attrs.model);
|
|
57
|
+
vue.provide(FormContextKey, {
|
|
58
|
+
isFormParent: true,
|
|
59
|
+
span: calculatedSpan,
|
|
60
|
+
fieldErrors: {},
|
|
61
|
+
isReadonly,
|
|
62
|
+
stylesConfig: finalStylesConfig,
|
|
63
|
+
model: modelState
|
|
64
|
+
});
|
|
65
|
+
const fillerCols = vue.computed(() => {
|
|
66
|
+
const colCls = getPrefixCls("item-col");
|
|
67
|
+
const styles = style.useFormItemStyle(finalStylesConfig.value, token);
|
|
68
|
+
const defaultSlot = slots.default ? slots.default() : [];
|
|
69
|
+
const itemCounts = getValidVNodesCount(defaultSlot);
|
|
70
|
+
const colCount = props.colCount;
|
|
71
|
+
const remainder = itemCounts % colCount;
|
|
72
|
+
const fillerCount = remainder === 0 ? 0 : colCount - remainder;
|
|
73
|
+
const span = calculatedSpan.value;
|
|
74
|
+
const fillerNodes = [];
|
|
75
|
+
for (let i = 0; i < fillerCount; i++) {
|
|
76
|
+
fillerNodes.push(vue.createVNode(antDesignVue.Col, {
|
|
77
|
+
"key": `filler-${i}`,
|
|
78
|
+
"span": span,
|
|
79
|
+
"class": css.cx(colCls, styles.cellBorderStyle)
|
|
80
|
+
}, {
|
|
81
|
+
default: () => [vue.createVNode(antDesignVue.FormItem, {
|
|
82
|
+
"label": " "
|
|
83
|
+
}, null)]
|
|
84
|
+
}));
|
|
85
|
+
}
|
|
86
|
+
return fillerNodes;
|
|
87
|
+
});
|
|
88
|
+
expose({
|
|
89
|
+
form: formRef
|
|
90
|
+
});
|
|
91
|
+
return () => {
|
|
92
|
+
const rootCls = getPrefixCls();
|
|
93
|
+
return vue.createVNode(antDesignVue.Form, vue.mergeProps({
|
|
94
|
+
"class": css.cx(rootCls, containerBorderStyle)
|
|
95
|
+
}, attrs, {
|
|
96
|
+
"ref": formRef
|
|
97
|
+
}), {
|
|
98
|
+
default: () => [vue.createVNode(antDesignVue.Row, null, {
|
|
99
|
+
default: () => [slots.default ? slots.default() : null, fillerCols.value]
|
|
100
|
+
})]
|
|
101
|
+
});
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
const TableForm = withInstall.withInstall(_TableForm);
|
|
106
|
+
|
|
107
|
+
exports.FormContextKey = FormContextKey;
|
|
108
|
+
exports.TableForm = TableForm;
|
|
109
|
+
//# sourceMappingURL=TableForm.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TableForm.cjs","sources":["../../../../src/components/table-form/TableForm.tsx"],"sourcesContent":["import {\r\n Comment,\r\n computed,\r\n ComputedRef,\r\n defineComponent,\r\n isVNode,\r\n provide,\r\n ref,\r\n Text\r\n} from \"vue\";\r\nimport {\r\n Col,\r\n Form,\r\n FormInstance,\r\n FormItem,\r\n Row\r\n} from \"ant-design-vue\";\r\n\r\nimport {\r\n DEFAULT_STYLES_CONFIG,\r\n StylesConfig,\r\n tableFormProps\r\n} from \"./interface\";\r\nimport { useFormItemStyle } from \"./style\";\r\nimport { css, cx } from \"@emotion/css\";\r\nimport { merge } from \"lodash\";\r\n\r\nimport {\r\n useAntdToken,\r\n useDesign\r\n} from \"../../hooks/useDesign\";\r\n\r\nimport { withInstall } from \"../../utils/withInstall\";\r\n\r\nexport const FormContextKey = Symbol(\r\n \"d-table-form-context\"\r\n);\r\n\r\n// ⭐️ Context 接口,包含错误状态映射\r\nexport interface TableFormContext {\r\n isFormParent: true;\r\n span: ComputedRef<number>;\r\n isReadonly: ComputedRef<boolean>;\r\n fieldErrors: ComputedRef<\r\n Record<string, string | undefined>\r\n >;\r\n stylesConfig: ComputedRef<StylesConfig>;\r\n model: ComputedRef<Record<string, unknown>>;\r\n}\r\n\r\n// 辅助函数:计算插槽中有效 VNode 的数量\r\nconst getValidVNodesCount = (vnodes: unknown): number => {\r\n let count = 0;\r\n if (Array.isArray(vnodes)) {\r\n vnodes.forEach(vnode => {\r\n if (isVNode(vnode)) {\r\n // 忽略注释、文本节点、或仅空白的节点\r\n if (\r\n vnode.type !== Comment &&\r\n vnode.type !== Text &&\r\n vnode.children !== \" \"\r\n ) {\r\n count++;\r\n }\r\n } else if (Array.isArray(vnode)) {\r\n // 处理 Fragment 或嵌套数组\r\n count += getValidVNodesCount(vnode);\r\n } else if (\r\n typeof vnode === \"string\" &&\r\n vnode.trim() !== \"\"\r\n ) {\r\n // 处理非空字符串(虽然不常见,但保险起见)\r\n count++;\r\n }\r\n });\r\n }\r\n return count;\r\n};\r\n\r\nconst containerBorderStyle = css`\r\n /* 顶部边框 */\r\n border-top: 1px solid #d9d9d9;\r\n /* 左侧边框 */\r\n border-left: 1px solid #d9d9d9;\r\n`;\r\n\r\nconst _TableForm = defineComponent({\r\n name: \"DTableForm\",\r\n props: tableFormProps,\r\n\r\n setup(props, { slots, attrs, expose }) {\r\n const token = useAntdToken();\r\n\r\n const { getPrefixCls } = useDesign(\"table-form\");\r\n // 表单对象\r\n const formRef = ref<FormInstance | null>();\r\n\r\n //动态计算一个col的span值是多少\r\n const calculatedSpan = computed(() =>\r\n Math.floor(24 / props.colCount)\r\n );\r\n\r\n // ⭐️ 新增:计算只读状态\r\n const isReadonly = computed(() => props.readonly);\r\n const finalStylesConfig = computed<StylesConfig>(() => {\r\n // 1. 创建默认配置的深拷贝\r\n const defaultCopy = JSON.parse(\r\n JSON.stringify(DEFAULT_STYLES_CONFIG)\r\n );\r\n // 2. 使用 Lodash merge (或 mergeWith) 合并用户传入的配置\r\n return merge(defaultCopy, props.stylesConfig);\r\n });\r\n const modelState = computed(() => attrs.model);\r\n\r\n // ⭐️ FIX 2: 提供 Context 时,传递 ComputedRef 本身,而不是它的 .value\r\n provide(FormContextKey, {\r\n isFormParent: true,\r\n span: calculatedSpan,\r\n fieldErrors: {},\r\n isReadonly: isReadonly,\r\n stylesConfig: finalStylesConfig,\r\n model: modelState\r\n });\r\n\r\n // ⭐️ 核心逻辑:计算并渲染占位符\r\n const fillerCols = computed(() => {\r\n const colCls = getPrefixCls(\"item-col\");\r\n const styles = useFormItemStyle(\r\n finalStylesConfig.value,\r\n token\r\n );\r\n\r\n const defaultSlot = slots.default\r\n ? slots.default()\r\n : [];\r\n const itemCounts = getValidVNodesCount(defaultSlot);\r\n const colCount = props.colCount;\r\n\r\n // 计算当前行已占用的位置 (余数)\r\n const remainder = itemCounts % colCount;\r\n const fillerCount =\r\n remainder === 0 ? 0 : colCount - remainder;\r\n\r\n const span = calculatedSpan.value;\r\n const fillerNodes = [];\r\n\r\n // 渲染所需数量的空 Col\r\n for (let i = 0; i < fillerCount; i++) {\r\n fillerNodes.push(\r\n <Col\r\n key={`filler-${i}`}\r\n span={span}\r\n class={cx(colCls, styles.cellBorderStyle)}\r\n >\r\n <FormItem label={\" \"}></FormItem>\r\n </Col>\r\n );\r\n }\r\n return fillerNodes;\r\n });\r\n\r\n expose({\r\n form: formRef\r\n });\r\n\r\n return () => {\r\n const rootCls = getPrefixCls();\r\n\r\n return (\r\n <Form\r\n class={cx(rootCls, containerBorderStyle)}\r\n {...attrs}\r\n ref={formRef}\r\n >\r\n <Row>\r\n {/* 渲染所有传入的 FormItem */}\r\n {slots.default ? slots.default() : null}\r\n {/* 渲染计算出的占位 Col */}\r\n {fillerCols.value}\r\n </Row>\r\n </Form>\r\n );\r\n };\r\n }\r\n});\r\n\r\nexport const TableForm = withInstall(_TableForm);\r\n"],"names":["FormContextKey","Symbol","getValidVNodesCount","vnodes","count","Array","isArray","forEach","vnode","isVNode","type","Comment","Text","children","trim","containerBorderStyle","css","_TableForm","defineComponent","name","props","tableFormProps","setup","slots","attrs","expose","token","useAntdToken","getPrefixCls","useDesign","formRef","ref","calculatedSpan","computed","Math","floor","colCount","isReadonly","readonly","finalStylesConfig","defaultCopy","JSON","parse","stringify","DEFAULT_STYLES_CONFIG","merge","stylesConfig","modelState","model","provide","isFormParent","span","fieldErrors","fillerCols","colCls","styles","useFormItemStyle","value","defaultSlot","default","itemCounts","remainder","fillerCount","fillerNodes","i","push","_createVNode","Col","cx","cellBorderStyle","FormItem","form","rootCls","Form","_mergeProps","Row","TableForm","withInstall"],"mappings":"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"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var vue = require('vue');
|
|
4
|
+
var antDesignVue = require('ant-design-vue');
|
|
5
|
+
var _interface = require('./interface.cjs');
|
|
6
|
+
var style = require('./style.cjs');
|
|
7
|
+
var TableForm = require('./TableForm.cjs');
|
|
8
|
+
var store = require('@ditari/store');
|
|
9
|
+
var css = require('@emotion/css');
|
|
10
|
+
var useDesign = require('../../hooks/useDesign.cjs');
|
|
11
|
+
var withInstall = require('../../utils/withInstall.cjs');
|
|
12
|
+
|
|
13
|
+
"use strict";
|
|
14
|
+
function _isSlot(s) {
|
|
15
|
+
return typeof s === "function" || Object.prototype.toString.call(s) === "[object Object]" && !vue.isVNode(s);
|
|
16
|
+
}
|
|
17
|
+
const getDeepValue = (obj, pathName) => {
|
|
18
|
+
if (!obj || !pathName) {
|
|
19
|
+
return void 0;
|
|
20
|
+
}
|
|
21
|
+
const path = pathName.split(".");
|
|
22
|
+
let current = obj;
|
|
23
|
+
for (const segment of path) {
|
|
24
|
+
if (current && typeof current === "object" && segment in current) {
|
|
25
|
+
current = current[segment];
|
|
26
|
+
} else {
|
|
27
|
+
return void 0;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return current;
|
|
31
|
+
};
|
|
32
|
+
const _TableFormItem = /* @__PURE__ */ vue.defineComponent({
|
|
33
|
+
name: "DTableFormItem",
|
|
34
|
+
props: _interface.tableFormItemProps,
|
|
35
|
+
setup(props, {
|
|
36
|
+
slots,
|
|
37
|
+
attrs
|
|
38
|
+
}) {
|
|
39
|
+
const formContext = vue.inject(TableForm.FormContextKey, null);
|
|
40
|
+
const {
|
|
41
|
+
getPrefixCls
|
|
42
|
+
} = useDesign.useDesign("table-form-item-col");
|
|
43
|
+
const token = useDesign.useAntdToken();
|
|
44
|
+
const {
|
|
45
|
+
getDicTextByValue
|
|
46
|
+
} = store.useDicStore();
|
|
47
|
+
if (!formContext) {
|
|
48
|
+
console.error("DTableFormItem must be used inside a DTableForm component.");
|
|
49
|
+
}
|
|
50
|
+
const isReadonly = vue.computed(() => {
|
|
51
|
+
var _a;
|
|
52
|
+
return (_a = formContext == null ? void 0 : formContext.isReadonly.value) != null ? _a : false;
|
|
53
|
+
});
|
|
54
|
+
const stylesConfig = vue.computed(() => formContext == null ? void 0 : formContext.stylesConfig.value);
|
|
55
|
+
const modelState = vue.computed(() => formContext == null ? void 0 : formContext.model.value);
|
|
56
|
+
const styles = style.useFormItemStyle(stylesConfig.value, token);
|
|
57
|
+
const colSpan = vue.computed(() => {
|
|
58
|
+
return (formContext == null ? void 0 : formContext.span.value) || 24;
|
|
59
|
+
});
|
|
60
|
+
const fieldValue = vue.computed(() => {
|
|
61
|
+
const formatFn = props.format;
|
|
62
|
+
const dicName = props.dicName;
|
|
63
|
+
const model = modelState.value;
|
|
64
|
+
const name = attrs.name;
|
|
65
|
+
if (!model || !name) {
|
|
66
|
+
return "";
|
|
67
|
+
}
|
|
68
|
+
let value = getDeepValue(model, name);
|
|
69
|
+
if (value === void 0 || value === null || value === "") {
|
|
70
|
+
return "-";
|
|
71
|
+
}
|
|
72
|
+
if (formatFn) {
|
|
73
|
+
return formatFn == null ? void 0 : formatFn(value, name);
|
|
74
|
+
}
|
|
75
|
+
if (dicName && !Array.isArray(value)) {
|
|
76
|
+
return getDicTextByValue(dicName, value);
|
|
77
|
+
}
|
|
78
|
+
if (Array.isArray(value)) {
|
|
79
|
+
value = value.join(", ");
|
|
80
|
+
}
|
|
81
|
+
return String(value);
|
|
82
|
+
});
|
|
83
|
+
const renderContent = () => {
|
|
84
|
+
var _a;
|
|
85
|
+
const colCls = getPrefixCls("content");
|
|
86
|
+
if (isReadonly.value) {
|
|
87
|
+
return vue.createVNode("div", {
|
|
88
|
+
"class": css.cx(styles.valueDisplayClass, colCls)
|
|
89
|
+
}, [vue.createVNode("span", {
|
|
90
|
+
"class": styles.textWrapperClass
|
|
91
|
+
}, [fieldValue.value])]);
|
|
92
|
+
}
|
|
93
|
+
return (_a = slots.default) == null ? void 0 : _a.call(slots);
|
|
94
|
+
};
|
|
95
|
+
return () => {
|
|
96
|
+
let _slot;
|
|
97
|
+
const rootCls = getPrefixCls();
|
|
98
|
+
return vue.createVNode(antDesignVue.Col, {
|
|
99
|
+
"span": colSpan.value,
|
|
100
|
+
"class": css.cx(rootCls, styles.cellBorderStyle)
|
|
101
|
+
}, {
|
|
102
|
+
default: () => [vue.createVNode(antDesignVue.FormItem, attrs, _isSlot(_slot = renderContent()) ? _slot : {
|
|
103
|
+
default: () => [_slot]
|
|
104
|
+
})]
|
|
105
|
+
});
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
const TableFormItem = withInstall.withInstall(_TableFormItem);
|
|
110
|
+
|
|
111
|
+
exports.TableFormItem = TableFormItem;
|
|
112
|
+
//# sourceMappingURL=TableFormItem.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TableFormItem.cjs","sources":["../../../../src/components/table-form/TableFormItem.tsx"],"sourcesContent":["import { computed, defineComponent, inject } from \"vue\";\r\nimport { Col, FormItem } from \"ant-design-vue\";\r\n\r\nimport { tableFormItemProps } from \"./interface\";\r\nimport { useFormItemStyle } from \"./style\";\r\nimport {\r\n FormContextKey,\r\n TableFormContext\r\n} from \"./TableForm\";\r\nimport { useDicStore } from \"@ditari/store\";\r\nimport { cx } from \"@emotion/css\";\r\n\r\nimport {\r\n useAntdToken,\r\n useDesign\r\n} from \"../../hooks/useDesign\";\r\n\r\nimport { withInstall } from \"../../utils/withInstall\";\r\n\r\n/**\r\n * 辅助函数:根据路径数组和对象获取深层值\r\n * @param obj 数据对象\r\n * @param pathName 字段路径,例如 'user.name'\r\n */\r\nconst getDeepValue = (\r\n obj: Record<string, unknown>,\r\n pathName: string\r\n): unknown => {\r\n if (!obj || !pathName) {\r\n return undefined;\r\n }\r\n\r\n // 将 'user.name' 转换为 ['user', 'name']\r\n const path = pathName.split(\".\");\r\n let current: unknown = obj;\r\n\r\n for (const segment of path) {\r\n // 使用类型守卫和断言来安全地访问嵌套属性\r\n if (\r\n current &&\r\n typeof current === \"object\" &&\r\n segment in (current as Record<string, unknown>)\r\n ) {\r\n current = (current as Record<string, unknown>)[\r\n segment\r\n ];\r\n } else {\r\n return undefined;\r\n }\r\n }\r\n return current;\r\n};\r\n\r\nconst _TableFormItem = defineComponent({\r\n name: \"DTableFormItem\",\r\n props: tableFormItemProps,\r\n setup(props, { slots, attrs }) {\r\n const formContext = inject<TableFormContext | null>(\r\n FormContextKey,\r\n null\r\n );\r\n const { getPrefixCls } = useDesign(\r\n \"table-form-item-col\"\r\n );\r\n const token = useAntdToken();\r\n const { getDicTextByValue } = useDicStore();\r\n\r\n if (!formContext) {\r\n console.error(\r\n \"DTableFormItem must be used inside a DTableForm component.\"\r\n );\r\n }\r\n\r\n // ⭐️ 从 Context 获取只读状态\r\n const isReadonly = computed(\r\n () => formContext?.isReadonly.value ?? false\r\n );\r\n const stylesConfig = computed(\r\n () => formContext?.stylesConfig.value\r\n );\r\n const modelState = computed(\r\n () => formContext?.model.value\r\n );\r\n const styles = useFormItemStyle(\r\n stylesConfig.value!,\r\n token\r\n );\r\n\r\n // ⭐️ 1. 获取并计算 Col 的 span 值\r\n const colSpan = computed(() => {\r\n // 如果成功注入上下文,则使用父组件计算的 span\r\n // 否则默认使用 24 (占满一行,安全回退)\r\n return formContext?.span.value || 24;\r\n });\r\n\r\n // ⭐️ 2. 计算当前 FormItem 绑定的值\r\n const fieldValue = computed(() => {\r\n const formatFn = props.format;\r\n const dicName = props.dicName;\r\n\r\n // 使用 Record<string, unknown> 替换 any\r\n const model = modelState.value as Record<\r\n string,\r\n unknown\r\n >;\r\n const name = attrs.name as string;\r\n\r\n // 确保 model 存在且 name 存在\r\n if (!model || !name) {\r\n return \"\";\r\n }\r\n\r\n // 使用辅助函数获取深层嵌套的值\r\n let value = getDeepValue(model, name);\r\n\r\n // 如果值是 undefined, null 或空字符串,显示一个占位符或空\r\n if (\r\n value === undefined ||\r\n value === null ||\r\n value === \"\"\r\n ) {\r\n return \"-\";\r\n }\r\n\r\n if (formatFn) {\r\n return formatFn?.(value, name);\r\n }\r\n if (dicName && !Array.isArray(value)) {\r\n return getDicTextByValue(dicName, value as string);\r\n }\r\n\r\n // 简单处理数组:如果是数组,转换为逗号分隔的字符串\r\n if (Array.isArray(value)) {\r\n // value 是 Array<unknown>,.join() 会将其转换为字符串\r\n value = value.join(\", \");\r\n }\r\n\r\n // 转换为字符串进行显示\r\n return String(value);\r\n });\r\n\r\n // ⭐️ 3. 条件渲染内容\r\n const renderContent = () => {\r\n const colCls = getPrefixCls(\"content\");\r\n if (isReadonly.value) {\r\n // 只读模式:显示值\r\n return (\r\n <div class={cx(styles.valueDisplayClass, colCls)}>\r\n <span class={styles.textWrapperClass}>\r\n {fieldValue.value}\r\n </span>\r\n </div>\r\n );\r\n }\r\n\r\n // 编辑模式:渲染默认插槽内容 (表单元素)\r\n return slots.default?.();\r\n };\r\n\r\n return () => {\r\n const rootCls = getPrefixCls();\r\n // ⭐️ 2. 将计算得到的 colSpan 应用到 Col 组件上\r\n return (\r\n <Col\r\n span={colSpan.value}\r\n class={cx(rootCls, styles.cellBorderStyle)}\r\n >\r\n {/* 在只读模式下,我们不需要 FormItem 来管理校验状态 */}\r\n <FormItem {...attrs}>{renderContent()}</FormItem>\r\n </Col>\r\n );\r\n };\r\n }\r\n});\r\n\r\nexport const TableFormItem = withInstall(_TableFormItem);\r\n"],"names":["_isSlot","s","Object","prototype","toString","call","_isVNode","getDeepValue","obj","pathName","undefined","path","split","current","segment","_TableFormItem","defineComponent","name","props","tableFormItemProps","setup","slots","attrs","formContext","inject","FormContextKey","getPrefixCls","useDesign","token","useAntdToken","getDicTextByValue","useDicStore","console","error","isReadonly","computed","value","stylesConfig","modelState","model","styles","useFormItemStyle","colSpan","span","fieldValue","formatFn","format","dicName","Array","isArray","join","String","renderContent","colCls","_createVNode","cx","valueDisplayClass","textWrapperClass","default","_slot","rootCls","Col","cellBorderStyle","FormItem","TableFormItem","withInstall"],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var TableForm = require('./TableForm.cjs');
|
|
4
|
+
var TableFormItem = require('./TableFormItem.cjs');
|
|
5
|
+
var _interface = require('./interface.cjs');
|
|
6
|
+
|
|
7
|
+
"use strict";
|
|
8
|
+
const TableFormExport = TableForm.TableForm;
|
|
9
|
+
TableFormExport.Item = TableFormItem.TableFormItem;
|
|
10
|
+
|
|
11
|
+
exports.TableFormItem = TableFormItem.TableFormItem;
|
|
12
|
+
exports.DEFAULT_STYLES_CONFIG = _interface.DEFAULT_STYLES_CONFIG;
|
|
13
|
+
exports.tableFormItemProps = _interface.tableFormItemProps;
|
|
14
|
+
exports.tableFormProps = _interface.tableFormProps;
|
|
15
|
+
exports.TableForm = TableFormExport;
|
|
16
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../../src/components/table-form/index.ts"],"sourcesContent":["// src/components/table-form/index.ts\r\n\r\nimport { TableForm } from \"./TableForm\";\r\nimport { TableFormItem } from \"./TableFormItem\";\r\n\r\n// 1. 定义包含静态属性 Item 的新类型\r\ntype TableFormWithItem = typeof TableForm & {\r\n Item: typeof TableFormItem;\r\n};\r\n\r\n// 2. 核心:将 TableForm 断言为新类型,并进行挂载\r\n// 注意:这里的断言是必需的,但我们现在是断言到一个精确的类型,而不是 'any'。\r\nconst TableFormExport = TableForm as TableFormWithItem;\r\n\r\n// 3. 挂载 Item 属性\r\nTableFormExport.Item = TableFormItem;\r\n\r\n// 统一导出 (导出这个带 Item 属性的 TableFormExport)\r\nexport { TableFormExport as TableForm, TableFormItem };\r\n\r\nexport * from \"./interface\";\r\n"],"names":["TableForm","TableFormItem"],"mappings":";;;;;;;AAYA,MAAM,eAAA,GAAkBA;AAGxB,eAAA,CAAgB,IAAA,GAAOC,2BAAA;;;;;;;;"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
"use strict";
|
|
4
|
+
var __defProp = Object.defineProperty;
|
|
5
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
8
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
9
|
+
var __spreadValues = (a, b) => {
|
|
10
|
+
for (var prop in b || (b = {}))
|
|
11
|
+
if (__hasOwnProp.call(b, prop))
|
|
12
|
+
__defNormalProp(a, prop, b[prop]);
|
|
13
|
+
if (__getOwnPropSymbols)
|
|
14
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
15
|
+
if (__propIsEnum.call(b, prop))
|
|
16
|
+
__defNormalProp(a, prop, b[prop]);
|
|
17
|
+
}
|
|
18
|
+
return a;
|
|
19
|
+
};
|
|
20
|
+
const tableFormItemProps = {
|
|
21
|
+
// 字典名字
|
|
22
|
+
dicName: {
|
|
23
|
+
type: String,
|
|
24
|
+
default: void 0
|
|
25
|
+
},
|
|
26
|
+
format: {
|
|
27
|
+
type: Function,
|
|
28
|
+
// 默认值
|
|
29
|
+
default: (value, _name) => value
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
const DEFAULT_STYLES_CONFIG = {
|
|
33
|
+
rowHeight: 32,
|
|
34
|
+
borderColor: "#dfdfdf",
|
|
35
|
+
borderWidth: 1,
|
|
36
|
+
labelBgColor: "#EEEEEE",
|
|
37
|
+
focusBorderColor: "#1677ff"
|
|
38
|
+
};
|
|
39
|
+
const tableFormProps = {
|
|
40
|
+
colCount: {
|
|
41
|
+
type: Number,
|
|
42
|
+
default: 4,
|
|
43
|
+
required: true
|
|
44
|
+
},
|
|
45
|
+
readonly: {
|
|
46
|
+
type: Boolean,
|
|
47
|
+
default: false
|
|
48
|
+
},
|
|
49
|
+
stylesConfig: {
|
|
50
|
+
type: Object,
|
|
51
|
+
default: () => __spreadValues({}, DEFAULT_STYLES_CONFIG)
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
exports.DEFAULT_STYLES_CONFIG = DEFAULT_STYLES_CONFIG;
|
|
56
|
+
exports.tableFormItemProps = tableFormItemProps;
|
|
57
|
+
exports.tableFormProps = tableFormProps;
|
|
58
|
+
//# sourceMappingURL=interface.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interface.cjs","sources":["../../../../src/components/table-form/interface.ts"],"sourcesContent":["import type { ExtractPropTypes, PropType } from \"vue\";\r\n\r\n// 接口:定义你的 Props 应该有哪些属性和类型\r\nexport interface DTableFormItemProps {\r\n name: string;\r\n label?: string;\r\n required?: boolean;\r\n rules?: unknown[]; // 简化,实际应定义详细校验规则类型\r\n colon?: boolean;\r\n extra?: string;\r\n}\r\n\r\nexport type Formatter = (value: unknown, name: unknown) => unknown;\r\n\r\n// 运行时 Props 的定义 (常量)\r\nexport const tableFormItemProps = {\r\n // 字典名字\r\n dicName: {\r\n type: String,\r\n default: undefined\r\n },\r\n format: {\r\n type: Function as PropType<Formatter>,\r\n // 默认值\r\n default: (value: unknown, _name: unknown) => value\r\n }\r\n};\r\n\r\n// ⭐️ 导出默认值常量\r\nexport const DEFAULT_STYLES_CONFIG: StylesConfig = {\r\n rowHeight: 32,\r\n borderColor: \"#dfdfdf\",\r\n borderWidth: 1,\r\n labelBgColor: \"#EEEEEE\",\r\n focusBorderColor: \"#1677ff\"\r\n};\r\n\r\nexport interface StylesConfig {\r\n /**\r\n * 表格行高度\r\n */\r\n rowHeight?: number;\r\n // 边框颜色\r\n borderColor?: string;\r\n // 边框\r\n borderWidth?: number;\r\n // 标签颜色label\r\n labelBgColor?: string;\r\n //焦点边框颜色\r\n focusBorderColor?: string;\r\n}\r\n\r\nexport const tableFormProps = {\r\n colCount: {\r\n type: Number,\r\n default: 4,\r\n required: true as const\r\n },\r\n readonly: {\r\n type: Boolean,\r\n default: false\r\n },\r\n stylesConfig: {\r\n type: Object as PropType<StylesConfig>,\r\n default: () => ({ ...DEFAULT_STYLES_CONFIG })\r\n }\r\n};\r\n\r\n// 导出 Prop 类型,供外部使用 (例如,在 TSX 中使用)\r\nexport type TableFormItemProps = Partial<ExtractPropTypes<typeof tableFormItemProps>>;\r\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AAeO,MAAM,kBAAA,GAAqB;AAAA;AAAA,EAEhC,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,MAAA;AAAA,IACN,OAAA,EAAS,KAAA;AAAA,GACX;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,IAAA,EAAM,QAAA;AAAA;AAAA,IAEN,OAAA,EAAS,CAAC,KAAA,EAAgB,KAAA,KAAmB;AAAA;AAEjD;AAGO,MAAM,qBAAA,GAAsC;AAAA,EACjD,SAAA,EAAW,EAAA;AAAA,EACX,WAAA,EAAa,SAAA;AAAA,EACb,WAAA,EAAa,CAAA;AAAA,EACb,YAAA,EAAc,SAAA;AAAA,EACd,gBAAA,EAAkB;AACpB;AAiBO,MAAM,cAAA,GAAiB;AAAA,EAC5B,QAAA,EAAU;AAAA,IACR,IAAA,EAAM,MAAA;AAAA,IACN,OAAA,EAAS,CAAA;AAAA,IACT,QAAA,EAAU;AAAA,GACZ;AAAA,EACA,QAAA,EAAU;AAAA,IACR,IAAA,EAAM,OAAA;AAAA,IACN,OAAA,EAAS;AAAA,GACX;AAAA,EACA,YAAA,EAAc;AAAA,IACZ,IAAA,EAAM,MAAA;AAAA,IACN,OAAA,EAAS,MAAO,cAAA,CAAA,EAAA,EAAK,qBAAA;AAAA;AAEzB;;;;;;"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var css = require('@emotion/css');
|
|
4
|
+
|
|
5
|
+
"use strict";
|
|
6
|
+
const useFormItemStyle = (styles, _token) => {
|
|
7
|
+
const {
|
|
8
|
+
rowHeight,
|
|
9
|
+
labelBgColor,
|
|
10
|
+
borderColor,
|
|
11
|
+
focusBorderColor
|
|
12
|
+
} = styles;
|
|
13
|
+
const boxShadowStyle = `0 0 0 1px ${focusBorderColor}`;
|
|
14
|
+
const inputFocusStyles = `
|
|
15
|
+
&:focus{
|
|
16
|
+
box-shadow: ${boxShadowStyle};
|
|
17
|
+
}
|
|
18
|
+
`;
|
|
19
|
+
return {
|
|
20
|
+
cellBorderStyle: css.css`
|
|
21
|
+
//min-height: ${rowHeight}px;
|
|
22
|
+
/* 现有单元格边框 */
|
|
23
|
+
border-right: 1px solid ${borderColor};
|
|
24
|
+
border-bottom: 1px solid ${borderColor};
|
|
25
|
+
|
|
26
|
+
.ant-form-item {
|
|
27
|
+
height: 100%;
|
|
28
|
+
margin-bottom: 0 !important;
|
|
29
|
+
|
|
30
|
+
.ant-form-item-row {
|
|
31
|
+
height: 100%;
|
|
32
|
+
|
|
33
|
+
.ant-form-item-label {
|
|
34
|
+
height: 100%;
|
|
35
|
+
border-right: 1px solid ${borderColor};
|
|
36
|
+
background-color: ${labelBgColor};
|
|
37
|
+
|
|
38
|
+
& > label {
|
|
39
|
+
height: ${rowHeight}px;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
.ant-form-item-control-input {
|
|
44
|
+
height: 100%;
|
|
45
|
+
|
|
46
|
+
.ant-form-item-control-input-content {
|
|
47
|
+
display: flex;
|
|
48
|
+
align-items: center;
|
|
49
|
+
height: 100%;
|
|
50
|
+
|
|
51
|
+
.ant-radio-group {
|
|
52
|
+
margin-left: 10px;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
input,
|
|
56
|
+
.ant-picker,
|
|
57
|
+
.ant-select {
|
|
58
|
+
width: 100%;
|
|
59
|
+
height: 100%;
|
|
60
|
+
}
|
|
61
|
+
.ant-select-selector {
|
|
62
|
+
display: flex;
|
|
63
|
+
align-items: center;
|
|
64
|
+
height: 100%;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
.ant-input,
|
|
70
|
+
.ant-select-selector,
|
|
71
|
+
.ant-input-number,
|
|
72
|
+
.ant-picker {
|
|
73
|
+
border: 0;
|
|
74
|
+
border-radius: 0;
|
|
75
|
+
|
|
76
|
+
${inputFocusStyles}
|
|
77
|
+
// 数字输入框要单独处理
|
|
78
|
+
.ant-input-number-input {
|
|
79
|
+
border: 0;
|
|
80
|
+
border-radius: 0;
|
|
81
|
+
${inputFocusStyles};
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
.ant-picker-focused,
|
|
86
|
+
.ant-select-focused {
|
|
87
|
+
box-shadow: ${boxShadowStyle};
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
.ant-input[disabled] {
|
|
91
|
+
${inputFocusStyles}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
.ant-input-status-error,
|
|
96
|
+
.ant-picker-status-error,
|
|
97
|
+
.ant-select-status-error {
|
|
98
|
+
box-shadow: 0 0 0 1px red;
|
|
99
|
+
border-radius: 0;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
`,
|
|
103
|
+
valueDisplayClass: css.css`
|
|
104
|
+
width: 100%;
|
|
105
|
+
height: 100%;
|
|
106
|
+
display: flex;
|
|
107
|
+
padding: 0 11px 0 11px;
|
|
108
|
+
align-items: center;
|
|
109
|
+
`,
|
|
110
|
+
// 内部元素:实现文本溢出
|
|
111
|
+
textWrapperClass: css.css`
|
|
112
|
+
/* ⭐️ 核心修复:确保内部元素可以被压缩,且强制文本在一行 */
|
|
113
|
+
flex-grow: 1; /* 占据可用空间 */
|
|
114
|
+
min-width: 0;
|
|
115
|
+
|
|
116
|
+
white-space: nowrap;
|
|
117
|
+
overflow: hidden;
|
|
118
|
+
text-overflow: ellipsis;
|
|
119
|
+
`
|
|
120
|
+
};
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
exports.useFormItemStyle = useFormItemStyle;
|
|
124
|
+
//# sourceMappingURL=style.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"style.cjs","sources":["../../../../src/components/table-form/style.ts"],"sourcesContent":["import { ComputedRef } from \"vue\";\r\n\r\nimport { StylesConfig } from \"./interface\";\r\nimport { css } from \"@emotion/css\";\r\nimport type { GlobalToken } from \"ant-design-vue/es/theme/interface\";\r\n\r\n/**\r\n * 表单项样式\r\n */\r\nexport const useFormItemStyle = (\r\n styles: StylesConfig,\r\n _token: ComputedRef<GlobalToken>\r\n) => {\r\n const {\r\n rowHeight,\r\n labelBgColor,\r\n borderColor,\r\n focusBorderColor\r\n } = styles;\r\n //TODO _token 后续得兼容下主题色\r\n const boxShadowStyle = `0 0 0 1px ${focusBorderColor}`;\r\n const inputFocusStyles = `\r\n &:focus{\r\n box-shadow: ${boxShadowStyle};\r\n }\r\n `;\r\n\r\n return {\r\n cellBorderStyle: css`\r\n //min-height: ${rowHeight}px;\r\n /* 现有单元格边框 */\r\n border-right: 1px solid ${borderColor};\r\n border-bottom: 1px solid ${borderColor};\r\n\r\n .ant-form-item {\r\n height: 100%;\r\n margin-bottom: 0 !important;\r\n\r\n .ant-form-item-row {\r\n height: 100%;\r\n\r\n .ant-form-item-label {\r\n height: 100%;\r\n border-right: 1px solid ${borderColor};\r\n background-color: ${labelBgColor};\r\n\r\n & > label {\r\n height: ${rowHeight}px;\r\n }\r\n }\r\n\r\n .ant-form-item-control-input {\r\n height: 100%;\r\n\r\n .ant-form-item-control-input-content {\r\n display: flex;\r\n align-items: center;\r\n height: 100%;\r\n\r\n .ant-radio-group {\r\n margin-left: 10px;\r\n }\r\n\r\n input,\r\n .ant-picker,\r\n .ant-select {\r\n width: 100%;\r\n height: 100%;\r\n }\r\n .ant-select-selector {\r\n display: flex;\r\n align-items: center;\r\n height: 100%;\r\n }\r\n }\r\n }\r\n\r\n .ant-input,\r\n .ant-select-selector,\r\n .ant-input-number,\r\n .ant-picker {\r\n border: 0;\r\n border-radius: 0;\r\n\r\n ${inputFocusStyles}\r\n // 数字输入框要单独处理\r\n .ant-input-number-input {\r\n border: 0;\r\n border-radius: 0;\r\n ${inputFocusStyles};\r\n }\r\n }\r\n\r\n .ant-picker-focused,\r\n .ant-select-focused {\r\n box-shadow: ${boxShadowStyle};\r\n }\r\n\r\n .ant-input[disabled] {\r\n ${inputFocusStyles}\r\n }\r\n }\r\n\r\n .ant-input-status-error,\r\n .ant-picker-status-error,\r\n .ant-select-status-error {\r\n box-shadow: 0 0 0 1px red;\r\n border-radius: 0;\r\n }\r\n }\r\n `,\r\n valueDisplayClass: css`\r\n width: 100%;\r\n height: 100%;\r\n display: flex;\r\n padding: 0 11px 0 11px;\r\n align-items: center;\r\n `,\r\n // 内部元素:实现文本溢出\r\n textWrapperClass: css`\r\n /* ⭐️ 核心修复:确保内部元素可以被压缩,且强制文本在一行 */\r\n flex-grow: 1; /* 占据可用空间 */\r\n min-width: 0;\r\n\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n `\r\n };\r\n};\r\n"],"names":["css"],"mappings":";;;;;AASO,MAAM,gBAAA,GAAmB,CAC9B,MAAA,EACA,MAAA,KACG;AACH,EAAA,MAAM;AAAA,IACJ,SAAA;AAAA,IACA,YAAA;AAAA,IACA,WAAA;AAAA,IACA;AAAA,GACF,GAAI,MAAA;AAEJ,EAAA,MAAM,cAAA,GAAiB,cAAc,gBAAgB,CAAA,CAAA;AACrD,EAAA,MAAM,gBAAA,GAAmB;AAAA;AAAA,kBAAA,EAEP,cAAc,CAAA;AAAA;AAAA,EAAA,CAAA;AAIhC,EAAA,OAAO;AAAA,IACL,eAAA,EAAiBA,OAAA;AAAA,oBAAA,EACC,SAAS,CAAA;AAAA;AAAA,8BAAA,EAEC,WAAW,CAAA;AAAA,+BAAA,EACV,WAAW,CAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA,oCAAA,EAWN,WAAW,CAAA;AAAA,8BAAA,EACjB,YAAY,CAAA;;AAAA;AAAA,sBAAA,EAGpB,SAAS,CAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA,YAAA,EAqCnB,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA,cAAA,EAKd,gBAAgB,CAAA;AAAA;AAAA;;AAAA;AAAA;AAAA,wBAAA,EAMN,cAAc,CAAA;AAAA;;AAAA;AAAA,YAAA,EAI1B,gBAAgB;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA,CAAA;AAAA,IAY1B,iBAAA,EAAmBA,OAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA,CAAA;AAAA;AAAA,IAQnB,gBAAA,EAAkBA,OAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA,IAAA;AAAA,GASpB;AACF;;;;"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var vue = require('vue');
|
|
4
|
+
var antDesignVue = require('ant-design-vue');
|
|
5
|
+
|
|
6
|
+
"use strict";
|
|
7
|
+
const defaultPrefixCls = "d";
|
|
8
|
+
function useDesign(scope) {
|
|
9
|
+
const prefixVar = defaultPrefixCls;
|
|
10
|
+
const getPrefixCls = (blockSuffix) => {
|
|
11
|
+
const prefix = `${prefixVar}-${scope}`;
|
|
12
|
+
if (blockSuffix) {
|
|
13
|
+
return `${prefix}-${blockSuffix}`;
|
|
14
|
+
}
|
|
15
|
+
return prefix;
|
|
16
|
+
};
|
|
17
|
+
return {
|
|
18
|
+
prefixCls: vue.computed(() => getPrefixCls()),
|
|
19
|
+
// d-card
|
|
20
|
+
getPrefixCls
|
|
21
|
+
// 函数,用于生成 d-card-header
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
function useAntdToken() {
|
|
25
|
+
const { token } = antDesignVue.theme.useToken();
|
|
26
|
+
return vue.computed(() => token.value);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
exports.useAntdToken = useAntdToken;
|
|
30
|
+
exports.useDesign = useDesign;
|
|
31
|
+
//# sourceMappingURL=useDesign.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDesign.cjs","sources":["../../../src/hooks/useDesign.ts"],"sourcesContent":["// hooks/useDesign.ts\r\nimport { computed, ComputedRef } from \"vue\";\r\nimport { theme } from \"ant-design-vue\";\r\n\r\nimport type { GlobalToken } from \"ant-design-vue/es/theme/interface\";\r\n\r\n// 默认前缀,你可以改成 'd' 或者你项目的缩写\r\nconst defaultPrefixCls = \"d\";\r\n\r\nexport function useDesign(scope: string) {\r\n // 实际项目中,这里可以从 inject('CONFIG_PROVIDER') 获取全局配置的前缀\r\n const prefixVar = defaultPrefixCls;\r\n\r\n /**\r\n * 生成 BEM 风格或者 Antd 风格的类名\r\n * @param blockSuffix - 元素后缀,例如 'header' -> 'd-card-header'\r\n */\r\n const getPrefixCls = (blockSuffix?: string) => {\r\n const prefix = `${prefixVar}-${scope}`;\r\n if (blockSuffix) {\r\n return `${prefix}-${blockSuffix}`;\r\n }\r\n return prefix;\r\n };\r\n\r\n return {\r\n prefixCls: computed(() => getPrefixCls()), // d-card\r\n getPrefixCls // 函数,用于生成 d-card-header\r\n };\r\n}\r\n\r\nexport function useAntdToken(): ComputedRef<GlobalToken> {\r\n const { token } = theme.useToken();\r\n // token.value 是 GlobalToken 类型\r\n return computed(() => token.value);\r\n}\r\n"],"names":["computed","theme"],"mappings":";;;;;;AAOA,MAAM,gBAAA,GAAmB,GAAA;AAElB,SAAS,UAAU,KAAA,EAAe;AAEvC,EAAA,MAAM,SAAA,GAAY,gBAAA;AAMlB,EAAA,MAAM,YAAA,GAAe,CAAC,WAAA,KAAyB;AAC7C,IAAA,MAAM,MAAA,GAAS,CAAA,EAAG,SAAS,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA;AACpC,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,OAAO,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,WAAW,CAAA,CAAA;AAAA,IACjC;AACA,IAAA,OAAO,MAAA;AAAA,EACT,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,SAAA,EAAWA,YAAA,CAAS,MAAM,YAAA,EAAc,CAAA;AAAA;AAAA,IACxC;AAAA;AAAA,GACF;AACF;AAEO,SAAS,YAAA,GAAyC;AACvD,EAAA,MAAM,EAAE,KAAA,EAAM,GAAIC,kBAAA,CAAM,QAAA,EAAS;AAEjC,EAAA,OAAOD,YAAA,CAAS,MAAM,KAAA,CAAM,KAAK,CAAA;AACnC;;;;;"}
|
package/dist/cjs/index.cjs
CHANGED
|
@@ -2,11 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
var index$
|
|
5
|
+
var index$2 = require('./components/index.cjs');
|
|
6
6
|
var DicReplace = require('./components/dic/DicReplace.cjs');
|
|
7
7
|
var Select_vue_vue_type_script_setup_true_lang = require('./components/select/Select.vue2.cjs');
|
|
8
8
|
var Tab_vue_vue_type_script_setup_true_lang = require('./components/tab/Tab.vue2.cjs');
|
|
9
9
|
var Table = require('./components/table/Table.cjs');
|
|
10
|
+
var Card = require('./components/card/Card.cjs');
|
|
10
11
|
var RangePicker_vue_vue_type_script_setup_true_lang = require('./components/date/RangePicker.vue2.cjs');
|
|
11
12
|
var FormLayout = require('./components/form/FormLayout.cjs');
|
|
12
13
|
var Moon = require('./components/icon/Moon.vue.cjs');
|
|
@@ -17,11 +18,14 @@ var Menu = require('./components/layout/components/menu/Menu.cjs');
|
|
|
17
18
|
var Layout_vue_vue_type_script_setup_true_lang = require('./components/layout/Layout.vue2.cjs');
|
|
18
19
|
var List = require('./components/layout/List.cjs');
|
|
19
20
|
var Show = require('./components/layout/Show.cjs');
|
|
21
|
+
var _interface = require('./components/table-form/interface.cjs');
|
|
22
|
+
var index$1 = require('./components/table-form/index.cjs');
|
|
23
|
+
var TableFormItem = require('./components/table-form/TableFormItem.cjs');
|
|
20
24
|
|
|
21
25
|
"use strict";
|
|
22
26
|
const install = (app) => {
|
|
23
|
-
Object.keys(index$
|
|
24
|
-
const component = index$
|
|
27
|
+
Object.keys(index$2).forEach((key) => {
|
|
28
|
+
const component = index$2[key];
|
|
25
29
|
const plugin = component;
|
|
26
30
|
if (plugin.install) {
|
|
27
31
|
app.use(plugin);
|
|
@@ -37,6 +41,7 @@ exports.DicRep = DicReplace.default;
|
|
|
37
41
|
exports.Select = Select_vue_vue_type_script_setup_true_lang.default;
|
|
38
42
|
exports.Tab = Tab_vue_vue_type_script_setup_true_lang.default;
|
|
39
43
|
exports.Table = Table.default;
|
|
44
|
+
exports.Card = Card.Card;
|
|
40
45
|
exports.RangePicker = RangePicker_vue_vue_type_script_setup_true_lang.default;
|
|
41
46
|
exports.FormLayout = FormLayout.default;
|
|
42
47
|
exports.Moon = Moon.default;
|
|
@@ -47,6 +52,11 @@ exports.Menu = Menu.default;
|
|
|
47
52
|
exports.Layout = Layout_vue_vue_type_script_setup_true_lang.default;
|
|
48
53
|
exports.List = List.default;
|
|
49
54
|
exports.Show = Show.default;
|
|
55
|
+
exports.DEFAULT_STYLES_CONFIG = _interface.DEFAULT_STYLES_CONFIG;
|
|
56
|
+
exports.tableFormItemProps = _interface.tableFormItemProps;
|
|
57
|
+
exports.tableFormProps = _interface.tableFormProps;
|
|
58
|
+
exports.TableForm = index$1.TableForm;
|
|
59
|
+
exports.TableFormItem = TableFormItem.TableFormItem;
|
|
50
60
|
exports.default = index;
|
|
51
61
|
exports.install = install;
|
|
52
62
|
//# sourceMappingURL=index.cjs.map
|
package/dist/cjs/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../src/index.ts"],"sourcesContent":["import * as components from \"./components\";\r\nimport type { App, DefineComponent, Plugin } from \"vue\";\r\n\r\n// import { version } from \"../package.json\";\r\n\r\nexport * from \"./components\";\r\n\r\n// 定义组件类型,确保每个组件都可能具有 `install` 方法\r\ntype ComponentWithInstall = DefineComponent<\r\n never,\r\n never,\r\n never\r\n> & {\r\n install?: (app: App) => void;\r\n};\r\n\r\nexport const install = (app: App) => {\r\n Object.keys(components).forEach(key => {\r\n const component = components[\r\n key as keyof typeof components\r\n ] as ComponentWithInstall;\r\n // 类型断言,告诉 TypeScript component 可能是一个插件\r\n const plugin = component as Plugin;\r\n // 如果组件有 install 方法,则按插件安装\r\n if (plugin.install) {\r\n app.use(plugin);\r\n }\r\n });\r\n};\r\n\r\nexport default {\r\n // version,\r\n install\r\n};\r\n"],"names":["components"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../src/index.ts"],"sourcesContent":["import * as components from \"./components\";\r\nimport type { App, DefineComponent, Plugin } from \"vue\";\r\n\r\n// import { version } from \"../package.json\";\r\n\r\nexport * from \"./components\";\r\n\r\n// 定义组件类型,确保每个组件都可能具有 `install` 方法\r\ntype ComponentWithInstall = DefineComponent<\r\n never,\r\n never,\r\n never\r\n> & {\r\n install?: (app: App) => void;\r\n};\r\n\r\nexport const install = (app: App) => {\r\n Object.keys(components).forEach(key => {\r\n const component = components[\r\n key as keyof typeof components\r\n ] as ComponentWithInstall;\r\n // 类型断言,告诉 TypeScript component 可能是一个插件\r\n const plugin = component as Plugin;\r\n // 如果组件有 install 方法,则按插件安装\r\n if (plugin.install) {\r\n app.use(plugin);\r\n }\r\n });\r\n};\r\n\r\nexport default {\r\n // version,\r\n install\r\n};\r\n"],"names":["components"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAgBO,MAAM,OAAA,GAAU,CAAC,GAAA,KAAa;AACnC,EAAA,MAAA,CAAO,IAAA,CAAKA,OAAU,CAAA,CAAE,OAAA,CAAQ,CAAA,GAAA,KAAO;AACrC,IAAA,MAAM,SAAA,GAAYA,QAChB,GACF,CAAA;AAEA,IAAA,MAAM,MAAA,GAAS,SAAA;AAEf,IAAA,IAAI,OAAO,OAAA,EAAS;AAClB,MAAA,GAAA,CAAI,IAAI,MAAM,CAAA;AAAA,IAChB;AAAA,EACF,CAAC,CAAA;AACH;AAEA,YAAe;AAAA;AAAA,EAEb;AACF,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
"use strict";
|
|
4
|
+
const withInstall = (component) => {
|
|
5
|
+
const comp = component;
|
|
6
|
+
if (!comp.install) {
|
|
7
|
+
comp.install = (app) => {
|
|
8
|
+
const name = comp.name;
|
|
9
|
+
if (name) {
|
|
10
|
+
app.component(name, comp);
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
return comp;
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
exports.withInstall = withInstall;
|
|
18
|
+
//# sourceMappingURL=withInstall.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"withInstall.cjs","sources":["../../../src/utils/withInstall.ts"],"sourcesContent":["// src/utils/withInstall.ts\r\n\r\nimport type { App, Component, Plugin } from \"vue\";\r\n\r\n// 扩展类型定义,允许组件对象拥有其他静态属性\r\nexport type SFCWithInstall<T> = T &\r\n Plugin & {\r\n [key: string]: T; // 允许任意静态属性\r\n };\r\n\r\n/**\r\n * 优化后的 withInstall 辅助函数\r\n * * 关键修改:\r\n * - 将泛型 T 的约束改为更通用的 Vue Component 类型。\r\n * - 使用 'Component' 或 'ComponentOptionsBase' 来确保兼容性。\r\n */\r\nexport const withInstall = <T extends Component>(component: T) => {\r\n const comp = component as SFCWithInstall<T>;\r\n\r\n if (!comp.install) {\r\n comp.install = (app: App) => {\r\n // 确保能获取到组件名\r\n const name = (comp as Component).name;\r\n if (name) {\r\n app.component(name, comp);\r\n }\r\n };\r\n }\r\n return comp;\r\n};\r\n"],"names":[],"mappings":";;;AAgBO,MAAM,WAAA,GAAc,CAAsB,SAAA,KAAiB;AAChE,EAAA,MAAM,IAAA,GAAO,SAAA;AAEb,EAAA,IAAI,CAAC,KAAK,OAAA,EAAS;AACjB,IAAA,IAAA,CAAK,OAAA,GAAU,CAAC,GAAA,KAAa;AAE3B,MAAA,MAAM,OAAQ,IAAA,CAAmB,IAAA;AACjC,MAAA,IAAI,IAAA,EAAM;AACR,QAAA,GAAA,CAAI,SAAA,CAAU,MAAM,IAAI,CAAA;AAAA,MAC1B;AAAA,IACF,CAAA;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT;;;;"}
|