m8-codex-mcp 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 +113 -0
- package/data/m8mpdoc/UI/347/273/204/344/273/266/345/272/223/000-/347/273/204/344/273/266/345/272/223/344/270/213/350/275/275/344/275/277/347/224/250.md +188 -0
- package/data/m8mpdoc/UI/347/273/204/344/273/266/345/272/223/001-actionsheet/345/212/250/344/275/234/351/235/242/346/235/277.md +460 -0
- package/data/m8mpdoc/UI/347/273/204/344/273/266/345/272/223/004-amap/345/234/260/345/233/276.md +285 -0
- package/data/m8mpdoc/UI/347/273/204/344/273/266/345/272/223/005-button/346/214/211/351/222/256.md +211 -0
- package/data/m8mpdoc/UI/347/273/204/344/273/266/345/272/223/008-cell/345/215/225/345/205/203/346/240/274.md +213 -0
- package/data/m8mpdoc/UI/347/273/204/344/273/266/345/272/223/009-checkbox/345/244/215/351/200/211/346/241/206.md +501 -0
- package/data/m8mpdoc/UI/347/273/204/344/273/266/345/272/223/010-circle/347/216/257/345/275/242/350/277/233/345/272/246/346/235/241.md +168 -0
- package/data/m8mpdoc/UI/347/273/204/344/273/266/345/272/223/011-datepicker/346/227/245/346/234/237/351/200/211/346/213/251.md +617 -0
- package/data/m8mpdoc/UI/347/273/204/344/273/266/345/272/223/013-field/350/276/223/345/205/245/346/241/206.md +539 -0
- package/data/m8mpdoc/UI/347/273/204/344/273/266/345/272/223/015-form/350/241/250/345/215/225.md +999 -0
- package/data/m8mpdoc/UI/347/273/204/344/273/266/345/272/223/018-header/345/244/264/351/203/250/345/257/274/350/210/252/346/240/217.md +150 -0
- package/data/m8mpdoc/UI/347/273/204/344/273/266/345/272/223/019-icon/345/233/276/346/240/207.md +133 -0
- package/data/m8mpdoc/UI/347/273/204/344/273/266/345/272/223/020-loading/345/212/240/350/275/275.md +117 -0
- package/data/m8mpdoc/UI/347/273/204/344/273/266/345/272/223/021-noticebar/351/200/232/347/237/245/346/240/217.md +152 -0
- package/data/m8mpdoc/UI/347/273/204/344/273/266/345/272/223/022-numberkeyboard/346/225/260/345/255/227/351/224/256/347/233/230.md +427 -0
- package/data/m8mpdoc/UI/347/273/204/344/273/266/345/272/223/023-pagination/345/210/206/351/241/265.md +212 -0
- package/data/m8mpdoc/UI/347/273/204/344/273/266/345/272/223/024-panel/351/235/242/346/235/277.md +85 -0
- package/data/m8mpdoc/UI/347/273/204/344/273/266/345/272/223/025-passwordinput/345/257/206/347/240/201/350/276/223/345/205/245/346/241/206.md +175 -0
- package/data/m8mpdoc/UI/347/273/204/344/273/266/345/272/223/026-picker/351/200/211/346/213/251/345/231/250.md +519 -0
- package/data/m8mpdoc/UI/347/273/204/344/273/266/345/272/223/027-popup/345/274/271/345/207/272/345/261/202.md +152 -0
- package/data/m8mpdoc/UI/347/273/204/344/273/266/345/272/223/028-progress/350/277/233/345/272/246/346/235/241.md +103 -0
- package/data/m8mpdoc/UI/347/273/204/344/273/266/345/272/223/029-radio/345/215/225/351/200/211/346/241/206.md +285 -0
- package/data/m8mpdoc/UI/347/273/204/344/273/266/345/272/223/030-rate/350/257/204/345/210/206.md +189 -0
- package/data/m8mpdoc/UI/347/273/204/344/273/266/345/272/223/031-search/346/220/234/347/264/242.md +217 -0
- package/data/m8mpdoc/UI/347/273/204/344/273/266/345/272/223/032-slider/346/273/221/345/235/227.md +166 -0
- package/data/m8mpdoc/UI/347/273/204/344/273/266/345/272/223/033-stepper/346/255/245/350/277/233/345/231/250.md +340 -0
- package/data/m8mpdoc/UI/347/273/204/344/273/266/345/272/223/035-swipecell/346/273/221/345/212/250/345/215/225/345/205/203/346/240/274.md +265 -0
- package/data/m8mpdoc/UI/347/273/204/344/273/266/345/272/223/036-switch/345/274/200/345/205/263.md +196 -0
- package/data/m8mpdoc/UI/347/273/204/344/273/266/345/272/223/037-switchcell/345/274/200/345/205/263/345/215/225/345/205/203/346/240/274.md +115 -0
- package/data/m8mpdoc/UI/347/273/204/344/273/266/345/272/223/038-tag/346/240/207/350/256/260.md +232 -0
- package/data/m8mpdoc/UI/347/273/204/344/273/266/345/272/223/039-treeselect/345/210/206/347/261/273/351/200/211/346/213/251.md +631 -0
- package/data/m8mpdoc/UI/347/273/204/344/273/266/345/272/223/040-uploader/346/226/207/344/273/266/344/270/212/344/274/240.md +531 -0
- package/data/m8mpdoc/UI/347/273/204/344/273/266/345/272/223/041-verifycode/351/252/214/350/257/201/347/240/201.md +111 -0
- package/data/m8mpdoc/UI/347/273/204/344/273/266/345/272/223/042-minirefresh/344/270/213/346/213/211/345/210/267/346/226/260.md +337 -0
- package/data/m8mpdoc/UI/347/273/204/344/273/266/345/272/223/043-layout/345/270/203/345/261/200.md +150 -0
- package/data/m8mpdoc/UI/347/273/204/344/273/266/345/272/223/044-image/345/233/276/347/211/207.md +144 -0
- package/data/m8mpdoc/UI/347/273/204/344/273/266/345/272/223/045-toast/350/275/273/346/217/220/347/244/272.md +429 -0
- package/data/m8mpdoc/UI/347/273/204/344/273/266/345/272/223/046-calendar/346/227/245/345/216/206.md +467 -0
- package/data/m8mpdoc/UI/347/273/204/344/273/266/345/272/223/047-area/347/234/201/345/270/202/345/214/272/351/200/211/346/213/251.md +295 -0
- package/data/m8mpdoc/UI/347/273/204/344/273/266/345/272/223/048-tab/346/240/207/347/255/276/351/241/265.md +577 -0
- package/data/m8mpdoc/UI/347/273/204/344/273/266/345/272/223/049-dialog/345/274/271/345/207/272/346/241/206.md +491 -0
- package/data/m8mpdoc/UI/347/273/204/344/273/266/345/272/223/050-dropdownmenu/344/270/213/346/213/211/350/217/234/345/215/225.md +265 -0
- package/data/m8mpdoc/UI/347/273/204/344/273/266/345/272/223/051-notify/346/266/210/346/201/257/351/200/232/347/237/245.md +203 -0
- package/data/m8mpdoc/UI/347/273/204/344/273/266/345/272/223/052-overlay/351/201/256/347/275/251/345/261/202.md +139 -0
- package/data/m8mpdoc/UI/347/273/204/344/273/266/345/272/223/053-collapse/346/212/230/345/217/240/351/235/242/346/235/277.md +199 -0
- package/data/m8mpdoc/UI/347/273/204/344/273/266/345/272/223/054-grid/345/256/253/346/240/274.md +183 -0
- package/data/m8mpdoc/UI/347/273/204/344/273/266/345/272/223/055-countdown/345/200/222/350/256/241/346/227/266.md +289 -0
- package/data/m8mpdoc/UI/347/273/204/344/273/266/345/272/223/056-divider/345/210/206/345/211/262/347/272/277.md +97 -0
- package/data/m8mpdoc/UI/347/273/204/344/273/266/345/272/223/057-empty/347/251/272/347/212/266/346/200/201.md +146 -0
- package/data/m8mpdoc/UI/347/273/204/344/273/266/345/272/223/058-imagepreview/345/233/276/347/211/207/351/242/204/350/247/210.md +292 -0
- package/data/m8mpdoc/UI/347/273/204/344/273/266/345/272/223/059-lazyload/346/207/222/345/212/240/350/275/275.md +120 -0
- package/data/m8mpdoc/UI/347/273/204/344/273/266/345/272/223/060-skeleton/351/252/250/346/236/266/345/261/217.md +114 -0
- package/data/m8mpdoc/UI/347/273/204/344/273/266/345/272/223/061-steps/346/255/245/351/252/244/346/235/241.md +119 -0
- package/data/m8mpdoc/UI/347/273/204/344/273/266/345/272/223/062-sticky/347/262/230/346/200/247/345/270/203/345/261/200.md +208 -0
- package/data/m8mpdoc/UI/347/273/204/344/273/266/345/272/223/063-indexbar/347/264/242/345/274/225/346/240/217.md +161 -0
- package/data/m8mpdoc/UI/347/273/204/344/273/266/345/272/223/064-sidebar/344/276/247/350/276/271/345/257/274/350/210/252.md +248 -0
- package/data/m8mpdoc/UI/347/273/204/344/273/266/345/272/223/065-tabbar/346/240/207/347/255/276/346/240/217.md +314 -0
- package/data/m8mpdoc/UI/347/273/204/344/273/266/345/272/223/066-badge/345/276/275/346/240/207.md +162 -0
- package/data/m8mpdoc/UI/347/273/204/344/273/266/345/272/223/067-popover/346/260/224/346/263/241/345/274/271/345/207/272/346/241/206.md +325 -0
- package/data/m8mpdoc/UI/347/273/204/344/273/266/345/272/223/068-cascader/347/272/247/350/201/224/351/200/211/346/213/251.md +360 -0
- package/data/m8mpdoc/UI/347/273/204/344/273/266/345/272/223/069-selectperson/351/200/211/344/272/272/347/273/204/344/273/266.md +595 -0
- package/data/m8mpdoc/UI/347/273/204/344/273/266/345/272/223/070-swipe/350/275/256/346/222/255.md +262 -0
- package/data/m8mpdoc/UI/347/273/204/344/273/266/345/272/223/071-/345/233/275/351/231/205/345/214/226.md +51 -0
- package/data/m8mpdoc/UI/347/273/204/344/273/266/345/272/223/072-easycalendar/346/227/245/345/216/206.md +132 -0
- package/data/m8mpdoc/UI/347/273/204/344/273/266/345/272/223/073-qrcode/344/272/214/347/273/264/347/240/201.md +1538 -0
- package/data/m8mpdoc/UI/347/273/204/344/273/266/345/272/223/074-imagescale/345/233/276/347/211/207/350/243/201/345/211/252.md +261 -0
- package/data/m8mpdoc/UI/347/273/204/344/273/266/345/272/223/075-dragsort/346/213/226/346/213/275/346/216/222/345/272/217.md +161 -0
- package/data/m8mpdoc/UI/347/273/204/344/273/266/345/272/223/076-chart/345/233/276/350/241/250.md +381 -0
- package/data/m8mpdoc/UI/347/273/204/344/273/266/345/272/223/077-rtc/351/237/263/350/247/206/351/242/221.md +531 -0
- package/data/m8mpdoc/UI/347/273/204/344/273/266/345/272/223/078-table/350/241/250/346/240/274.md +849 -0
- package/data/m8mpdoc//345/205/270/345/236/213/346/241/210/344/276/213/003-/345/210/227/350/241/250/350/257/246/346/203/205.md +247 -0
- package/data/m8mpdoc//345/205/270/345/236/213/346/241/210/344/276/213/003-/345/210/227/350/241/250/350/257/246/346/203/205vue3.md +276 -0
- package/data/m8mpdoc//345/205/270/345/236/213/346/241/210/344/276/213/003-/350/241/250/345/215/225/346/217/220/344/272/244.md +130 -0
- package/data/m8mpdoc//345/205/270/345/236/213/346/241/210/344/276/213/003-/350/241/250/345/215/225/346/217/220/344/272/244vue3.md +115 -0
- package/data/m8mpdoc//346/240/270/345/277/203/351/200/232/347/224/250Util/345/267/245/345/205/267/345/272/223/Ajax/344/270/216/346/226/207/344/273/266/344/270/212/344/274/240.md +456 -0
- package/data/m8mpdoc//346/240/270/345/277/203/351/200/232/347/224/250Util/345/267/245/345/205/267/345/272/223//345/267/245/345/205/267/345/207/275/346/225/260/345/272/223.md +398 -0
- package/data/standards/01-project/naming.md +158 -0
- package/data/standards/01-project/structure.md +106 -0
- package/data/standards/01-project/version-detection.md +195 -0
- package/data/standards/02-vue/basic.md +242 -0
- package/data/standards/02-vue/component.md +299 -0
- package/data/standards/02-vue/examples.md +240 -0
- package/data/standards/02-vue/performance.md +74 -0
- package/data/standards/02-vue/state-management.md +293 -0
- package/data/standards/03-css/index.md +165 -0
- package/data/standards/04-api/ajax.md +178 -0
- package/data/standards/04-api/ejs-api.md +192 -0
- package/data/standards/04-api/util.md +166 -0
- package/data/standards/05-typescript/index.md +166 -0
- package/data/standards/06-mock/index.md +154 -0
- package/data/standards/07-router/index.md +141 -0
- package/data/standards/README.md +82 -0
- package/data/standards/_index.md +215 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/knowledge/index.d.ts +36 -0
- package/dist/knowledge/index.d.ts.map +1 -0
- package/dist/knowledge/index.js +1 -0
- package/dist/templates/vue2.d.ts +41 -0
- package/dist/templates/vue2.d.ts.map +1 -0
- package/dist/templates/vue2.js +1 -0
- package/dist/templates/vue3.d.ts +41 -0
- package/dist/templates/vue3.d.ts.map +1 -0
- package/dist/templates/vue3.js +1 -0
- package/dist/tools/generate_module_structure.d.ts +21 -0
- package/dist/tools/generate_module_structure.d.ts.map +1 -0
- package/dist/tools/generate_module_structure.js +1 -0
- package/package.json +47 -0
|
@@ -0,0 +1,398 @@
|
|
|
1
|
+
# 核心通用Util
|
|
2
|
+
|
|
3
|
+
框架内置`Util`工具库通过框架自动全局引入,代码中可以直接使用,无需额外引入。
|
|
4
|
+
|
|
5
|
+
## 使用场景
|
|
6
|
+
|
|
7
|
+
框架内置核心`Util`
|
|
8
|
+
|
|
9
|
+
- `Util`编写时,内部使用
|
|
10
|
+
|
|
11
|
+
- `Widget`编写时,内部使用
|
|
12
|
+
|
|
13
|
+
- 项目中任何需要用到核心通用函数的地方
|
|
14
|
+
|
|
15
|
+
## 方法说明
|
|
16
|
+
|
|
17
|
+
注:此工具集下的方法通过`Util.method()`调用,如`Util.uuid()`
|
|
18
|
+
|
|
19
|
+
### os
|
|
20
|
+
|
|
21
|
+
判断当前的运行环境
|
|
22
|
+
|
|
23
|
+
__系统环境判断__
|
|
24
|
+
|
|
25
|
+
```js
|
|
26
|
+
// Android环境与iOS只会有一个为true
|
|
27
|
+
Util.os.android;
|
|
28
|
+
Util.os.ios;
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
__容器环境判断__
|
|
32
|
+
|
|
33
|
+
```js
|
|
34
|
+
// ejs,dd,h5容器只会有一个为true
|
|
35
|
+
// 分别代表`EJS`容器,`钉钉`容器,`其它`(包括普通浏览器)容器
|
|
36
|
+
Util.os.ejs;
|
|
37
|
+
Util.os.dd;
|
|
38
|
+
Util.os.h5;
|
|
39
|
+
```
|
|
40
|
+
__其他容器判断__
|
|
41
|
+
|
|
42
|
+
```js
|
|
43
|
+
// M7_v7.4.2版本支持
|
|
44
|
+
// 分别代表`微信`容器,`企业微信`容器,`政务微信`容器,同时也是h5环境
|
|
45
|
+
Util.os.wechat;
|
|
46
|
+
Util.os.wxWork;
|
|
47
|
+
Util.os.wxWorkLoacl;
|
|
48
|
+
```
|
|
49
|
+
__更多功能__
|
|
50
|
+
|
|
51
|
+
```js
|
|
52
|
+
// Android环境下
|
|
53
|
+
// 获取Android的版本号以及是否是非Chrome的Android环境
|
|
54
|
+
Util.os.version;
|
|
55
|
+
Util.os.isBadAndroid;
|
|
56
|
+
|
|
57
|
+
// iOS环境下
|
|
58
|
+
// 获取iOS的版本号以及是否是苹果手机,是否是pad
|
|
59
|
+
Util.os.version;
|
|
60
|
+
Util.os.iphone;
|
|
61
|
+
Util.os.ipad;
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
### uuid(options)
|
|
66
|
+
|
|
67
|
+
生成一个随机uuid
|
|
68
|
+
|
|
69
|
+
**平台差异**
|
|
70
|
+
|
|
71
|
+
| H5 | 新点小程序 | 微信小程序 | 支付宝小程序 |
|
|
72
|
+
| :---: | :--------: | :--------: | :----------: |
|
|
73
|
+
| √ | √ | √ | √ |
|
|
74
|
+
|
|
75
|
+
__参数说明__
|
|
76
|
+
|
|
77
|
+
| 参数 | 参数类型 | 说明 |
|
|
78
|
+
| :------------- |:-------------:|:-------------|
|
|
79
|
+
| len | Number | 长度,默认为32位,最大不能超过36,最小不能小于4 |
|
|
80
|
+
| radix | Number | 随机的基数,如果小于等于10代表只用纯数字,最大为62,最小为2,默认为62 |
|
|
81
|
+
| type | String | 类别,默认为`default`代表 a-c-c-d-e的连线模式,如果为` noline`代表不会有连线 |
|
|
82
|
+
|
|
83
|
+
**示例**
|
|
84
|
+
|
|
85
|
+
```js
|
|
86
|
+
// 生成一个8-4-4-4-12格式的 32位uuid,例如 yczYoFSp-ooru-ANjl-Hrgg-XgXmMxSN
|
|
87
|
+
var uuid = Util.uuid();
|
|
88
|
+
|
|
89
|
+
// 生成一个只有数字的36位 uuid,例如 52616056-5161-7170-8460-802618729824
|
|
90
|
+
var uuid = Util.uuid({
|
|
91
|
+
len: 36,
|
|
92
|
+
radix: 10
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
// 生成一个没有下划线的10位 uuid,例如 xOvHy03wfA
|
|
96
|
+
var uuid = Util.uuid({
|
|
97
|
+
len: 10,
|
|
98
|
+
type: 'noline'
|
|
99
|
+
});
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
### getExtraDataByKey(key)
|
|
104
|
+
|
|
105
|
+
通过传入key值,得到页面key的初始化传值,实际情况是获取 `window.location.href` 中的参数的值
|
|
106
|
+
|
|
107
|
+
__注意:__
|
|
108
|
+
|
|
109
|
+
微信、支付宝小程序不支持获取`window.location.href`参数。
|
|
110
|
+
|
|
111
|
+
在跨端框架中,页面传递参数可以统一从页面的`onLoad函数`中获取上一个页面传递的参数。
|
|
112
|
+
|
|
113
|
+
**平台差异**
|
|
114
|
+
|
|
115
|
+
| H5 | 新点小程序 | 微信小程序 | 支付宝小程序 |
|
|
116
|
+
| :---: | :--------: | :--------: | :----------: |
|
|
117
|
+
| √ | √ | x | x |
|
|
118
|
+
|
|
119
|
+
__参数说明__
|
|
120
|
+
|
|
121
|
+
| 参数 | 参数类型 | 说明 |
|
|
122
|
+
| :------------- |:-------------:|:-------------|
|
|
123
|
+
| key | String | 对应的key值 |
|
|
124
|
+
|
|
125
|
+
__返回说明__
|
|
126
|
+
|
|
127
|
+
| 参数 | 参数类型 | 说明 |
|
|
128
|
+
| :------------- |:-------------:|:-------------|
|
|
129
|
+
| value | String | 返回href中对应的key的value |
|
|
130
|
+
|
|
131
|
+
**示例**
|
|
132
|
+
|
|
133
|
+
```js
|
|
134
|
+
//查询参数,key对应的value
|
|
135
|
+
var value = Util.getExtraDataByKey(key);
|
|
136
|
+
|
|
137
|
+
// 建议在跨端框架中统一使用页面的onLoad函数获取上一个页面传递的参数
|
|
138
|
+
export default {
|
|
139
|
+
data: function() {
|
|
140
|
+
return {
|
|
141
|
+
key: ''
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
onLoad: function (option) { //option为object类型,会序列化上个页面传递的参数
|
|
145
|
+
this.key = option.key;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
### getFullUrlByParams(url, data)
|
|
152
|
+
|
|
153
|
+
将json参数拼接到url中
|
|
154
|
+
|
|
155
|
+
**平台差异**
|
|
156
|
+
|
|
157
|
+
| H5 | 新点小程序 | 微信小程序 | 支付宝小程序 |
|
|
158
|
+
| :---: | :--------: | :--------: | :----------: |
|
|
159
|
+
| √ | √ | √ | √ |
|
|
160
|
+
|
|
161
|
+
__参数说明__
|
|
162
|
+
|
|
163
|
+
| 参数 | 参数类型 | 说明 |
|
|
164
|
+
| :------------- |:-------------:|:-------------|
|
|
165
|
+
| url | String | `必填`,需要拼接的url |
|
|
166
|
+
| data | JSON | `必填`,对应需要拼接的JSON参数 |
|
|
167
|
+
| isType | Boolean | `选填`,是否相对路径。 默认`false`,微信,支付宝小程序不支持istype=ture相对路径选项 |
|
|
168
|
+
|
|
169
|
+
**示例**
|
|
170
|
+
|
|
171
|
+
```js
|
|
172
|
+
var url = 'http://app.epoint.com.cn/m8fedoc';
|
|
173
|
+
var data = {
|
|
174
|
+
'key1': 'value1'
|
|
175
|
+
};
|
|
176
|
+
|
|
177
|
+
// 例如返回: http://app.epoint.com.cn/m8fedoc?key1=value1
|
|
178
|
+
var finalUrl = Util.getFullUrlByParams(url, data);
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
### noop
|
|
182
|
+
|
|
183
|
+
空函数
|
|
184
|
+
|
|
185
|
+
**平台差异**
|
|
186
|
+
|
|
187
|
+
| H5 | 新点小程序 | 微信小程序 | 支付宝小程序 |
|
|
188
|
+
| :---: | :--------: | :--------: | :----------: |
|
|
189
|
+
| √ | √ | √ | √ |
|
|
190
|
+
|
|
191
|
+
**示例**
|
|
192
|
+
|
|
193
|
+
```js
|
|
194
|
+
// 这个空函数: function() {};
|
|
195
|
+
var noop = Util.noop;
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
### extend(deep, target, source1, source...)
|
|
199
|
+
|
|
200
|
+
合并多个对象
|
|
201
|
+
|
|
202
|
+
**平台差异**
|
|
203
|
+
|
|
204
|
+
| H5 | 新点小程序 | 微信小程序 | 支付宝小程序 |
|
|
205
|
+
| :---: | :--------: | :--------: | :----------: |
|
|
206
|
+
| √ | √ | √ | √ |
|
|
207
|
+
|
|
208
|
+
__参数说明__
|
|
209
|
+
|
|
210
|
+
| 参数 | 参数类型 | 说明 |
|
|
211
|
+
| :------------- |:-------------:|:-------------|
|
|
212
|
+
| deep | Boolean | 为true时会进行递归合并,可以省略(代表默认`false`) |
|
|
213
|
+
| target | Object | `必填`,需要合并的目标对象,这个对象会随之修改,并且作为返回值 |
|
|
214
|
+
| object1 | Object | `必填`,需要合并的目标对象 |
|
|
215
|
+
| objectN | Object | 需要合并的目标对象 |
|
|
216
|
+
|
|
217
|
+
**示例**
|
|
218
|
+
|
|
219
|
+
```js
|
|
220
|
+
var target = {
|
|
221
|
+
company: "epoint",
|
|
222
|
+
product: {
|
|
223
|
+
ejs: "ejs混合开发方案"
|
|
224
|
+
}
|
|
225
|
+
};
|
|
226
|
+
|
|
227
|
+
var obj1 = {
|
|
228
|
+
city: "suzhou",
|
|
229
|
+
product: {
|
|
230
|
+
m7: "m7移动框架"
|
|
231
|
+
}
|
|
232
|
+
};
|
|
233
|
+
|
|
234
|
+
// 非递归合并
|
|
235
|
+
var newObj1 = Util.extend({}, target, object1);
|
|
236
|
+
|
|
237
|
+
// 输出:{"company": "epoint", "product": {"m7": "m7移动框架"}, "city": "suzhou"}
|
|
238
|
+
console.log(JSON.stringify(newObj1));
|
|
239
|
+
|
|
240
|
+
// 递归合并
|
|
241
|
+
var newObj2 = Util.extend(true, {}, target, obj1);
|
|
242
|
+
|
|
243
|
+
// 输出:{"company": "epoint", "product": {"ejs": "ejs混合开发方案", "m7": "m7移动框架"}, "city": "suzhou"}
|
|
244
|
+
console.log(JSON.stringify(newObj2));
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
### each(object, handler)
|
|
248
|
+
|
|
249
|
+
遍历对象或数组
|
|
250
|
+
|
|
251
|
+
**平台差异**
|
|
252
|
+
|
|
253
|
+
| H5 | 新点小程序 | 微信小程序 | 支付宝小程序 |
|
|
254
|
+
| :---: | :--------: | :--------: | :----------: |
|
|
255
|
+
| √ | √ | √ | √ |
|
|
256
|
+
|
|
257
|
+
__参数说明__
|
|
258
|
+
|
|
259
|
+
| 参数 | 参数类型 | 说明 |
|
|
260
|
+
| :------------- |:-------------:|:-------------|
|
|
261
|
+
| object | Object或Array | `必填`,需要遍历的对象或数组,若为对象,仅遍历对象根节点下的key |
|
|
262
|
+
| handler | Function(Integer或String, Anything element) | `必填`,每个元素执行的回调函数;其中,index表示当前元素的下标或key(下标从0开始),element表示当前匹配元素 |
|
|
263
|
+
|
|
264
|
+
**示例**
|
|
265
|
+
|
|
266
|
+
```js
|
|
267
|
+
var array = [1,2,3];
|
|
268
|
+
|
|
269
|
+
Util.each(array, function(index,item) {
|
|
270
|
+
console.log(item*item);
|
|
271
|
+
});
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
### getProjectBasePath(patten)
|
|
275
|
+
|
|
276
|
+
得到项目的根路径
|
|
277
|
+
|
|
278
|
+
**平台差异**
|
|
279
|
+
|
|
280
|
+
| H5 | 新点小程序 | 微信小程序 | 支付宝小程序 |
|
|
281
|
+
| :---: | :--------: | :--------: | :----------: |
|
|
282
|
+
| √ | √ | x | x |
|
|
283
|
+
|
|
284
|
+
__参数说明__
|
|
285
|
+
|
|
286
|
+
| 参数 | 参数类型 | 说明 |
|
|
287
|
+
| :------------- |:-------------:|:-------------|
|
|
288
|
+
| patten | String | 匹配模式,如果在其它文件夹下面,需要换为对应的目录 |
|
|
289
|
+
|
|
290
|
+
**示例**
|
|
291
|
+
|
|
292
|
+
```js
|
|
293
|
+
// 例如页面地址为http://127.0.0.1:5500/ejs.m8.mobileframe/dist/build/h5/index.html#/pages/utils/core
|
|
294
|
+
|
|
295
|
+
// 结果: http://127.0.0.1:5500/ejs.m8.mobileframe/
|
|
296
|
+
var basePath = Util.getProjectBasePath();
|
|
297
|
+
|
|
298
|
+
// 结果: http://127.0.0.1:5500/ejs.m8.mobileframe/dist/build/
|
|
299
|
+
var basePath2 = Util.getProjectBasePath('/h5/');
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
上述示例项目对应的目录结构为
|
|
303
|
+
|
|
304
|
+
```
|
|
305
|
+
ejs.m8.mobileframe
|
|
306
|
+
|- dist
|
|
307
|
+
| |- build
|
|
308
|
+
| | |- h5
|
|
309
|
+
| | | |- index.html // 页面index.html路径
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
|
|
313
|
+
|
|
314
|
+
### getPathSuffix(path)
|
|
315
|
+
|
|
316
|
+
得到文件的后缀
|
|
317
|
+
|
|
318
|
+
**平台差异**
|
|
319
|
+
|
|
320
|
+
| H5 | 新点小程序 | 微信小程序 | 支付宝小程序 |
|
|
321
|
+
| :---: | :--------: | :--------: | :----------: |
|
|
322
|
+
| √ | √ | √ | √ |
|
|
323
|
+
|
|
324
|
+
__参数说明__
|
|
325
|
+
|
|
326
|
+
| 参数 | 参数类型 | 说明 |
|
|
327
|
+
| :------------- |:-------------:|:-------------|
|
|
328
|
+
| path | String |`必填`, 对应文件路径 |
|
|
329
|
+
|
|
330
|
+
**示例**
|
|
331
|
+
|
|
332
|
+
```js
|
|
333
|
+
var path = 'pages/test.js';
|
|
334
|
+
|
|
335
|
+
// 返回: 'js'
|
|
336
|
+
var suffix = Util.getPathSuffix(path);
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
### dataProcess(response, options)
|
|
340
|
+
|
|
341
|
+
处理返回数据,返回按指令处理过后的最终数据
|
|
342
|
+
|
|
343
|
+
**平台差异**
|
|
344
|
+
|
|
345
|
+
| H5 | 新点小程序 | 微信小程序 | 支付宝小程序 |
|
|
346
|
+
| :---: | :--------: | :--------: | :----------: |
|
|
347
|
+
| √ | √ | √ | √ |
|
|
348
|
+
|
|
349
|
+
__参数说明__
|
|
350
|
+
|
|
351
|
+
| 参数 | 参数类型 | 说明 |
|
|
352
|
+
| :------------- |:-------------:|:-------------|
|
|
353
|
+
| response | JSON | `必填`,需要处理的数据 |
|
|
354
|
+
| options | Object | 配置信息 |
|
|
355
|
+
| options.dataPath | String或Array | 需要获取的路径指令 |
|
|
356
|
+
|
|
357
|
+
__返回说明__
|
|
358
|
+
|
|
359
|
+
返回一个`result`,以下是`result`中的对象
|
|
360
|
+
|
|
361
|
+
注意,如果`dataPath`没传,默认不会处理数据,即返回的是原始数据`response`
|
|
362
|
+
|
|
363
|
+
| 参数 | 参数类型 | 说明 |
|
|
364
|
+
| :------------- |:-------------:|:-------------|
|
|
365
|
+
| code | Number | 处理完的结果,为`1`代表处理成功,`0`代表失败,一般失败的原因是接口返回的`status`不正确或者格式不匹配 |
|
|
366
|
+
| message | String | 处理完后的提示,例如错误信息提示等 |
|
|
367
|
+
| data | JSON | 处理完后的最终数据,如果没有获取到对应节点下的数据,为`null` |
|
|
368
|
+
|
|
369
|
+
**示例**
|
|
370
|
+
|
|
371
|
+
```js
|
|
372
|
+
var response = {
|
|
373
|
+
"custom": {
|
|
374
|
+
"infolist": [{
|
|
375
|
+
"title": "测试的title",
|
|
376
|
+
"guid": "131830"
|
|
377
|
+
}]
|
|
378
|
+
},
|
|
379
|
+
"status": {
|
|
380
|
+
"code": 1,
|
|
381
|
+
"text": "成功",
|
|
382
|
+
"url": ""
|
|
383
|
+
}
|
|
384
|
+
};
|
|
385
|
+
|
|
386
|
+
// 直接处理数据
|
|
387
|
+
var result = Util.dataProcess(response, {
|
|
388
|
+
dataPath: 'custom.infolist'
|
|
389
|
+
});
|
|
390
|
+
|
|
391
|
+
// result.data才是最终数据
|
|
392
|
+
console.log(result.data);
|
|
393
|
+
|
|
394
|
+
// 或者也可以这样处理,这样会一直处理路径数组中的每一个,直到拿到数据为止或结束
|
|
395
|
+
var result = Util.dataProcess(response, {
|
|
396
|
+
dataPath: ['custom.infolist', 'custom.infoList']
|
|
397
|
+
});
|
|
398
|
+
```
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
# 命名规范
|
|
2
|
+
|
|
3
|
+
> 定义 M8 项目中各类资源的命名规则。
|
|
4
|
+
|
|
5
|
+
## 📝 文件命名
|
|
6
|
+
|
|
7
|
+
### Vue 文件
|
|
8
|
+
|
|
9
|
+
| 类型 | 规则 | 示例 |
|
|
10
|
+
| -------- | ------------------------ | ----------------------------------- |
|
|
11
|
+
| 页面组件 | 小写字母 + 数字 + 下划线 | `user_list.vue`, `order_detail.vue` |
|
|
12
|
+
| 通用组件 | PascalCase(大驼峰) | `UserCard.vue`, `SearchBar.vue` |
|
|
13
|
+
|
|
14
|
+
**禁止规则**:
|
|
15
|
+
|
|
16
|
+
- ❌ 禁止使用中文
|
|
17
|
+
- ❌ 禁止使用特殊字符
|
|
18
|
+
- ❌ 禁止使用大写字母(页面组件)
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
✅ 正确: user_profile.vue, order_list.vue
|
|
22
|
+
❌ 错误: UserProfile.vue, 用户列表.vue, order-list.vue
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
### 资源文件
|
|
26
|
+
|
|
27
|
+
| 类型 | 规则 | 示例 |
|
|
28
|
+
| ---- | ------------------- | -------------------------------- |
|
|
29
|
+
| 图片 | `img_` 前缀 + 描述 | `img_logo.png`, `img_banner.jpg` |
|
|
30
|
+
| 图标 | `icon_` 前缀 + 描述 | `icon_home.svg`, `icon_user.png` |
|
|
31
|
+
| 样式 | 与 Vue 文件同名 | `login.scss`, `user_list.scss` |
|
|
32
|
+
|
|
33
|
+
### 目录命名
|
|
34
|
+
|
|
35
|
+
| 类型 | 规则 | 示例 |
|
|
36
|
+
| -------- | ----------------- | ----------------------------- |
|
|
37
|
+
| 模块目录 | 小写字母 + 下划线 | `user_center`, `order_manage` |
|
|
38
|
+
| 组件目录 | `components` | 固定名称 |
|
|
39
|
+
| 样式目录 | `css` | 固定名称 |
|
|
40
|
+
| 图片目录 | `images` | 固定名称 |
|
|
41
|
+
|
|
42
|
+
## 🏷️ 代码命名
|
|
43
|
+
|
|
44
|
+
### JavaScript/TypeScript
|
|
45
|
+
|
|
46
|
+
| 类型 | 规则 | 示例 |
|
|
47
|
+
| ---- | --------------------- | --------------------------------- |
|
|
48
|
+
| 变量 | camelCase(小驼峰) | `userName`, `orderList` |
|
|
49
|
+
| 常量 | UPPER_SNAKE_CASE | `MAX_COUNT`, `API_BASE_URL` |
|
|
50
|
+
| 函数 | camelCase | `getUserInfo()`, `handleSubmit()` |
|
|
51
|
+
| 类 | PascalCase | `UserService`, `OrderManager` |
|
|
52
|
+
| 接口 | PascalCase + `I` 前缀 | `IUserInfo`, `IOrderData` |
|
|
53
|
+
| 类型 | PascalCase + `T` 前缀 | `TStatus`, `TCallback` |
|
|
54
|
+
|
|
55
|
+
**变量声明原则**:
|
|
56
|
+
|
|
57
|
+
```javascript
|
|
58
|
+
// ✅ 优先使用 const
|
|
59
|
+
const userName = "admin";
|
|
60
|
+
const userList = [];
|
|
61
|
+
|
|
62
|
+
// ⚠️ 仅在需要重新赋值时使用 let
|
|
63
|
+
let currentPage = 1;
|
|
64
|
+
currentPage = 2;
|
|
65
|
+
|
|
66
|
+
// ❌ 禁止使用 var
|
|
67
|
+
var oldStyle = "deprecated";
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### CSS 命名
|
|
71
|
+
|
|
72
|
+
采用 **BEM 命名规范**:
|
|
73
|
+
|
|
74
|
+
| 类型 | 格式 | 示例 |
|
|
75
|
+
| ------------------ | ------------------ | -------------------------------- |
|
|
76
|
+
| 块(Block) | `.block` | `.card`, `.header` |
|
|
77
|
+
| 元素(Element) | `.block__element` | `.card__title`, `.header__logo` |
|
|
78
|
+
| 修饰符(Modifier) | `.block--modifier` | `.card--active`, `.btn--primary` |
|
|
79
|
+
|
|
80
|
+
```scss
|
|
81
|
+
// ✅ 正确的 BEM 命名
|
|
82
|
+
.user-card {
|
|
83
|
+
&__avatar {
|
|
84
|
+
/* 元素 */
|
|
85
|
+
}
|
|
86
|
+
&__name {
|
|
87
|
+
/* 元素 */
|
|
88
|
+
}
|
|
89
|
+
&--vip {
|
|
90
|
+
/* 修饰符 */
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// ❌ 错误示例
|
|
95
|
+
.userCard {
|
|
96
|
+
/* 禁止驼峰 */
|
|
97
|
+
}
|
|
98
|
+
.UserCard {
|
|
99
|
+
/* 禁止大写 */
|
|
100
|
+
}
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
**class/id 命名规则**:
|
|
104
|
+
|
|
105
|
+
- ✅ 使用小写字母
|
|
106
|
+
- ✅ 使用中划线连接
|
|
107
|
+
- ❌ 禁止使用大写
|
|
108
|
+
- ❌ 禁止使用驼峰
|
|
109
|
+
- ❌ 避免过度简写
|
|
110
|
+
|
|
111
|
+
## 🛣️ 路由命名
|
|
112
|
+
|
|
113
|
+
```javascript
|
|
114
|
+
const routes = [
|
|
115
|
+
{
|
|
116
|
+
// 格式: pages/[module_name]/[page_name]
|
|
117
|
+
path: "pages/user_center/profile",
|
|
118
|
+
style: {
|
|
119
|
+
navigationBarTitleText: "个人中心",
|
|
120
|
+
},
|
|
121
|
+
},
|
|
122
|
+
];
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
## 📦 Store 命名
|
|
126
|
+
|
|
127
|
+
### Vue2 (Vuex)
|
|
128
|
+
|
|
129
|
+
```javascript
|
|
130
|
+
export default {
|
|
131
|
+
// 模块名与目录名一致
|
|
132
|
+
moduleName: "user_center",
|
|
133
|
+
namespaced: true,
|
|
134
|
+
state: {},
|
|
135
|
+
mutations: {},
|
|
136
|
+
actions: {},
|
|
137
|
+
};
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### Vue3 (Pinia)
|
|
141
|
+
|
|
142
|
+
```typescript
|
|
143
|
+
// 命名规则: use + 模块名 + Store
|
|
144
|
+
export const useUserCenterStore = defineStore("user_center", {
|
|
145
|
+
state: () => ({}),
|
|
146
|
+
getters: {},
|
|
147
|
+
actions: {},
|
|
148
|
+
});
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
## ✅ 命名检查清单
|
|
152
|
+
|
|
153
|
+
- [ ] 页面 Vue 文件使用小写 + 下划线
|
|
154
|
+
- [ ] 通用组件使用 PascalCase
|
|
155
|
+
- [ ] 变量/函数使用 camelCase
|
|
156
|
+
- [ ] 常量使用 UPPER_SNAKE_CASE
|
|
157
|
+
- [ ] CSS 类名使用 BEM 规范
|
|
158
|
+
- [ ] 图片资源使用 `img_` 前缀
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
# 项目结构规范
|
|
2
|
+
|
|
3
|
+
> 定义 M8 项目的标准目录结构与文件组织方式。
|
|
4
|
+
|
|
5
|
+
## 📁 标准目录结构
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
ejs.m8.project/
|
|
9
|
+
├── src/
|
|
10
|
+
│ ├── components/ # 通用组件目录
|
|
11
|
+
│ │ └── [ComponentName].vue # PascalCase 命名
|
|
12
|
+
│ │
|
|
13
|
+
│ ├── pages/ # 页面视图目录
|
|
14
|
+
│ │ └── [module_name]/ # 模块目录(小写+下划线)
|
|
15
|
+
│ │ ├── css/ # 样式文件目录
|
|
16
|
+
│ │ │ └── [page_name].scss
|
|
17
|
+
│ │ ├── images/ # 模块图片资源
|
|
18
|
+
│ │ ├── [page_name].vue # 页面组件
|
|
19
|
+
│ │ ├── router.js # 路由配置
|
|
20
|
+
│ │ ├── store.js # 状态管理(Vue2: Vuex)
|
|
21
|
+
│ │ ├── store.ts # 状态管理(Vue3: Pinia)
|
|
22
|
+
│ │ └── mock.js # Mock 数据定义
|
|
23
|
+
│ │
|
|
24
|
+
│ ├── shared/ # 配置文件目录
|
|
25
|
+
│ │ └── config.js # 全局配置
|
|
26
|
+
│ │
|
|
27
|
+
│ ├── common/ # 通用文件目录
|
|
28
|
+
│ │ └── css/
|
|
29
|
+
│ │ └── common.extend # 拓展样式
|
|
30
|
+
│ │
|
|
31
|
+
│ └── static/ # 静态资源目录
|
|
32
|
+
│ └── [module_name]/ # 按模块存放静态资源
|
|
33
|
+
│ └── img_[name].png # 图片以 img_ 为前缀
|
|
34
|
+
│
|
|
35
|
+
├── package.json
|
|
36
|
+
└── pages.json # 路由配置汇总(自动生成)
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## 📄 文件组织规则
|
|
40
|
+
|
|
41
|
+
### 1. 页面文件组织
|
|
42
|
+
|
|
43
|
+
每个业务模块应包含以下文件:
|
|
44
|
+
|
|
45
|
+
| 文件 | 必需 | 说明 |
|
|
46
|
+
| ------------------------ | ---- | ------------------------ |
|
|
47
|
+
| `[module_name].vue` | ✅ | 页面主组件 |
|
|
48
|
+
| `css/[module_name].scss` | ✅ | 页面样式(禁止内联样式) |
|
|
49
|
+
| `router.js` | ✅ | 路由配置 |
|
|
50
|
+
| `store.js/store.ts` | ❌ | 状态管理(按需) |
|
|
51
|
+
| `mock.js` | ❌ | Mock 数据(开发阶段) |
|
|
52
|
+
| `images/` | ❌ | 模块专用图片资源 |
|
|
53
|
+
|
|
54
|
+
### 2. 样式文件分离
|
|
55
|
+
|
|
56
|
+
**规则**:Vue 文件中禁止直接编写 CSS 代码
|
|
57
|
+
|
|
58
|
+
```
|
|
59
|
+
src/pages/login/
|
|
60
|
+
├── login.vue # 页面组件
|
|
61
|
+
└── css/
|
|
62
|
+
└── login.scss # 对应的样式文件
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
**Vue 文件中引用方式**:
|
|
66
|
+
|
|
67
|
+
```vue
|
|
68
|
+
<!-- style 标签与 script 标签同级 -->
|
|
69
|
+
<style lang="scss" scoped>
|
|
70
|
+
@import "./css/login.scss";
|
|
71
|
+
</style>
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### 3. 静态资源存放
|
|
75
|
+
|
|
76
|
+
```
|
|
77
|
+
static/
|
|
78
|
+
├── notice/ # 与路由模块同名
|
|
79
|
+
│ ├── img_banner.png # 以 img_ 为前缀
|
|
80
|
+
│ └── img_icon.png
|
|
81
|
+
└── login/
|
|
82
|
+
└── img_logo.png
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
**引用方式**:
|
|
86
|
+
|
|
87
|
+
```html
|
|
88
|
+
<image src="/static/notice/img_banner.png" />
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
## 🔒 强制规则
|
|
92
|
+
|
|
93
|
+
| 规则 | 说明 |
|
|
94
|
+
| ---------------- | -------------------- |
|
|
95
|
+
| 样式必须分离 | Vue 文件禁止内联 CSS |
|
|
96
|
+
| 使用 scoped 样式 | 避免全局样式污染 |
|
|
97
|
+
| 模块化存放 | 按模块组织文件 |
|
|
98
|
+
| 统一命名 | 同模块文件名保持一致 |
|
|
99
|
+
|
|
100
|
+
## ✅ 检查清单
|
|
101
|
+
|
|
102
|
+
- [ ] 页面组件放置在 `src/pages/[module_name]/` 下
|
|
103
|
+
- [ ] 样式文件放置在 `css/` 子目录
|
|
104
|
+
- [ ] 静态资源放置在 `static/[module_name]/` 下
|
|
105
|
+
- [ ] 图片命名以 `img_` 为前缀
|
|
106
|
+
- [ ] 路由配置在 `router.js` 中定义
|