@gct-paas/render 6.0.0-dev.6 → 6.0.0-dev.60

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.
@@ -13,13 +13,17 @@ var methods_exports = /* @__PURE__ */ __exportAll({
13
13
  ADD: () => ADD,
14
14
  AND: () => AND,
15
15
  AVERAGE: () => AVERAGE,
16
+ BANKROUND: () => BANKROUND,
16
17
  CONCAT: () => CONCAT,
17
18
  COUNT: () => COUNT,
18
19
  DATE2TIMESTAMP: () => DATE2TIMESTAMP,
19
20
  DATEFORMAT: () => DATEFORMAT,
20
21
  DAY: () => DAY,
21
22
  DIVISION: () => DIVISION,
23
+ DateAdd: () => DateAdd,
24
+ DateSubtract: () => DateSubtract,
22
25
  EQ: () => EQ,
26
+ EXP: () => EXP,
23
27
  FINDSTR: () => FINDSTR,
24
28
  FIXED: () => FIXED,
25
29
  GE: () => GE,
@@ -40,10 +44,12 @@ var methods_exports = /* @__PURE__ */ __exportAll({
40
44
  LASTYEARRANGE: () => LASTYEARRANGE,
41
45
  LE: () => LE,
42
46
  LEN: () => LEN,
47
+ LN: () => LN,
43
48
  LOWER: () => LOWER,
44
49
  LT: () => LT,
45
50
  LTRIM: () => LTRIM,
46
51
  MAX: () => MAX,
52
+ MAXABS: () => MAXABS,
47
53
  MIN: () => MIN,
48
54
  MINUTE: () => MINUTE,
49
55
  MOD: () => MOD,
@@ -63,6 +69,7 @@ var methods_exports = /* @__PURE__ */ __exportAll({
63
69
  REPLACE: () => REPLACE,
64
70
  ROUND: () => ROUND,
65
71
  ROUNDUP: () => ROUNDUP,
72
+ RSQ: () => RSQ,
66
73
  RTRIM: () => RTRIM,
67
74
  SEARCHSTR: () => SEARCHSTR,
68
75
  SEQMAP: () => SEQMAP,
@@ -324,6 +331,18 @@ function ABS(v) {
324
331
  const fn = () => Math.abs.call(null, v);
325
332
  return fn();
326
333
  }
334
+ function MAXABS(...args) {
335
+ const v = args.flat().filter((i) => i !== null && i !== void 0);
336
+ if (!v.length) return "";
337
+ const fn = () => v.reduce((prev, current) => Math.abs(Number(current)) > Math.abs(Number(prev)) ? current : prev);
338
+ return fn();
339
+ }
340
+ function BANKROUND(v, n) {
341
+ if (v === null || v === "" || v === void 0) return "";
342
+ if (n < 0) throw new Error("Decimal places should be non-negative.");
343
+ n = n ? parseInt(n + "") : 0;
344
+ return new BigNumberJS(v).decimalPlaces(n, BigNumberJS.ROUND_HALF_EVEN).toNumber();
345
+ }
327
346
  function MOD(v, n) {
328
347
  const fn = () => {
329
348
  if (v === 0) throw new Error("The second value should not be zero.");
@@ -365,6 +384,22 @@ function SQRT(v) {
365
384
  };
366
385
  return fn();
367
386
  }
387
+ function EXP(v) {
388
+ const fn = () => {
389
+ const n = toSafeNumber(v);
390
+ if (n === null) return NaN;
391
+ return Math.exp(n);
392
+ };
393
+ return fn();
394
+ }
395
+ function LN(v) {
396
+ const fn = () => {
397
+ const n = toSafeNumber(v);
398
+ if (n === null || n <= 0) throw new Error("The value must be greater than zero.");
399
+ return Math.log(n);
400
+ };
401
+ return fn();
402
+ }
368
403
  function GET(v, p) {
369
404
  const fn = () => {
370
405
  if (Array.isArray(v)) if (typeof p === "number") return v[p];
@@ -421,6 +456,35 @@ function DATEFORMAT(v, f) {
421
456
  const fn = () => dayjs(v).format(f);
422
457
  return fn();
423
458
  }
459
+ function _detectDateType(v) {
460
+ if (/^\d{2}:\d{2}(:\d{2})?$/.test(v.trim())) return "time";
461
+ if (/^\d{4}-\d{2}-\d{2}$/.test(v.trim())) return "date";
462
+ return "datetime";
463
+ }
464
+ function _getDefaultFormat(type) {
465
+ if (type === "date") return "YYYY-MM-DD";
466
+ if (type === "time") return "HH:mm:ss";
467
+ return "YYYY-MM-DD HH:mm:ss";
468
+ }
469
+ var TIME_BASE_DATE = "2000-01-01 ";
470
+ function DateAdd(v, num, unit, format) {
471
+ if (!v) return;
472
+ const fn = () => {
473
+ const type = _detectDateType(v);
474
+ const fmt = format ?? _getDefaultFormat(type);
475
+ return dayjs(type === "time" ? TIME_BASE_DATE + v.trim() : v).add(num, unit).format(fmt);
476
+ };
477
+ return fn();
478
+ }
479
+ function DateSubtract(v, num, unit, format) {
480
+ if (!v) return;
481
+ const fn = () => {
482
+ const type = _detectDateType(v);
483
+ const fmt = format ?? _getDefaultFormat(type);
484
+ return dayjs(type === "time" ? TIME_BASE_DATE + v.trim() : v).subtract(num, unit).format(fmt);
485
+ };
486
+ return fn();
487
+ }
424
488
  function NOW() {
425
489
  return dayjs().format("YYYY-MM-DD HH:MM:ss");
426
490
  }
@@ -553,9 +617,9 @@ function COUNT(v) {
553
617
  if (!Array.isArray(v)) return "";
554
618
  return v.length;
555
619
  }
556
- /**标准差函数 */
620
+ /**标准差函数,支持任意个参数,参数可为数组或非数组,空值不参与计算 */
557
621
  function STDEV(...args) {
558
- const data = args.flat().map((v) => Number(v)).filter((v) => Number.isFinite(v));
622
+ const data = args.flat().filter((i) => i !== "" && i !== null && i !== void 0).map((v) => Number(v)).filter((v) => Number.isFinite(v));
559
623
  if (data.length < 2) return "";
560
624
  const mean = data.reduce((sum, val) => sum + val, 0) / data.length;
561
625
  const variance = data.reduce((sum, val) => {
@@ -564,6 +628,30 @@ function STDEV(...args) {
564
628
  }, 0) / (data.length - 1);
565
629
  return Math.sqrt(variance);
566
630
  }
631
+ /** RSQ函数 */
632
+ function RSQ(arr1, arr2) {
633
+ if (!Array.isArray(arr1) || !Array.isArray(arr2)) return "";
634
+ const y = arr1.map((v) => Number(v)).filter((v) => Number.isFinite(v));
635
+ const x = arr2.map((v) => Number(v)).filter((v) => Number.isFinite(v));
636
+ if (y.length <= 1 || x.length <= 1 || y.length !== x.length) return "";
637
+ const n = y.length;
638
+ const meanY = y.reduce((sum, val) => sum + val, 0) / n;
639
+ const meanX = x.reduce((sum, val) => sum + val, 0) / n;
640
+ let numerator = 0;
641
+ let denomY = 0;
642
+ let denomX = 0;
643
+ for (let i = 0; i < n; i++) {
644
+ const diffY = y[i] - meanY;
645
+ const diffX = x[i] - meanX;
646
+ numerator += diffX * diffY;
647
+ denomY += diffY * diffY;
648
+ denomX += diffX * diffX;
649
+ }
650
+ if (denomY === 0 || denomX === 0) return "";
651
+ const r = numerator / Math.sqrt(denomX * denomY);
652
+ const rsq = r * r;
653
+ return Math.min(Math.max(rsq, 0), 1);
654
+ }
567
655
  function plus(a, b) {
568
656
  const result = new BigNumberJS(a).plus(new BigNumberJS(b)).toNumber();
569
657
  if (isNaN(result)) return "";
@@ -21,3 +21,11 @@ export declare const useQueryfilter: (datafilter: IObject[] | IObject) => {
21
21
  * @returns
22
22
  */
23
23
  export declare const getQuerySort: ({ collation, collationSort, collationField, }: IObject) => any;
24
+ /**
25
+ * 关键字搜索时,取配置的搜索字段的第一段作为 similarField 交给后端做匹配度排序
26
+ * 使用方:下拉/对象选择的关键字搜索、搜索选择组件(select-search)
27
+ * 注意:与「查询组件」的 similarField(取第一个有值字段)来源不同,勿混用
28
+ * @param searchField 配置的搜索字段
29
+ * @param keyword 搜索的关键字
30
+ */
31
+ export declare function getSimilarFieldBySearchField(searchField?: string[], keyword?: string): string | undefined;
@@ -87,5 +87,16 @@ var getQuerySort = ({ collation, collationSort, collationField }) => {
87
87
  sortType: collationSort
88
88
  }] : [];
89
89
  };
90
+ /**
91
+ * 关键字搜索时,取配置的搜索字段的第一段作为 similarField 交给后端做匹配度排序
92
+ * 使用方:下拉/对象选择的关键字搜索、搜索选择组件(select-search)
93
+ * 注意:与「查询组件」的 similarField(取第一个有值字段)来源不同,勿混用
94
+ * @param searchField 配置的搜索字段
95
+ * @param keyword 搜索的关键字
96
+ */
97
+ function getSimilarFieldBySearchField(searchField, keyword) {
98
+ if (!keyword?.trim() || !searchField?.length) return void 0;
99
+ return searchField[0]?.split(".")[0] || void 0;
100
+ }
90
101
  //#endregion
91
- export { getIExp, getIKeywordFieldKeys, getQueryDateByKeyWord, getQuerySort, useQueryfilter };
102
+ export { getIExp, getIKeywordFieldKeys, getQueryDateByKeyWord, getQuerySort, getSimilarFieldBySearchField, useQueryfilter };
@@ -3,4 +3,5 @@ import { ISearchSchema } from '@gct-paas/schema';
3
3
  export declare function useGetBodyBySearch(formState: IObject, cacheColumns: ISearchSchema[], expStr?: string): {
4
4
  query: IObject;
5
5
  exp: string;
6
+ similarField: string | undefined;
6
7
  };
@@ -22,20 +22,26 @@ function useGetBodyBySearch(formState, cacheColumns, expStr) {
22
22
  function transformToBody(state) {
23
23
  const body = {};
24
24
  let exp = expStr || "";
25
+ /** 按查询组件顺序取第一个有值字段,供后端 similarField(搜索时按匹配度排序) */
26
+ let similarField;
25
27
  cacheColumns.forEach((i) => {
26
28
  const field = i.props.fieldSearchKey || i.props.field;
27
29
  const ope = i.props.ope || [];
28
30
  let value = state[i.id];
29
- if (!isEmptySearchValue(value) || i.props.useMore) ope.forEach((o) => {
30
- value = getMultipleChoiceToArray(value, o);
31
- const key = `${field}.${o}:${i.id}`, expkey = `${i.id}.${o}`;
32
- body[key] = i.props.useMore ? null : value;
33
- exp = exp.replace(expkey, key);
34
- });
31
+ if (!isEmptySearchValue(value) || i.props.useMore) {
32
+ if (!similarField && field) similarField = field;
33
+ ope.forEach((o) => {
34
+ value = getMultipleChoiceToArray(value, o);
35
+ const key = `${field}.${o}:${i.id}`, expkey = `${i.id}.${o}`;
36
+ body[key] = i.props.useMore ? null : value;
37
+ exp = exp.replace(expkey, key);
38
+ });
39
+ }
35
40
  });
36
41
  return {
37
42
  body,
38
- exp
43
+ exp,
44
+ similarField
39
45
  };
40
46
  }
41
47
  /** rdo版本关联查询数据单独处理 */
@@ -59,10 +65,11 @@ function useGetBodyBySearch(formState, cacheColumns, expStr) {
59
65
  });
60
66
  return state;
61
67
  }
62
- const { body, exp } = transformToBody(transformRdo(formState, cacheColumns));
68
+ const { body, exp, similarField } = transformToBody(transformRdo(formState, cacheColumns));
63
69
  return {
64
70
  query: body,
65
- exp
71
+ exp,
72
+ similarField
66
73
  };
67
74
  }
68
75
  function getMultipleChoiceToArray(value, ope) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gct-paas/render",
3
- "version": "6.0.0-dev.6",
3
+ "version": "6.0.0-dev.60",
4
4
  "type": "module",
5
5
  "description": "paas 平台网页端底包",
6
6
  "loader": "dist/loader.esm.min.js",
@@ -31,7 +31,7 @@
31
31
  "license": "MIT",
32
32
  "author": "gct",
33
33
  "dependencies": {
34
- "@gct-paas/api": "^6.0.0-dev.6",
34
+ "@gct-paas/api": "^6.0.0-dev.17",
35
35
  "@vueuse/core": "^14.1.0",
36
36
  "axios": "^1.13.2",
37
37
  "bignumber.js": "^10.0.2",
@@ -44,10 +44,10 @@
44
44
  "qx-util": "^0.4.8",
45
45
  "vue": "^3.5.30",
46
46
  "vue3-dnd": "^2.1.0",
47
- "@gct-paas/core": "6.0.0-dev.6",
48
- "@gct-paas/core-web": "6.0.0-dev.6",
49
- "@gct-paas/scss": "6.0.0-dev.6",
50
- "@gct-paas/schema": "6.0.0-dev.6"
47
+ "@gct-paas/core": "6.0.0-dev.60",
48
+ "@gct-paas/schema": "6.0.0-dev.60",
49
+ "@gct-paas/core-web": "6.0.0-dev.60",
50
+ "@gct-paas/scss": "6.0.0-dev.60"
51
51
  },
52
52
  "devDependencies": {
53
53
  "@types/escodegen": "^0.0.10",
@@ -55,12 +55,12 @@
55
55
  "@types/estree": "^1.0.8"
56
56
  },
57
57
  "peerDependencies": {
58
- "@gct-paas/api": "^6.0.0-dev.6",
58
+ "@gct-paas/api": "^6.0.0-dev.17",
59
59
  "vue": ">=3",
60
- "@gct-paas/core": "6.0.0-dev.6",
61
- "@gct-paas/core-web": "6.0.0-dev.6",
62
- "@gct-paas/schema": "6.0.0-dev.6",
63
- "@gct-paas/scss": "6.0.0-dev.6"
60
+ "@gct-paas/core": "6.0.0-dev.60",
61
+ "@gct-paas/scss": "6.0.0-dev.60",
62
+ "@gct-paas/core-web": "6.0.0-dev.60",
63
+ "@gct-paas/schema": "6.0.0-dev.60"
64
64
  },
65
65
  "scripts": {
66
66
  "dev": "cross-env NODE_ENV=development vite build --watch --config vite.dev.config.ts",