@jetlinks-web/components 3.3.12 → 3.3.14

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 (103) hide show
  1. package/es/AutoComplete/AutoComplete.md +41 -0
  2. package/es/BadgeStatus/BadgeStatus.md +37 -0
  3. package/es/CardSelect/CardSelect.md +56 -0
  4. package/es/CardSelect/style/index.js +3 -3
  5. package/es/CheckButton/CheckButton.md +37 -0
  6. package/es/CheckButton/style/index.js +9 -9
  7. package/es/ConfigProvider/ConfigProvider.md +40 -0
  8. package/es/DragModal/DragModal.md +47 -0
  9. package/es/DragModal/style/index.js +6 -6
  10. package/es/EditTable/EditTable.md +62 -0
  11. package/es/EditTable/FormItem.js +18 -15
  12. package/es/EditTable/components/Search/sort.js +15 -1
  13. package/es/EditTable/style/body.js +8 -6
  14. package/es/EditTable/style/group.js +3 -3
  15. package/es/EditTable/style/header.js +3 -3
  16. package/es/EditTable/style/menu.js +3 -3
  17. package/es/EditTable/style/table.js +3 -3
  18. package/es/Ellipsis/Ellipsis.md +45 -0
  19. package/es/Empty/Empty.md +34 -0
  20. package/es/FullPage/FullPage.js +15 -5
  21. package/es/FullPage/FullPage.md +31 -0
  22. package/es/Icon/Icon.md +33 -0
  23. package/es/LocaleProvider/LocaleProvider.md +25 -0
  24. package/es/LocaleReciver/LocaleReciver.md +42 -0
  25. package/es/Markdown/Markdown.md +40 -0
  26. package/es/PermissionButton/PermissionButton.md +40 -0
  27. package/es/ProLayout/ProLayout.md +63 -0
  28. package/es/ProLayout/SiderMenu/style.js +105 -26
  29. package/es/ProLayout/TopHeader/style.js +55 -11
  30. package/es/ProTable/ProTable.js +2 -4
  31. package/es/ProTable/ProTable.md +70 -0
  32. package/es/ProTable/style/index.js +11 -8
  33. package/es/RadioButton/RadioButton.md +32 -0
  34. package/es/RadioButton/style/index.js +3 -2
  35. package/es/Scrollbar/Scrollbar.md +43 -0
  36. package/es/Scrollbar/style/index.js +9 -9
  37. package/es/Search/Search.md +60 -0
  38. package/es/Search/style/search.js +5 -5
  39. package/es/Skeleton/Skeleton.md +50 -0
  40. package/es/Skeleton/components/Page.js +18 -5
  41. package/es/Skeleton/style/index.js +12 -6
  42. package/es/TimeFormat/TimeFormat.md +25 -0
  43. package/es/Title/Title.md +33 -0
  44. package/es/Title/style/index.js +2 -2
  45. package/es/ValueItem/ValueItem.md +58 -0
  46. package/es/VirtualTable/VirtualTable.md +42 -0
  47. package/es/VirtualTable/style/index.js +7 -4
  48. package/es/components.md +108 -0
  49. package/es/style/scrollbar.js +24 -0
  50. package/es/style/styleRegister.js +45 -11
  51. package/es/style/variable.js +1 -4
  52. package/lib/AutoComplete/AutoComplete.md +41 -0
  53. package/lib/BadgeStatus/BadgeStatus.md +37 -0
  54. package/lib/CardSelect/CardSelect.md +56 -0
  55. package/lib/CardSelect/style/index.js +3 -3
  56. package/lib/CheckButton/CheckButton.md +37 -0
  57. package/lib/CheckButton/style/index.js +9 -9
  58. package/lib/ConfigProvider/ConfigProvider.md +40 -0
  59. package/lib/DragModal/DragModal.md +47 -0
  60. package/lib/DragModal/style/index.js +6 -6
  61. package/lib/EditTable/EditTable.md +62 -0
  62. package/lib/EditTable/FormItem.js +18 -15
  63. package/lib/EditTable/components/Search/sort.js +15 -1
  64. package/lib/EditTable/style/body.js +8 -6
  65. package/lib/EditTable/style/group.js +3 -3
  66. package/lib/EditTable/style/header.js +3 -3
  67. package/lib/EditTable/style/menu.js +3 -3
  68. package/lib/EditTable/style/table.js +3 -3
  69. package/lib/Ellipsis/Ellipsis.md +45 -0
  70. package/lib/Empty/Empty.md +34 -0
  71. package/lib/FullPage/FullPage.js +15 -5
  72. package/lib/FullPage/FullPage.md +31 -0
  73. package/lib/Icon/Icon.md +33 -0
  74. package/lib/LocaleProvider/LocaleProvider.md +25 -0
  75. package/lib/LocaleReciver/LocaleReciver.md +42 -0
  76. package/lib/Markdown/Markdown.md +40 -0
  77. package/lib/PermissionButton/PermissionButton.md +40 -0
  78. package/lib/ProLayout/ProLayout.md +63 -0
  79. package/lib/ProLayout/SiderMenu/style.js +104 -25
  80. package/lib/ProLayout/TopHeader/style.js +55 -11
  81. package/lib/ProTable/ProTable.js +2 -4
  82. package/lib/ProTable/ProTable.md +70 -0
  83. package/lib/ProTable/style/index.js +10 -7
  84. package/lib/RadioButton/RadioButton.md +32 -0
  85. package/lib/RadioButton/style/index.js +3 -2
  86. package/lib/Scrollbar/Scrollbar.md +43 -0
  87. package/lib/Scrollbar/style/index.js +8 -8
  88. package/lib/Search/Search.md +60 -0
  89. package/lib/Search/style/search.js +5 -5
  90. package/lib/Skeleton/Skeleton.md +50 -0
  91. package/lib/Skeleton/components/Page.js +18 -5
  92. package/lib/Skeleton/style/index.js +12 -6
  93. package/lib/TimeFormat/TimeFormat.md +25 -0
  94. package/lib/Title/Title.md +33 -0
  95. package/lib/Title/style/index.js +2 -2
  96. package/lib/ValueItem/ValueItem.md +58 -0
  97. package/lib/VirtualTable/VirtualTable.md +42 -0
  98. package/lib/VirtualTable/style/index.js +6 -3
  99. package/lib/components.md +108 -0
  100. package/lib/style/scrollbar.js +30 -0
  101. package/lib/style/styleRegister.js +44 -10
  102. package/lib/style/variable.js +1 -4
  103. package/package.json +1 -1
@@ -7,12 +7,12 @@ export var genEditTableGroupStyle = function genEditTableGroupStyle(config) {
7
7
  overflow: 'hidden',
8
8
  position: 'relative'
9
9
  }), '.ant-tabs-tab-active', {
10
- backgroundColor: '#BAE0FF !important',
11
- borderColor: '#91CAFF !important'
10
+ backgroundColor: "".concat(token.colorPrimaryBg, " !important"),
11
+ borderColor: "".concat(token.colorPrimaryBorder, " !important")
12
12
  }), '.ant-tabs-nav-add', {
13
13
  border: 'none'
14
14
  }))), '.jetlinks-table-group-error-wrap', _defineProperty({
15
- color: '#1a1a1a !important'
15
+ color: "".concat(token.colorText, " !important")
16
16
  }, '.table-group-error-target', {
17
17
  position: 'absolute',
18
18
  right: 0,
@@ -10,7 +10,7 @@ export var genEditTableHeaderStyle = function genEditTableHeaderStyle(config) {
10
10
  float: 'left',
11
11
  overflow: 'visible',
12
12
  position: 'absolute',
13
- background: '#fafafa',
13
+ background: token.colorFillQuaternary,
14
14
  top: 0
15
15
  }, '.jetlinks-edit-table-header-cell-box', _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty({
16
16
  padding: '0 12px',
@@ -39,7 +39,7 @@ export var genEditTableHeaderStyle = function genEditTableHeaderStyle(config) {
39
39
  width: '1px',
40
40
  height: '1.6em',
41
41
  pointerEvents: 'none',
42
- backgroundColor: 'rgba(0,0,0,.06)',
42
+ backgroundColor: token.colorSplit,
43
43
  transform: 'translateY(-50%)',
44
44
  transition: 'background-color .3s',
45
45
  content: '""'
@@ -53,6 +53,6 @@ export var genEditTableHeaderStyle = function genEditTableHeaderStyle(config) {
53
53
  }, '.jetlinks-drag-modal-footer', {
54
54
  display: 'none'
55
55
  }), '.jetlinks-table-search-result-total', {
56
- color: '@primary-color'
56
+ color: token.colorPrimary
57
57
  })));
58
58
  };
@@ -3,12 +3,12 @@ export var genMenuStyle = function genMenuStyle(config) {
3
3
  return {
4
4
  '.jetlinks-edit-table-context-menu': {
5
5
  position: 'fixed',
6
- boxShadow: '0 0 12px rgba(0, 0, 0 ,.2)',
7
6
  borderRadius: '4px',
8
7
  overflow: 'hidden',
9
8
  width: '192px',
10
9
  padding: '4px',
11
- backgroundColor: '#fff',
10
+ backgroundColor: token.colorBgElevated,
11
+ boxShadow: token.boxShadowSecondary,
12
12
  '.ant-menu': {
13
13
  borderRight: 'none',
14
14
  '.ant-menu-item': {
@@ -20,7 +20,7 @@ export var genMenuStyle = function genMenuStyle(config) {
20
20
  }
21
21
  },
22
22
  '.ant-menu-item-active': {
23
- backgroundColor: 'var(--ant-primary-1)'
23
+ backgroundColor: token.colorPrimaryBg
24
24
  }
25
25
  }
26
26
  };
@@ -2,7 +2,7 @@ export var genTableStyle = function genTableStyle(config) {
2
2
  var token = config.token;
3
3
  return {
4
4
  '.jetlinks-edit-table-wrapper': {
5
- background: '#fff',
5
+ background: token.colorBgContainer,
6
6
  height: '100%',
7
7
  position: 'relative',
8
8
  '&.table-full-screen': {
@@ -13,7 +13,7 @@ export var genTableStyle = function genTableStyle(config) {
13
13
  flexDirection: 'column',
14
14
  flexGrow: 0,
15
15
  flexShrink: 0,
16
- background: '#fafafa',
16
+ background: token.colorFillQuaternary,
17
17
  transition: 'background-color .3s ease',
18
18
  overflow: 'auto hidden',
19
19
  '.jetlinks-edit-table-header': {
@@ -22,7 +22,7 @@ export var genTableStyle = function genTableStyle(config) {
22
22
  position: 'relative'
23
23
  },
24
24
  '.jetlinks-edit-table-body': {
25
- backgroundColor: '#fff',
25
+ backgroundColor: token.colorBgContainer,
26
26
  overflowY: 'hidden',
27
27
  position: 'relative',
28
28
  height: '100%',
@@ -0,0 +1,45 @@
1
+ ### Ellipsis
2
+
3
+ 文本省略组件,支持单行 / 多行(`lineClamp`)省略,溢出时自动显示 Tooltip 完整内容,也可改为点击展开/收起。
4
+
5
+ #### Props
6
+
7
+ | 参数 | 说明 | 类型 | 默认值 |
8
+ | --- | --- | --- | --- |
9
+ | lineClamp | 多行省略行数;不传则单行省略 | `number \| string` | `1` |
10
+ | tooltip | 是否显示完整内容 Tooltip,`false` 关闭;传对象可配置 Tooltip props | `boolean \| object` | `true` |
11
+ | expandTrigger | 展开方式,`'click'` 时点击切换展开/收起 | `string` | - |
12
+
13
+ #### 插槽
14
+
15
+ | 名称 | 说明 |
16
+ | --- | --- |
17
+ | default | 需要省略的内容 |
18
+ | tooltip | Tooltip 内的自定义完整内容(默认复用内容本身) |
19
+
20
+ #### 用法
21
+
22
+ ```vue
23
+ <template>
24
+ <!-- 单行省略 + hover 显示完整内容 -->
25
+ <JEllipsis>这是一段很长的描述文字,超出后显示省略号……</JEllipsis>
26
+
27
+ <!-- 两行省略 + 点击展开 -->
28
+ <JEllipsis :line-clamp="2" expand-trigger="click">
29
+ 多行内容,默认截断为两行,点击可在展开/收起间切换。
30
+ </JEllipsis>
31
+
32
+ <!-- 自定义 Tooltip 内容 -->
33
+ <JEllipsis :tooltip="{ placement: 'bottom' }">
34
+ <template #tooltip>完整内容详情</template>
35
+ 省略的内容
36
+ </JEllipsis>
37
+ </template>
38
+ ```
39
+
40
+ #### Rules
41
+
42
+ - 溢出判定基于 `scrollHeight > offsetHeight` 动态计算,未溢出时不弹 Tooltip、不出现省略号。
43
+ - `lineClamp` 使用 `-webkit-line-clamp` 实现,需要 WebKit/Blink 内核支持。
44
+ - `expandTrigger="click"` 时追加 pointer 光标样式;展开后不再触发 Tooltip。
45
+ - 其余属性(class / style 等)自动透传到内容容器。
@@ -0,0 +1,34 @@
1
+ ### Empty
2
+
3
+ 空状态组件,内置 JetLinks 空数据插画与默认文案(可国际化),透传 ant-design-vue `Empty` 全部能力。
4
+
5
+ #### Props
6
+
7
+ | 参数 | 说明 | 类型 | 默认值 |
8
+ | --- | --- | --- | --- |
9
+ | description | 空状态描述文案 | `string` | 语言包默认(如"暂无数据") |
10
+ | image | 插画图片地址或自定义插画 | `string` | 内置 NoData 插画 |
11
+ | imageStyle | 插画样式 | `CSSProperties` | `{ height: '60px' }` |
12
+ | 其余 | 透传 ant-design-vue `Empty` props | - | - |
13
+
14
+ #### 插槽
15
+
16
+ | 名称 | 说明 |
17
+ | --- | --- |
18
+ | default | 自定义空状态内容(替代插画 + 文案) |
19
+ | 其他具名插槽 | 透传给 ant-design-vue `Empty` |
20
+
21
+ #### 用法
22
+
23
+ ```vue
24
+ <template>
25
+ <JEmpty description="暂未接入设备,先创建一个产品再添加设备" />
26
+ </template>
27
+ ```
28
+
29
+ #### Rules
30
+
31
+ - 未传 `description` 时取 `LocaleProvider` 语言包中的默认文案。
32
+ - 组件自带包裹 `LocaleProvider`,可独立使用。
33
+ - 默认 `imageStyle` 高度 60px,自定义插画时按需覆盖。
34
+ - 描述文案颜色为 `#b3b3b3`、14px,由组件内联样式控制。
@@ -1,16 +1,21 @@
1
1
  /* Analyzed bindings: {
2
- "ref": "setup-const",
2
+ "computed": "setup-const",
3
3
  "inject": "setup-const",
4
+ "ref": "setup-const",
5
+ "theme": "setup-maybe-ref",
4
6
  "useElementBounding": "setup-maybe-ref",
5
7
  "FullPageConfig": "setup-maybe-ref",
6
8
  "config": "setup-maybe-ref",
7
9
  "fullPage": "setup-ref",
8
- "y": "setup-maybe-ref"
10
+ "y": "setup-maybe-ref",
11
+ "token": "setup-maybe-ref",
12
+ "wrapStyle": "setup-ref"
9
13
  } */
10
14
  import { defineComponent as _defineComponent } from 'vue';
11
- import { unref as _unref, renderSlot as _renderSlot, createElementVNode as _createElementVNode, normalizeStyle as _normalizeStyle, openBlock as _openBlock, createElementBlock as _createElementBlock } from "vue";
15
+ import { renderSlot as _renderSlot, createElementVNode as _createElementVNode, normalizeStyle as _normalizeStyle, openBlock as _openBlock, createElementBlock as _createElementBlock } from "vue";
12
16
  const _hoisted_1 = { class: "full-page-warp-content" };
13
- import { ref, inject } from 'vue';
17
+ import { computed, inject, ref } from 'vue';
18
+ import { theme } from 'ant-design-vue';
14
19
  import { useElementBounding } from '@vueuse/core';
15
20
  import { FullPageConfig } from "../utils/constants";
16
21
  const __sfc_main__ = _defineComponent({
@@ -21,12 +26,17 @@ const __sfc_main__ = _defineComponent({
21
26
  const config = inject(FullPageConfig, { reduceHeight: 24 });
22
27
  const fullPage = ref(null);
23
28
  const { y } = useElementBounding(fullPage);
29
+ const { token } = theme.useToken();
30
+ const wrapStyle = computed(() => ({
31
+ minHeight: `calc(100vh - ${y.value + config.reduceHeight}px)`,
32
+ background: token.value.colorBgContainer,
33
+ }));
24
34
  return (_ctx, _cache) => {
25
35
  return (_openBlock(), _createElementBlock("div", {
26
36
  class: "full-page-warp",
27
37
  ref_key: "fullPage",
28
38
  ref: fullPage,
29
- style: _normalizeStyle({ minHeight: `calc(100vh - ${_unref(y) + _unref(config).reduceHeight}px)` })
39
+ style: _normalizeStyle(wrapStyle.value)
30
40
  }, [
31
41
  _createElementVNode("div", _hoisted_1, [
32
42
  _renderSlot(_ctx.$slots, "default")
@@ -0,0 +1,31 @@
1
+ ### FullPage
2
+
3
+ 全屏页面容器,自动测量容器顶部偏移并计算 `minHeight`,使内容区撑满剩余视口高度,背景使用主题容器色。
4
+
5
+ #### Props
6
+
7
+ | 参数 | 说明 | 类型 | 默认值 |
8
+ | --- | --- | --- | --- |
9
+ | reduceHeight | 视口高度缩减量(px),顶部还有固定工具条时设置 | `number` | 由 `ConfigProvider` 的 `FullPageConfig` 注入,默认 `24` |
10
+
11
+ #### 插槽
12
+
13
+ | 名称 | 说明 |
14
+ | --- | --- |
15
+ | default | 页面内容 |
16
+
17
+ #### 用法
18
+
19
+ ```vue
20
+ <template>
21
+ <JFullPage>
22
+ <div>内容区自动撑满剩余高度</div>
23
+ </JFullPage>
24
+ </template>
25
+ ```
26
+
27
+ #### Rules
28
+
29
+ - 通过 `useElementBounding` 实时测量容器 `top`,滚动时高度自动跟随调整。
30
+ - `reduceHeight` 可在 `JConfigProvider` 的 `FullPageConfig` 中全局配置,组件 props 不直接暴露时优先使用全局注入值。
31
+ - 背景色取自 ant-design-vue 主题 token 的 `colorBgContainer`。
@@ -0,0 +1,33 @@
1
+ ### Icon
2
+
3
+ 图标组件(注册名 `AIcon`),统一承载 ant-design-vue 图标与 iconfont 自定义图标;按 `type` 自动路由到对应图标源。
4
+
5
+ #### Props
6
+
7
+ | 参数 | 说明 | 类型 | 默认值 |
8
+ | --- | --- | --- | --- |
9
+ | type | 图标名,优先匹配 `@ant-design/icons-vue` 导出;未匹配时走 iconfont | `string` | - |
10
+ | scriptUrl | iconfont 的 script 地址(含 `//at.alicdn.com/...` 前缀),优先级高于全局配置 | `string` | 全局 `IconConfig.scriptUrl` |
11
+ | class | 图标类名 | `string` | - |
12
+ | style | 图标样式(透传) | `CSSProperties` | - |
13
+
14
+ #### 事件
15
+
16
+ | 事件 | 说明 |
17
+ | --- | --- |
18
+ | click | 点击图标 |
19
+
20
+ #### 用法
21
+
22
+ ```vue
23
+ <template>
24
+ <AIcon type="CloseOutlined" />
25
+ <AIcon type="icon-device" script-url="//at.alicdn.com/t/c/font_xxx.js" />
26
+ </template>
27
+ ```
28
+
29
+ #### Rules
30
+
31
+ - `type` 命中 `@ant-design/icons-vue` 导出名时直接渲染 Ant 图标;否则渲染 iconfont 图标,因此两种图标体系可混用。
32
+ - `scriptUrl` 未在组件上传入时,回退到 `JConfigProvider` 的 `IconConfig.scriptUrl` 全局配置。
33
+ - 未配置任何 scriptUrl 且 type 不匹配时渲染空节点,不报错。
@@ -0,0 +1,25 @@
1
+ ### LocaleProvider
2
+
3
+ 语言包 Provider,向组件树提供统一的文案语言包(默认中文),供 `useLocaleReceiver` 消费。
4
+
5
+ #### Props
6
+
7
+ | 参数 | 说明 | 类型 | 默认值 |
8
+ | --- | --- | --- | --- |
9
+ | locale | 组件文案语言包对象,按组件名分组 | `Record<string, any>` | 内置 `zh-CN` |
10
+
11
+ #### 用法
12
+
13
+ ```vue
14
+ <template>
15
+ <JLocaleProvider :locale="enUS">
16
+ <app-content />
17
+ </JLocaleProvider>
18
+ </template>
19
+ ```
20
+
21
+ #### Rules
22
+
23
+ - 通过 provide `componentLocaleData` 向下注入;子组件用 `useLocaleReceiver('组件名')` 获取对应分组的文案。
24
+ - `locale` 变化时深监听并重新注入。
25
+ - 通常无需单独使用:`JConfigProvider` 内部已包含本组件,直接配 `componentsLocale` 即可。
@@ -0,0 +1,42 @@
1
+ ### LocaleReceiver
2
+
3
+ 国际化接收 Hook(目录名 `LocaleReciver`),在组合式 API 中读取 `JLocaleProvider` 注入的语言包片段,供组件消费多语言文案。
4
+
5
+ #### 签名
6
+
7
+ ```ts
8
+ useLocaleReceiver<T extends string>(
9
+ componentName: T,
10
+ defaultLocale?: Record<string, any>[T] | Function | ComputedRef,
11
+ propsLocale?: Ref<Record<string, any>[T]>,
12
+ ): [ComputedRef<Record<string, any>[T]>]
13
+ ```
14
+
15
+ | 参数 | 说明 |
16
+ | --- | --- |
17
+ | componentName | 语言包分组名(如 `'DragModal'`、`'Empty'`),对应 `locale/zh-CN` 中的键 |
18
+ | defaultLocale | 兜底文案,可传对象 / 函数 / 响应式值 |
19
+ | propsLocale | 组件 props 上的语言覆盖 |
20
+
21
+ #### 返回值
22
+
23
+ | 返回值 | 说明 |
24
+ | --- | --- |
25
+ | `[componentLocale]` | 响应式文案对象:`defaultLocale ⊕ 上下文中 componentName 分组 ⊕ propsLocale`(后者覆盖前者) |
26
+
27
+ #### 用法
28
+
29
+ ```vue
30
+ <script setup lang="ts">
31
+ import { useLocaleReceiver } from '../LocaleReciver'
32
+
33
+ const [contextLocale] = useLocaleReceiver('DragModal')
34
+ // contextLocale.value.cancel / contextLocale.value.confirm
35
+ </script>
36
+ ```
37
+
38
+ #### Rules
39
+
40
+ - 未注入 `JLocaleProvider` 时回退到内置 `zh-CN` 语言包,组件可安全单独使用。
41
+ - 三个来源合并顺序:`defaultLocale` → 上下文语言包 → `propsLocale`,越靠后优先级越高。
42
+ - 该文件是 hook 而非组件,不参与 `app.component` 注册。
@@ -0,0 +1,40 @@
1
+ ### Markdown
2
+
3
+ Markdown 渲染组件,基于 `markdown-it` 并预装常用插件(锚点、任务列表、脚注、TOC、代码高亮、上下标、删除线等)。
4
+
5
+ #### Props
6
+
7
+ | 参数 | 说明 | 类型 | 默认值 |
8
+ | --- | --- | --- | --- |
9
+ | source | Markdown 源文本 | `string` | `''` |
10
+ | html | 是否渲染内联 HTML | `boolean` | `false` |
11
+ | breaks | 换行符是否转为 `<br>` | `boolean` | `false` |
12
+ | linkify | 自动识别链接 | `boolean` | `false` |
13
+ | typographer | 排版化(引号、破折号等) | `boolean` | `false` |
14
+ | quotes | 排版引号字符 | `string` | `'"“”‘’'` |
15
+ | xhtmlOut | 输出 XHTML 兼容标签 | `boolean` | `false` |
16
+ | langPrefix | 代码块语言类名前缀 | `string` | `'language-'` |
17
+ | anchor | 锚点插件配置(`markdown-it-anchor`) | `object` | `{}` |
18
+ | highlight | 代码高亮配置(`markdown-it-highlightjs`) | `object` | `{}` |
19
+ | tasklists | 任务列表配置(`markdown-it-task-lists`) | `object` | `{}` |
20
+ | toc | 目录插件配置(`markdown-it-toc-done-right`) | `object` | `{}` |
21
+ | emoji | 表情插件配置 | `object` | `{}` |
22
+ | plugins | 额外插件数组 `{ plugin, options }[]` | `array` | `[]` |
23
+
24
+ #### 用法
25
+
26
+ ```vue
27
+ <template>
28
+ <JMarkdown :source="markdownText" />
29
+ </template>
30
+
31
+ <script setup lang="ts">
32
+ const markdownText = '# 设备说明书\n\n- [x] 支持任务列表\n- [ ] 待办项'
33
+ </script>
34
+ ```
35
+
36
+ #### Rules
37
+
38
+ - 预装插件:abbr / anchor / deflist / footnote / highlightjs / ins / mark / sub / sup / task-lists / toc。
39
+ - 额外插件通过 `plugins` 传入 `{ plugin, options }`,渲染时按顺序 `markdown.use`。
40
+ - 渲染输出包在高度 100% 的容器中;`source` 变化时自动重新渲染(`onUpdated`)。
@@ -0,0 +1,40 @@
1
+ ### PermissionButton
2
+
3
+ 权限按钮组件,根据权限码自动控制按钮的可用性:无权限时禁用并提示,有确认需求时内置 Popconfirm / Modal 二次确认,并支持 Tooltip 与自定义确认组件。
4
+
5
+ #### Props
6
+
7
+ | 参数 | 说明 | 类型 | 默认值 |
8
+ | --- | --- | --- | --- |
9
+ | hasPermission | 权限码;`true` 或 `undefined` 视为有权限,支持字符串 / 数组(任一命中) | `string \| string[] \| boolean` | `undefined` |
10
+ | noPermissionTitle | 无权限时 Tooltip 文案 | `string` | 语言包(默认"暂无权限") |
11
+ | popConfirm | 点击后的二次确认配置(ant-design-vue `PopconfirmProps`,可用 `onConfirm` / `onCancel`) | `object` | - |
12
+ | popConfirmBefore | 点击时先执行的异步函数,返回值合并进 `popConfirm`(可用于动态确认内容) | `Function` | - |
13
+ | tooltip | 按钮 Tooltip 配置(`TooltipProps`) | `object` | - |
14
+ | style | 按钮样式 | `CSSProperties` | - |
15
+ | 其余 | 透传 ant-design-vue `Button` props(`buttonProps()`,去除 `icon`) | - | - |
16
+
17
+ #### 插槽
18
+
19
+ | 名称 | 说明 |
20
+ | --- | --- |
21
+ | default | 按钮文字 / 内容 |
22
+ | icon | 按钮图标 |
23
+ | button | 完全自定义按钮节点(跳过内部 Button 渲染,仅保留权限逻辑) |
24
+
25
+ #### 用法
26
+
27
+ ```vue
28
+ <template>
29
+ <JPermissionButton has-permission="device:delete" danger :pop-confirm="{ title: '确认删除该设备?' }">
30
+ 删除设备
31
+ </JPermissionButton>
32
+ </template>
33
+ ```
34
+
35
+ #### Rules
36
+
37
+ - 权限判定基于 `usePermission`(来自 `@jetlinks-web/hooks`);`hasPermission` 传 `true` 或省略时恒有权限。
38
+ - 有权限且配置 `popConfirm` 时:优先使用 `JConfigProvider` 中 `PermissionButtonConfig.components` 自定义确认组件,否则回退 `Modal.confirm`。
39
+ - 无权限时不渲染原始按钮逻辑,改为渲染带提示的禁用态(Tooltip 包裹)。
40
+ - `disabled` 透传自 Button props,与权限判定叠加。
@@ -0,0 +1,63 @@
1
+ ### ProLayout
2
+
3
+ 高级布局组件(兼容 `@ant-design-vue/pro-layout` 布局体系),提供侧栏 / 顶栏 / 混合(mix)三种布局与页面容器 `PageContainer`,适配 PC 与移动端。
4
+
5
+ #### ProLayout Props
6
+
7
+ | 参数 | 说明 | 类型 | 默认值 |
8
+ | --- | --- | --- | --- |
9
+ | layout | 布局模式:`side` / `top` / `mix` | `string` | `'side'` |
10
+ | menuData | 菜单数据(含 `path` / `name` / `icon` / `children` 等) | `MenuDataItem[]` | - |
11
+ | title | 站点标题 | `string` | - |
12
+ | logo | Logo | `string \| slot` | - |
13
+ | fixedHeader | 固定顶栏 | `boolean` | - |
14
+ | fixSiderbar | 固定侧栏 | `boolean` | - |
15
+ | collapsed / collapsedWidth / siderWidth | 侧栏折叠状态与宽度 | - | - |
16
+ | splitMenus | 混合布局下分离菜单 | `boolean` | - |
17
+ | breadcrumb | 面包屑数据或渲染函数 | `object \| Function` | - |
18
+ | pure | 纯布局(不渲染页头等) | `boolean` | - |
19
+ | loading | 布局加载态 | `boolean` | - |
20
+ | disableMobile | 禁用移动端模式 | `boolean` | - |
21
+ | disableContentMargin | 禁用内容区 margin | `boolean` | - |
22
+ | contentStyle | 内容区样式 | `CSSProperties` | - |
23
+ | headerRender / headerContentRender | 自定义顶栏渲染 | `Function \| boolean` | - |
24
+ | collapsedButtonRender | 自定义折叠按钮 | `Function \| boolean` | - |
25
+ | classNames | 各区域自定义类名 | `object` | `{}` |
26
+ | 其余 | 透传 defaultSettingProps / siderMenuProps / headerViewProps 等 | - | - |
27
+
28
+ #### PageContainer Props
29
+
30
+ | 参数 | 说明 | 类型 | 默认值 |
31
+ | --- | --- | --- | --- |
32
+ | title | 页头标题 | `string \| Render` | - |
33
+ | subTitle | 副标题 | `string \| Render` | - |
34
+ | content | 页头内容区 | `string \| Render` | - |
35
+ | extra / extraContent | 页头右侧操作区 | `string \| Render` | - |
36
+ | header | 自定义页头(传 `false` 隐藏) | `Render \| boolean` | - |
37
+ | pageHeaderRender | 自定义整个页头渲染 | `Function` | - |
38
+ | breadcrumb | 面包屑 | `object` | - |
39
+ | tabList / onTabChange | 页头页签与切换 | - | - |
40
+ | fixedHeader | 固定页头 | `boolean` | - |
41
+ | pure | 纯内容模式 | `boolean` | - |
42
+
43
+ #### 用法
44
+
45
+ ```vue
46
+ <template>
47
+ <ProLayout v-model:collapsed="collapsed" :menu-data="menuData" layout="side" :fixed-header="true">
48
+ <template #headerContentRender="{ collapsed }">
49
+ <div>自定义顶栏</div>
50
+ </template>
51
+ <PageContainer title="设备管理">
52
+ <router-view />
53
+ </PageContainer>
54
+ </ProLayout>
55
+ </template>
56
+ ```
57
+
58
+ #### Rules
59
+
60
+ - 布局切换由 `layoutType`(`LayoutType.PC / PAD`)与 `layout` 共同驱动:PAD 模式下侧栏自动收起为图标。
61
+ - 菜单数据项遵循 `MenuDataItem` 结构;菜单 / 路由联动由外部路由系统提供 `selectedKeys` 等控制。
62
+ - 折叠状态受控(`v-model:collapsed`),内部默认提供折叠按钮。
63
+ - 移动端默认开启响应式模式,可通过 `disableMobile` 关闭。