ph-utils 0.8.0 → 0.8.2

Sign up to get free protection for your applications and to get access to all the features.
package/lib/array.d.ts ADDED
@@ -0,0 +1,14 @@
1
+ /**
2
+ * 数组排序
3
+ * @param arr 待排序数组
4
+ * @param order 排序信息, asc - 升序, desc - 倒序
5
+ * @param orderKey 如果是个对象数组,按哪个字段排序
6
+ * @returns
7
+ */
8
+ export declare function order<T>(arr: T[], order?: "asc" | "desc", orderKey?: string | null): T[];
9
+ /**
10
+ * 多个数组取交集, 通常用于字符串或者数字数组
11
+ * @param arrs 待取交集的多个数组
12
+ * @returns
13
+ */
14
+ export declare function intersection<T>(...arrs: T[][]): T[];
package/lib/array.js ADDED
@@ -0,0 +1,35 @@
1
+ /**
2
+ * 数组排序
3
+ * @param arr 待排序数组
4
+ * @param order 排序信息, asc - 升序, desc - 倒序
5
+ * @param orderKey 如果是个对象数组,按哪个字段排序
6
+ * @returns
7
+ */
8
+ export function order(arr, order = "asc", orderKey = null) {
9
+ const collator = new Intl.Collator();
10
+ return arr.sort((a, b) => {
11
+ let aValue = a, bValue = b;
12
+ if (typeof a === "object" && orderKey != null) {
13
+ // @ts-ignore
14
+ aValue = a[orderKey];
15
+ // @ts-ignore
16
+ bValue = b[orderKey];
17
+ }
18
+ let aGtb = -1;
19
+ if (typeof aValue === "string") {
20
+ aGtb = collator.compare(aValue, bValue);
21
+ }
22
+ else {
23
+ aGtb = aValue >= bValue ? 1 : -1;
24
+ }
25
+ return order === "asc" ? aGtb : -aGtb;
26
+ });
27
+ }
28
+ /**
29
+ * 多个数组取交集, 通常用于字符串或者数字数组
30
+ * @param arrs 待取交集的多个数组
31
+ * @returns
32
+ */
33
+ export function intersection(...arrs) {
34
+ return arrs.reduce((acc, cur) => acc.filter((x) => cur.includes(x)));
35
+ }
package/lib/date.d.ts CHANGED
@@ -37,7 +37,7 @@ export declare function endOf(date?: Date | string | number, unit?: string): Dat
37
37
  * @param pre 精度, s - 精确到秒, ms - 精确到毫秒, 默认: s
38
38
  * @returns
39
39
  */
40
- export declare function timeStamp(ctime?: Date | string | number, pre?: "s" | "ms"): number;
40
+ export declare function timestamp(ctime?: Date | string | number, pre?: "s" | "ms"): number;
41
41
  /**
42
42
  * 日期加上指定时间后的日期
43
43
  * @param date 指定的日期
@@ -57,5 +57,10 @@ export declare function add(date: Date | string | number | null, num: number, un
57
57
  * @param num 需要添加的数字, 如果这个参数传递一个小于0的数字,则就是日期减去相应的数字
58
58
  * @param unit 需要添加的单位,date - 加减天数
59
59
  * @param fmt 如果传递了格式化的单位,则返回格式化后的日期, 格式化字符串 yyyy - 年, mm - 月, dd - 日, HH - 小时, MM - 分钟, ss - 秒
60
+ *
61
+ * #### 1. 前一天的日期字符串形式
62
+ * ```javascript
63
+ * add(new Date(), -1, 'Date', 'yyyy-mm-dd')
64
+ * ```
60
65
  */
61
66
  export declare function add(date: Date | string | number | null, num: number, unit: string, fmt: string): string;
package/lib/date.js CHANGED
@@ -61,7 +61,7 @@ function getUnit(unit) {
61
61
  * @param month 月份, 如果不传, 则当前月的最后一天
62
62
  * @returns
63
63
  */
64
- function getLastDayOfYear(date, month) {
64
+ function getLastDayOfMonth(date, month) {
65
65
  // 获取下个月的第一天
66
66
  const lastDate = new Date(date.getFullYear(), (month || date.getMonth()) + 1, 1);
67
67
  // 将下个月的第一天的日期减去一天,得到当前月的最后一天
@@ -154,7 +154,7 @@ export function dateOf(date, unit, isEnd = false) {
154
154
  let value = setValues[index];
155
155
  if (value === -2) {
156
156
  // 设置为某个月的最后一天的日期
157
- value = getLastDayOfYear(clone);
157
+ value = getLastDayOfMonth(clone);
158
158
  }
159
159
  Date.prototype["set" + periods[index]].apply(clone, [
160
160
  setValues[index],
@@ -186,7 +186,7 @@ export function endOf(date, unit) {
186
186
  * @param pre 精度, s - 精确到秒, ms - 精确到毫秒, 默认: s
187
187
  * @returns
188
188
  */
189
- export function timeStamp(ctime, pre = "s") {
189
+ export function timestamp(ctime, pre = "s") {
190
190
  let tm = parse(ctime).getTime();
191
191
  return pre === "s" ? Math.floor(tm / 1000) : tm;
192
192
  }
package/lib/dom.d.ts CHANGED
@@ -98,4 +98,13 @@ export declare function queryHideNodeSize(hideNode: string | HTMLElement, parent
98
98
  * @param direction 检查的方向,默认为"horizontal"
99
99
  * @returns 如果元素在父元素的可视区域内,则返回true;否则返回false。
100
100
  */
101
- export declare function isVisible(el: HTMLElement, parent?: HTMLElement, direction?: string): boolean;
101
+ export declare function isVisible(el: HTMLElement, parent?: HTMLElement | null | undefined, direction?: string): boolean;
102
+ /**
103
+ * 判断当前设备是否为移动设备。
104
+ *
105
+ * 本函数通过检查用户代理字符串和屏幕尺寸来判断设备是否为移动设备。
106
+ * 这对于需要根据设备类型进行不同布局或功能调整的应用非常有用。
107
+ *
108
+ * @returns {boolean} 如果设备是移动设备,则返回true;否则返回false。
109
+ */
110
+ export declare function isMobile(): boolean;
package/lib/dom.js CHANGED
@@ -196,7 +196,10 @@ export function queryHideNodeSize(hideNode, parent = document.body) {
196
196
  * @param direction 检查的方向,默认为"horizontal"
197
197
  * @returns 如果元素在父元素的可视区域内,则返回true;否则返回false。
198
198
  */
199
- export function isVisible(el, parent = document.body, direction = "horizontal") {
199
+ export function isVisible(el, parent = null, direction = "horizontal") {
200
+ if (parent == null) {
201
+ parent = el.offsetParent;
202
+ }
200
203
  // 获取父元素的边界信息
201
204
  const containerRect = parent.getBoundingClientRect();
202
205
  // 获取元素的边界信息
@@ -213,3 +216,24 @@ export function isVisible(el, parent = document.body, direction = "horizontal")
213
216
  // 判断元素是否完全在容器的可视区域内
214
217
  return elStart >= containerStart && elEnd <= containerEnd;
215
218
  }
219
+ /**
220
+ * 判断当前设备是否为移动设备。
221
+ *
222
+ * 本函数通过检查用户代理字符串和屏幕尺寸来判断设备是否为移动设备。
223
+ * 这对于需要根据设备类型进行不同布局或功能调整的应用非常有用。
224
+ *
225
+ * @returns {boolean} 如果设备是移动设备,则返回true;否则返回false。
226
+ */
227
+ export function isMobile() {
228
+ // 通过正则表达式匹配用户代理字符串,判断是否为移动设备
229
+ // 检查是否为移动设备
230
+ const isMobile = /Mobi|Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
231
+ // 获取窗口的 innerWidth 和 innerHeight,用于判断屏幕尺寸
232
+ // 获取屏幕宽度和高度
233
+ const screenWidth = window.innerWidth;
234
+ const screenHeight = window.innerHeight;
235
+ // 判断屏幕宽度或高度是否小于等于800或600,用于进一步确认是否为移动设备
236
+ const isScreenMobile = screenWidth <= 800 || screenHeight <= 600;
237
+ // 如果是移动设备或屏幕尺寸符合移动设备特征,则返回true
238
+ return isMobile || isScreenMobile;
239
+ }
package/lib/validator.js CHANGED
@@ -139,7 +139,6 @@ class Validator {
139
139
  }
140
140
  }
141
141
  _validateRule(rules, value, data) {
142
- this.validateKey("", 1).catch((err) => { });
143
142
  let errMsg = "";
144
143
  for (let rule of rules) {
145
144
  // 如果数据为空,则判断是否是必填
package/package.json CHANGED
@@ -50,9 +50,17 @@
50
50
  "types": "./lib/color.d.ts",
51
51
  "import": "./lib/color.js"
52
52
  },
53
+ "./logger": {
54
+ "types": "./lib/logger.d.ts",
55
+ "import": "./lib/logger.js"
56
+ },
57
+ "./array": {
58
+ "types": "./lib/array.d.ts",
59
+ "import": "./lib/array.js"
60
+ },
53
61
  "./*": "./lib/*"
54
62
  },
55
- "version": "0.8.0",
63
+ "version": "0.8.2",
56
64
  "type": "module",
57
65
  "repository": {
58
66
  "type": "git",