mall-components 1.0.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/README.md +128 -0
- package/build/_components-raw.css +791 -0
- package/build/_shims/antd.js +1 -0
- package/build/_shims/icons.js +1 -0
- package/build/_shims/moment.js +1 -0
- package/build/_shims/react-dom.js +1 -0
- package/build/_shims/react.js +1 -0
- package/build/adapters/DataSourceAdapter.d.ts +46 -0
- package/build/components/AdminLayout/AdminLayout.d.ts +5 -0
- package/build/components/AdminLayout/Breadcrumb.d.ts +8 -0
- package/build/components/AdminLayout/MainContent.d.ts +17 -0
- package/build/components/AdminLayout/Navbar.d.ts +10 -0
- package/build/components/AdminLayout/Sidebar.d.ts +14 -0
- package/build/components/AdminLayout/TabBar.d.ts +13 -0
- package/build/components/AdminLayout/TabPane.d.ts +4 -0
- package/build/components/AdminLayout/index.d.ts +3 -0
- package/build/components/AdminLayout/types.d.ts +42 -0
- package/build/components/CouponCard/CouponCard.d.ts +20 -0
- package/build/components/CouponCard/index.d.ts +1 -0
- package/build/components/OrderForm/OrderForm.d.ts +18 -0
- package/build/components/OrderForm/index.d.ts +1 -0
- package/build/components/OrderList/OrderList.d.ts +29 -0
- package/build/components/OrderList/index.d.ts +1 -0
- package/build/components/ProductForm/ProductForm.d.ts +18 -0
- package/build/components/ProductForm/index.d.ts +3 -0
- package/build/components/ProductList/ProductList.d.ts +47 -0
- package/build/components/ProductList/index.d.ts +3 -0
- package/build/components/PromotionCard/PromotionCard.d.ts +22 -0
- package/build/components/PromotionCard/index.d.ts +1 -0
- package/build/components/RoleCard/RoleCard.d.ts +18 -0
- package/build/components/RoleCard/index.d.ts +1 -0
- package/build/components/UserCard/UserCard.d.ts +17 -0
- package/build/components/UserCard/index.d.ts +1 -0
- package/build/entry-meta.d.ts +603 -0
- package/build/index.css +1 -0
- package/build/index.js +1 -0
- package/build/mall-components-meta.js +2563 -0
- package/build/mall-components.cdn.umd.css +1 -0
- package/build/mall-components.cdn.umd.js +8 -0
- package/build/mall-components.codesandbox.combined.js +1094 -0
- package/build/mall-components.codesandbox.css +401 -0
- package/build/mall-components.codesandbox.js +1080 -0
- package/build/mall-components.umd.css +1 -0
- package/build/mall-components.umd.js +8 -0
- package/build/meta/adminLayoutMeta.d.ts +3 -0
- package/build/meta/couponCardMeta.d.ts +128 -0
- package/build/meta/icons.d.ts +10 -0
- package/build/meta/orderFormMeta.d.ts +111 -0
- package/build/meta/orderListMeta.d.ts +170 -0
- package/build/meta/productFormMeta.d.ts +3 -0
- package/build/meta/productListMeta.d.ts +200 -0
- package/build/meta/promotionCardMeta.d.ts +129 -0
- package/build/meta/roleCardMeta.d.ts +3 -0
- package/build/meta/tabPaneMeta.d.ts +3 -0
- package/build/meta/userCardMeta.d.ts +3 -0
- package/build/meta.d.ts +605 -0
- package/build/setters/RestApiTester.d.ts +11 -0
- package/build/types/common.d.ts +17 -0
- package/build/types/marketing.d.ts +128 -0
- package/build/types/order.d.ts +174 -0
- package/build/types/permission.d.ts +101 -0
- package/build/types/product.d.ts +47 -0
- package/package.json +1 -0
- package/src/adapters/DataSourceAdapter.ts +445 -0
- package/src/components/AdminLayout/AdminLayout.scss +447 -0
- package/src/components/AdminLayout/AdminLayout.tsx +681 -0
- package/src/components/AdminLayout/Breadcrumb.tsx +60 -0
- package/src/components/AdminLayout/MainContent.tsx +54 -0
- package/src/components/AdminLayout/Navbar.tsx +76 -0
- package/src/components/AdminLayout/Sidebar.tsx +256 -0
- package/src/components/AdminLayout/TabBar.tsx +177 -0
- package/src/components/AdminLayout/TabPane.tsx +29 -0
- package/src/components/AdminLayout/index.ts +3 -0
- package/src/components/AdminLayout/types.ts +46 -0
- package/src/components/CouponCard/CouponCard.scss +55 -0
- package/src/components/CouponCard/CouponCard.tsx +687 -0
- package/src/components/CouponCard/index.ts +1 -0
- package/src/components/OrderForm/OrderForm.scss +148 -0
- package/src/components/OrderForm/OrderForm.tsx +503 -0
- package/src/components/OrderForm/index.ts +1 -0
- package/src/components/OrderList/OrderList.scss +160 -0
- package/src/components/OrderList/OrderList.tsx +885 -0
- package/src/components/OrderList/index.ts +1 -0
- package/src/components/ProductForm/ProductForm.scss +23 -0
- package/src/components/ProductForm/ProductForm.tsx +442 -0
- package/src/components/ProductForm/index.ts +3 -0
- package/src/components/ProductList/ProductList.scss +293 -0
- package/src/components/ProductList/ProductList.tsx +454 -0
- package/src/components/ProductList/index.ts +3 -0
- package/src/components/PromotionCard/PromotionCard.scss +71 -0
- package/src/components/PromotionCard/PromotionCard.tsx +579 -0
- package/src/components/PromotionCard/index.ts +1 -0
- package/src/components/RoleCard/RoleCard.scss +77 -0
- package/src/components/RoleCard/RoleCard.tsx +463 -0
- package/src/components/RoleCard/index.ts +1 -0
- package/src/components/UserCard/UserCard.scss +51 -0
- package/src/components/UserCard/UserCard.tsx +432 -0
- package/src/components/UserCard/index.ts +1 -0
- package/src/entry-components.ts +39 -0
- package/src/entry-meta.ts +23 -0
- package/src/index.scss +4 -0
- package/src/index.ts +36 -0
- package/src/index.tsx +17 -0
- package/src/meta/adminLayoutMeta.ts +154 -0
- package/src/meta/couponCardMeta.ts +287 -0
- package/src/meta/icons.ts +41 -0
- package/src/meta/orderFormMeta.ts +279 -0
- package/src/meta/orderListMeta.ts +443 -0
- package/src/meta/productFormMeta.ts +253 -0
- package/src/meta/productListMeta.ts +434 -0
- package/src/meta/promotionCardMeta.ts +276 -0
- package/src/meta/roleCardMeta.ts +142 -0
- package/src/meta/tabPaneMeta.ts +69 -0
- package/src/meta/userCardMeta.ts +128 -0
- package/src/meta.ts +25 -0
- package/src/setters/RestApiTester.tsx +219 -0
- package/src/shims/require.js +8 -0
- package/src/types/common.ts +19 -0
- package/src/types/marketing.ts +124 -0
- package/src/types/order.ts +169 -0
- package/src/types/permission.ts +102 -0
- package/src/types/product.ts +49 -0
|
@@ -0,0 +1,445 @@
|
|
|
1
|
+
export type DataSourceType = 'rest' | 'mock' | 'variable'
|
|
2
|
+
|
|
3
|
+
export type DataSourceConfig = {
|
|
4
|
+
type: DataSourceType
|
|
5
|
+
api?: string
|
|
6
|
+
method?: 'GET' | 'POST' | 'PUT' | 'DELETE'
|
|
7
|
+
headers?: Record<string, string>
|
|
8
|
+
mockData?: any
|
|
9
|
+
variableName?: string
|
|
10
|
+
dataSource?: any
|
|
11
|
+
transform?: string
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export interface DataSourceAdapter {
|
|
15
|
+
fetch(params?: any): Promise<any>
|
|
16
|
+
submit(data: any): Promise<any>
|
|
17
|
+
delete(id: string | number): Promise<any>
|
|
18
|
+
update(id: string | number, data: any): Promise<any>
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export class DataSourceAdapterFactory {
|
|
22
|
+
static create(config: DataSourceConfig): DataSourceAdapter {
|
|
23
|
+
if (!config) {
|
|
24
|
+
console.warn('[DataSourceAdapterFactory] config is undefined, using mock adapter')
|
|
25
|
+
return new MockDataAdapter({
|
|
26
|
+
type: 'mock',
|
|
27
|
+
mockData: {
|
|
28
|
+
code: 200,
|
|
29
|
+
message: 'success',
|
|
30
|
+
data: {
|
|
31
|
+
pageNum: 1,
|
|
32
|
+
pageSize: 10,
|
|
33
|
+
total: 0,
|
|
34
|
+
list: [],
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
})
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
if (!config.type) {
|
|
41
|
+
console.warn('[DataSourceAdapterFactory] config.type is undefined, using mock adapter')
|
|
42
|
+
return new MockDataAdapter({
|
|
43
|
+
type: 'mock',
|
|
44
|
+
mockData: config.mockData || {
|
|
45
|
+
code: 200,
|
|
46
|
+
message: 'success',
|
|
47
|
+
data: {
|
|
48
|
+
pageNum: 1,
|
|
49
|
+
pageSize: 10,
|
|
50
|
+
total: 0,
|
|
51
|
+
list: [],
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
})
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
switch (config.type) {
|
|
58
|
+
case 'rest':
|
|
59
|
+
return new RestApiAdapter(config)
|
|
60
|
+
case 'mock':
|
|
61
|
+
return new MockDataAdapter(config)
|
|
62
|
+
case 'variable':
|
|
63
|
+
return new VariableAdapter(config)
|
|
64
|
+
default:
|
|
65
|
+
console.warn(`[DataSourceAdapterFactory] Unsupported data source type: ${config.type}, using mock adapter`)
|
|
66
|
+
return new MockDataAdapter({
|
|
67
|
+
type: 'mock',
|
|
68
|
+
mockData: {
|
|
69
|
+
code: 200,
|
|
70
|
+
message: 'success',
|
|
71
|
+
data: {
|
|
72
|
+
pageNum: 1,
|
|
73
|
+
pageSize: 10,
|
|
74
|
+
total: 0,
|
|
75
|
+
list: [],
|
|
76
|
+
},
|
|
77
|
+
},
|
|
78
|
+
})
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
import type { DataSourceConfig as IDataSourceConfig } from './DataSourceAdapter'
|
|
84
|
+
|
|
85
|
+
export class RestApiAdapter implements DataSourceAdapter {
|
|
86
|
+
private config: IDataSourceConfig
|
|
87
|
+
|
|
88
|
+
constructor(config: IDataSourceConfig) {
|
|
89
|
+
this.config = config
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
async fetch(params?: any): Promise<any> {
|
|
93
|
+
const url = this.buildUrl(params)
|
|
94
|
+
const response = await fetch(url, {
|
|
95
|
+
method: this.config.method || 'GET',
|
|
96
|
+
headers: {
|
|
97
|
+
'Content-Type': 'application/json',
|
|
98
|
+
...this.config.headers,
|
|
99
|
+
},
|
|
100
|
+
body: this.config.method !== 'GET' ? JSON.stringify(params) : undefined,
|
|
101
|
+
})
|
|
102
|
+
|
|
103
|
+
if (!response.ok) {
|
|
104
|
+
throw new Error(`HTTP error! status: ${response.status}`)
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
let data = await response.json()
|
|
108
|
+
|
|
109
|
+
if (this.config.transform) {
|
|
110
|
+
try {
|
|
111
|
+
const transformFn = new Function('data', this.config.transform)
|
|
112
|
+
data = transformFn(data)
|
|
113
|
+
} catch (error) {
|
|
114
|
+
console.error('Transform function error:', error)
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
return data
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
async submit(data: any): Promise<any> {
|
|
122
|
+
const response = await fetch(this.config.api!, {
|
|
123
|
+
method: 'POST',
|
|
124
|
+
headers: {
|
|
125
|
+
'Content-Type': 'application/json',
|
|
126
|
+
...this.config.headers,
|
|
127
|
+
},
|
|
128
|
+
body: JSON.stringify(data),
|
|
129
|
+
})
|
|
130
|
+
|
|
131
|
+
return response.json()
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
async delete(id: string | number): Promise<any> {
|
|
135
|
+
const response = await fetch(`${this.config.api}/${id}`, {
|
|
136
|
+
method: 'DELETE',
|
|
137
|
+
headers: this.config.headers,
|
|
138
|
+
})
|
|
139
|
+
|
|
140
|
+
return response.json()
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
async update(id: string | number, data: any): Promise<any> {
|
|
144
|
+
const response = await fetch(`${this.config.api}/${id}`, {
|
|
145
|
+
method: 'PUT',
|
|
146
|
+
headers: {
|
|
147
|
+
'Content-Type': 'application/json',
|
|
148
|
+
...this.config.headers,
|
|
149
|
+
},
|
|
150
|
+
body: JSON.stringify(data),
|
|
151
|
+
})
|
|
152
|
+
|
|
153
|
+
return response.json()
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
private buildUrl(params?: any): string {
|
|
157
|
+
if (!params || this.config.method !== 'GET') {
|
|
158
|
+
return this.config.api!
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
const url = new URL(this.config.api!, window.location.origin)
|
|
162
|
+
Object.keys(params).forEach(key => {
|
|
163
|
+
if (params[key] !== undefined && params[key] !== null && params[key] !== '') {
|
|
164
|
+
url.searchParams.append(key, params[key])
|
|
165
|
+
}
|
|
166
|
+
})
|
|
167
|
+
|
|
168
|
+
return url.toString()
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
export class MockDataAdapter implements DataSourceAdapter {
|
|
173
|
+
private config: IDataSourceConfig
|
|
174
|
+
|
|
175
|
+
constructor(config: IDataSourceConfig) {
|
|
176
|
+
this.config = config
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
async fetch(params?: any): Promise<any> {
|
|
180
|
+
console.log('[MockDataAdapter] fetch 被调用,config:', this.config, 'params:', params)
|
|
181
|
+
await new Promise(resolve => setTimeout(resolve, 300))
|
|
182
|
+
|
|
183
|
+
let data = this.config.mockData
|
|
184
|
+
console.log('[MockDataAdapter] 原始 mockData:', data, '类型:', typeof data)
|
|
185
|
+
|
|
186
|
+
if (!data || data === '') {
|
|
187
|
+
console.log('[MockDataAdapter] mockData 为空,使用默认数据')
|
|
188
|
+
data = {
|
|
189
|
+
code: 200,
|
|
190
|
+
message: 'success',
|
|
191
|
+
data: {
|
|
192
|
+
pageNum: 1,
|
|
193
|
+
pageSize: 10,
|
|
194
|
+
total: 50,
|
|
195
|
+
list: [
|
|
196
|
+
{
|
|
197
|
+
id: 1,
|
|
198
|
+
name: '时尚运动鞋',
|
|
199
|
+
productSn: 'PRODUCT001',
|
|
200
|
+
price: 269,
|
|
201
|
+
stock: 100,
|
|
202
|
+
sale: 120,
|
|
203
|
+
brandName: '时尚运动',
|
|
204
|
+
productCategoryName: '鞋子',
|
|
205
|
+
pic: 'https://img.yzcdn.cn/vant/cat.jpeg',
|
|
206
|
+
publishStatus: 1,
|
|
207
|
+
newStatus: 1,
|
|
208
|
+
recommandStatus: 1,
|
|
209
|
+
verifyStatus: 1,
|
|
210
|
+
},
|
|
211
|
+
{
|
|
212
|
+
id: 2,
|
|
213
|
+
name: '休闲T恤',
|
|
214
|
+
productSn: 'PRODUCT002',
|
|
215
|
+
price: 99,
|
|
216
|
+
stock: 200,
|
|
217
|
+
sale: 350,
|
|
218
|
+
brandName: '休闲服饰',
|
|
219
|
+
productCategoryName: '衣服',
|
|
220
|
+
pic: 'https://img.yzcdn.cn/vant/cat.jpeg',
|
|
221
|
+
publishStatus: 1,
|
|
222
|
+
newStatus: 1,
|
|
223
|
+
recommandStatus: 0,
|
|
224
|
+
verifyStatus: 1,
|
|
225
|
+
},
|
|
226
|
+
{
|
|
227
|
+
id: 3,
|
|
228
|
+
name: '双肩背包',
|
|
229
|
+
productSn: 'PRODUCT003',
|
|
230
|
+
price: 189,
|
|
231
|
+
stock: 80,
|
|
232
|
+
sale: 80,
|
|
233
|
+
brandName: '旅行箱包',
|
|
234
|
+
productCategoryName: '配饰',
|
|
235
|
+
pic: 'https://img.yzcdn.cn/vant/cat.jpeg',
|
|
236
|
+
publishStatus: 1,
|
|
237
|
+
newStatus: 0,
|
|
238
|
+
recommandStatus: 1,
|
|
239
|
+
verifyStatus: 1,
|
|
240
|
+
},
|
|
241
|
+
{
|
|
242
|
+
id: 4,
|
|
243
|
+
name: '运动手表',
|
|
244
|
+
productSn: 'PRODUCT004',
|
|
245
|
+
price: 499,
|
|
246
|
+
stock: 50,
|
|
247
|
+
sale: 60,
|
|
248
|
+
brandName: '智能数码',
|
|
249
|
+
productCategoryName: '数码',
|
|
250
|
+
pic: 'https://img.yzcdn.cn/vant/cat.jpeg',
|
|
251
|
+
publishStatus: 1,
|
|
252
|
+
newStatus: 1,
|
|
253
|
+
recommandStatus: 1,
|
|
254
|
+
verifyStatus: 1,
|
|
255
|
+
},
|
|
256
|
+
{
|
|
257
|
+
id: 5,
|
|
258
|
+
name: '牛仔裤',
|
|
259
|
+
productSn: 'PRODUCT005',
|
|
260
|
+
price: 199,
|
|
261
|
+
stock: 150,
|
|
262
|
+
sale: 280,
|
|
263
|
+
brandName: '时尚牛仔',
|
|
264
|
+
productCategoryName: '衣服',
|
|
265
|
+
pic: 'https://img.yzcdn.cn/vant/cat.jpeg',
|
|
266
|
+
publishStatus: 1,
|
|
267
|
+
newStatus: 0,
|
|
268
|
+
recommandStatus: 0,
|
|
269
|
+
verifyStatus: 1,
|
|
270
|
+
},
|
|
271
|
+
],
|
|
272
|
+
},
|
|
273
|
+
}
|
|
274
|
+
} else {
|
|
275
|
+
try {
|
|
276
|
+
if (typeof data === 'string') {
|
|
277
|
+
data = JSON.parse(data)
|
|
278
|
+
}
|
|
279
|
+
console.log('[MockDataAdapter] JSON 解析后的数据:', data)
|
|
280
|
+
} catch (error) {
|
|
281
|
+
console.error('[MockDataAdapter] JSON 解析失败:', error)
|
|
282
|
+
data = {
|
|
283
|
+
code: 200,
|
|
284
|
+
message: 'success',
|
|
285
|
+
data: {
|
|
286
|
+
pageNum: 1,
|
|
287
|
+
pageSize: 10,
|
|
288
|
+
total: 0,
|
|
289
|
+
list: [],
|
|
290
|
+
},
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
if (this.config.transform) {
|
|
296
|
+
try {
|
|
297
|
+
const transformFn = new Function('data', this.config.transform)
|
|
298
|
+
data = transformFn(data)
|
|
299
|
+
} catch (error) {
|
|
300
|
+
console.error('Transform function error:', error)
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
console.log('[MockDataAdapter] 最终返回数据:', data)
|
|
305
|
+
|
|
306
|
+
if (params?.pageNum && params?.pageSize && data?.data?.list) {
|
|
307
|
+
const start = (params.pageNum - 1) * params.pageSize
|
|
308
|
+
const end = start + params.pageSize
|
|
309
|
+
return {
|
|
310
|
+
...data,
|
|
311
|
+
data: {
|
|
312
|
+
...data.data,
|
|
313
|
+
list: data.data.list.slice(start, end),
|
|
314
|
+
},
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
return data
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
async submit(data: any): Promise<any> {
|
|
322
|
+
await new Promise(resolve => setTimeout(resolve, 300))
|
|
323
|
+
return { code: 200, message: 'success', data }
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
async delete(id: string | number): Promise<any> {
|
|
327
|
+
await new Promise(resolve => setTimeout(resolve, 300))
|
|
328
|
+
return { code: 200, message: 'success' }
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
async update(id: string | number, data: any): Promise<any> {
|
|
332
|
+
await new Promise(resolve => setTimeout(resolve, 300))
|
|
333
|
+
return { code: 200, message: 'success', data }
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
export class VariableAdapter implements DataSourceAdapter {
|
|
338
|
+
private config: IDataSourceConfig
|
|
339
|
+
|
|
340
|
+
constructor(config: IDataSourceConfig) {
|
|
341
|
+
this.config = config
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
async fetch(params?: any): Promise<any> {
|
|
345
|
+
console.log('[VariableAdapter] fetch 被调用,config:', {
|
|
346
|
+
variableName: this.config.variableName,
|
|
347
|
+
dataSource: this.config.dataSource
|
|
348
|
+
})
|
|
349
|
+
|
|
350
|
+
if (this.config.dataSource !== undefined && this.config.dataSource !== null) {
|
|
351
|
+
console.log('[VariableAdapter] 使用 dataSource:', this.config.dataSource)
|
|
352
|
+
let data = this.config.dataSource
|
|
353
|
+
|
|
354
|
+
if (typeof data === 'string') {
|
|
355
|
+
try {
|
|
356
|
+
data = JSON.parse(data)
|
|
357
|
+
} catch (e) {
|
|
358
|
+
console.error('[VariableAdapter] dataSource JSON 解析失败:', e)
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
if (data && typeof data === 'object') {
|
|
363
|
+
if (data.code === 200 && data.data) {
|
|
364
|
+
return data
|
|
365
|
+
}
|
|
366
|
+
if (data.list || Array.isArray(data)) {
|
|
367
|
+
return {
|
|
368
|
+
code: 200,
|
|
369
|
+
message: 'success',
|
|
370
|
+
data: {
|
|
371
|
+
pageNum: 1,
|
|
372
|
+
pageSize: 10,
|
|
373
|
+
total: Array.isArray(data) ? data.length : (data.total || 0),
|
|
374
|
+
list: Array.isArray(data) ? data : (data.list || []),
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
return { code: 200, message: 'success', data: data }
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
return {
|
|
382
|
+
code: 200,
|
|
383
|
+
message: 'success',
|
|
384
|
+
data: {
|
|
385
|
+
pageNum: 1,
|
|
386
|
+
pageSize: 10,
|
|
387
|
+
total: 0,
|
|
388
|
+
list: [],
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
const variableName = this.config.variableName
|
|
394
|
+
if (!variableName) {
|
|
395
|
+
console.warn('[VariableAdapter] variableName 和 dataSource 都为空,返回空数据')
|
|
396
|
+
return {
|
|
397
|
+
code: 200,
|
|
398
|
+
message: 'success',
|
|
399
|
+
data: {
|
|
400
|
+
pageNum: 1,
|
|
401
|
+
pageSize: 10,
|
|
402
|
+
total: 0,
|
|
403
|
+
list: [],
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
const value = (window as any)[variableName]
|
|
409
|
+
console.log('[VariableAdapter] 从 window 获取的值:', value)
|
|
410
|
+
|
|
411
|
+
if (value === undefined || value === null) {
|
|
412
|
+
console.warn('[VariableAdapter] 变量不存在,返回空数据')
|
|
413
|
+
return {
|
|
414
|
+
code: 200,
|
|
415
|
+
message: 'success',
|
|
416
|
+
data: {
|
|
417
|
+
pageNum: 1,
|
|
418
|
+
pageSize: 10,
|
|
419
|
+
total: 0,
|
|
420
|
+
list: [],
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
return { code: 200, message: 'success', data: value }
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
async submit(data: any): Promise<any> {
|
|
429
|
+
const variableName = this.config.variableName
|
|
430
|
+
if (!variableName) {
|
|
431
|
+
throw new Error('Variable name is required for variable adapter')
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
(window as any)[variableName] = data
|
|
435
|
+
return { code: 200, message: 'success', data }
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
async delete(id: string | number): Promise<any> {
|
|
439
|
+
return { code: 200, message: 'success' }
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
async update(id: string | number, data: any): Promise<any> {
|
|
443
|
+
return this.submit(data)
|
|
444
|
+
}
|
|
445
|
+
}
|