@gingkoo/pandora-metabase 1.0.0-alpha.18 → 1.0.0-alpha.2

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/lib/es/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @gingkoo/pandora-metabase v1.0.0-alpha.18
2
+ * @gingkoo/pandora-metabase v1.0.0-alpha.2
3
3
  */
4
4
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
5
5
  import * as React from 'react';
@@ -89,7 +89,7 @@ var TypeEnum;
89
89
  TypeEnum["summarize"] = "summarize";
90
90
  TypeEnum["sort"] = "sort";
91
91
  TypeEnum["rowLimit"] = "rowLimit";
92
- TypeEnum["union"] = "union";
92
+ TypeEnum["group"] = "group";
93
93
  })(TypeEnum || (TypeEnum = {}));
94
94
  var JoinEnum;
95
95
  (function (JoinEnum) {
@@ -278,6 +278,7 @@ const summarizeToSql = (arr, record) => {
278
278
  condition,
279
279
  alias,
280
280
  name,
281
+ fieldAlias,
281
282
  realName = ''
282
283
  } = record;
283
284
  let index = arr.indexOf(record);
@@ -338,7 +339,7 @@ const summarizeToSql = (arr, record) => {
338
339
  count++;
339
340
  }
340
341
  });
341
- as = as + (count ? '_' + (count + 1) : '');
342
+ as = fieldAlias || as + (count ? '_' + (count + 1) : '');
342
343
  return {
343
344
  sql: sql + ' AS ' + as,
344
345
  fieldAlias: as
@@ -466,15 +467,15 @@ const handleNesting = data => {
466
467
  if (customColumn && customColumn.customColumn.length) {
467
468
  obj.customColumns = customColumn.customColumn.map(v => {
468
469
  return {
469
- alias: v.name
470
- // formula: v.formula.replace(/\[.*?\]/g, (column: string): string => {
471
- // let str = column.substr(1, column.length - 2);
472
- // if (~str.indexOf('->')) {
473
- // let _str = str.replace(/ /g, '').split('->');
474
- // return `${_str[0]}.${_str[1]}`;
475
- // }
476
- // return str;
477
- // }),
470
+ alias: v.name,
471
+ formula: v.formula.replace(/\[.*?\]/g, column => {
472
+ let str = column.substr(1, column.length - 2);
473
+ if (~str.indexOf('->')) {
474
+ let _str = str.replace(/ /g, '').split('->');
475
+ return `${_str[0]}.${_str[1]}`;
476
+ }
477
+ return str;
478
+ })
478
479
  };
479
480
  });
480
481
  }
@@ -625,8 +626,9 @@ const getSubColumns = metaList => {
625
626
  metaKey: -1,
626
627
  type: TypeEnum.customColumn,
627
628
  customColumn: [{
628
- name: '' // 用户起的别名
629
- // formula: '', // 公式}];
629
+ name: '',
630
+ // 用户起的别名
631
+ formula: '' // 公式}];
630
632
  }]
631
633
  };
632
634
  let {
@@ -648,7 +650,7 @@ const getSubColumns = metaList => {
648
650
  return {
649
651
  name_zh: v.quotes,
650
652
  ...v,
651
- name: v.fieldAlias,
653
+ name: v.quotes,
652
654
  realName: v.sql?.split(' AS ')?.[1] || '',
653
655
  // name_zh: '',
654
656
  database_type: v?.database_type || SQL_COLUMN_TYPE.FLOAT,
@@ -662,7 +664,7 @@ const getSubColumns = metaList => {
662
664
  return {
663
665
  name_zh: v.quotes,
664
666
  ...v,
665
- name: v.fieldAlias,
667
+ name: v.quotes,
666
668
  realName: v.sql?.split(' AS ')?.[1] || '',
667
669
  // name_zh: '',
668
670
  database_type: v?.database_type || SQL_COLUMN_TYPE.FLOAT,
@@ -730,15 +732,12 @@ const changeTableAlias = (list, curObj) => {
730
732
  if (v.table1.tableUuid === tableUuid) {
731
733
  v.table1.alias = alias;
732
734
  }
733
- if (v.table2.tableUuid === tableUuid) {
734
- v.table2.alias = alias;
735
- }
736
735
  }
737
736
  if (v.type === TypeEnum.customColumn) {
738
737
  v.customColumn.map(item => {
739
738
  item.formulaList?.map(formula => {
740
- if (formula.expression && formula.expression.tableUuid === tableUuid) {
741
- formula.expression.alias = alias;
739
+ if (formula.tableUuid === tableUuid) {
740
+ formula.alias = alias;
742
741
  }
743
742
  });
744
743
  });
@@ -776,40 +775,22 @@ const changeTableAlias = (list, curObj) => {
776
775
  if (v.type === TypeEnum.filter) {
777
776
  v.filter.map(item => {
778
777
  if (item.tableUuid === tableUuid) {
779
- // if (item.alias === SummarizeAlias) {
780
- // //有groupBy 特殊处理
781
- // const { prevGroupBy } = getHelper(list, v);
782
- // let groupBy: any =
783
- // prevGroupBy?.by.filter((v) => v.fieldUuid === item.fieldUuid)[0] ||
784
- // prevGroupBy?.group.filter((v) => v.fieldUuid === item.fieldUuid)[0] ||
785
- // null;
786
- // groupBy.alias = alias;
787
- // const sql = groupBy.sql;
788
- // if (groupBy) {
789
- // item.sql = sql;
790
- // item.groupSql = sql;
791
- // }
792
- // }
793
- item.alias = alias;
794
- item.sql = '';
795
- }
796
- if (item.table2 && item.table2.tableUuid === tableUuid) {
797
- // if (item.table2.alias === SummarizeAlias) {
798
- // //有groupBy 特殊处理
799
- // const { prevGroupBy } = getHelper(list, v);
800
- // let groupBy: any =
801
- // prevGroupBy?.by.filter((v) => v.fieldUuid === item.table2?.fieldUuid)[0] ||
802
- // prevGroupBy?.group.filter((v) => v.fieldUuid === item.table2?.fieldUuid)[0] ||
803
- // null;
804
- // groupBy.alias = alias;
805
- // const sql = groupBy.sql;
806
- // if (groupBy) {
807
- // item.table2.sql = sql;
808
- // item.table2.groupSql = sql;
809
- // }
810
- // }
811
- item.table2.alias = alias;
812
- item.table2.sql = '';
778
+ if (item.alias === SummarizeAlias$1) {
779
+ //有groupBy 特殊处理
780
+ const {
781
+ prevGroupBy
782
+ } = getHelper(list, v);
783
+ let groupBy = prevGroupBy?.by.filter(v => v.fieldUuid === item.fieldUuid)[0] || prevGroupBy?.group.filter(v => v.fieldUuid === item.fieldUuid)[0] || null;
784
+ groupBy.alias = alias;
785
+ const sql = groupBy.sql;
786
+ if (groupBy) {
787
+ item.sql = sql;
788
+ item.groupSql = sql;
789
+ }
790
+ } else {
791
+ item.alias = alias;
792
+ item.sql = '';
793
+ }
813
794
  }
814
795
  });
815
796
  }
@@ -824,30 +805,12 @@ const changeFieldAlias = (list, curObj) => {
824
805
  const newList = cloneDeep(list);
825
806
  newList.map(v => {
826
807
  if (v.type === TypeEnum.data) ;
827
- if (v.type === TypeEnum.joinData) {
828
- if (v.table1.fieldUuid === fieldUuid) {
829
- v.table1.fieldAlias = fieldAlias;
830
- }
831
- if (v.table2.fieldUuid === fieldUuid) {
832
- v.table2.fieldAlias = fieldAlias;
833
- }
834
- v.expressions.map(column => {
835
- if (column.left_fieldUuid === fieldUuid) {
836
- column.left_fieldAlias = fieldAlias;
837
- }
838
- if (column.right_fieldUuid === fieldUuid) {
839
- column.right_fieldAlias = fieldAlias;
840
- }
841
- });
842
- // if (v.table1.tableUuid === tableUuid) {
843
- // v.table1.alias = alias;
844
- // }
845
- }
808
+ if (v.type === TypeEnum.joinData) ;
846
809
  if (v.type === TypeEnum.customColumn) {
847
810
  v.customColumn.map(item => {
848
811
  item.formulaList?.map(formula => {
849
- if (formula.expression && formula.expression.fieldUuid === fieldUuid) {
850
- formula.expression.fieldAlias = fieldAlias;
812
+ if (formula.fieldUuid === fieldUuid) {
813
+ formula.fieldAlias = fieldAlias;
851
814
  }
852
815
  });
853
816
  });
@@ -901,110 +864,11 @@ const changeFieldAlias = (list, curObj) => {
901
864
  }
902
865
  }
903
866
  }
904
- if (item.table2 && item.table2.fieldUuid === fieldUuid) {
905
- item.table2.fieldAlias = fieldAlias;
906
- // if (item.table2.alias === SummarizeAlias) {
907
- // //有groupBy 特殊处理
908
- // const { prevGroupBy } = getHelper(list, v);
909
- // let groupBy: any =
910
- // prevGroupBy?.by.filter((v) => v.fieldUuid === item.table2?.fieldUuid)[0] ||
911
- // prevGroupBy?.group.filter((v) => v.fieldUuid === item.table2?.fieldUuid)[0] ||
912
- // null;
913
- // groupBy.fieldAlias = fieldAlias;
914
- // const sql = groupBy.sql;
915
- // if (groupBy) {
916
- // item.table2.sql = sql;
917
- // item.table2.groupSql = sql;
918
- // }
919
- // }
920
- }
921
867
  });
922
868
  }
923
869
  });
924
870
  return newList;
925
871
  };
926
- function splitByUnion(data) {
927
- if (!data) return [];
928
- const original = cloneDeep(data);
929
- const result = [];
930
- let i = 0;
931
- while (i < original.length) {
932
- const item = original[i];
933
- if (item.type === 'group') {
934
- // group.list 中每一项原样推入结果
935
- for (const subItem of item.list) {
936
- result.push(subItem);
937
- }
938
- i++;
939
- } else if (item.type === 'union') {
940
- const {
941
- list,
942
- ...otehr
943
- } = item;
944
- // 查找下一个 group,并将其 list 转成 subquery
945
- const nextItem = original[i + 1];
946
- if (nextItem && nextItem.type === 'group') {
947
- result.push({
948
- ...otehr,
949
- subquery: nextItem.list.map(subItem => subItem)
950
- });
951
- i += 2;
952
- } else {
953
- result.push({
954
- ...otehr,
955
- subquery: []
956
- });
957
- i++;
958
- }
959
- }
960
- }
961
- return result;
962
- }
963
- function reassembleByUnion(target = []) {
964
- if (!target) return [];
965
- const result = [];
966
- let i = 0;
967
- const len = target.length;
968
- // 如果没有任何 union,直接放入一个 group.list
969
- const hasUnion = target.some(item => item.type === 'union');
970
- if (!hasUnion) {
971
- return [{
972
- type: 'group',
973
- name: 'default',
974
- list: [...target]
975
- }];
976
- }
977
- // 否则正常处理
978
- while (i < len) {
979
- const item = target[i];
980
- if (item.type !== 'union') {
981
- // 收集连续非 union 的 item,统一放入一个 group.list
982
- const groupList = [];
983
- while (i < len && target[i].type !== 'union') {
984
- groupList.push(target[i]);
985
- i++;
986
- }
987
- result.push({
988
- type: 'group',
989
- name: 'default',
990
- list: groupList
991
- });
992
- } else {
993
- // 处理 union
994
- result.push({
995
- type: 'union',
996
- name: 'union',
997
- union: item.union ?? 'UNION',
998
- list: []
999
- });
1000
- const subquery = item.subquery || [];
1001
- const convertedSubquery = reassembleByUnion(subquery);
1002
- result.push(...convertedSubquery);
1003
- i++; // 跳过当前 union
1004
- }
1005
- }
1006
- return result;
1007
- }
1008
872
 
1009
873
  let metaKey = 1;
1010
874
  const SummarizeAlias = 'source';
@@ -1029,9 +893,9 @@ const useStore = () => {
1029
893
  list: defaultMetaList
1030
894
  }];
1031
895
  const defaultOperator = {
1032
- type: 'union',
1033
- name: 'union',
1034
- union: UnionEnum.union,
896
+ type: 'group',
897
+ name: 'group',
898
+ operator: UnionEnum.union,
1035
899
  list: []
1036
900
  };
1037
901
  const [showFields, setShowFields] = useState(true); //显示字段
@@ -1057,8 +921,6 @@ const useStore = () => {
1057
921
  }); //弹窗
1058
922
  const [popupClosable, setClosable] = useState(true); //是否可关闭 如果弹框里面再弹框 则不可关闭
1059
923
  const [popupClosable2, setClosable2] = useState(true); //是否可关闭 如果弹框里面再弹框 则不可关闭
1060
- // 外层ref
1061
- const popupContainer = useRef();
1062
924
  // const [fetchDatasetFn, setFetchDatasetFn] = useState<(id: string) => Promise<any>>(
1063
925
  // async () => {},
1064
926
  // ); //fn
@@ -1076,18 +938,18 @@ const useStore = () => {
1076
938
  };
1077
939
  // 是否显示主表后面的字段按钮 (如果下面 没有聚合,或者选了聚合但是聚合里面没有选值的时候显示 主表字段按钮)
1078
940
  const showMainColumn = useMemo(() => {
1079
- return metaList?.map((item, groupIndex) => {
1080
- // 过滤出所有汇总类型的项
1081
- const summarizeItems = item.list.filter(v => v.type === TypeEnum.summarize);
1082
- // 如果没有汇总项,默认显示主列
1083
- if (summarizeItems.length === 0) {
1084
- return true;
1085
- }
1086
- // 如果只有一个汇总项,并且 group 和 by 都为空,则也显示主列
1087
- const onlyItem = summarizeItems[0];
1088
- const hasGroupOrBy = Array.isArray(onlyItem.group) && onlyItem.group.length > 0 || Array.isArray(onlyItem.by) && onlyItem.by.length > 0;
1089
- return !hasGroupOrBy;
1090
- });
941
+ // 先将二维数组拍平为一维数组
942
+ const flatMetaList = metaList.flatMap(group => group.list);
943
+ // 过滤出所有汇总类型的项
944
+ const summarizeItems = flatMetaList.filter(v => v.type === TypeEnum.summarize);
945
+ // 如果没有汇总项,默认显示主列
946
+ if (summarizeItems.length === 0) {
947
+ return true;
948
+ }
949
+ // 如果只有一个汇总项,并且 group 和 by 都为空,则也显示主列
950
+ const onlyItem = summarizeItems[0];
951
+ const hasGroupOrBy = Array.isArray(onlyItem.group) && onlyItem.group.length > 0 || Array.isArray(onlyItem.by) && onlyItem.by.length > 0;
952
+ return !hasGroupOrBy;
1091
953
  }, [metaList]);
1092
954
  // const showMainColumn = useMemo(() => {
1093
955
  // let summarizeList = metaList.filter((v) => v.type === TypeEnum.summarize);
@@ -1131,7 +993,7 @@ const useStore = () => {
1131
993
  columns = await fetchColumnsFn.current(extra, datasourceId);
1132
994
  setColumns(tableName, columns);
1133
995
  }
1134
- const _columns = columns?.map(v => {
996
+ const _columns = columns.map(v => {
1135
997
  return {
1136
998
  ...v,
1137
999
  fieldUuid: v.fieldAlias || uuidv4('field')
@@ -1145,56 +1007,21 @@ const useStore = () => {
1145
1007
  _setMeta(newMeta);
1146
1008
  };
1147
1009
  // 回显
1148
- // 设置column
1149
- const setQuotes = newMeta => {
1150
- newMeta.table1 = {
1151
- ...newMeta.table1,
1152
- fieldAlias: newMeta.table1.fieldAlias || newMeta.table1.column,
1153
- fieldUuid: newMeta.table1.fieldUuid || uuidv4('field'),
1154
- quotes: newMeta.table1.quotes || newMeta.table1.column,
1155
- tableUuid: newMeta.table1.tableUuid || uuidv4('table')
1156
- };
1157
- newMeta.table2 = {
1158
- ...newMeta.table2,
1159
- fieldAlias: newMeta.table2.fieldAlias || newMeta.table2.column,
1160
- fieldUuid: newMeta.table2.fieldUuid || uuidv4('field'),
1161
- quotes: newMeta.table2.quotes || newMeta.table2.column,
1162
- tableUuid: newMeta.table2.tableUuid || uuidv4('table')
1163
- };
1164
- newMeta.expressions = newMeta.expressions?.map(v => {
1165
- return {
1166
- ...v,
1167
- left_fieldAlias: v.fieldAlias || v.left_column,
1168
- left_fieldUuid: v.fieldUuid || uuidv4('field'),
1169
- left_quotes: v.left_quotes || v.left_column,
1170
- right_fieldAlias: v.right_fieldAlias || v.right_column,
1171
- right_fieldUuid: v.right_fieldUuid || uuidv4('field'),
1172
- right_quotes: v.right_quotes || v.right_column
1173
- };
1174
- });
1175
- return newMeta;
1176
- };
1177
- const setPreData = data => {
1010
+ const setPreData = async data => {
1178
1011
  if (data.length) {
1179
- let _metaList = data?.map((item, groupIndex) => {
1012
+ let _metaList = data.map((item, groupIndex) => {
1180
1013
  let newList = item.list?.map((v, i) => {
1181
- let newMeta = item.list;
1182
- if (v.table) {
1183
- v.table.tableUuid = v.table.tableUuid || uuidv4('table');
1184
- }
1185
- if (v.type === TypeEnum.joinData) {
1186
- newMeta[i] = setQuotes(newMeta[i]);
1187
- }
1014
+ let newMeta = cloneDeep(item.list);
1188
1015
  // 设置右侧column
1189
1016
  if (v.table2?.datasourceId && v.columns.length < 1) {
1190
- fetchColumns(newMeta[i].table2, newMeta[i].table2.datasourceId, (columns = []) => {
1017
+ fetchColumns(newMeta[i].table2, newMeta[i].table2.datasourceId, columns => {
1191
1018
  if (v.isSubquery) {
1192
1019
  let newColumns = [];
1193
1020
  const items = getSubColumns(v.subquery);
1194
- newColumns = items?.flatMap(item => item.columns);
1195
- newMeta[i].columns = newColumns || [];
1021
+ newColumns = items.flatMap(item => item.columns);
1022
+ newMeta[i].columns = newColumns;
1196
1023
  } else {
1197
- newMeta[i].columns = columns || [];
1024
+ newMeta[i].columns = columns;
1198
1025
  }
1199
1026
  setMeta(newMeta, groupIndex);
1200
1027
  });
@@ -1204,18 +1031,15 @@ const useStore = () => {
1204
1031
  }
1205
1032
  // 设置column
1206
1033
  if (v.table?.datasourceId && v.columns.length < 1) {
1207
- fetchColumns(newMeta[i].table, newMeta[i].table.datasourceId, (columns = []) => {
1034
+ fetchColumns(newMeta[i].table, newMeta[i].table.datasourceId, columns => {
1208
1035
  if (v.isSubquery) {
1209
1036
  let newColumns = [];
1210
1037
  const items = getSubColumns(v.subquery);
1211
1038
  newColumns = items.flatMap(item => item.columns);
1212
- newMeta[i].columns = newColumns || [];
1039
+ newMeta[i].columns = newColumns;
1213
1040
  } else {
1214
- newMeta[i].columns = columns || [];
1041
+ newMeta[i].columns = columns;
1215
1042
  }
1216
- // if (v.type === TypeEnum.joinData) {
1217
- // newMeta[i] = setQuotes(newMeta[i]);
1218
- // }
1219
1043
  setMeta(newMeta, groupIndex);
1220
1044
  });
1221
1045
  return {
@@ -1229,8 +1053,7 @@ const useStore = () => {
1229
1053
  return {
1230
1054
  name: item.name || 'default',
1231
1055
  list: newList.length < 1 ? defaultMetaList : newList,
1232
- type: item.type || 'group',
1233
- union: item.union
1056
+ type: item.type || 'group'
1234
1057
  };
1235
1058
  });
1236
1059
  const validMetaKeys = _metaList.flatMap(group => group.list).map(v => Number(v.metaKey)).filter(num => !isNaN(num));
@@ -1253,8 +1076,8 @@ const useStore = () => {
1253
1076
  tableUuid: '',
1254
1077
  datasourceId: '',
1255
1078
  datasourceName: '',
1256
- fieldAlias: '',
1257
- fieldUuid: ''
1079
+ column: '',
1080
+ column_id: ''
1258
1081
  };
1259
1082
  if (index === 1) {
1260
1083
  table1 = {
@@ -1263,8 +1086,8 @@ const useStore = () => {
1263
1086
  alias: mainTable.table.alias,
1264
1087
  datasourceId: mainTable.table.datasourceId,
1265
1088
  datasourceName: mainTable.table.datasourceName,
1266
- fieldAlias: '',
1267
- fieldUuid: ''
1089
+ column: '',
1090
+ column_id: ''
1268
1091
  };
1269
1092
  }
1270
1093
  item = {
@@ -1279,8 +1102,8 @@ const useStore = () => {
1279
1102
  tableUuid: '',
1280
1103
  datasourceId: '',
1281
1104
  datasourceName: '',
1282
- fieldAlias: '',
1283
- fieldUuid: ''
1105
+ column: '',
1106
+ column_id: ''
1284
1107
  },
1285
1108
  columns: [],
1286
1109
  expressions: []
@@ -1338,7 +1161,7 @@ const useStore = () => {
1338
1161
  }
1339
1162
  };
1340
1163
  }
1341
- if (type === TypeEnum.union) {
1164
+ if (type === TypeEnum.group) {
1342
1165
  // 添加分组
1343
1166
  let newMetaList = metaList.slice();
1344
1167
  newMetaList.splice(groupIndex + 1, 0, defaultOperator, ...defaultMeta);
@@ -1389,7 +1212,7 @@ const useStore = () => {
1389
1212
  setMeta(_metaList, groupIndex);
1390
1213
  };
1391
1214
  const setColumns = (tableId, columns) => {
1392
- const _columns = columns?.map(v => {
1215
+ const _columns = columns.map(v => {
1393
1216
  return {
1394
1217
  ...v,
1395
1218
  fieldUuid: v.fieldUuid || uuidv4('field')
@@ -1414,10 +1237,46 @@ const useStore = () => {
1414
1237
  const getDataset = datasourceId => {
1415
1238
  return _cacheSource2TableMap[datasourceId] || [];
1416
1239
  };
1240
+ const changeAlias = (groupIndex, alias) => {
1241
+ let newMetaList = metaList.slice();
1242
+ const _list = newMetaList[groupIndex].list;
1243
+ if (_list.length > 0) {
1244
+ _list.forEach(item => {
1245
+ if (item.type === TypeEnum.joinData && item.table2.alias === alias) {
1246
+ item.table2.alias = alias;
1247
+ } else if (item.type === TypeEnum.data && item.table.alias === alias) {
1248
+ item.table.alias = alias;
1249
+ } else if (item.type === TypeEnum.filter) {
1250
+ //过滤器
1251
+ item.filter.forEach(filterItem => {
1252
+ if (filterItem.alias === alias) {
1253
+ filterItem.alias = alias;
1254
+ }
1255
+ });
1256
+ } else if (item.type === TypeEnum.summarize) {
1257
+ // 汇总
1258
+ item.alias = alias;
1259
+ item.by.forEach(byItem => {
1260
+ if (byItem.alias === alias) {
1261
+ byItem.alias = alias;
1262
+ }
1263
+ });
1264
+ item.group.forEach(groupItem => {
1265
+ if (groupItem.alias === alias) {
1266
+ groupItem.alias = alias;
1267
+ groupItem.sql = alias;
1268
+ }
1269
+ });
1270
+ }
1271
+ });
1272
+ newMetaList[groupIndex].list = _list;
1273
+ _setMeta(newMetaList);
1274
+ }
1275
+ };
1417
1276
  const reset = () => {
1418
1277
  // setSourceList([]);
1419
1278
  _setMeta(defaultMeta);
1420
- // setToolbar(defaultToolbar);
1279
+ setToolbar(defaultToolbar);
1421
1280
  set_cacheSource2TableMap({});
1422
1281
  set_cacheColumnsMap({});
1423
1282
  };
@@ -1471,7 +1330,7 @@ const useStore = () => {
1471
1330
  _setShowSubquery,
1472
1331
  constantList,
1473
1332
  setConstantList,
1474
- popupContainer
1333
+ changeAlias
1475
1334
  };
1476
1335
  };
1477
1336
 
@@ -1873,7 +1732,6 @@ const getComputedTranslate = obj => {
1873
1732
  };
1874
1733
  // 获取元素距离浏览器顶部的距离
1875
1734
  const getElementTop = elem => {
1876
- if (!elem) return 0;
1877
1735
  let elemTop = elem.offsetTop;
1878
1736
  let pElem = elem.offsetParent;
1879
1737
  while (pElem != null) {
@@ -1887,7 +1745,6 @@ const getElementTop = elem => {
1887
1745
  };
1888
1746
  // 获取元素距离浏览器顶部的距离
1889
1747
  const getElementLeft = elem => {
1890
- if (!elem) return 0;
1891
1748
  let elemLeft = elem.offsetLeft;
1892
1749
  let pElem = elem.offsetParent;
1893
1750
  while (pElem != null) {
@@ -1899,23 +1756,8 @@ const getElementLeft = elem => {
1899
1756
  }
1900
1757
  return elemLeft;
1901
1758
  };
1902
- // 获取元素可见范围内高度
1903
- const getContainerVisibleHeight = container => {
1904
- if (!container) return 0;
1905
- const rect = container.getBoundingClientRect();
1906
- const windowHeight = window.innerHeight || document.documentElement.clientHeight;
1907
- // 元素顶部在视口上方 -> 不可见
1908
- if (rect.bottom < 0) return 0;
1909
- // 元素底部在视口下方 -> 不可见
1910
- if (rect.top > windowHeight) return 0;
1911
- // 可见区域的 top 和 bottom
1912
- const visibleTop = Math.max(rect.top, 0);
1913
- const visibleBottom = Math.min(rect.bottom, windowHeight);
1914
- // 可见高度
1915
- return visibleBottom - visibleTop;
1916
- };
1917
- const getScrollTop = elem => {
1918
- return elem?.scrollTop || document.documentElement.scrollTop;
1759
+ const getScrollTop = () => {
1760
+ return document.documentElement.scrollTop;
1919
1761
  };
1920
1762
  // 浏览器可视宽高
1921
1763
  const getWindowSize = () => {
@@ -2394,7 +2236,7 @@ const List = [{
2394
2236
  const RowLimit$1 = props => {
2395
2237
  const {
2396
2238
  meta,
2397
- union,
2239
+ operator,
2398
2240
  groupIndex
2399
2241
  } = props;
2400
2242
  const store = useStore$1();
@@ -2404,10 +2246,10 @@ const RowLimit$1 = props => {
2404
2246
  node: e.currentTarget,
2405
2247
  content: jsx(SelectList, {
2406
2248
  list: List,
2407
- value: union,
2249
+ value: operator,
2408
2250
  onChange: type => {
2409
2251
  let newMeta = store.metaList.slice();
2410
- newMeta[groupIndex].union = type;
2252
+ newMeta[groupIndex].operator = type;
2411
2253
  store._setMeta(newMeta);
2412
2254
  store.setPopup({
2413
2255
  visible: false
@@ -2430,7 +2272,7 @@ const RowLimit$1 = props => {
2430
2272
  children: jsx("div", {
2431
2273
  className: `Sqb-TableName`,
2432
2274
  onClick: e => selectOperator(e),
2433
- children: union
2275
+ children: operator
2434
2276
  })
2435
2277
  })
2436
2278
  })]
@@ -3486,7 +3328,6 @@ function returnDocument(element) {
3486
3328
  const outSpacing = 10;
3487
3329
  function generateTrigger(PortalComponent) {
3488
3330
  class Trigger extends React.Component {
3489
- resizeObserver = null; // 显式声明 resizeObserver 属性
3490
3331
  resetId = -1; // 监听窗口改变事件id 用于组件销毁的时候清除事件
3491
3332
  static defaultProps = {
3492
3333
  visible: false,
@@ -3501,39 +3342,11 @@ function generateTrigger(PortalComponent) {
3501
3342
  this.resetId = winResetEvent.addEvent(this.didUpdate, this, 300);
3502
3343
  this.props.container && this.props.container.addEventListener('scroll', this.didUpdate);
3503
3344
  this.bindEvent();
3504
- // 延迟绑定 ResizeObserver 到 ensure the element is ready
3505
- this.initResizeObserver();
3506
- }
3507
- componentDidUpdate(prevProps) {
3508
- // 如果 children 发生变化,重新初始化观察器
3509
- if (prevProps.children !== this.props.children) {
3510
- this.initResizeObserver();
3511
- }
3512
3345
  }
3513
3346
  componentWillUnmount() {
3514
3347
  winResetEvent.removeEvent(this.resetId);
3515
3348
  this.props.container && this.props.container.removeEventListener('scroll', this.didUpdate);
3516
- if (this.resizeObserver) {
3517
- this.resizeObserver.disconnect();
3518
- this.resizeObserver = null;
3519
- }
3520
3349
  }
3521
- // children高度变化后,从新计算高度
3522
- initResizeObserver = () => {
3523
- const targetNode = this.ref.current;
3524
- if (!targetNode) return;
3525
- // 如果已经存在 ResizeObserver,先断开连接
3526
- if (this.resizeObserver) {
3527
- this.resizeObserver.disconnect();
3528
- }
3529
- // 初始化 ResizeObserver 并开始观察目标节点
3530
- this.resizeObserver = new ResizeObserver(entries => {
3531
- entries.forEach(entry => {
3532
- this.didUpdate();
3533
- });
3534
- });
3535
- this.resizeObserver.observe(targetNode);
3536
- };
3537
3350
  bindEvent = () => {
3538
3351
  let that = this;
3539
3352
  returnDocument().body.addEventListener('click', function (e) {
@@ -3551,7 +3364,7 @@ function generateTrigger(PortalComponent) {
3551
3364
  this.props.visible && this.props.closable && this.props.hideVisible();
3552
3365
  };
3553
3366
  attachParent = popupContainer => {
3554
- let mountNode = this.props.container || returnDocument().body;
3367
+ let mountNode = returnDocument().body;
3555
3368
  mountNode.appendChild(popupContainer);
3556
3369
  };
3557
3370
  getCurrentNodePos = () => {
@@ -3560,9 +3373,8 @@ function generateTrigger(PortalComponent) {
3560
3373
  container
3561
3374
  } = this.props;
3562
3375
  return {
3563
- x: getElementLeft(node) - getElementLeft(container),
3564
- y: getElementTop(node) - getElementTop(container),
3565
- t: getElementTop(container),
3376
+ x: getElementLeft(node),
3377
+ y: getElementTop(node) - (container?.scrollTop || 0),
3566
3378
  h: node.offsetHeight
3567
3379
  };
3568
3380
  };
@@ -3605,21 +3417,19 @@ function generateTrigger(PortalComponent) {
3605
3417
  didUpdate = () => {
3606
3418
  if (!this.props.node) return false;
3607
3419
  let {
3608
- innerSpacing = 10,
3609
- container
3420
+ innerSpacing = 10
3610
3421
  } = this.props;
3611
3422
  let pos = this.getCurrentNodePos();
3612
- let posY = pos.y - getScrollTop(container);
3423
+ let posY = pos.y - getScrollTop();
3613
3424
  if (!this.ref) return false;
3614
3425
  let realHeight = this.ref?.current?.childNodes?.[0]?.offsetHeight || 0;
3615
3426
  if (!realHeight) return false;
3616
3427
  let {
3617
3428
  height: winH
3618
3429
  } = getWindowSize();
3619
- let containerH = getContainerVisibleHeight(container);
3620
- let downH = (containerH || winH) - posY - pos.h; // 元素下面可用高度
3430
+ let downH = winH - posY - pos.h; // 元素下面可用高度
3621
3431
  let maxHeight = 0;
3622
- let topHeight = getScrollTop(container);
3432
+ let topHeight = getScrollTop();
3623
3433
  if (downH >= posY || realHeight <= downH - innerSpacing - outSpacing) {
3624
3434
  // 下面比上面宽敞 或 下面足够放下所有 放下面
3625
3435
  maxHeight = Math.min(realHeight, downH - innerSpacing - outSpacing);
@@ -3769,7 +3579,7 @@ const SelectColumn = ({
3769
3579
  });
3770
3580
  };
3771
3581
 
3772
- var css_248z$6 = ".Sqb-SelectColumns--box {\n box-sizing: border-box;\n min-width: 1em;\n max-width: 500px;\n background-color: #ffffff;\n overflow: hidden;\n}\n.Sqb-SelectColumns--box .Sqb-List-item {\n display: flex;\n border-radius: 4px;\n margin-top: 2px;\n margin-bottom: 2px;\n}\n.Sqb-SelectColumns--box .Sqb-List-item .List-item {\n flex: auto;\n cursor: pointer;\n display: flex;\n align-items: center;\n}\n.Sqb-SelectColumns--box .Sqb-List-item .List-item-icon {\n display: flex;\n align-items: center;\n color: #b8bbc3;\n}\n.Sqb-SelectColumns--box .Sqb-List-item .List-item-title {\n word-break: break-word;\n word-wrap: anywhere;\n color: #4c5773;\n margin-top: 0;\n margin-bottom: 0;\n font-size: 14px;\n}\n.Sqb-SelectColumns--box .Sqb-List-item .Field-extra {\n display: flex;\n align-items: center;\n padding: 0.5rem;\n cursor: pointer;\n border-left: 2px solid rgba(113, 114, 173, 0.1);\n color: rgba(255, 255, 255, 0.5);\n visibility: hidden;\n}\n.Sqb-SelectColumns--box .Sqb-List-item .Field-extra h4 {\n margin-bottom: 0;\n color: inherit;\n}\n.Sqb-SelectColumns--box .Sqb-List-item .Field-extra svg {\n color: #fff;\n margin-left: 0.5rem;\n}\n.Sqb-SelectColumns--box .Sqb-List-item .Field-extra:hover {\n color: #fff;\n}\n.Sqb-SelectColumns--box .Sqb-List-item:not(.disabled):hover,\n.Sqb-SelectColumns--box .Sqb-List-item.active {\n background-color: #509ee3;\n border-color: rgba(169, 137, 197, 0.2);\n}\n.Sqb-SelectColumns--box .Sqb-List-item:not(.disabled):hover .List-item-icon,\n.Sqb-SelectColumns--box .Sqb-List-item.active .List-item-icon {\n color: #fff !important;\n}\n.Sqb-SelectColumns--box .Sqb-List-item:not(.disabled):hover .List-item-title,\n.Sqb-SelectColumns--box .Sqb-List-item.active .List-item-title {\n color: #fff !important;\n}\n.Sqb-SelectColumns--box .Sqb-List-item:not(.disabled):hover .Field-extra,\n.Sqb-SelectColumns--box .Sqb-List-item.active .Field-extra {\n visibility: visible;\n}\n.Sqb-SelectColumns--box .Sqb-List-item.disabled .List-item-title {\n color: #949aab !important;\n}\n.Sqb-SelectColumns--box .Sqb-List-title {\n display: flex;\n border-radius: 4px;\n}\n.Sqb-SelectColumns--box .Sqb-List-title .List-item {\n flex: auto;\n cursor: pointer;\n display: flex;\n align-items: center;\n color: #4c5773;\n overflow: hidden;\n}\n.Sqb-SelectColumns--box .Sqb-List-title .List-item-icon {\n display: flex;\n align-items: center;\n}\n.Sqb-SelectColumns--box .Sqb-List-title .List-item-title {\n word-break: break-word;\n word-wrap: anywhere;\n margin-top: 0;\n margin-bottom: 0;\n font-size: 16px;\n font-weight: 600;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.Sqb-SelectColumns--box .Sqb-List-title .List-title-arrow {\n margin-left: auto;\n}\n.Sqb-SelectColumns--box .Sqb-List-title.active .List-item-icon {\n color: #509ee3;\n}\n.Sqb-SelectColumns--box .Sqb-List-title.shrink {\n cursor: pointer;\n}\n.Sqb-SelectColumns--box .Sqb-List-title.shrink .List-item {\n cursor: pointer;\n}\n.Sqb-SelectColumns--box .Sqb-List-title.shrink:hover .List-item {\n color: #509ee3;\n}\n.Sqb-SelectColumns--box .Sqb-List-title.shrink:hover .List-item .List-item-title {\n color: #509ee3;\n}\n.Sqb-SelectColumns--box .Sqb-List-search {\n display: flex;\n align-items: center;\n flex: 1 0 auto;\n color: #b8bbc3;\n background-color: #fff;\n border: 1px solid #f0f0f0;\n font-size: 14px;\n}\n.Sqb-SelectColumns--box .Sqb-List-search span {\n line-height: 0;\n}\n.Sqb-SelectColumns--box .Sqb-List-search input {\n box-shadow: none;\n outline: 0;\n border: none !important;\n background: transparent;\n color: #4c5773;\n font-size: 1.12em;\n font-weight: 600;\n}\n.Sqb-SelectColumns--box .Sqb-List-search input::-webkit-input-placeholder {\n color: #b8bbc3;\n}\n.Sqb-SelectColumns--box .Sqb-List-search input::-ms-input-placeholder {\n color: #b8bbc3;\n}\n.Sqb-SelectColumns--box.greenGrass .Sqb-List-item:not(.disabled):hover,\n.Sqb-SelectColumns--box.greenGrass .Sqb-List-item.active {\n background-color: #88bf4d;\n}\n.Sqb-SelectColumns--box.greenGrass .Sqb-List-title.active .List-item-icon {\n color: #88bf4d;\n}\n.Sqb-SelectColumns--box.greenGrass .Sqb-List-title.shrink:hover a {\n color: #88bf4d;\n}\n.Sqb-SelectColumns--box.greenGrass .Sqb-List-title.shrink:hover a .List-item-title {\n color: #88bf4d;\n}\n.Sqb-SelectColumns--box.purple .Sqb-List-item:not(.disabled):hover,\n.Sqb-SelectColumns--box.purple .Sqb-List-item.active {\n background-color: #7172ad;\n}\n.Sqb-SelectColumns--box.purple .Sqb-List-title.active .List-item-icon {\n color: #7172ad;\n}\n.Sqb-SelectColumns--box.purple .Sqb-List-title.shrink:hover a {\n color: #7172ad;\n}\n.Sqb-SelectColumns--box.purple .Sqb-List-title.shrink:hover a .List-item-title {\n color: #7172ad;\n}\n.menu-list {\n border: none !important;\n}\n.menu-list .ant-menu-item:hover {\n color: #88bf4d !important;\n}\n.menu-list .ant-menu-item-selected {\n background-color: #88bf4d !important;\n color: #fff !important;\n border-radius: 4px !important;\n}\n";
3582
+ var css_248z$6 = ".Sqb-SelectColumns--box {\n box-sizing: border-box;\n min-width: 1em;\n max-width: 500px;\n background-color: #ffffff;\n overflow: hidden;\n}\n.Sqb-SelectColumns--box .Sqb-List-item {\n display: flex;\n border-radius: 4px;\n margin-top: 2px;\n margin-bottom: 2px;\n}\n.Sqb-SelectColumns--box .Sqb-List-item a {\n flex: auto;\n cursor: pointer;\n display: flex;\n align-items: center;\n}\n.Sqb-SelectColumns--box .Sqb-List-item .List-item-icon {\n display: flex;\n align-items: center;\n color: #b8bbc3;\n}\n.Sqb-SelectColumns--box .Sqb-List-item .List-item-title {\n word-break: break-word;\n word-wrap: anywhere;\n color: #4c5773;\n margin-top: 0;\n margin-bottom: 0;\n font-size: 14px;\n}\n.Sqb-SelectColumns--box .Sqb-List-item .Field-extra {\n display: flex;\n align-items: center;\n padding: 0.5rem;\n cursor: pointer;\n border-left: 2px solid rgba(113, 114, 173, 0.1);\n color: rgba(255, 255, 255, 0.5);\n visibility: hidden;\n}\n.Sqb-SelectColumns--box .Sqb-List-item .Field-extra h4 {\n margin-bottom: 0;\n color: inherit;\n}\n.Sqb-SelectColumns--box .Sqb-List-item .Field-extra svg {\n color: #fff;\n margin-left: 0.5rem;\n}\n.Sqb-SelectColumns--box .Sqb-List-item .Field-extra:hover {\n color: #fff;\n}\n.Sqb-SelectColumns--box .Sqb-List-item:not(.disabled):hover,\n.Sqb-SelectColumns--box .Sqb-List-item.active {\n background-color: #509ee3;\n border-color: rgba(169, 137, 197, 0.2);\n}\n.Sqb-SelectColumns--box .Sqb-List-item:not(.disabled):hover .List-item-icon,\n.Sqb-SelectColumns--box .Sqb-List-item.active .List-item-icon {\n color: #fff !important;\n}\n.Sqb-SelectColumns--box .Sqb-List-item:not(.disabled):hover .List-item-title,\n.Sqb-SelectColumns--box .Sqb-List-item.active .List-item-title {\n color: #fff !important;\n}\n.Sqb-SelectColumns--box .Sqb-List-item:not(.disabled):hover .Field-extra,\n.Sqb-SelectColumns--box .Sqb-List-item.active .Field-extra {\n visibility: visible;\n}\n.Sqb-SelectColumns--box .Sqb-List-item.disabled .List-item-title {\n color: #949aab !important;\n}\n.Sqb-SelectColumns--box .Sqb-List-title {\n display: flex;\n border-radius: 4px;\n}\n.Sqb-SelectColumns--box .Sqb-List-title a {\n flex: auto;\n cursor: default;\n display: flex;\n align-items: center;\n color: #4c5773;\n overflow: hidden;\n}\n.Sqb-SelectColumns--box .Sqb-List-title .List-item-icon {\n display: flex;\n align-items: center;\n}\n.Sqb-SelectColumns--box .Sqb-List-title .List-item-title {\n word-break: break-word;\n word-wrap: anywhere;\n margin-top: 0;\n margin-bottom: 0;\n font-size: 16px;\n font-weight: 600;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.Sqb-SelectColumns--box .Sqb-List-title .List-title-arrow {\n margin-left: auto;\n}\n.Sqb-SelectColumns--box .Sqb-List-title.active .List-item-icon {\n color: #509ee3;\n}\n.Sqb-SelectColumns--box .Sqb-List-title.shrink {\n cursor: pointer;\n}\n.Sqb-SelectColumns--box .Sqb-List-title.shrink a {\n cursor: pointer;\n}\n.Sqb-SelectColumns--box .Sqb-List-title.shrink:hover a {\n color: #509ee3;\n}\n.Sqb-SelectColumns--box .Sqb-List-title.shrink:hover a .List-item-title {\n color: #509ee3;\n}\n.Sqb-SelectColumns--box .Sqb-List-search {\n display: flex;\n align-items: center;\n flex: 1 0 auto;\n color: #b8bbc3;\n background-color: #fff;\n border: 1px solid #f0f0f0;\n font-size: 14px;\n}\n.Sqb-SelectColumns--box .Sqb-List-search span {\n line-height: 0;\n}\n.Sqb-SelectColumns--box .Sqb-List-search input {\n box-shadow: none;\n outline: 0;\n border: none !important;\n background: transparent;\n color: #4c5773;\n font-size: 1.12em;\n font-weight: 600;\n}\n.Sqb-SelectColumns--box .Sqb-List-search input::-webkit-input-placeholder {\n color: #b8bbc3;\n}\n.Sqb-SelectColumns--box .Sqb-List-search input::-ms-input-placeholder {\n color: #b8bbc3;\n}\n.Sqb-SelectColumns--box.greenGrass .Sqb-List-item:not(.disabled):hover,\n.Sqb-SelectColumns--box.greenGrass .Sqb-List-item.active {\n background-color: #88bf4d;\n}\n.Sqb-SelectColumns--box.greenGrass .Sqb-List-title.active .List-item-icon {\n color: #88bf4d;\n}\n.Sqb-SelectColumns--box.greenGrass .Sqb-List-title.shrink:hover a {\n color: #88bf4d;\n}\n.Sqb-SelectColumns--box.greenGrass .Sqb-List-title.shrink:hover a .List-item-title {\n color: #88bf4d;\n}\n.Sqb-SelectColumns--box.purple .Sqb-List-item:not(.disabled):hover,\n.Sqb-SelectColumns--box.purple .Sqb-List-item.active {\n background-color: #7172ad;\n}\n.Sqb-SelectColumns--box.purple .Sqb-List-title.active .List-item-icon {\n color: #7172ad;\n}\n.Sqb-SelectColumns--box.purple .Sqb-List-title.shrink:hover a {\n color: #7172ad;\n}\n.Sqb-SelectColumns--box.purple .Sqb-List-title.shrink:hover a .List-item-title {\n color: #7172ad;\n}\n.menu-list {\n border: none !important;\n}\n.menu-list .ant-menu-item:hover {\n color: #88bf4d !important;\n}\n.menu-list .ant-menu-item-selected {\n background-color: #88bf4d !important;\n color: #fff !important;\n border-radius: 4px !important;\n}\n";
3773
3583
  styleInject(css_248z$6);
3774
3584
 
3775
3585
  const NUMBER_GROUP = [SQL_COLUMN_TYPE.FLOAT, SQL_COLUMN_TYPE.LONG, SQL_COLUMN_TYPE.CURRENCY];
@@ -3887,8 +3697,7 @@ const SelectJoinColumn = ({
3887
3697
  })));
3888
3698
  }
3889
3699
  },
3890
- children: jsxs("div", {
3891
- className: 'List-item',
3700
+ children: jsxs("a", {
3892
3701
  children: [jsx("span", {
3893
3702
  className: 'List-item-icon',
3894
3703
  children: jsx(TableIcon, {})
@@ -3907,7 +3716,7 @@ const SelectJoinColumn = ({
3907
3716
  })]
3908
3717
  })
3909
3718
  })
3910
- }), (open || isSummarize) && jsxs(Fragment, {
3719
+ }), open && jsxs(Fragment, {
3911
3720
  children: [!isSummarize && jsx("div", {
3912
3721
  className: cx(`Sqb-List-section`),
3913
3722
  children: jsxs("div", {
@@ -3980,8 +3789,8 @@ const SelectJoinColumn = ({
3980
3789
  realName
3981
3790
  });
3982
3791
  },
3983
- children: [jsxs("div", {
3984
- className: 'p-2 List-item',
3792
+ children: [jsxs("a", {
3793
+ className: 'p-2',
3985
3794
  children: [jsx("span", {
3986
3795
  className: 'List-item-icon',
3987
3796
  children: IconMap[special_type || database_type] || jsx(LetterAaIcon, {})
@@ -4020,8 +3829,7 @@ const SelectFilterColumn = ({
4020
3829
  value,
4021
3830
  onChange,
4022
3831
  didUpdate,
4023
- isCustom: _isCustom = false,
4024
- container: _container = null
3832
+ isCustom: _isCustom = false
4025
3833
  }) => {
4026
3834
  const [curColumn, setCurColumn] = useState(value);
4027
3835
  const [condition, setCondition] = useState(value.condition);
@@ -4438,7 +4246,6 @@ const SelectFilterColumn = ({
4438
4246
  store.setPopup2({
4439
4247
  visible: true,
4440
4248
  node: e.currentTarget,
4441
- container: _container,
4442
4249
  content: jsx(SelectList, {
4443
4250
  value: valType,
4444
4251
  list: store.constantList || [],
@@ -4461,7 +4268,6 @@ const SelectFilterColumn = ({
4461
4268
  store.setPopup2({
4462
4269
  visible: true,
4463
4270
  node: e.currentTarget,
4464
- container: _container,
4465
4271
  content: jsx(SelectList, {
4466
4272
  value: valType,
4467
4273
  list: [{
@@ -4496,7 +4302,6 @@ const SelectFilterColumn = ({
4496
4302
  store.setPopup2({
4497
4303
  visible: true,
4498
4304
  node: e.currentTarget,
4499
- container: _container,
4500
4305
  content: jsx(SelectJoinColumn, {
4501
4306
  data: [..._data],
4502
4307
  value: value,
@@ -5210,17 +5015,17 @@ const IconTypeMap = new Map([[TypeEnum.filter, {
5210
5015
  name: __('SqlQueryBuilder.rowLimit'),
5211
5016
  icon: jsx(RowLimitIcon, {}),
5212
5017
  className: 'rowLimit'
5213
- }], [TypeEnum.union, {
5018
+ }], [TypeEnum.group, {
5214
5019
  name: __('SqlQueryBuilder.union'),
5215
5020
  icon: jsx(GroupIcon, {}),
5216
5021
  className: 'union'
5217
5022
  }]]);
5218
5023
  // 前端展示的icon顺序 随便改不影响逻辑
5219
- const DisplayOrder = [TypeEnum.filter, TypeEnum.summarize, TypeEnum.joinData, TypeEnum.permissionTable, TypeEnum.customColumn, TypeEnum.sort, TypeEnum.rowLimit, TypeEnum.union];
5024
+ const DisplayOrder = [TypeEnum.filter, TypeEnum.summarize, TypeEnum.joinData, TypeEnum.permissionTable, TypeEnum.customColumn, TypeEnum.sort, TypeEnum.rowLimit, TypeEnum.group];
5220
5025
  // js逻辑顺序 正常顺序
5221
- const OrderType = [TypeEnum.data, TypeEnum.joinData, TypeEnum.permissionTable, TypeEnum.customColumn, TypeEnum.filter, TypeEnum.summarize, TypeEnum.sort, TypeEnum.rowLimit, TypeEnum.union];
5026
+ const OrderType = [TypeEnum.data, TypeEnum.joinData, TypeEnum.permissionTable, TypeEnum.customColumn, TypeEnum.filter, TypeEnum.summarize, TypeEnum.sort, TypeEnum.rowLimit, TypeEnum.group];
5222
5027
  // js逻辑顺序 聚合下面的顺序是这个样子
5223
- const OrderNewType = [TypeEnum.sort, TypeEnum.rowLimit, TypeEnum.joinData, TypeEnum.permissionTable, TypeEnum.customColumn, TypeEnum.filter, TypeEnum.summarize, TypeEnum.union];
5028
+ const OrderNewType = [TypeEnum.sort, TypeEnum.rowLimit, TypeEnum.joinData, TypeEnum.permissionTable, TypeEnum.customColumn, TypeEnum.filter, TypeEnum.summarize, TypeEnum.group];
5224
5029
  const metaIcon = (size, handleClick) => {
5225
5030
  return ({
5226
5031
  type
@@ -5325,7 +5130,7 @@ const findNextIcon = (store, props) => {
5325
5130
  if (meta.table2.name) {
5326
5131
  available = OrderType.slice(curLocation + 1);
5327
5132
  } else {
5328
- available = [TypeEnum.customColumn, TypeEnum.filter, TypeEnum.summarize, TypeEnum.union];
5133
+ available = [TypeEnum.customColumn, TypeEnum.filter, TypeEnum.summarize, TypeEnum.group];
5329
5134
  }
5330
5135
  } else {
5331
5136
  if (isLast) {
@@ -5347,7 +5152,7 @@ const findNextIcon = (store, props) => {
5347
5152
  if (meta.customColumn.length || ~joinIndex && prevList[joinIndex].table2.name) {
5348
5153
  available = OrderType.slice(curLocation + 1);
5349
5154
  } else {
5350
- available = [TypeEnum.filter, TypeEnum.summarize, TypeEnum.union];
5155
+ available = [TypeEnum.filter, TypeEnum.summarize, TypeEnum.group];
5351
5156
  }
5352
5157
  } else {
5353
5158
  if (isLast) {
@@ -5380,7 +5185,7 @@ const findNextIcon = (store, props) => {
5380
5185
  if (isLast) {
5381
5186
  if (!ExistAboveGroupBy) {
5382
5187
  if (meta.group.length && !meta.by.length) ; else if (!meta.group.length && !meta.by.length) {
5383
- available = [TypeEnum.sort, TypeEnum.rowLimit, TypeEnum.union];
5188
+ available = [TypeEnum.sort, TypeEnum.rowLimit, TypeEnum.group];
5384
5189
  } else {
5385
5190
  available = OrderNewType;
5386
5191
  }
@@ -5583,7 +5388,7 @@ const TableData = props => {
5583
5388
  }
5584
5389
  })
5585
5390
  }), selected ? `${meta.table.datasourceName}.${meta.table.name} ${meta.table?.alias ? `as ${meta.table?.alias}` : ''}` : __('SqlQueryBuilder.pickTable')]
5586
- }), selected && store.showMainColumn[groupIndex] && store.showFields && jsx("div", {
5391
+ }), selected && store.showMainColumn && store.showFields && jsx("div", {
5587
5392
  className: `Sqb-TableColumns`,
5588
5393
  onClick: selectColumns,
5589
5394
  children: __('SqlQueryBuilder.columns')
@@ -5605,8 +5410,8 @@ var FlagLocation;
5605
5410
  })(FlagLocation || (FlagLocation = {}));
5606
5411
  var ExpressionsEnum;
5607
5412
  (function (ExpressionsEnum) {
5608
- ExpressionsEnum["LEFT"] = "left";
5609
- ExpressionsEnum["RIGHT"] = "right";
5413
+ ExpressionsEnum["LEFT"] = "left_column";
5414
+ ExpressionsEnum["RIGHT"] = "right_column";
5610
5415
  })(ExpressionsEnum || (ExpressionsEnum = {}));
5611
5416
  const JoinData = props => {
5612
5417
  const {
@@ -5621,12 +5426,7 @@ const JoinData = props => {
5621
5426
  let table1Selected = Boolean(meta.table1.name);
5622
5427
  let table2Selected = Boolean(meta.table2.name);
5623
5428
  let subQuerySelected = Boolean(meta.subquery?.[0]?.table?.name);
5624
- let columnsSelected = meta.table1.quotes && meta.table2.quotes;
5625
- // useEffect(() => {
5626
- // let newMetaList = store.metaList[groupIndex].list.slice();
5627
- // newMetaList[index] = setQuotes(meta);
5628
- // store.setMeta(newMetaList, groupIndex);
5629
- // }, []);
5429
+ let columnsSelected = meta.table1.column && meta.table2.column;
5630
5430
  function selectColumns(e) {
5631
5431
  let columns = meta.columns;
5632
5432
  !meta.readonly && store.setPopup({
@@ -5695,9 +5495,8 @@ const JoinData = props => {
5695
5495
  name: tableName,
5696
5496
  tableUuid: data.tableUuid || uuidv4('table'),
5697
5497
  alias,
5698
- fieldAlias: '',
5699
- fieldUuid: '',
5700
- quotes: '',
5498
+ column: '',
5499
+ column_id: '',
5701
5500
  datasourceId: data.datasourceId,
5702
5501
  datasourceName: data.datasourceName
5703
5502
  };
@@ -5740,9 +5539,8 @@ const JoinData = props => {
5740
5539
  let type = node.getAttribute('v-data');
5741
5540
  let data = [];
5742
5541
  let value = {
5743
- name: meta[type].quotes || meta[type].fieldAlias,
5744
- quotes: meta[type].quotes,
5745
- id: meta[type].fieldUuid,
5542
+ name: meta[type].column,
5543
+ id: meta[type].column_id,
5746
5544
  table: meta[type].name,
5747
5545
  tableId: meta[type].id,
5748
5546
  fieldUuid: meta[type].fieldUuid || uuidv4('field'),
@@ -5860,21 +5658,11 @@ const JoinData = props => {
5860
5658
  sql,
5861
5659
  datasourceId,
5862
5660
  datasourceName,
5863
- id = '',
5864
- fieldAlias = '',
5865
- fieldUuid = '',
5866
- quotes
5661
+ id = ''
5867
5662
  } = record;
5868
5663
  let newMeta = store.metaList[groupIndex].list.slice();
5869
- if (alias === SummarizeAlias$1) {
5870
- newMeta[index][type].fieldAlias = fieldAlias;
5871
- newMeta[index][type].fieldUuid = fieldUuid;
5872
- newMeta[index][type].quotes = quotes;
5873
- } else {
5874
- newMeta[index][type].fieldAlias = name;
5875
- newMeta[index][type].fieldUuid = id;
5876
- newMeta[index][type].quotes = name;
5877
- }
5664
+ newMeta[index][type].column = name;
5665
+ newMeta[index][type].column_id = id;
5878
5666
  if (type === FlagLocation.TABLE_1) {
5879
5667
  if (newMeta[index][type].alias !== alias) {
5880
5668
  newMeta[index][type].alias = alias;
@@ -5902,8 +5690,8 @@ const JoinData = props => {
5902
5690
  let index = findIndex(store.metaList[groupIndex].list, meta);
5903
5691
  let table_type = type === ExpressionsEnum.LEFT ? FlagLocation.TABLE_1 : FlagLocation.TABLE_2;
5904
5692
  let value = {
5905
- name: meta.expressions[_ind][`${type}_quotes`] || meta.expressions[_ind][`${type}_fieldAlias`],
5906
- id: meta.expressions[_ind][`${type}_fieldUuid`],
5693
+ name: meta.expressions[_ind][type],
5694
+ id: meta.expressions[_ind][`${type}_id`],
5907
5695
  table: meta[table_type].name,
5908
5696
  fieldUuid: meta[table_type].fieldUuid || uuidv4('field'),
5909
5697
  fieldAlias: meta[table_type].fieldAlias || '',
@@ -6028,23 +5816,11 @@ const JoinData = props => {
6028
5816
  sql,
6029
5817
  datasourceId,
6030
5818
  datasourceName,
6031
- id = '',
6032
- fieldAlias,
6033
- fieldUuid,
6034
- quotes = ''
5819
+ id = ''
6035
5820
  } = record;
6036
5821
  let newMeta = store.metaList[groupIndex].list.slice();
6037
- if (alias === SummarizeAlias$1) {
6038
- newMeta[index].expressions[_ind][`${type}_fieldAlias`] = fieldAlias;
6039
- newMeta[index].expressions[_ind][`${type}_fieldUuid`] = fieldUuid;
6040
- newMeta[index].expressions[_ind][`${type}_quotes`] = quotes;
6041
- } else {
6042
- newMeta[index].expressions[_ind][`${type}_fieldAlias`] = name;
6043
- newMeta[index].expressions[_ind][`${type}_fieldUuid`] = id;
6044
- newMeta[index].expressions[_ind][`${type}_quotes`] = name;
6045
- }
6046
- // (newMeta[index] as MetaJoin).expressions[_ind][type] = name;
6047
- // (newMeta[index] as MetaJoin).expressions[_ind][`${type}_id`] = id;
5822
+ newMeta[index].expressions[_ind][type] = name;
5823
+ newMeta[index].expressions[_ind][`${type}_id`] = id;
6048
5824
  store.setMeta(newMeta, groupIndex);
6049
5825
  store.setPopup({
6050
5826
  visible: false
@@ -6126,11 +5902,10 @@ const JoinData = props => {
6126
5902
  let oldList = cloneDeep(newMeta[index].subquery);
6127
5903
  let _toolbar = subToolbar || toolbar;
6128
5904
  _toolbar = _toolbar.filter(v => v !== 'group'); // 子查询不需要分组
6129
- let zIndex = store.popupContainer.current ? getMaxZIndexInParents(store.popupContainer.current) : 0;
6130
5905
  let o = Modal2.openModal({
6131
5906
  title: __('SqlQueryBuilder.subquery'),
6132
5907
  transparentMask: true,
6133
- zIndex: Number(zIndex),
5908
+ zIndex: 200,
6134
5909
  content: jsx(Fragment, {
6135
5910
  children: jsx(SqlVisionBuilder, {
6136
5911
  ...other,
@@ -6148,8 +5923,8 @@ const JoinData = props => {
6148
5923
  newMeta[index].subquery = newList;
6149
5924
  newMeta[index].table2 = {
6150
5925
  ...newList[0].table,
6151
- fieldAlias: '',
6152
- fieldUuid: ''
5926
+ column: '',
5927
+ column_id: ''
6153
5928
  };
6154
5929
  const items = getSubColumns(newList);
6155
5930
  const newColumns = items.flatMap(item => item.columns);
@@ -6174,9 +5949,8 @@ const JoinData = props => {
6174
5949
  let newMeta = store.metaList[groupIndex].list.slice();
6175
5950
  newMeta[index].isSubquery = !newMeta[index].isSubquery;
6176
5951
  newMeta[index].table2 = {
6177
- quotes: '',
6178
- fieldAlias: '',
6179
- fieldUuid: '',
5952
+ column: '',
5953
+ column_id: '',
6180
5954
  name: '',
6181
5955
  // 表名
6182
5956
  tableUuid: '',
@@ -6309,23 +6083,23 @@ const JoinData = props => {
6309
6083
  children: "on"
6310
6084
  }), jsx("div", {
6311
6085
  className: cx(`Sqb-TableName`, {
6312
- notSelected: !meta.table1.quotes
6086
+ notSelected: !meta.table1.column
6313
6087
  }),
6314
6088
  "v-data": FlagLocation.TABLE_1,
6315
6089
  onClick: selectJoinColumn,
6316
- children: meta.table1.quotes ? meta.table1.quotes : __('SqlQueryBuilder.pickTable')
6090
+ children: meta.table1.column ? meta.table1.column : __('SqlQueryBuilder.pickTable')
6317
6091
  }), jsx("span", {
6318
6092
  className: 'mr-2 text-gray-500',
6319
6093
  children: "="
6320
6094
  }), jsx("div", {
6321
6095
  className: cx(`Sqb-TableName`, {
6322
- notSelected: !meta.table2.quotes
6096
+ notSelected: !meta.table2.column
6323
6097
  }),
6324
6098
  "v-data": FlagLocation.TABLE_2,
6325
6099
  onClick: selectJoinColumn,
6326
- children: meta.table2.quotes ? meta.table2.quotes : __('SqlQueryBuilder.pickTable')
6100
+ children: meta.table2.column ? meta.table2.column : __('SqlQueryBuilder.pickTable')
6327
6101
  })]
6328
- }), meta.table1.fieldUuid && meta.table2.fieldUuid && meta.expressions?.map((v, i) => {
6102
+ }), meta.table1.column_id && meta.table2.column_id && meta.expressions?.map((v, i) => {
6329
6103
  return jsxs("div", {
6330
6104
  className: cx(`Sqb-where block`),
6331
6105
  children: [jsx("span", {
@@ -6354,12 +6128,12 @@ const JoinData = props => {
6354
6128
  children: v.left_constant ? v.left_constant : __('SqlQueryBuilder.pickConstant')
6355
6129
  }), (!v.left_type || v.left_type === 'field') && jsx("div", {
6356
6130
  className: cx(`Sqb-TableName`, {
6357
- notSelected: !v.left_quotes
6131
+ notSelected: !v.left_column
6358
6132
  }),
6359
6133
  "v-data": ExpressionsEnum.LEFT,
6360
6134
  "v-index": i,
6361
6135
  onClick: selectMoreJoinColumn,
6362
- children: v.left_quotes ? v.left_quotes : __('SqlQueryBuilder.pickTable')
6136
+ children: v.left_column ? v.left_column : __('SqlQueryBuilder.pickTable')
6363
6137
  }), jsx(Tooltip, {
6364
6138
  title: __('SqlQueryBuilder.switch'),
6365
6139
  children: jsx(Button, {
@@ -6398,12 +6172,12 @@ const JoinData = props => {
6398
6172
  children: v.right_constant ? v.right_constant : __('SqlQueryBuilder.pickConstant')
6399
6173
  }), (!v.right_type || v.right_type === 'field') && jsx("div", {
6400
6174
  className: cx(`Sqb-TableName`, {
6401
- notSelected: !v.right_quotes
6175
+ notSelected: !v.right_column
6402
6176
  }),
6403
6177
  "v-data": ExpressionsEnum.RIGHT,
6404
6178
  "v-index": i,
6405
6179
  onClick: selectMoreJoinColumn,
6406
- children: v.right_quotes ? v.right_quotes : __('SqlQueryBuilder.pickTable')
6180
+ children: v.right_column ? v.right_column : __('SqlQueryBuilder.pickTable')
6407
6181
  }), jsx(Tooltip, {
6408
6182
  title: __('SqlQueryBuilder.switch'),
6409
6183
  children: jsx(Button, {
@@ -6429,15 +6203,14 @@ const JoinData = props => {
6429
6203
  let newMeta = store.metaList[groupIndex].list.slice();
6430
6204
  newMeta[index].expressions.splice(i + 1, 0, {
6431
6205
  operator: 'and',
6432
- left_fieldAlias: '',
6433
- left_fieldUuid: '',
6434
- left_quotes: '',
6206
+ left_column: '',
6207
+ left_column_id: '',
6435
6208
  left_string: '',
6209
+ left_isString: false,
6436
6210
  left_type: 'field',
6437
6211
  left_constant: '',
6438
- right_fieldAlias: '',
6439
- right_fieldUuid: '',
6440
- right_quotes: '',
6212
+ right_column: '',
6213
+ right_column_id: '',
6441
6214
  right_string: '',
6442
6215
  right_isString: false,
6443
6216
  right_type: 'field',
@@ -6462,7 +6235,7 @@ const JoinData = props => {
6462
6235
  })
6463
6236
  })]
6464
6237
  }, i);
6465
- }), meta.table1.fieldUuid && meta.table2.fieldUuid && (meta.expressions?.length || 0) < 1 && jsx(Tooltip, {
6238
+ }), meta.table1.column_id && meta.table2.column_id && (meta.expressions?.length || 0) < 1 && jsx(Tooltip, {
6466
6239
  title: __('SqlQueryBuilder.add'),
6467
6240
  children: jsx(Button, {
6468
6241
  disabled: meta.readonly,
@@ -6475,15 +6248,14 @@ const JoinData = props => {
6475
6248
  let newMeta = store.metaList[groupIndex].list.slice();
6476
6249
  newMeta[index].expressions = [{
6477
6250
  operator: 'and',
6478
- left_fieldAlias: '',
6479
- left_fieldUuid: '',
6480
- left_quotes: '',
6251
+ left_column: '',
6252
+ left_column_id: '',
6481
6253
  left_string: '',
6254
+ left_isString: false,
6482
6255
  left_type: 'field',
6483
6256
  left_constant: '',
6484
- right_fieldAlias: '',
6485
- right_fieldUuid: '',
6486
- right_quotes: '',
6257
+ right_column: '',
6258
+ right_column_id: '',
6487
6259
  right_string: '',
6488
6260
  right_isString: false,
6489
6261
  right_constant: '',
@@ -6634,12 +6406,12 @@ const CaseEditor = props => {
6634
6406
  onOk,
6635
6407
  onCancel
6636
6408
  } = props;
6637
- // const [popup, setPopup] = useState<PopupType>({ visible: false }); // 弹框信息
6409
+ const [popup, setPopup] = useState({
6410
+ visible: false
6411
+ }); // 弹框信息
6638
6412
  const [caseList, setCaseList] = useState(value.formulaList || []);
6639
6413
  const [name, setName] = useState(value?.name || ''); // 表达式名字
6640
6414
  const [ind, setInd] = useState(-1);
6641
- const ref = useRef(null);
6642
- const store = useStore$1();
6643
6415
  const filterCase = useMemo(() => {
6644
6416
  const hasCase = caseList.some(item => item.type === OptionsTypeEnum.OTHER && item.operator === 'case');
6645
6417
  if (hasCase) {
@@ -6651,22 +6423,24 @@ const CaseEditor = props => {
6651
6423
  const usable = useMemo(() => {
6652
6424
  return Array.from(caseList).length > 0 && name;
6653
6425
  }, [caseList, name]);
6654
- // const popupContent = useMemo(() => {
6655
- // let { visible, content } = popup;
6656
- // if (!visible) return null;
6657
- // return content;
6658
- // }, [popup]);
6426
+ const popupContent = useMemo(() => {
6427
+ let {
6428
+ visible,
6429
+ content
6430
+ } = popup;
6431
+ if (!visible) return null;
6432
+ return content;
6433
+ }, [popup]);
6659
6434
  function closePopup() {
6660
- store.setPopup({
6435
+ setPopup({
6661
6436
  visible: false
6662
6437
  });
6663
6438
  }
6664
6439
  // 字段
6665
6440
  function handleField(e, i, val) {
6666
- store.setPopup({
6441
+ setPopup({
6667
6442
  visible: true,
6668
6443
  node: e.currentTarget,
6669
- container: ref.current,
6670
6444
  content: jsx(SelectJoinColumn, {
6671
6445
  data: data,
6672
6446
  value: val,
@@ -6674,13 +6448,8 @@ const CaseEditor = props => {
6674
6448
  isGroup: true,
6675
6449
  // @ts-ignore
6676
6450
  onGroup: data => {
6677
- let _data = cloneDeep(data);
6678
- if (_data.alias != SummarizeAlias$1) {
6679
- _data.fieldAlias = _data.name;
6680
- _data.fieldUuid = uuidv4('field');
6681
- }
6682
6451
  const _caseList = caseList.slice();
6683
- _caseList[i].expression = _data;
6452
+ _caseList[i].expression = data;
6684
6453
  setCaseList(_caseList);
6685
6454
  closePopup();
6686
6455
  }
@@ -6696,23 +6465,16 @@ const CaseEditor = props => {
6696
6465
  };
6697
6466
  // 表达式
6698
6467
  function handleExpression(e, i, val) {
6699
- store.setPopup({
6468
+ setPopup({
6700
6469
  visible: true,
6701
6470
  node: e.currentTarget,
6702
- container: ref.current,
6703
6471
  content: jsx(SelectFilter, {
6704
6472
  isCustom: true,
6705
- container: ref.current,
6706
6473
  data: data,
6707
6474
  value: val,
6708
6475
  onChange: data => {
6709
- let _data = cloneDeep(data);
6710
- if (_data.alias != SummarizeAlias$1) {
6711
- _data.fieldAlias = _data.name;
6712
- _data.fieldUuid = uuidv4('field');
6713
- }
6714
6476
  const _caseList = caseList.slice();
6715
- _caseList[i].expression = _data;
6477
+ _caseList[i].expression = data;
6716
6478
  setCaseList(_caseList);
6717
6479
  closePopup();
6718
6480
  }
@@ -6755,7 +6517,8 @@ const CaseEditor = props => {
6755
6517
  const _onOk = () => {
6756
6518
  typeof onOk === 'function' && onOk?.({
6757
6519
  name,
6758
- formulaList: caseList
6520
+ formulaList: caseList,
6521
+ formula: ''
6759
6522
  });
6760
6523
  };
6761
6524
  // 分段
@@ -6903,7 +6666,6 @@ const CaseEditor = props => {
6903
6666
  };
6904
6667
  return jsxs("div", {
6905
6668
  className: 'custom-box',
6906
- ref: ref,
6907
6669
  children: [jsx(VisualBox$1, {
6908
6670
  children: jsx("div", {
6909
6671
  className: `Sqb-item Sqb-case-editor mb-2 mt-2`,
@@ -7041,6 +6803,13 @@ const CaseEditor = props => {
7041
6803
  })]
7042
6804
  })
7043
6805
  })
6806
+ }), jsx(Popup, {
6807
+ visible: popup.visible,
6808
+ closable: true,
6809
+ node: popup.node,
6810
+ innerSpacing: popup.innerSpacing,
6811
+ hideVisible: closePopup,
6812
+ children: popupContent
7044
6813
  }), jsx("div", {
7045
6814
  className: `btns p-4`,
7046
6815
  children: jsxs("div", {
@@ -7172,15 +6941,14 @@ const CustomColumn = props => {
7172
6941
  }
7173
6942
  return data;
7174
6943
  }
7175
- // 自定义弹窗
6944
+ // 子查询弹窗
7176
6945
  const showSubQuery = (e, i) => {
7177
6946
  let newMeta = store.metaList[groupIndex].list.slice();
7178
6947
  const _value = newMeta[index].customColumn[i] || [];
7179
- let zIndex = store.popupContainer.current ? getMaxZIndexInParents(store.popupContainer.current) : 0;
7180
6948
  let o = Modal2.openModal({
7181
6949
  title: __('SqlQueryBuilder.customExpression'),
7182
6950
  transparentMask: true,
7183
- zIndex: Number(zIndex),
6951
+ zIndex: 200,
7184
6952
  content: jsx(Fragment, {
7185
6953
  children: jsx(Provider, {
7186
6954
  value: store,
@@ -7440,7 +7208,7 @@ const Filter = props => {
7440
7208
  let newMeta = store.metaList[groupIndex].list.slice();
7441
7209
  let val = filter[i];
7442
7210
  if (val.type === Filter_TypeEnum.NOT_EXISTS) {
7443
- showNotExists(i, '');
7211
+ showSubQuery(i, '');
7444
7212
  return;
7445
7213
  }
7446
7214
  let data = getColumns();
@@ -7539,10 +7307,10 @@ const Filter = props => {
7539
7307
  newMeta[index].filter = [..._filter];
7540
7308
  setInd(-1);
7541
7309
  };
7542
- // NotExists 窗口
7543
- const showNotExists = (i, position) => {
7310
+ // 子查询弹窗
7311
+ const showSubQuery = (i, position) => {
7544
7312
  const {
7545
- notExistsToolbar,
7313
+ subToolbar,
7546
7314
  toolbar,
7547
7315
  ...other
7548
7316
  } = store.preProps;
@@ -7550,13 +7318,12 @@ const Filter = props => {
7550
7318
  let index = findIndex(store.metaList[groupIndex].list, meta);
7551
7319
  let _value = position ? [] : newMeta[index].filter[i]?.subquery || [];
7552
7320
  let oldList = position ? [] : cloneDeep(newMeta[index].filter[i]?.subquery || []);
7553
- let _toolbar = notExistsToolbar || toolbar;
7321
+ let _toolbar = subToolbar || toolbar;
7554
7322
  _toolbar = _toolbar.filter(v => v !== 'group'); // 子查询不需要分组
7555
- let zIndex = store.popupContainer.current ? getMaxZIndexInParents(store.popupContainer.current) : null;
7556
7323
  let o = Modal2.openModal({
7557
7324
  title: 'NOT EXISTS',
7558
7325
  transparentMask: true,
7559
- zIndex: Number(zIndex),
7326
+ zIndex: 200,
7560
7327
  content: jsx(Fragment, {
7561
7328
  children: jsx(SqlVisionBuilder, {
7562
7329
  ...other,
@@ -7649,7 +7416,7 @@ const Filter = props => {
7649
7416
  if (type === Filter_TypeEnum.EXPRESSION) {
7650
7417
  handleAdd(_e);
7651
7418
  } else if (type === Filter_TypeEnum.NOT_EXISTS) {
7652
- showNotExists(_index, _type);
7419
+ showSubQuery(_index, _type);
7653
7420
  }
7654
7421
  }
7655
7422
  })
@@ -7716,7 +7483,7 @@ const Filter = props => {
7716
7483
  }, i) : jsxs("div", {
7717
7484
  className: `Sqb-TableName purple-name`,
7718
7485
  onClick: e => handleUpdate(e, i),
7719
- children: [v.type === Filter_TypeEnum.NOT_EXISTS ? 'not exitis ( * )' : v.quotes, jsx("span", {
7486
+ children: [v.quotes, jsx("span", {
7720
7487
  style: {
7721
7488
  fontSize: 0
7722
7489
  },
@@ -7892,7 +7659,7 @@ const GroupBy = props => {
7892
7659
  newMeta[index].by.splice(i, 1, data);
7893
7660
  // @ts-ignore
7894
7661
  newMeta[index].by = newMeta[index].by.map(v => {
7895
- const fieldAlias = `${v.alias}__${v.name}`;
7662
+ const fieldAlias = v.fieldAlias || `${v.alias}__${v.name}`;
7896
7663
  return {
7897
7664
  ...v,
7898
7665
  sql: `${v.alias}.${v.realName || v.name} AS ${fieldAlias}`,
@@ -7926,8 +7693,8 @@ const GroupBy = props => {
7926
7693
  quotes: '',
7927
7694
  datasourceId: '',
7928
7695
  datasourceName: '',
7929
- // column: '',
7930
- // column_id: '',
7696
+ column: '',
7697
+ column_id: '',
7931
7698
  summarizeType: MetaSummarize_Enum.BY
7932
7699
  };
7933
7700
  store.setPopup({
@@ -7944,7 +7711,7 @@ const GroupBy = props => {
7944
7711
  newMeta[index].by.push(data);
7945
7712
  // @ts-ignore
7946
7713
  newMeta[index].by = newMeta[index].by.map(v => {
7947
- const fieldAlias = `${v.alias}__${v.name}`;
7714
+ const fieldAlias = v.fieldAlias || `${v.alias}__${v.name}`;
7948
7715
  return {
7949
7716
  ...v,
7950
7717
  sql: `${v.alias}.${v.realName || v.name} AS ${fieldAlias}`,
@@ -8188,8 +7955,8 @@ const SelectIndex = props => {
8188
7955
  quotes: '',
8189
7956
  datasourceId: '',
8190
7957
  datasourceName: '',
8191
- // column: '',
8192
- // column_id: '',
7958
+ column: '',
7959
+ column_id: '',
8193
7960
  summarizeType: MetaSummarize_Enum.GROUP
8194
7961
  };
8195
7962
  store.setPopup({
@@ -8759,8 +8526,7 @@ const Metabase = props => {
8759
8526
  } = props;
8760
8527
  const store = useStore$1();
8761
8528
  const [saveLoading, setSaveLoading] = useState(false);
8762
- // const popupContainer = useRef();
8763
- // store.setPopupContainer(popupContainer);
8529
+ const popupContainer = useRef();
8764
8530
  const popupContent = useMemo(() => {
8765
8531
  let {
8766
8532
  visible,
@@ -8779,35 +8545,40 @@ const Metabase = props => {
8779
8545
  }, [store.popupData2]);
8780
8546
  const onSave = async () => {
8781
8547
  let intercept = false; // 是否返回
8782
- const _metaList = splitByUnion(store.metaList);
8783
8548
  store.metaList.map(v => {
8784
- if (v.type !== 'union' && !(v.list?.[0]).table.name) {
8549
+ if (v.type !== 'group' && !(v.list?.[0]).table.name) {
8785
8550
  intercept = true;
8786
8551
  return Toast.warning(__('data.pleaseSelectDataTable'));
8787
8552
  }
8788
8553
  });
8789
8554
  if (saveLoading || intercept) return null;
8790
8555
  setSaveLoading(true);
8791
- await onOk?.(_metaList);
8556
+ if (store.toolbar.includes('group')) {
8557
+ // 分组
8558
+ await onOk?.(store.metaList);
8559
+ } else {
8560
+ // 非分组
8561
+ await onOk?.(store.metaList[0].list);
8562
+ }
8792
8563
  setSaveLoading(false);
8793
8564
  };
8794
- let zIndex = store.popupContainer.current ? getMaxZIndexInParents(store.popupContainer.current) : null;
8565
+ let zIndex = popupContainer.current ? getMaxZIndexInParents(popupContainer.current) : null;
8795
8566
  return (
8796
8567
  // @ts-ignore
8797
8568
  jsx(VisualBox, {
8798
- ref: store.popupContainer,
8569
+ ref: popupContainer,
8799
8570
  children: jsxs("div", {
8800
8571
  className: 'Sqb',
8801
8572
  children: [store.metaList.map((v, index) => {
8802
- if (v.type === 'union' && v.union) {
8573
+ if (v.type === 'group' && v.operator) {
8803
8574
  return jsx("div", {
8804
8575
  className: cx(`Sqb-list`),
8805
8576
  children: jsx(RowLimit$1, {
8806
- union: v.union,
8577
+ operator: v.operator,
8807
8578
  meta: v,
8808
8579
  groupIndex: index
8809
8580
  })
8810
- }, 'union' + index);
8581
+ }, 'group' + index);
8811
8582
  }
8812
8583
  return jsx("div", {
8813
8584
  className: cx(`Sqb-list`),
@@ -8832,8 +8603,8 @@ const Metabase = props => {
8832
8603
  disabled: saveLoading,
8833
8604
  onClick: onSave,
8834
8605
  children: btnText || __('SqlQueryBuilder.visualize')
8835
- }) : null, store.popupContainer.current && jsx(Popup, {
8836
- container: store.popupData.container || store.popupContainer.current,
8606
+ }) : null, popupContainer.current && jsx(Popup, {
8607
+ container: popupContainer.current,
8837
8608
  visible: store.popupData.visible,
8838
8609
  node: store.popupData.node,
8839
8610
  closable: store.popupClosable,
@@ -8844,8 +8615,8 @@ const Metabase = props => {
8844
8615
  });
8845
8616
  },
8846
8617
  children: popupContent
8847
- }), store.popupContainer.current && jsx(Popup, {
8848
- container: store.popupData2.container || store.popupContainer.current,
8618
+ }), popupContainer.current && jsx(Popup, {
8619
+ container: popupContainer.current,
8849
8620
  visible: store.popupData2.visible,
8850
8621
  node: store.popupData2.node,
8851
8622
  closable: store.popupClosable2,
@@ -8894,9 +8665,15 @@ const SqlVisionBuilder = /*#__PURE__*/React__default.forwardRef((props, ref) =>
8894
8665
  store.setProps(props);
8895
8666
  }, [props]);
8896
8667
  useEffect(() => {
8897
- const _value = reassembleByUnion(value);
8898
- store.setPreData(_value);
8899
- }, [value]);
8668
+ if (toolbar.includes('group')) {
8669
+ store.setPreData(value);
8670
+ } else {
8671
+ store.setPreData([{
8672
+ name: 'default',
8673
+ list: value
8674
+ }]);
8675
+ }
8676
+ }, [value, toolbar]);
8900
8677
  useEffect(() => {
8901
8678
  store.setSourceList(sourceList);
8902
8679
  }, [sourceList]);