jgy-public-component 0.0.22 → 0.0.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +113 -1
- package/dist/components/JProductDetail/JProductDetailDialog.d.ts +4 -1
- package/dist/components/JProductDetail/index.d.ts +1 -0
- package/dist/components/JProductDetail/request.d.ts +28 -0
- package/dist/components/JProductDetail/types.d.ts +19 -11
- package/dist/components/JProductDetail/useProductDetailDialog.d.ts +20 -7
- package/dist/index.d.ts +2 -2
- package/dist/index.js +931 -912
- package/dist/index.js.map +1 -1
- package/dist/index.umd.cjs +2 -2
- package/dist/index.umd.cjs.map +1 -1
- package/dist/style.css +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -47,9 +47,121 @@ import 'jgy-public-component/dist/style.css'
|
|
|
47
47
|
| JUploadImg | 图片上传 |
|
|
48
48
|
| JSidebar / JSideMenuItem | 侧边栏菜单 |
|
|
49
49
|
| JAdminLayout | 后台布局 |
|
|
50
|
-
| JProductDetailDialog / JSkuLink | 产品详情 / SKU
|
|
50
|
+
| JProductDetailDialog / JSkuLink | 产品详情 / SKU 链接(需注入 request) |
|
|
51
51
|
| JIconRender | 图标渲染 |
|
|
52
52
|
|
|
53
|
+
### JSkuLink + JProductDetailDialog(点击 SKU 弹产品详情)
|
|
54
|
+
|
|
55
|
+
列表场景:**多行 `JSkuLink` + 页面底部一个 `JProductDetailDialog`**,不要每行挂一个弹窗。
|
|
56
|
+
|
|
57
|
+
#### 1. 入口注入 request(推荐,全项目一次)
|
|
58
|
+
|
|
59
|
+
```ts
|
|
60
|
+
// main.ts
|
|
61
|
+
import { createApp } from 'vue'
|
|
62
|
+
import App from './App.vue'
|
|
63
|
+
import request from '@/api'
|
|
64
|
+
import JgyComponents, { provideProductRequest } from 'jgy-public-component'
|
|
65
|
+
import 'jgy-public-component/dist/style.css'
|
|
66
|
+
|
|
67
|
+
const app = createApp(App)
|
|
68
|
+
app.use(JgyComponents)
|
|
69
|
+
|
|
70
|
+
// 把项目统一的 axios 封装注入给产品详情组件
|
|
71
|
+
provideProductRequest(app, (config) => request(config))
|
|
72
|
+
|
|
73
|
+
app.mount('#app')
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
#### 2. 页面用法
|
|
77
|
+
|
|
78
|
+
```vue
|
|
79
|
+
<template>
|
|
80
|
+
<!-- 表格里:只放链接 -->
|
|
81
|
+
<JSkuLink :code="row.sku" @open="openProductDetailDialog" />
|
|
82
|
+
|
|
83
|
+
<!-- 页面底部:只挂一个弹窗 -->
|
|
84
|
+
<JProductDetailDialog
|
|
85
|
+
v-model:visible="productDetailDialogVisible"
|
|
86
|
+
:code="productDetailDialogCode"
|
|
87
|
+
type="sku"
|
|
88
|
+
/>
|
|
89
|
+
<!-- 若未在 main.ts provide,需额外传 :request="request" -->
|
|
90
|
+
</template>
|
|
91
|
+
|
|
92
|
+
<script setup lang="ts">
|
|
93
|
+
import {
|
|
94
|
+
JSkuLink,
|
|
95
|
+
JProductDetailDialog,
|
|
96
|
+
useProductDetailDialog,
|
|
97
|
+
} from 'jgy-public-component'
|
|
98
|
+
|
|
99
|
+
const {
|
|
100
|
+
productDetailDialogVisible,
|
|
101
|
+
productDetailDialogCode,
|
|
102
|
+
openProductDetailDialog,
|
|
103
|
+
} = useProductDetailDialog()
|
|
104
|
+
</script>
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
#### 3. 单页传入 request(不全局 provide 时)
|
|
108
|
+
|
|
109
|
+
```vue
|
|
110
|
+
<script setup lang="ts">
|
|
111
|
+
import request from '@/api'
|
|
112
|
+
import { JProductDetailDialog, JSkuLink, useProductDetailDialog } from 'jgy-public-component'
|
|
113
|
+
// ...
|
|
114
|
+
</script>
|
|
115
|
+
|
|
116
|
+
<template>
|
|
117
|
+
<JSkuLink :code="row.sku" @open="openProductDetailDialog" />
|
|
118
|
+
<JProductDetailDialog
|
|
119
|
+
v-model:visible="productDetailDialogVisible"
|
|
120
|
+
:code="productDetailDialogCode"
|
|
121
|
+
type="sku"
|
|
122
|
+
:request="request"
|
|
123
|
+
/>
|
|
124
|
+
</template>
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
#### 4. Props / 事件
|
|
128
|
+
|
|
129
|
+
**JSkuLink**
|
|
130
|
+
|
|
131
|
+
| 属性 | 类型 | 默认 | 说明 |
|
|
132
|
+
|------|------|------|------|
|
|
133
|
+
| code | `string \| null` | - | SKU/编码 |
|
|
134
|
+
| emptyText | `string` | `'-'` | 无编码时展示 |
|
|
135
|
+
|
|
136
|
+
| 事件 | 参数 | 说明 |
|
|
137
|
+
|------|------|------|
|
|
138
|
+
| open | `(code: string)` | 有编码且点击时触发 |
|
|
139
|
+
|
|
140
|
+
**JProductDetailDialog**
|
|
141
|
+
|
|
142
|
+
| 属性 | 类型 | 默认 | 说明 |
|
|
143
|
+
|------|------|------|------|
|
|
144
|
+
| visible / v-model:visible | `boolean` | `false` | 显隐 |
|
|
145
|
+
| code | `string` | `''` | sku_code / spu_code |
|
|
146
|
+
| type | `'sku' \| 'spu'` | `'sku'` | 详情接口类型 |
|
|
147
|
+
| id | `number \| string` | - | 可选行 id |
|
|
148
|
+
| request | `JProductRequestFn` | - | 可选;未传则用全局 provide |
|
|
149
|
+
|
|
150
|
+
**主题色(可选)**
|
|
151
|
+
|
|
152
|
+
```css
|
|
153
|
+
:root {
|
|
154
|
+
--j-sku-link-color: #409eff;
|
|
155
|
+
}
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
#### 5. 宿主前置条件
|
|
159
|
+
|
|
160
|
+
1. 已安装 `element-plus`(peerDependency)
|
|
161
|
+
2. vite 已代理 `/bis-app` 到后端
|
|
162
|
+
3. 后端具备同一套 bis 产品详情接口(`/bis-app/comm/sku/doDetail` 等)
|
|
163
|
+
4. `request` 返回体已被拦截器解包为 `{ code, data, msg }`
|
|
164
|
+
|
|
53
165
|
### JSearchInputDialog 快速示例
|
|
54
166
|
|
|
55
167
|
```vue
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { JProductDetailDialogProps } from './types';
|
|
1
|
+
import { JProductRequestFn, JProductDetailDialogProps } from './types';
|
|
2
2
|
import { DefineComponent, ExtractPropTypes, ComponentOptionsMixin, PublicProps, ComponentProvideOptions, PropType } from 'vue';
|
|
3
3
|
|
|
4
4
|
declare const _default: DefineComponent<ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<JProductDetailDialogProps>, {
|
|
@@ -6,6 +6,7 @@ declare const _default: DefineComponent<ExtractPropTypes<__VLS_WithDefaults<__VL
|
|
|
6
6
|
code: string;
|
|
7
7
|
type: string;
|
|
8
8
|
id: undefined;
|
|
9
|
+
request: undefined;
|
|
9
10
|
}>>, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
|
|
10
11
|
"update:visible": (args_0: boolean) => void;
|
|
11
12
|
}, string, PublicProps, Readonly< ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<JProductDetailDialogProps>, {
|
|
@@ -13,6 +14,7 @@ declare const _default: DefineComponent<ExtractPropTypes<__VLS_WithDefaults<__VL
|
|
|
13
14
|
code: string;
|
|
14
15
|
type: string;
|
|
15
16
|
id: undefined;
|
|
17
|
+
request: undefined;
|
|
16
18
|
}>>> & Readonly<{
|
|
17
19
|
"onUpdate:visible"?: ((args_0: boolean) => any) | undefined;
|
|
18
20
|
}>, {
|
|
@@ -20,6 +22,7 @@ declare const _default: DefineComponent<ExtractPropTypes<__VLS_WithDefaults<__VL
|
|
|
20
22
|
id: number | string;
|
|
21
23
|
code: string;
|
|
22
24
|
visible: boolean;
|
|
25
|
+
request: JProductRequestFn;
|
|
23
26
|
}, {}, {}, {}, string, ComponentProvideOptions, true, {}, any>;
|
|
24
27
|
export default _default;
|
|
25
28
|
type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { default as JProductDetailDialog } from './JProductDetailDialog';
|
|
2
2
|
export { default as JSkuLink } from './JSkuLink';
|
|
3
3
|
export { useProductDetailDialog } from './useProductDetailDialog';
|
|
4
|
+
export { provideProductRequest, resolveProductRequest, useInjectedProductRequest, J_PRODUCT_REQUEST_KEY, } from './request';
|
|
4
5
|
export type { JProductDetailDialogProps, JSkuLinkProps, JProductRequestFn, JProductRequestConfig, } from './types';
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { App, InjectionKey } from 'vue';
|
|
2
|
+
import { JProductRequestFn } from './types';
|
|
3
|
+
|
|
4
|
+
/** provide/inject 用的 key,业务方一般无需直接使用 */
|
|
5
|
+
export declare const J_PRODUCT_REQUEST_KEY: InjectionKey<JProductRequestFn>;
|
|
6
|
+
/**
|
|
7
|
+
* 在应用入口注入 request(推荐,全项目只需一次)。
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```ts
|
|
11
|
+
* import { createApp } from 'vue'
|
|
12
|
+
* import request from '@/api'
|
|
13
|
+
* import { provideProductRequest } from 'jgy-public-component'
|
|
14
|
+
*
|
|
15
|
+
* const app = createApp(App)
|
|
16
|
+
* provideProductRequest(app, (config) => request(config))
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
export declare function provideProductRequest(app: App, request: JProductRequestFn): void;
|
|
20
|
+
/**
|
|
21
|
+
* 在 setup 中读取全局注入的 request(必须在 setup 同步阶段调用 inject)。
|
|
22
|
+
*/
|
|
23
|
+
export declare function useInjectedProductRequest(): JProductRequestFn | null;
|
|
24
|
+
/**
|
|
25
|
+
* 解析最终 request:prop 优先,否则用全局 provide。
|
|
26
|
+
* 可在 setup 外调用,但需把 setup 阶段拿到的 injected 传进来。
|
|
27
|
+
*/
|
|
28
|
+
export declare function resolveProductRequest(propRequest?: JProductRequestFn | null, injectedRequest?: JProductRequestFn | null): JProductRequestFn;
|
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* JProductDetail 相关类型
|
|
3
3
|
*
|
|
4
|
-
* 该组件依赖宿主项目注入 request
|
|
4
|
+
* 该组件依赖宿主项目注入 request 函数(各 *_front 项目 `@/api` 的默认导出),
|
|
5
5
|
* 组件内部不直接依赖任何具体项目的 request 封装。
|
|
6
|
+
*
|
|
7
|
+
* 注入方式二选一(推荐 1):
|
|
8
|
+
* 1. main.ts: provideProductRequest(app, request)
|
|
9
|
+
* 2. 组件 prop: <JProductDetailDialog :request="request" ... />
|
|
6
10
|
*/
|
|
7
|
-
/** request
|
|
11
|
+
/** request 请求配置(与各项目 axios 实例调用签名对齐) */
|
|
8
12
|
export interface JProductRequestConfig {
|
|
9
13
|
url: string;
|
|
10
14
|
method?: string;
|
|
@@ -14,24 +18,28 @@ export interface JProductRequestConfig {
|
|
|
14
18
|
}
|
|
15
19
|
/**
|
|
16
20
|
* 注入式 request 函数类型。
|
|
17
|
-
* 传入 `@/api`
|
|
18
|
-
* 其中 res
|
|
21
|
+
* 传入 `@/api` 的默认导出即可:`(config) => Promise<res>`,
|
|
22
|
+
* 其中 res 已被拦截器解包为后端返回体(含 code/data/msg)。
|
|
19
23
|
*/
|
|
20
24
|
export type JProductRequestFn = (config: JProductRequestConfig) => Promise<any>;
|
|
21
25
|
export interface JProductDetailDialogProps {
|
|
22
|
-
/**
|
|
26
|
+
/** 弹窗显隐,配合 v-model:visible 使用 */
|
|
23
27
|
visible?: boolean;
|
|
24
|
-
/** sku_code 或 spu_code
|
|
28
|
+
/** sku_code 或 spu_code,弹窗打开时自动请求详情 */
|
|
25
29
|
code?: string;
|
|
26
|
-
/** sku 走 /sku/doDetail
|
|
30
|
+
/** sku 走 /sku/doDetail,spu 走 /spu/doDetail */
|
|
27
31
|
type?: 'sku' | 'spu';
|
|
28
|
-
/** 行 id
|
|
32
|
+
/** 行 id,可选 */
|
|
29
33
|
id?: number | string;
|
|
30
|
-
/**
|
|
31
|
-
|
|
34
|
+
/**
|
|
35
|
+
* request 函数。可选:
|
|
36
|
+
* - 未传时使用 provideProductRequest 注入的全局 request
|
|
37
|
+
* - 传入时优先使用 prop(便于单页覆盖)
|
|
38
|
+
*/
|
|
39
|
+
request?: JProductRequestFn;
|
|
32
40
|
}
|
|
33
41
|
export interface JSkuLinkProps {
|
|
34
|
-
/**
|
|
42
|
+
/** 编码,有值时渲染为可点击链接 */
|
|
35
43
|
code?: string | null;
|
|
36
44
|
/** 无编码时展示的占位文本 */
|
|
37
45
|
emptyText?: string;
|
|
@@ -1,13 +1,26 @@
|
|
|
1
1
|
import { Ref } from 'vue';
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* 产品详情弹窗状态管理(页面级:多个 JSkuLink 共用一个 Dialog)。
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
5
|
+
* @example
|
|
6
|
+
* ```ts
|
|
7
|
+
* const {
|
|
8
|
+
* productDetailDialogVisible,
|
|
9
|
+
* productDetailDialogCode,
|
|
10
|
+
* openProductDetailDialog,
|
|
11
|
+
* } = useProductDetailDialog()
|
|
12
|
+
* ```
|
|
13
|
+
*
|
|
14
|
+
* ```vue
|
|
15
|
+
* <JSkuLink :code="row.sku" @open="openProductDetailDialog" />
|
|
16
|
+
* <JProductDetailDialog
|
|
17
|
+
* v-model:visible="productDetailDialogVisible"
|
|
18
|
+
* :code="productDetailDialogCode"
|
|
19
|
+
* type="sku"
|
|
20
|
+
* />
|
|
21
|
+
* ```
|
|
22
|
+
*
|
|
23
|
+
* 注意:列表中每行只用 JSkuLink,Dialog 放页面底部只挂一次,不要每行一个 Dialog。
|
|
11
24
|
*/
|
|
12
25
|
export declare function useProductDetailDialog(): {
|
|
13
26
|
productDetailDialogVisible: Ref<boolean, boolean>;
|
package/dist/index.d.ts
CHANGED
|
@@ -14,7 +14,7 @@ declare const _default: {
|
|
|
14
14
|
};
|
|
15
15
|
export default _default;
|
|
16
16
|
export { JButton, JUploadImg, JIconRender, JSearchHeader, JImportExcel, JSidebar, JSideMenuItem, JAdminLayout, JProductDetailDialog, JSkuLink, JSearchInputDialog, };
|
|
17
|
-
export { useProductDetailDialog } from './components/JProductDetail';
|
|
17
|
+
export { useProductDetailDialog, provideProductRequest, resolveProductRequest, useInjectedProductRequest, J_PRODUCT_REQUEST_KEY, } from './components/JProductDetail';
|
|
18
18
|
export { toSnakeCase, toCamelCase, pick, omit, deepClone, filterEmpty, flatten, unflatten, toTableColumns } from './utils';
|
|
19
19
|
export { createRouterGuard, buildRouteTree, transformBackendRoutes, findFirstAllowedRoute, getComponentImport } from './router';
|
|
20
20
|
export type { BackendRoute, RouteStoreAdapter, PermissionStoreAdapter, UserStoreAdapter, RouterGuardOptions } from './router';
|
|
@@ -25,5 +25,5 @@ export type { JSearchHeaderProps } from './components/JSearchHeader';
|
|
|
25
25
|
export type { JImportExcelProps, ApiFn } from './components/JImportExcel';
|
|
26
26
|
export type { SidebarMenuItem, JSidebarProps, JSideMenuItemProps } from './components/JSidebar';
|
|
27
27
|
export type { AdminLayoutMenuItem, JAdminLayoutProps } from './components/JAdminLayout';
|
|
28
|
-
export type { JProductDetailDialogProps, JSkuLinkProps, JProductRequestFn, JProductRequestConfig } from './components/JProductDetail';
|
|
28
|
+
export type { JProductDetailDialogProps, JSkuLinkProps, JProductRequestFn, JProductRequestConfig, } from './components/JProductDetail';
|
|
29
29
|
export type { JSearchInputDialogProps, SearchInputOption, SearchInputModel, } from './components/JSearchInputDialog';
|