dynamicformdjx 0.4.4 → 0.6.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 +802 -327
- package/dist/elementPlus/EleDynamicForm.d.ts +3 -3
- package/dist/elementPlus/ElePopupModal.d.ts +89 -0
- package/dist/elementPlus/EleZealCard.d.ts +58 -0
- package/dist/elementPlus/EleZealTableTool.d.ts +284 -0
- package/dist/elementPlus/hooks/useZealTool.d.ts +7 -0
- package/dist/elementPlus/index.cjs +1 -1
- package/dist/elementPlus/index.d.ts +13 -6
- package/dist/elementPlus/index.mjs +988 -426
- package/dist/hooks/useTool.d.ts +14 -0
- package/dist/hooks/zealForm.d.ts +14 -0
- package/dist/index-BAqRAwDC.cjs +1 -0
- package/dist/index-BQKYL550.js +213 -0
- package/dist/index.cjs +1 -1
- package/dist/index.css +1 -1
- package/dist/index.d.ts +6 -3
- package/dist/index.mjs +522 -298
- package/dist/naiveUi/NaiPopupModal.d.ts +79 -0
- package/dist/naiveUi/NaiZealCard.d.ts +58 -0
- package/dist/naiveUi/NaiZealTableTool.d.ts +187 -0
- package/dist/naiveUi/hooks/useZealTool.d.ts +7 -0
- package/dist/naiveUi/index.cjs +1 -1
- package/dist/naiveUi/index.d.ts +13 -6
- package/dist/naiveUi/index.mjs +910 -416
- package/dist/origin/LoadedScroll.d.ts +180 -0
- package/dist/types/form.d.ts +30 -0
- package/dist/types/index.d.ts +30 -1
- package/dist/types/slots.d.ts +40 -0
- package/dist/utils/tools.d.ts +10 -2
- package/dist/vite-env.d.ts +6 -0
- package/package.json +2 -1
- package/dist/index-B7xg-BCF.js +0 -42
- package/dist/index-DyThWcVg.cjs +0 -1
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
import { ExtractPropTypes, PropType, SlotsType, VNode } from 'vue';
|
|
2
|
+
declare const _default: import('vue').DefineComponent<ExtractPropTypes<{
|
|
3
|
+
loading: {
|
|
4
|
+
type: BooleanConstructor;
|
|
5
|
+
default: boolean;
|
|
6
|
+
};
|
|
7
|
+
isError: {
|
|
8
|
+
type: BooleanConstructor;
|
|
9
|
+
default: boolean;
|
|
10
|
+
};
|
|
11
|
+
loadData: {
|
|
12
|
+
type: PropType<() => Promise<void>>;
|
|
13
|
+
required: boolean;
|
|
14
|
+
};
|
|
15
|
+
scrollNode: {
|
|
16
|
+
type: StringConstructor;
|
|
17
|
+
required: boolean;
|
|
18
|
+
};
|
|
19
|
+
loadingTxt: {
|
|
20
|
+
type: StringConstructor;
|
|
21
|
+
default: string;
|
|
22
|
+
};
|
|
23
|
+
finishedTxt: {
|
|
24
|
+
type: StringConstructor;
|
|
25
|
+
default: string;
|
|
26
|
+
};
|
|
27
|
+
errorTxt: {
|
|
28
|
+
type: StringConstructor;
|
|
29
|
+
default: string;
|
|
30
|
+
};
|
|
31
|
+
finished: {
|
|
32
|
+
type: BooleanConstructor;
|
|
33
|
+
default: boolean;
|
|
34
|
+
};
|
|
35
|
+
offset: {
|
|
36
|
+
type: NumberConstructor;
|
|
37
|
+
default: number;
|
|
38
|
+
};
|
|
39
|
+
memoryScroll: {
|
|
40
|
+
type: BooleanConstructor;
|
|
41
|
+
default: boolean;
|
|
42
|
+
};
|
|
43
|
+
pullRefresh: {
|
|
44
|
+
type: BooleanConstructor;
|
|
45
|
+
default: boolean;
|
|
46
|
+
};
|
|
47
|
+
refreshData: {
|
|
48
|
+
type: PropType<() => Promise<void>>;
|
|
49
|
+
};
|
|
50
|
+
pullDistance: {
|
|
51
|
+
type: NumberConstructor;
|
|
52
|
+
default: number;
|
|
53
|
+
};
|
|
54
|
+
pullTxt: {
|
|
55
|
+
type: StringConstructor;
|
|
56
|
+
default: string;
|
|
57
|
+
};
|
|
58
|
+
releaseTxt: {
|
|
59
|
+
type: StringConstructor;
|
|
60
|
+
default: string;
|
|
61
|
+
};
|
|
62
|
+
refreshingTxt: {
|
|
63
|
+
type: StringConstructor;
|
|
64
|
+
default: string;
|
|
65
|
+
};
|
|
66
|
+
supportMode: {
|
|
67
|
+
type: PropType<"pc" | "mobile" | "all">;
|
|
68
|
+
default: string;
|
|
69
|
+
};
|
|
70
|
+
refreshLoading: {
|
|
71
|
+
type: BooleanConstructor;
|
|
72
|
+
default: boolean;
|
|
73
|
+
};
|
|
74
|
+
}>, () => import("vue/jsx-runtime").JSX.Element, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
75
|
+
'update:loading': (v: boolean) => boolean;
|
|
76
|
+
'update:isError': (v: boolean) => boolean;
|
|
77
|
+
}, string, import('vue').PublicProps, Readonly<ExtractPropTypes<{
|
|
78
|
+
loading: {
|
|
79
|
+
type: BooleanConstructor;
|
|
80
|
+
default: boolean;
|
|
81
|
+
};
|
|
82
|
+
isError: {
|
|
83
|
+
type: BooleanConstructor;
|
|
84
|
+
default: boolean;
|
|
85
|
+
};
|
|
86
|
+
loadData: {
|
|
87
|
+
type: PropType<() => Promise<void>>;
|
|
88
|
+
required: boolean;
|
|
89
|
+
};
|
|
90
|
+
scrollNode: {
|
|
91
|
+
type: StringConstructor;
|
|
92
|
+
required: boolean;
|
|
93
|
+
};
|
|
94
|
+
loadingTxt: {
|
|
95
|
+
type: StringConstructor;
|
|
96
|
+
default: string;
|
|
97
|
+
};
|
|
98
|
+
finishedTxt: {
|
|
99
|
+
type: StringConstructor;
|
|
100
|
+
default: string;
|
|
101
|
+
};
|
|
102
|
+
errorTxt: {
|
|
103
|
+
type: StringConstructor;
|
|
104
|
+
default: string;
|
|
105
|
+
};
|
|
106
|
+
finished: {
|
|
107
|
+
type: BooleanConstructor;
|
|
108
|
+
default: boolean;
|
|
109
|
+
};
|
|
110
|
+
offset: {
|
|
111
|
+
type: NumberConstructor;
|
|
112
|
+
default: number;
|
|
113
|
+
};
|
|
114
|
+
memoryScroll: {
|
|
115
|
+
type: BooleanConstructor;
|
|
116
|
+
default: boolean;
|
|
117
|
+
};
|
|
118
|
+
pullRefresh: {
|
|
119
|
+
type: BooleanConstructor;
|
|
120
|
+
default: boolean;
|
|
121
|
+
};
|
|
122
|
+
refreshData: {
|
|
123
|
+
type: PropType<() => Promise<void>>;
|
|
124
|
+
};
|
|
125
|
+
pullDistance: {
|
|
126
|
+
type: NumberConstructor;
|
|
127
|
+
default: number;
|
|
128
|
+
};
|
|
129
|
+
pullTxt: {
|
|
130
|
+
type: StringConstructor;
|
|
131
|
+
default: string;
|
|
132
|
+
};
|
|
133
|
+
releaseTxt: {
|
|
134
|
+
type: StringConstructor;
|
|
135
|
+
default: string;
|
|
136
|
+
};
|
|
137
|
+
refreshingTxt: {
|
|
138
|
+
type: StringConstructor;
|
|
139
|
+
default: string;
|
|
140
|
+
};
|
|
141
|
+
supportMode: {
|
|
142
|
+
type: PropType<"pc" | "mobile" | "all">;
|
|
143
|
+
default: string;
|
|
144
|
+
};
|
|
145
|
+
refreshLoading: {
|
|
146
|
+
type: BooleanConstructor;
|
|
147
|
+
default: boolean;
|
|
148
|
+
};
|
|
149
|
+
}>> & Readonly<{
|
|
150
|
+
"onUpdate:loading"?: ((v: boolean) => any) | undefined;
|
|
151
|
+
"onUpdate:isError"?: ((v: boolean) => any) | undefined;
|
|
152
|
+
}>, {
|
|
153
|
+
loading: boolean;
|
|
154
|
+
offset: number;
|
|
155
|
+
isError: boolean;
|
|
156
|
+
loadingTxt: string;
|
|
157
|
+
finishedTxt: string;
|
|
158
|
+
errorTxt: string;
|
|
159
|
+
finished: boolean;
|
|
160
|
+
memoryScroll: boolean;
|
|
161
|
+
pullRefresh: boolean;
|
|
162
|
+
pullDistance: number;
|
|
163
|
+
pullTxt: string;
|
|
164
|
+
releaseTxt: string;
|
|
165
|
+
refreshingTxt: string;
|
|
166
|
+
supportMode: "mobile" | "pc" | "all";
|
|
167
|
+
refreshLoading: boolean;
|
|
168
|
+
}, SlotsType<{
|
|
169
|
+
default: (obj: {
|
|
170
|
+
hintHeight: number;
|
|
171
|
+
}) => VNode;
|
|
172
|
+
bottomHint: () => VNode;
|
|
173
|
+
errorTxt: () => VNode;
|
|
174
|
+
loadingTxt: () => VNode;
|
|
175
|
+
finishedTxt: () => VNode;
|
|
176
|
+
pullTxt: () => VNode;
|
|
177
|
+
releaseTxt: () => VNode;
|
|
178
|
+
refreshingTxt: () => VNode;
|
|
179
|
+
}>, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
|
|
180
|
+
export default _default;
|
package/dist/types/form.d.ts
CHANGED
|
@@ -33,3 +33,33 @@ export interface DyFormItem<K = any, RuleT = any> extends BaseDyFormItem<K> {
|
|
|
33
33
|
filterable?: boolean;
|
|
34
34
|
multiple?: boolean;
|
|
35
35
|
}
|
|
36
|
+
export type PageModal = {
|
|
37
|
+
pageSize: number;
|
|
38
|
+
pageNo: number;
|
|
39
|
+
total: number;
|
|
40
|
+
};
|
|
41
|
+
export type ZealPagination = {
|
|
42
|
+
showSizePicker: boolean;
|
|
43
|
+
pageCount?: number;
|
|
44
|
+
pageSizes: number[];
|
|
45
|
+
pageSlot?: number;
|
|
46
|
+
onChange: () => void;
|
|
47
|
+
onPageSizeChange: () => void;
|
|
48
|
+
setTotalSize: (totalSize: number) => void;
|
|
49
|
+
layout?: string;
|
|
50
|
+
} & PageModal;
|
|
51
|
+
export type ZealColumn<T extends Record<string, any>> = {
|
|
52
|
+
label?: string;
|
|
53
|
+
prop?: keyof T;
|
|
54
|
+
key?: string;
|
|
55
|
+
width?: string | number;
|
|
56
|
+
type?: 'default' | 'selection' | 'index' | 'expand';
|
|
57
|
+
minWidth?: string | number;
|
|
58
|
+
align?: "left" | "center" | "right";
|
|
59
|
+
fixed?: boolean | "left" | "right";
|
|
60
|
+
sortable?: boolean | "custom";
|
|
61
|
+
showOverflowTooltip?: boolean;
|
|
62
|
+
resizable?: boolean;
|
|
63
|
+
render2?: (row: T, $index: number) => VNode;
|
|
64
|
+
slot?: string;
|
|
65
|
+
};
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { DyFormItem } from './form.ts';
|
|
2
|
-
import { VNode } from 'vue';
|
|
2
|
+
import { ComputedRef, Ref, VNode } from 'vue';
|
|
3
3
|
export type DyCFormItem = {
|
|
4
4
|
rId: string;
|
|
5
5
|
key: string;
|
|
@@ -75,6 +75,14 @@ export type ExposeType = {
|
|
|
75
75
|
onSet?: (obj?: object) => void;
|
|
76
76
|
getResult?: (t?: 'res' | 'ori') => DyCFormItem[] | object;
|
|
77
77
|
};
|
|
78
|
+
export type ExposeZealCardType = {
|
|
79
|
+
tableHeight: Ref<number>;
|
|
80
|
+
isMobile: ComputedRef<boolean>;
|
|
81
|
+
};
|
|
82
|
+
export type ZealColumnType = {
|
|
83
|
+
tableHeight: Ref<number>;
|
|
84
|
+
isMobile: Ref<boolean>;
|
|
85
|
+
};
|
|
78
86
|
export type PresetType = 'fullRow' | 'grid';
|
|
79
87
|
export type RenderType = "renderInput" | "renderSelect" | "renderPopSelect" | "renderTreeSelect" | "renderRadioGroup" | "renderRadioButtonGroup" | "renderCheckboxGroup" | "renderSwitch" | "renderDatePicker" | "renderTimePicker" | "renderCheckbox" | "renderDynamicTags" | "renderSlider" | "renderInputNumber";
|
|
80
88
|
export type ExposeDyFType = {
|
|
@@ -107,3 +115,24 @@ export type Renderers<Row extends Record<string, any>, RuleT = any> = {
|
|
|
107
115
|
renderSlider: (value: any, props: any, it: any) => any;
|
|
108
116
|
renderInputNumber: (value: any, props: any, it: any) => any;
|
|
109
117
|
};
|
|
118
|
+
export type ExposePopupMType = {
|
|
119
|
+
toggle?: (f?: boolean) => void;
|
|
120
|
+
};
|
|
121
|
+
export type ExposeZealTSearchType = {
|
|
122
|
+
onReset?: () => void;
|
|
123
|
+
onSearch?: () => void;
|
|
124
|
+
toggleDrawer?: (f?: boolean) => void;
|
|
125
|
+
getParams?: <T extends object>() => T;
|
|
126
|
+
};
|
|
127
|
+
export type TableBtnType = {
|
|
128
|
+
key: string;
|
|
129
|
+
title?: string;
|
|
130
|
+
onSelect?: (k: string) => void;
|
|
131
|
+
disabled?: boolean;
|
|
132
|
+
};
|
|
133
|
+
export type PullEvent = TouchEvent | PointerEvent;
|
|
134
|
+
export type ListenerItem = {
|
|
135
|
+
name: keyof HTMLElementEventMap;
|
|
136
|
+
handler: EventListener;
|
|
137
|
+
options?: AddEventListenerOptions | boolean;
|
|
138
|
+
};
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { VNode } from 'vue';
|
|
2
|
+
type SizeObjType = {
|
|
3
|
+
isMobile: boolean;
|
|
4
|
+
width: number;
|
|
5
|
+
height: number;
|
|
6
|
+
};
|
|
7
|
+
export type ZealCardSlots = {
|
|
8
|
+
searchForm?: (size: SizeObjType) => VNode[];
|
|
9
|
+
searchBtn?: (size: SizeObjType) => VNode[];
|
|
10
|
+
controlBtn?: (size: SizeObjType) => VNode[];
|
|
11
|
+
toolBtn?: (size: SizeObjType) => VNode[];
|
|
12
|
+
default?: (obj: {
|
|
13
|
+
tableHeight: number;
|
|
14
|
+
} & SizeObjType) => VNode[];
|
|
15
|
+
rest?: (size: SizeObjType) => VNode[];
|
|
16
|
+
footer?: (size: SizeObjType) => VNode[];
|
|
17
|
+
header?: (size: SizeObjType) => VNode[];
|
|
18
|
+
};
|
|
19
|
+
export type ZealTableSearchSlots = {
|
|
20
|
+
title?: () => VNode[];
|
|
21
|
+
searchBtn?: (o: {
|
|
22
|
+
onSearch: () => void;
|
|
23
|
+
onReset: () => void;
|
|
24
|
+
}) => VNode[];
|
|
25
|
+
drawerBtn?: (o: {
|
|
26
|
+
openDrawer: () => void;
|
|
27
|
+
}) => VNode[];
|
|
28
|
+
};
|
|
29
|
+
export type EleZealTablePaginationSlots = {
|
|
30
|
+
default?: () => VNode[];
|
|
31
|
+
};
|
|
32
|
+
export type EleZealTableSlots = {
|
|
33
|
+
default?: () => VNode[];
|
|
34
|
+
append?: () => VNode[];
|
|
35
|
+
empty?: () => VNode[];
|
|
36
|
+
};
|
|
37
|
+
export type ZealTableBtnControlSlots = {
|
|
38
|
+
text: () => void;
|
|
39
|
+
};
|
|
40
|
+
export {};
|
package/dist/utils/tools.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ValueType, DyCFormItem, DyRandomFun } from '../types';
|
|
1
|
+
import { ValueType, DyCFormItem, DyRandomFun, PullEvent } from '../types';
|
|
2
2
|
import { Ref } from 'vue';
|
|
3
3
|
import { DyFormItem } from '../types/form';
|
|
4
4
|
declare const tranArr: (obj: ValueType, arrayFun: DyRandomFun, splitSymbol: string) => DyCFormItem[];
|
|
@@ -9,4 +9,12 @@ declare const getDepthColor: (depth: number) => string;
|
|
|
9
9
|
declare const saferRepairColor: (colors: string[], i: number) => string;
|
|
10
10
|
declare function ensureRef(v: any): Ref<any>;
|
|
11
11
|
declare function OmitValue<T extends DyFormItem, const K extends readonly (keyof T)[]>(f: T, extraKeys?: K): Omit<T, "value" | K[number]>;
|
|
12
|
-
|
|
12
|
+
declare function Debounce<T extends (...args: any[]) => void>(func: T, delay?: number): (...args: Parameters<T>) => void;
|
|
13
|
+
declare const getPadY: (el: HTMLElement | null) => number;
|
|
14
|
+
declare const getMarginY: (el: HTMLElement | null) => number;
|
|
15
|
+
declare const unwrapObj: <T extends Record<string, any>>(obj: T) => { [K in keyof T]: T[K] extends {
|
|
16
|
+
value: infer V;
|
|
17
|
+
} ? V : T[K]; };
|
|
18
|
+
declare function getClientY(e: PullEvent): number;
|
|
19
|
+
declare function getEventId(e: PullEvent): number | null;
|
|
20
|
+
export { tranArr, resetObj, parseValue, formatNumberInput, getDepthColor, saferRepairColor, ensureRef, OmitValue, Debounce, getPadY, getMarginY, unwrapObj, getClientY, getEventId };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dynamicformdjx",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"author": "xczcdjx",
|
|
6
6
|
"license": "MIT",
|
|
@@ -51,6 +51,7 @@
|
|
|
51
51
|
"scripts": {
|
|
52
52
|
"dev:v3": "vite --host",
|
|
53
53
|
"build:v3": "vue-tsc -b && vite build",
|
|
54
|
+
"build:skipTsc": "vite build",
|
|
54
55
|
"preview": "vite preview",
|
|
55
56
|
"pub": "npm version patch && npm publish"
|
|
56
57
|
},
|
package/dist/index-B7xg-BCF.js
DELETED
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import { ref as l, isRef as c } from "vue";
|
|
2
|
-
import './index.css';const g = (e, s, n) => Object.keys(e).map((t, r) => {
|
|
3
|
-
const i = e[t], a = Array.isArray(i), o = a ? i.every((u) => typeof u == "number") : typeof i == "number";
|
|
4
|
-
return {
|
|
5
|
-
rId: s(r),
|
|
6
|
-
key: t,
|
|
7
|
-
value: a ? i.join(n) : i,
|
|
8
|
-
isArray: a || void 0,
|
|
9
|
-
isNumber: o || void 0
|
|
10
|
-
};
|
|
11
|
-
}), y = (e, s) => e.reduce((n, t) => (t.key.trim() && (n[t.key] = f(t.value, t.isArray, t.isNumber, s)), n), {}), f = (e, s, n, t = ",") => {
|
|
12
|
-
let r;
|
|
13
|
-
return s ? n ? r = String(e).split(t).map(Number).filter((i) => !Number.isNaN(i)) : r = String(e).split(t) : n ? r = parseFloat(e) : r = e.toString(), r;
|
|
14
|
-
}, d = (e, s, n = ",") => {
|
|
15
|
-
const t = (r) => {
|
|
16
|
-
r = r.replace(/[^\d.-]/g, "");
|
|
17
|
-
let i = !1;
|
|
18
|
-
r.startsWith("-") && (i = !0), r = r.replace(/-/g, "");
|
|
19
|
-
const a = r.indexOf(".");
|
|
20
|
-
return a !== -1 && (r = r.slice(0, a + 1) + r.slice(a + 1).replace(/\./g, "")), (i ? "-" : "") + r;
|
|
21
|
-
};
|
|
22
|
-
return s ? e.split(n).map((r) => t(r)).join(n) : t(e);
|
|
23
|
-
}, p = (e) => `hsl(${e * 35 % 360}, 60%, 65%)`, h = (e, s) => e[s - 1] ?? p(s);
|
|
24
|
-
function b(e) {
|
|
25
|
-
return c(e) ? e : l(e ?? null);
|
|
26
|
-
}
|
|
27
|
-
function N(e, s) {
|
|
28
|
-
const n = { ...e };
|
|
29
|
-
return delete n.value, s?.forEach((t) => {
|
|
30
|
-
t !== "value" && delete n[t];
|
|
31
|
-
}), n;
|
|
32
|
-
}
|
|
33
|
-
export {
|
|
34
|
-
N as O,
|
|
35
|
-
b as e,
|
|
36
|
-
d as f,
|
|
37
|
-
p as g,
|
|
38
|
-
f as p,
|
|
39
|
-
y as r,
|
|
40
|
-
h as s,
|
|
41
|
-
g as t
|
|
42
|
-
};
|
package/dist/index-DyThWcVg.cjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";require('./index.css');const a=require("vue"),p=(e,s,n)=>Object.keys(e).map((t,r)=>{const i=e[t],o=Array.isArray(i),c=o?i.every(f=>typeof f=="number"):typeof i=="number";return{rId:s(r),key:t,value:o?i.join(n):i,isArray:o||void 0,isNumber:c||void 0}}),m=(e,s)=>e.reduce((n,t)=>(t.key.trim()&&(n[t.key]=u(t.value,t.isArray,t.isNumber,s)),n),{}),u=(e,s,n,t=",")=>{let r;return s?n?r=String(e).split(t).map(Number).filter(i=>!Number.isNaN(i)):r=String(e).split(t):n?r=parseFloat(e):r=e.toString(),r},g=(e,s,n=",")=>{const t=r=>{r=r.replace(/[^\d.-]/g,"");let i=!1;r.startsWith("-")&&(i=!0),r=r.replace(/-/g,"");const o=r.indexOf(".");return o!==-1&&(r=r.slice(0,o+1)+r.slice(o+1).replace(/\./g,"")),(i?"-":"")+r};return s?e.split(n).map(r=>t(r)).join(n):t(e)},l=e=>`hsl(${e*35%360}, 60%, 65%)`,y=(e,s)=>e[s-1]??l(s);function b(e){return a.isRef(e)?e:a.ref(e??null)}function d(e,s){const n={...e};return delete n.value,s?.forEach(t=>{t!=="value"&&delete n[t]}),n}exports.OmitValue=d;exports.ensureRef=b;exports.formatNumberInput=g;exports.getDepthColor=l;exports.parseValue=u;exports.resetObj=m;exports.saferRepairColor=y;exports.tranArr=p;
|