giime 1.0.2-snapshot.3 → 1.0.3-snapshot.1

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/dist/index.css CHANGED
@@ -664,6 +664,9 @@ video {
664
664
  .gm-cursor-grabbing {
665
665
  cursor: grabbing;
666
666
  }
667
+ .gm-cursor-move {
668
+ cursor: move;
669
+ }
667
670
  .gm-cursor-pointer {
668
671
  cursor: pointer;
669
672
  }
@@ -892,56 +895,30 @@ video {
892
895
  margin: 0;
893
896
  }
894
897
 
895
- .gm-upload-preview-dialog[data-v-c615121c] [data-v-c615121c] .el-dialog__body {
896
- padding: 0;
898
+ .gm-flex-center[data-v-c17deec9] {
899
+ align-items: center;
897
900
  }
898
901
 
899
- .gm-upload-file-picture-card[data-v-c615121c] [data-v-c615121c] .el-upload-list__item, .gm-upload-file-picture-card[data-v-c615121c] [data-v-c615121c] .el-upload--picture-card {
900
- width: auto;
901
- height: auto;
902
- }
903
- .gm-upload-file {
904
- line-height: normal;
905
- }
906
- .gm-upload-file li > .el-checkbox {
907
- position: absolute;
908
- left: 10px;
909
- top: 0;
910
- z-index: 9;
911
- }
912
- .gm-upload-file .el-upload-list--picture-card {
913
- gap: 10px;
914
- }
915
- .gm-upload-file .el-upload-list__item {
916
- margin: 0;
917
- border: none;
918
- }
919
- .gm-upload-file .el-upload-list__item-file-name {
920
- line-height: normal;
902
+ .gm-flex-justify-between[data-v-c17deec9] {
903
+ justify-content: space-between;
921
904
  }
922
- .gm-upload-file .el-upload-dragger {
923
- padding: 0;
924
- border: none;
925
- width: 100%;
926
- height: 100%;
927
- display: flex;
905
+ .gm-number-interval-single[data-v-4e6f4d6f] {
906
+ border-radius: var(--el-input-border-radius, var(--el-border-radius-base));
907
+ box-shadow: 0 0 0 1px var(--el-input-border-color, var(--el-border-color)) inset;
908
+ background-color: var(--el-input-bg-color, var(--el-fill-color-blank));
928
909
  }
929
- .gm-upload-file .el-upload--picture-card {
930
- border: none;
910
+ .gm-number-interval-single[data-v-4e6f4d6f] [data-v-4e6f4d6f] .el-input__wrapper {
911
+ box-shadow: none;
912
+ background: none;
931
913
  }
932
914
 
933
- .gm-upload-file-disabled .el-upload--picture-card {
934
- display: none;
935
- }
936
- .gm-upload-file-disabled .el-upload-list__item-status-label {
915
+ .gm-number-interval-close[data-v-4e6f4d6f] {
937
916
  display: none;
938
- }
939
- .gm-flex-center[data-v-c17deec9] {
940
- align-items: center;
917
+ color: var(--el-input-icon-color, var(--el-text-color-placeholder));
941
918
  }
942
919
 
943
- .gm-flex-justify-between[data-v-c17deec9] {
944
- justify-content: space-between;
920
+ .gm-number-interval-single[data-v-4e6f4d6f]:hover .gm-number-interval-close[data-v-4e6f4d6f] {
921
+ display: flex;
945
922
  }
946
923
  [data-v-050a4f74] .gmTableNoBorder .el-table__body .el-table__cell {
947
924
  border-right: none;
@@ -966,9 +943,13 @@ video {
966
943
  [data-v-050a4f74] .gmTableNoBorder .el-table__border-left-patch {
967
944
  height: 0;
968
945
  }
969
- [data-v-195b27e4] .gmSearchForm .el-form-item {
970
- margin-right: 0;
971
- margin-bottom: 4px;
946
+ .gm-upload-pro-preview-dialog[data-v-fbc23b01] [data-v-fbc23b01] .el-dialog__body {
947
+ padding: 0;
948
+ }
949
+
950
+ .gm-upload-pro-file-picture-card[data-v-fbc23b01] [data-v-fbc23b01] .el-upload-list__item, .gm-upload-pro-file-picture-card[data-v-fbc23b01] [data-v-fbc23b01] .el-upload--picture-card {
951
+ width: auto;
952
+ height: auto;
972
953
  }
973
954
  .gm-upload-pro-file {
974
955
  line-height: normal;
@@ -1008,23 +989,9 @@ video {
1008
989
  .gm-upload-pro-file-disabled .el-upload-list__item-status-label {
1009
990
  display: none;
1010
991
  }
1011
- .gm-number-interval-single[data-v-4e6f4d6f] {
1012
- border-radius: var(--el-input-border-radius, var(--el-border-radius-base));
1013
- box-shadow: 0 0 0 1px var(--el-input-border-color, var(--el-border-color)) inset;
1014
- background-color: var(--el-input-bg-color, var(--el-fill-color-blank));
1015
- }
1016
- .gm-number-interval-single[data-v-4e6f4d6f] [data-v-4e6f4d6f] .el-input__wrapper {
1017
- box-shadow: none;
1018
- background: none;
1019
- }
1020
-
1021
- .gm-number-interval-close[data-v-4e6f4d6f] {
1022
- display: none;
1023
- color: var(--el-input-icon-color, var(--el-text-color-placeholder));
1024
- }
1025
-
1026
- .gm-number-interval-single[data-v-4e6f4d6f]:hover .gm-number-interval-close[data-v-4e6f4d6f] {
1027
- display: flex;
992
+ [data-v-195b27e4] .gmSearchForm .el-form-item {
993
+ margin-right: 0;
994
+ margin-bottom: 4px;
1028
995
  }
1029
996
  [data-v-3f2c8504] .gmTableNoBorder .el-table__body .el-table__cell {
1030
997
  border-right: none;
@@ -1049,14 +1016,6 @@ video {
1049
1016
  [data-v-3f2c8504] .gmTableNoBorder .el-table__border-left-patch {
1050
1017
  height: 0;
1051
1018
  }
1052
- .gm-upload-pro-preview-dialog[data-v-fbc23b01] [data-v-fbc23b01] .el-dialog__body {
1053
- padding: 0;
1054
- }
1055
-
1056
- .gm-upload-pro-file-picture-card[data-v-fbc23b01] [data-v-fbc23b01] .el-upload-list__item, .gm-upload-pro-file-picture-card[data-v-fbc23b01] [data-v-fbc23b01] .el-upload--picture-card {
1057
- width: auto;
1058
- height: auto;
1059
- }
1060
1019
  .circular[data-v-d7b04fae] {
1061
1020
  animation: loading-rotate-d7b04fae 2s linear infinite;
1062
1021
  }
@@ -1088,122 +1047,166 @@ video {
1088
1047
  stroke-dashoffset: -120px;
1089
1048
  }
1090
1049
  }
1050
+ .gm-upload-preview-dialog[data-v-c615121c] [data-v-c615121c] .el-dialog__body {
1051
+ padding: 0;
1052
+ }
1053
+
1054
+ .gm-upload-file-picture-card[data-v-c615121c] [data-v-c615121c] .el-upload-list__item, .gm-upload-file-picture-card[data-v-c615121c] [data-v-c615121c] .el-upload--picture-card {
1055
+ width: auto;
1056
+ height: auto;
1057
+ }
1058
+ .gm-upload-file {
1059
+ line-height: normal;
1060
+ }
1061
+ .gm-upload-file li > .el-checkbox {
1062
+ position: absolute;
1063
+ left: 10px;
1064
+ top: 0;
1065
+ z-index: 9;
1066
+ }
1067
+ .gm-upload-file .el-upload-list--picture-card {
1068
+ gap: 10px;
1069
+ }
1070
+ .gm-upload-file .el-upload-list__item {
1071
+ margin: 0;
1072
+ border: none;
1073
+ }
1074
+ .gm-upload-file .el-upload-list__item-file-name {
1075
+ line-height: normal;
1076
+ }
1077
+ .gm-upload-file .el-upload-dragger {
1078
+ padding: 0;
1079
+ border: none;
1080
+ width: 100%;
1081
+ height: 100%;
1082
+ display: flex;
1083
+ }
1084
+ .gm-upload-file .el-upload--picture-card {
1085
+ border: none;
1086
+ }
1087
+
1088
+ .gm-upload-file-disabled .el-upload--picture-card {
1089
+ display: none;
1090
+ }
1091
+ .gm-upload-file-disabled .el-upload-list__item-status-label {
1092
+ display: none;
1093
+ }
1094
+
1095
+ .pagination-container[data-v-47d35e7b] {
1096
+ background: #fff;
1097
+ padding-top: 12px;
1098
+ }
1099
+ .pagination-container.hidden[data-v-47d35e7b] {
1100
+ display: none;
1101
+ }
1102
+
1091
1103
  @charset "UTF-8";
1092
- .table-custom-header-drawer .el-drawer__header {
1104
+ .custom-operate-drawer .el-drawer__header {
1093
1105
  padding: 10px 15px;
1094
1106
  margin: 0;
1095
1107
  border-bottom: 1px solid #ebeef5;
1096
1108
  }
1097
- .table-custom-header-drawer .el-drawer__title {
1109
+ .custom-operate-drawer .el-drawer__title {
1098
1110
  font-size: 14px;
1099
1111
  color: #333;
1100
1112
  }
1101
- .table-custom-header-drawer .el-drawer__body {
1113
+ .custom-operate-drawer .el-drawer__body {
1102
1114
  padding: 15px;
1103
1115
  }
1104
- .table-custom-header-drawer .el-drawer__footer {
1116
+ .custom-operate-drawer .el-drawer__footer {
1105
1117
  padding: 10px 15px;
1106
1118
  border-top: 1px solid #ebeef5;
1107
1119
  }
1108
- .table-custom-header-drawer .el-checkbox {
1120
+ .custom-operate-drawer .el-checkbox {
1109
1121
  display: flex;
1110
1122
  align-items: center;
1111
1123
  }
1112
- .table-custom-header-drawer .el-input__inner {
1124
+ .custom-operate-drawer .el-input__inner {
1113
1125
  text-align: center;
1114
1126
  }
1115
- .table-custom-header-drawer .el-input__suffix {
1127
+ .custom-operate-drawer .el-input__suffix {
1116
1128
  position: absolute;
1117
1129
  right: 10px;
1118
1130
  }
1119
- .table-custom-header-drawer .custom-content li {
1131
+ .custom-operate-drawer .custom-content li {
1120
1132
  display: flex;
1121
1133
  align-items: center;
1122
1134
  justify-content: center;
1123
1135
  height: 44px;
1124
1136
  }
1125
- .table-custom-header-drawer .custom-group {
1137
+ .custom-operate-drawer .custom-group {
1126
1138
  max-height: calc(100vh - 226px);
1127
1139
  overflow-y: auto;
1128
1140
  }
1129
- .table-custom-header-drawer .custom-group::-webkit-scrollbar {
1141
+ .custom-operate-drawer .custom-group::-webkit-scrollbar {
1130
1142
  /*滚动条整体样式*/
1131
1143
  width: 4px;
1132
1144
  /*高宽分别对应横竖滚动条的尺寸*/
1133
1145
  height: 1px;
1134
1146
  }
1135
- .table-custom-header-drawer .custom-group::-webkit-scrollbar-thumb {
1147
+ .custom-operate-drawer .custom-group::-webkit-scrollbar-thumb {
1136
1148
  /*滚动条里面小方块*/
1137
1149
  border-radius: 10px;
1138
1150
  box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.1);
1139
1151
  background: #999;
1140
1152
  }
1141
- .table-custom-header-drawer .custom-group::-webkit-scrollbar-track {
1153
+ .custom-operate-drawer .custom-group::-webkit-scrollbar-track {
1142
1154
  /*滚动条里面轨道*/
1143
1155
  box-shadow: inset 0 0 3px rgba(0, 0, 0, 0.1);
1144
1156
  border-radius: 10px;
1145
1157
  background: #eee;
1146
1158
  }
1147
-
1148
- .pagination-container[data-v-47d35e7b] {
1149
- background: #fff;
1150
- padding-top: 12px;
1151
- }
1152
- .pagination-container.hidden[data-v-47d35e7b] {
1153
- display: none;
1154
- }
1155
-
1156
1159
  @charset "UTF-8";
1157
- .custom-operate-drawer .el-drawer__header {
1160
+ .table-custom-header-drawer .el-drawer__header {
1158
1161
  padding: 10px 15px;
1159
1162
  margin: 0;
1160
1163
  border-bottom: 1px solid #ebeef5;
1161
1164
  }
1162
- .custom-operate-drawer .el-drawer__title {
1165
+ .table-custom-header-drawer .el-drawer__title {
1163
1166
  font-size: 14px;
1164
1167
  color: #333;
1165
1168
  }
1166
- .custom-operate-drawer .el-drawer__body {
1169
+ .table-custom-header-drawer .el-drawer__body {
1167
1170
  padding: 15px;
1168
1171
  }
1169
- .custom-operate-drawer .el-drawer__footer {
1172
+ .table-custom-header-drawer .el-drawer__footer {
1170
1173
  padding: 10px 15px;
1171
1174
  border-top: 1px solid #ebeef5;
1172
1175
  }
1173
- .custom-operate-drawer .el-checkbox {
1176
+ .table-custom-header-drawer .el-checkbox {
1174
1177
  display: flex;
1175
1178
  align-items: center;
1176
1179
  }
1177
- .custom-operate-drawer .el-input__inner {
1180
+ .table-custom-header-drawer .el-input__inner {
1178
1181
  text-align: center;
1179
1182
  }
1180
- .custom-operate-drawer .el-input__suffix {
1183
+ .table-custom-header-drawer .el-input__suffix {
1181
1184
  position: absolute;
1182
1185
  right: 10px;
1183
1186
  }
1184
- .custom-operate-drawer .custom-content li {
1187
+ .table-custom-header-drawer .custom-content li {
1185
1188
  display: flex;
1186
1189
  align-items: center;
1187
1190
  justify-content: center;
1188
1191
  height: 44px;
1189
1192
  }
1190
- .custom-operate-drawer .custom-group {
1193
+ .table-custom-header-drawer .custom-group {
1191
1194
  max-height: calc(100vh - 226px);
1192
1195
  overflow-y: auto;
1193
1196
  }
1194
- .custom-operate-drawer .custom-group::-webkit-scrollbar {
1197
+ .table-custom-header-drawer .custom-group::-webkit-scrollbar {
1195
1198
  /*滚动条整体样式*/
1196
1199
  width: 4px;
1197
1200
  /*高宽分别对应横竖滚动条的尺寸*/
1198
1201
  height: 1px;
1199
1202
  }
1200
- .custom-operate-drawer .custom-group::-webkit-scrollbar-thumb {
1203
+ .table-custom-header-drawer .custom-group::-webkit-scrollbar-thumb {
1201
1204
  /*滚动条里面小方块*/
1202
1205
  border-radius: 10px;
1203
1206
  box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.1);
1204
1207
  background: #999;
1205
1208
  }
1206
- .custom-operate-drawer .custom-group::-webkit-scrollbar-track {
1209
+ .table-custom-header-drawer .custom-group::-webkit-scrollbar-track {
1207
1210
  /*滚动条里面轨道*/
1208
1211
  box-shadow: inset 0 0 3px rgba(0, 0, 0, 0.1);
1209
1212
  border-radius: 10px;
@@ -72,9 +72,16 @@ var TableColumnVNodeRenderer = /* @__PURE__ */ defineComponent({
72
72
  };
73
73
  const render = computed(() => {
74
74
  const vnodeArray = Array.isArray(props.vnode) ? props.vnode : [props.vnode];
75
- return vnodeArray.map((vnode) => {
75
+ const propOrder = new Map(props.propsList.map((p, i) => [p.prop, i]));
76
+ const isLeafCol = (v) => v?.type?.name === "GmTableColumnPro";
77
+ const canReorder = vnodeArray.length > 0 && vnodeArray.every((v) => isLeafCol(v) && v?.props?.prop != null && propOrder.has(v.props.prop));
78
+ const orderedVnodes = canReorder ? [...vnodeArray].sort((a, b) => propOrder.get(a.props.prop) - propOrder.get(b.props.prop)) : vnodeArray;
79
+ return orderedVnodes.map((vnode) => {
76
80
  const processed = processVNode(vnode);
77
- return processed ? h(processed) : null;
81
+ if (!processed) return null;
82
+ return canReorder ? h(processed, {
83
+ key: vnode.props.prop
84
+ }) : h(processed);
78
85
  }).filter(Boolean);
79
86
  });
80
87
  return () => render.value;
@@ -1 +1 @@
1
- {"version":3,"file":"TableColumnVNodeRenderer.mjs","sources":["../../../../../../../packages/components/src/composite/tablePro/TableColumnVNodeRenderer.tsx"],"sourcesContent":["// TableColumnVNodeRenderer - 支持多级表头\nimport { computed, defineComponent, h, cloneVNode } from 'vue';\nimport type { TableColumnProProps } from './tableColumnPro/tableColumnPro';\nimport type { PropType, VNode } from 'vue';\n\nexport default defineComponent({\n functional: true,\n props: {\n // 当前原始vnode vue模板中的attribute\n vnode: {\n type: [Object, Array],\n required: true,\n },\n // 真实渲染的propsList\n propsList: {\n type: Array as PropType<TableColumnProProps[]>,\n default: () => [],\n },\n defaultPropsList: {\n type: Array as PropType<TableColumnProProps[]>,\n default: () => [],\n },\n },\n setup(props) {\n /** 合并propsList和defaultPropsList */\n const mergePropsList = computed(() => {\n return props.defaultPropsList.map(it => {\n const findProp = props.propsList.find(item => item.prop === it.prop);\n if (findProp) {\n return findProp;\n }\n return it;\n });\n });\n\n /**\n * 递归处理 vnode 树,应用 propsList 配置\n * @param vnode 要处理的 vnode\n * @returns 处理后的 vnode\n */\n const processVNode = (vnode: any): any => {\n if (!vnode) return null;\n\n // 如果是 GmTableColumnPro,查找并应用配置\n if (vnode.type?.name === 'GmTableColumnPro') {\n // type=\"edit\" 的列由 TablePro 的 gmEdit 列统一处理,这里跳过\n // 直接检查 vnode.props.type,避免因 prop 相同导致的误匹配\n if (vnode.props?.type === 'edit') {\n return null;\n }\n\n const propsConfig = mergePropsList.value.find(it => it.prop === vnode.props?.prop);\n\n // 如果配置中标记为不显示,跳过渲染\n if (propsConfig && !propsConfig.isShow) {\n return null;\n }\n\n // 应用配置到 vnode props\n if (propsConfig) {\n const newProps = {\n ...vnode.props,\n width: propsConfig.width,\n label: propsConfig.label,\n fixed: propsConfig.fixed,\n };\n return cloneVNode(vnode, newProps);\n }\n\n return vnode;\n }\n\n // 如果是其他组件(如 gm-table-column 用于多级表头),递归处理子节点\n if (vnode.children) {\n let newChildren = vnode.children;\n\n // 如果 children 是对象(包含 slots),递归处理 default slot\n if (typeof vnode.children === 'object' && vnode.children.default) {\n const originalDefault = vnode.children.default;\n newChildren = {\n ...vnode.children,\n default: (slotProps: any) => {\n const childVnodes = originalDefault(slotProps);\n if (Array.isArray(childVnodes)) {\n return childVnodes.map(processVNode).filter(Boolean);\n }\n return processVNode(childVnodes);\n },\n };\n }\n // 如果 children 是数组,递归处理每个子节点\n else if (Array.isArray(vnode.children)) {\n newChildren = vnode.children.map(processVNode).filter(Boolean);\n }\n\n return cloneVNode(vnode, vnode.props, newChildren);\n }\n\n return vnode;\n };\n\n const render = computed(() => {\n const vnodeArray = Array.isArray(props.vnode) ? props.vnode : [props.vnode];\n return vnodeArray\n .map(vnode => {\n const processed = processVNode(vnode);\n return processed ? h(processed) : null;\n })\n .filter(Boolean);\n });\n\n return () => render.value;\n },\n});\n"],"names":["functional","props","vnode","type","Object","Array","required","propsList","default","defaultPropsList","setup","mergePropsList","computed","map","it","findProp","find","item","prop","processVNode","name","propsConfig","value","isShow","newProps","width","label","fixed","cloneVNode","children","newChildren","originalDefault","slotProps","childVnodes","isArray","filter","Boolean","render","vnodeArray","processed","h"],"mappings":"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"}
1
+ {"version":3,"file":"TableColumnVNodeRenderer.mjs","sources":["../../../../../../../packages/components/src/composite/tablePro/TableColumnVNodeRenderer.tsx"],"sourcesContent":["// TableColumnVNodeRenderer - 支持多级表头\nimport { computed, defineComponent, h, cloneVNode } from 'vue';\nimport type { TableColumnProProps } from './tableColumnPro/tableColumnPro';\nimport type { PropType, VNode } from 'vue';\n\nexport default defineComponent({\n functional: true,\n props: {\n // 当前原始vnode vue模板中的attribute\n vnode: {\n type: [Object, Array],\n required: true,\n },\n // 真实渲染的propsList\n propsList: {\n type: Array as PropType<TableColumnProProps[]>,\n default: () => [],\n },\n defaultPropsList: {\n type: Array as PropType<TableColumnProProps[]>,\n default: () => [],\n },\n },\n setup(props) {\n /** 合并propsList和defaultPropsList */\n const mergePropsList = computed(() => {\n return props.defaultPropsList.map(it => {\n const findProp = props.propsList.find(item => item.prop === it.prop);\n if (findProp) {\n return findProp;\n }\n return it;\n });\n });\n\n /**\n * 递归处理 vnode 树,应用 propsList 配置\n * @param vnode 要处理的 vnode\n * @returns 处理后的 vnode\n */\n const processVNode = (vnode: any): any => {\n if (!vnode) return null;\n\n // 如果是 GmTableColumnPro,查找并应用配置\n if (vnode.type?.name === 'GmTableColumnPro') {\n // type=\"edit\" 的列由 TablePro 的 gmEdit 列统一处理,这里跳过\n // 直接检查 vnode.props.type,避免因 prop 相同导致的误匹配\n if (vnode.props?.type === 'edit') {\n return null;\n }\n\n const propsConfig = mergePropsList.value.find(it => it.prop === vnode.props?.prop);\n\n // 如果配置中标记为不显示,跳过渲染\n if (propsConfig && !propsConfig.isShow) {\n return null;\n }\n\n // 应用配置到 vnode props\n if (propsConfig) {\n const newProps = {\n ...vnode.props,\n width: propsConfig.width,\n label: propsConfig.label,\n fixed: propsConfig.fixed,\n };\n return cloneVNode(vnode, newProps);\n }\n\n return vnode;\n }\n\n // 如果是其他组件(如 gm-table-column 用于多级表头),递归处理子节点\n if (vnode.children) {\n let newChildren = vnode.children;\n\n // 如果 children 是对象(包含 slots),递归处理 default slot\n if (typeof vnode.children === 'object' && vnode.children.default) {\n const originalDefault = vnode.children.default;\n newChildren = {\n ...vnode.children,\n default: (slotProps: any) => {\n const childVnodes = originalDefault(slotProps);\n if (Array.isArray(childVnodes)) {\n return childVnodes.map(processVNode).filter(Boolean);\n }\n return processVNode(childVnodes);\n },\n };\n }\n // 如果 children 是数组,递归处理每个子节点\n else if (Array.isArray(vnode.children)) {\n newChildren = vnode.children.map(processVNode).filter(Boolean);\n }\n\n return cloneVNode(vnode, vnode.props, newChildren);\n }\n\n return vnode;\n };\n\n const render = computed(() => {\n const vnodeArray = Array.isArray(props.vnode) ? props.vnode : [props.vnode];\n // 按 propsList(已保存/拖拽后的顺序)对顶层列重排。\n // 仅当所有顶层列都是可在 propsList 中定位顺序的叶子列时才重排;\n // 含多级表头(分组列)等无法定位顺序的列时,保持模板原始顺序,不参与排序。\n const propOrder = new Map(props.propsList.map((p, i) => [p.prop, i]));\n const isLeafCol = (v: any) => v?.type?.name === 'GmTableColumnPro';\n const canReorder =\n vnodeArray.length > 0 && vnodeArray.every((v: any) => isLeafCol(v) && v?.props?.prop != null && propOrder.has(v.props.prop));\n const orderedVnodes = canReorder\n ? [...vnodeArray].sort((a: any, b: any) => propOrder.get(a.props.prop)! - propOrder.get(b.props.prop)!)\n : vnodeArray;\n return orderedVnodes\n .map((vnode: any) => {\n const processed = processVNode(vnode);\n if (!processed) return null;\n // 重排场景下为每列设置稳定 key(= prop):让 Vue「移动」列实例而非就地复用,\n // 从而真正改变 .hidden-columns 的 DOM 顺序,触发 el-table 的 MutationObserver 重新排序列。\n // 否则就地 patch 不会移动 DOM 节点,列顺序不会生效。\n // 多级表头(canReorder=false)保持原有无 key 行为,不引入任何变化。\n return canReorder ? h(processed, { key: vnode.props.prop }) : h(processed);\n })\n .filter(Boolean);\n });\n\n return () => render.value;\n },\n});\n"],"names":["functional","props","vnode","type","Object","Array","required","propsList","default","defaultPropsList","setup","mergePropsList","computed","map","it","findProp","find","item","prop","processVNode","name","propsConfig","value","isShow","newProps","width","label","fixed","cloneVNode","children","newChildren","originalDefault","slotProps","childVnodes","isArray","filter","Boolean","render","vnodeArray","propOrder","Map","p","i","isLeafCol","v","canReorder","length","every","has","orderedVnodes","sort","a","b","get","processed","h","key"],"mappings":"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"}
@@ -1,10 +1,11 @@
1
- import { defineComponent, useModel, ref, computed, watch, onMounted, resolveComponent, createBlock, openBlock, createSlots, withCtx, createElementVNode, createVNode, unref, createTextVNode, toDisplayString, createElementBlock, createCommentVNode, normalizeClass, mergeModels } from 'vue';
1
+ import { defineComponent, useModel, ref, computed, nextTick, watch, onMounted, resolveComponent, createBlock, openBlock, createSlots, withCtx, createElementVNode, createVNode, unref, createTextVNode, toDisplayString, createElementBlock, createCommentVNode, normalizeClass, mergeModels } from 'vue';
2
2
  import { useCloned } from '@vueuse/core';
3
+ import { useDraggable } from 'vue-draggable-plus';
3
4
  import '../../../../../hooks/index.mjs';
4
5
  import { GmMessage } from '../../../plugins/message/index.mjs';
5
6
  import { cloneDeep } from 'lodash-es';
6
7
  import { isNil } from '../../../../../utils/src/is.mjs';
7
- import { InfoFilled, IceCreamRound } from '@element-plus/icons-vue';
8
+ import { InfoFilled, IceCreamRound, Rank } from '@element-plus/icons-vue';
8
9
  import { tableHeaderFormProps } from './tableHeaderForm.mjs';
9
10
  import { useCustomSettingsStore } from '../../../../../hooks/store/useCustomSettings/index.mjs';
10
11
 
@@ -39,9 +40,25 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
39
40
  const isInited = ref(false);
40
41
  const { cloned: clonedColPropsList, sync: syncPropsList } = useCloned(colPropsList);
41
42
  const defaultPropsList = computed(() => cloneDeep(props.colDefaultPropsList));
42
- watch(isShowDrawer, (newValue) => {
43
+ const tableRef = ref();
44
+ const draggable = useDraggable(null, clonedColPropsList, {
45
+ immediate: false,
46
+ animation: 150,
47
+ handle: ".gm-drag-handle"
48
+ });
49
+ const bindDraggable = async () => {
50
+ await nextTick();
51
+ const tbody = tableRef.value?.$el?.querySelector(".el-table__body-wrapper tbody");
52
+ if (tbody) {
53
+ draggable.start(tbody);
54
+ }
55
+ };
56
+ watch(isShowDrawer, async (newValue) => {
43
57
  if (newValue) {
44
58
  clonedColPropsList.value = cloneDeep(colPropsList.value);
59
+ await bindDraggable();
60
+ } else {
61
+ draggable.destroy();
45
62
  }
46
63
  });
47
64
  const customSettingsValue = computed(() => customSettingsStore.customSettings[props.keyWord]?.[props.type] || []);
@@ -49,12 +66,30 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
49
66
  const updateColumns = () => {
50
67
  colPropsList.value = clonedColPropsList.value;
51
68
  };
69
+ const applySavedOrder = (defaultOrdered, savedList) => {
70
+ const savedProps = savedList.map((s) => s.prop).filter((p) => defaultOrdered.some((d) => d.prop === p));
71
+ if (!savedProps.length) {
72
+ return defaultOrdered;
73
+ }
74
+ const result = savedProps.map((p) => defaultOrdered.find((d) => d.prop === p));
75
+ let cursor = -1;
76
+ for (const d of defaultOrdered) {
77
+ const idx = result.findIndex((r) => r.prop === d.prop);
78
+ if (idx !== -1) {
79
+ cursor = idx;
80
+ } else {
81
+ result.splice(cursor + 1, 0, d);
82
+ cursor += 1;
83
+ }
84
+ }
85
+ return result;
86
+ };
52
87
  const initColumns = async () => {
53
88
  try {
54
89
  await customSettingsStore.getCustomSettings({ key_word: props.keyWord, type: props.type }, { defaultValue: [] });
55
90
  } catch {
56
91
  }
57
- clonedColPropsList.value = defaultPropsList.value.map((it) => {
92
+ const merged = defaultPropsList.value.map((it) => {
58
93
  const findItem = clonedStore.value.find((v) => v.prop === it.prop);
59
94
  if (findItem) {
60
95
  it.isShow = findItem.isShow;
@@ -65,6 +100,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
65
100
  }
66
101
  return it;
67
102
  });
103
+ clonedColPropsList.value = applySavedOrder(merged, clonedStore.value);
68
104
  updateColumns();
69
105
  isInited.value = true;
70
106
  };
@@ -188,14 +224,17 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
188
224
  ])
189
225
  ]),
190
226
  createVNode(_component_gm_table, {
227
+ ref_key: "tableRef",
228
+ ref: tableRef,
191
229
  data: unref(clonedColPropsList),
230
+ "row-key": "prop",
192
231
  "header-cell-style": { background: "#F5F7FA", color: "#333" },
193
232
  style: { "width": "100%" }
194
233
  }, {
195
234
  default: withCtx(() => [
196
235
  createVNode(_component_gm_table_column, {
197
236
  align: "left",
198
- width: "80"
237
+ width: "50"
199
238
  }, {
200
239
  header: withCtx(() => [
201
240
  createVNode(_component_gm_checkbox, {
@@ -228,7 +267,10 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
228
267
  _: 1
229
268
  /* STABLE */
230
269
  }),
231
- createVNode(_component_gm_table_column, { label: "\u5217\u5BBD" }, {
270
+ createVNode(_component_gm_table_column, {
271
+ label: "\u5217\u5BBD",
272
+ width: "160"
273
+ }, {
232
274
  default: withCtx(({ row }) => [
233
275
  createVNode(_component_gm_input, {
234
276
  modelValue: row.width,
@@ -241,7 +283,10 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
241
283
  _: 1
242
284
  /* STABLE */
243
285
  }),
244
- createVNode(_component_gm_table_column, { label: "\u56FA\u5B9A" }, {
286
+ createVNode(_component_gm_table_column, {
287
+ label: "\u56FA\u5B9A",
288
+ width: "100"
289
+ }, {
245
290
  default: withCtx(({ row }) => [
246
291
  row.type !== "edit" ? (openBlock(), createElementBlock("div", _hoisted_5, [
247
292
  createVNode(
@@ -302,6 +347,27 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
302
347
  ]),
303
348
  _: 1
304
349
  /* STABLE */
350
+ }),
351
+ createVNode(_component_gm_table_column, {
352
+ label: "\u62D6\u52A8\u6392\u5E8F",
353
+ align: "center",
354
+ width: "100"
355
+ }, {
356
+ default: withCtx(({ row }) => [
357
+ row.type !== "edit" ? (openBlock(), createBlock(_component_gm_icon, {
358
+ key: 0,
359
+ class: "gm-drag-handle gm-cursor-move gm-text-blue-500",
360
+ size: "18"
361
+ }, {
362
+ default: withCtx(() => [
363
+ createVNode(unref(Rank))
364
+ ]),
365
+ _: 1
366
+ /* STABLE */
367
+ })) : createCommentVNode("v-if", true)
368
+ ]),
369
+ _: 1
370
+ /* STABLE */
305
371
  })
306
372
  ]),
307
373
  _: 1
@@ -1 +1 @@
1
- {"version":3,"file":"TableHeaderForm.vue2.mjs","sources":["../../../../../../../../packages/components/src/composite/tablePro/tableHeaderForm/TableHeaderForm.vue"],"sourcesContent":["<template>\n <gm-drawer v-model=\"isShowDrawer\" title=\"自定义表头\" direction=\"rtl\" size=\"600px\" append-to-body destroy-on-close>\n <section\n class=\"drawer-alert gm-mb-4 gm-flex gm-items-center gm-justify-between gm-rounded gm-border gm-border-cyan-300 gm-bg-cyan-50 gm-px-4 gm-text-sm gm-text-[#777]\"\n >\n <div class=\"gm-flex gm-items-center gm-py-3\">\n <gm-icon><InfoFilled /></gm-icon>\n <p class=\"gm-ml-2\">\n 已选中 <span class=\"gm-text-cyan-500\">{{ checkedNumber }}</span> 项\n </p>\n </div>\n </section>\n <gm-table :data=\"clonedColPropsList\" :header-cell-style=\"{ background: '#F5F7FA', color: '#333' }\" style=\"width: 100%\">\n <gm-table-column align=\"left\" width=\"80\">\n <template #header>\n <gm-checkbox :model-value=\"checkedAll\" :indeterminate=\"isIndeterminate\" @change=\"handleCheckAllChange\" />\n </template>\n <template #default=\"{ row }: { row: TableColumnProProps }\">\n <gm-checkbox v-model=\"row.isShow\" :disabled=\"row.type === 'edit'\" />\n </template>\n </gm-table-column>\n <gm-table-column label=\"列名\" prop=\"label\">\n <template #default=\"{ row }: { row: TableColumnProProps }\">\n {{ row.type === 'edit' ? '操作' : row.label }}\n </template>\n </gm-table-column>\n <gm-table-column label=\"列宽\">\n <template #default=\"{ row }: { row: TableColumnProProps; $index: number }\">\n <gm-input v-model=\"row.width\" class=\"gm-w-[120px]\" placeholder=\"设置宽度\" clearable />\n </template>\n </gm-table-column>\n <gm-table-column label=\"固定\">\n <template #default=\"{ row }: { row: TableColumnProProps; $index: number }\">\n <div v-if=\"row.type !== 'edit'\">\n <gm-tooltip effect=\"dark\" content=\"固定在左侧\" placement=\"top\">\n <gm-icon\n class=\"gm-mr-2 gm-cursor-pointer\"\n :class=\"row.fixed === '' || row.fixed === true || row.fixed === 'left' ? 'gm-text-blue-500' : ''\"\n size=\"20\"\n @click=\"toggleFixedLeft(row)\"\n >\n <IceCreamRound />\n </gm-icon>\n </gm-tooltip>\n <gm-tooltip effect=\"dark\" content=\"固定在右侧\" placement=\"top\">\n <gm-icon\n class=\"-gm-scale-x-100 gm-cursor-pointer\"\n :class=\"row.fixed === 'right' ? 'gm-text-blue-500' : ''\"\n size=\"20\"\n @click=\"toggleFixedRight(row)\"\n >\n <IceCreamRound />\n </gm-icon>\n </gm-tooltip>\n </div>\n </template>\n </gm-table-column>\n </gm-table>\n <template v-if=\"!disabledRemoteCol\" #footer>\n <div class=\"gm-flex gm-justify-between\">\n <div>\n <gm-button :loading=\"submitLoading\" type=\"primary\" size=\"default\" @click=\"onReset\">重置</gm-button>\n <gm-button :loading=\"submitLoading\" type=\"success\" size=\"default\" @click=\"onSyncRemote\">同步</gm-button>\n </div>\n <div>\n <gm-button :loading=\"submitLoading\" size=\"default\" @click=\"isShowDrawer = false\">取消</gm-button>\n <gm-button :loading=\"submitLoading\" type=\"primary\" size=\"default\" @click=\"submitSettings()\">保存</gm-button>\n </div>\n </div>\n </template>\n </gm-drawer>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, onMounted, ref, watch } from 'vue';\nimport { useCloned } from '@vueuse/core';\nimport { useCustomSettingsStore } from '@giime/hooks';\nimport { GmMessage } from '@giime/components/src/plugins/message';\nimport { cloneDeep } from 'lodash-es';\nimport { isNil } from '@giime/utils/src/is';\nimport { IceCreamRound, InfoFilled } from '@element-plus/icons-vue';\nimport { tableHeaderFormProps } from './tableHeaderForm';\nimport type { CheckboxValueType } from 'element-plus';\nimport type { TableColumnProProps } from '../tableColumnPro/tableColumnPro';\n\ndefineOptions({\n name: 'GmTableHeaderForm',\n});\n\nconst props = defineProps(tableHeaderFormProps);\nconst emit = defineEmits([\"updateColumns\"]);\n/**抽屉显示 */\nconst isShowDrawer = defineModel<boolean>('isShowDrawer', {\n required: true,\n});\n\n/**自定义按钮 props列表 */\nconst colPropsList = defineModel<TableColumnProProps[]>('colPropsList', {\n required: true,\n});\nconst customSettingsStore = useCustomSettingsStore();\n\n/**\n * 数据是否初始化完成\n */\nconst isInited = ref(false);\n/**内部克隆一份,当点击保存时 应用修改的内容 */\nconst { cloned: clonedColPropsList, sync: syncPropsList } = useCloned(colPropsList);\nconst defaultPropsList = computed(() => cloneDeep(props.colDefaultPropsList));\n// 重新打开弹窗时, 克隆一份新数据\nwatch(isShowDrawer, newValue => {\n if (newValue) {\n clonedColPropsList.value = cloneDeep(colPropsList.value);\n }\n});\nconst customSettingsValue = computed<TableColumnProProps[]>(() => customSettingsStore.customSettings[props.keyWord]?.[props.type] || []);\nconst { cloned: clonedStore } = useCloned(customSettingsValue);\n\n// 更新选中数据\nconst updateColumns = () => {\n colPropsList.value = clonedColPropsList.value;\n};\n// 初始化数据\nconst initColumns = async () => {\n try {\n await customSettingsStore.getCustomSettings({ key_word: props.keyWord, type: props.type }, { defaultValue: [] });\n } catch {}\n clonedColPropsList.value = defaultPropsList.value.map(it => {\n const findItem = clonedStore.value.find(v => v.prop === it.prop);\n if (findItem) {\n it.isShow = findItem.isShow;\n it.width = findItem.width;\n if (!isNil(findItem.fixed)) {\n it.fixed = findItem.fixed;\n }\n // it.type = findItem.type;\n }\n return it;\n });\n\n updateColumns();\n isInited.value = true;\n};\n\n// 已选中条数\nconst checkedNumber = computed(() => {\n return clonedColPropsList.value.filter(v => v.isShow).length;\n});\n// 全选\nconst checkedAll = computed(() => clonedColPropsList.value.filter(it => it.type !== 'edit').every(v => v.isShow));\n// 半选\nconst isIndeterminate = computed(() => !checkedAll.value && clonedColPropsList.value.filter(it => it.type !== 'edit').some(v => v.isShow));\n// 切换全选\nconst handleCheckAllChange = (val: CheckboxValueType) => {\n clonedColPropsList.value.forEach(v => {\n if (v.type !== 'edit') {\n v.isShow = Boolean(val);\n }\n });\n};\nconst submitLoading = ref(false);\n// 保存\nconst submitSettings = async (options?: { hiddenMessage?: boolean }) => {\n try {\n submitLoading.value = true;\n const { data } = await customSettingsStore.addCustomSettings({\n key_word: props.keyWord,\n value: JSON.stringify(clonedColPropsList.value),\n type: props.type,\n });\n submitLoading.value = false;\n if (data.code !== 200) {\n return;\n }\n // isShowDrawer.value = false;\n updateColumns();\n if (!options?.hiddenMessage) {\n GmMessage.success('保存成功');\n }\n emit('updateColumns');\n } catch (e) {\n console.error(e);\n submitLoading.value = false;\n }\n};\n/**同步远程设置 */\nconst onSyncRemote = async () => {\n try {\n submitLoading.value = true;\n await customSettingsStore.syncRemoteSetting({\n key_word: props.keyWord,\n type: props.type,\n });\n submitLoading.value = false;\n GmMessage.success('同步成功');\n } catch (e) {\n console.error(e);\n submitLoading.value = false;\n }\n};\n// 重置\nconst onReset = () => {\n clonedColPropsList.value = cloneDeep(props.colDefaultPropsList);\n};\n// 点击固定到左侧\nconst toggleFixedLeft = (row: TableColumnProProps) => {\n if (row.fixed === 'left' || row.fixed === true || row.fixed === '') {\n row.fixed = false;\n } else {\n row.fixed = 'left';\n }\n};\n// 点击固定到右侧\nconst toggleFixedRight = (row: TableColumnProProps) => {\n if (row.fixed === 'right') {\n row.fixed = false;\n } else {\n row.fixed = 'right';\n }\n};\nonMounted(() => {\n if (props.disabledRemoteCol) {\n isInited.value = true;\n } else {\n initColumns();\n }\n});\ndefineExpose({\n isInited,\n submitSettings,\n syncPropsList,\n});\n</script>\n"],"names":["_useModel"],"mappings":"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"}
1
+ {"version":3,"file":"TableHeaderForm.vue2.mjs","sources":["../../../../../../../../packages/components/src/composite/tablePro/tableHeaderForm/TableHeaderForm.vue"],"sourcesContent":["<template>\n <gm-drawer v-model=\"isShowDrawer\" title=\"自定义表头\" direction=\"rtl\" size=\"600px\" append-to-body destroy-on-close>\n <section\n class=\"drawer-alert gm-mb-4 gm-flex gm-items-center gm-justify-between gm-rounded gm-border gm-border-cyan-300 gm-bg-cyan-50 gm-px-4 gm-text-sm gm-text-[#777]\"\n >\n <div class=\"gm-flex gm-items-center gm-py-3\">\n <gm-icon><InfoFilled /></gm-icon>\n <p class=\"gm-ml-2\">\n 已选中 <span class=\"gm-text-cyan-500\">{{ checkedNumber }}</span> 项\n </p>\n </div>\n </section>\n <gm-table\n ref=\"tableRef\"\n :data=\"clonedColPropsList\"\n row-key=\"prop\"\n :header-cell-style=\"{ background: '#F5F7FA', color: '#333' }\"\n style=\"width: 100%\"\n >\n <gm-table-column align=\"left\" width=\"50\">\n <template #header>\n <gm-checkbox :model-value=\"checkedAll\" :indeterminate=\"isIndeterminate\" @change=\"handleCheckAllChange\" />\n </template>\n <template #default=\"{ row }: { row: TableColumnProProps }\">\n <gm-checkbox v-model=\"row.isShow\" :disabled=\"row.type === 'edit'\" />\n </template>\n </gm-table-column>\n <gm-table-column label=\"列名\" prop=\"label\">\n <template #default=\"{ row }: { row: TableColumnProProps }\">\n {{ row.type === 'edit' ? '操作' : row.label }}\n </template>\n </gm-table-column>\n <gm-table-column label=\"列宽\" width=\"160\">\n <template #default=\"{ row }: { row: TableColumnProProps; $index: number }\">\n <gm-input v-model=\"row.width\" class=\"gm-w-[120px]\" placeholder=\"设置宽度\" clearable />\n </template>\n </gm-table-column>\n <gm-table-column label=\"固定\" width=\"100\">\n <template #default=\"{ row }: { row: TableColumnProProps; $index: number }\">\n <div v-if=\"row.type !== 'edit'\">\n <gm-tooltip effect=\"dark\" content=\"固定在左侧\" placement=\"top\">\n <gm-icon\n class=\"gm-mr-2 gm-cursor-pointer\"\n :class=\"row.fixed === '' || row.fixed === true || row.fixed === 'left' ? 'gm-text-blue-500' : ''\"\n size=\"20\"\n @click=\"toggleFixedLeft(row)\"\n >\n <IceCreamRound />\n </gm-icon>\n </gm-tooltip>\n <gm-tooltip effect=\"dark\" content=\"固定在右侧\" placement=\"top\">\n <gm-icon\n class=\"-gm-scale-x-100 gm-cursor-pointer\"\n :class=\"row.fixed === 'right' ? 'gm-text-blue-500' : ''\"\n size=\"20\"\n @click=\"toggleFixedRight(row)\"\n >\n <IceCreamRound />\n </gm-icon>\n </gm-tooltip>\n </div>\n </template>\n </gm-table-column>\n <gm-table-column label=\"拖动排序\" align=\"center\" width=\"100\">\n <template #default=\"{ row }: { row: TableColumnProProps }\">\n <gm-icon v-if=\"row.type !== 'edit'\" class=\"gm-drag-handle gm-cursor-move gm-text-blue-500\" size=\"18\">\n <Rank />\n </gm-icon>\n </template>\n </gm-table-column>\n </gm-table>\n <template v-if=\"!disabledRemoteCol\" #footer>\n <div class=\"gm-flex gm-justify-between\">\n <div>\n <gm-button :loading=\"submitLoading\" type=\"primary\" size=\"default\" @click=\"onReset\">重置</gm-button>\n <gm-button :loading=\"submitLoading\" type=\"success\" size=\"default\" @click=\"onSyncRemote\">同步</gm-button>\n </div>\n <div>\n <gm-button :loading=\"submitLoading\" size=\"default\" @click=\"isShowDrawer = false\">取消</gm-button>\n <gm-button :loading=\"submitLoading\" type=\"primary\" size=\"default\" @click=\"submitSettings()\">保存</gm-button>\n </div>\n </div>\n </template>\n </gm-drawer>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, nextTick, onMounted, ref, watch } from 'vue';\nimport { useCloned } from '@vueuse/core';\nimport { useDraggable } from 'vue-draggable-plus';\nimport { useCustomSettingsStore } from '@giime/hooks';\nimport { GmMessage } from '@giime/components/src/plugins/message';\nimport { cloneDeep } from 'lodash-es';\nimport { isNil } from '@giime/utils/src/is';\nimport { IceCreamRound, InfoFilled, Rank } from '@element-plus/icons-vue';\nimport { tableHeaderFormProps } from './tableHeaderForm';\nimport type { CheckboxValueType, TableInstance } from 'element-plus';\nimport type { TableColumnProProps } from '../tableColumnPro/tableColumnPro';\n\ndefineOptions({\n name: 'GmTableHeaderForm',\n});\n\nconst props = defineProps(tableHeaderFormProps);\nconst emit = defineEmits([\"updateColumns\"]);\n/**抽屉显示 */\nconst isShowDrawer = defineModel<boolean>('isShowDrawer', {\n required: true,\n});\n\n/**自定义按钮 props列表 */\nconst colPropsList = defineModel<TableColumnProProps[]>('colPropsList', {\n required: true,\n});\nconst customSettingsStore = useCustomSettingsStore();\n\n/**\n * 数据是否初始化完成\n */\nconst isInited = ref(false);\n/**内部克隆一份,当点击保存时 应用修改的内容 */\nconst { cloned: clonedColPropsList, sync: syncPropsList } = useCloned(colPropsList);\nconst defaultPropsList = computed(() => cloneDeep(props.colDefaultPropsList));\n\n/**\n * 拖拽排序:vue-draggable-plus 在挂载时一次性初始化、不监听元素变化,\n * 而抽屉是 destroy-on-close,每次打开 tbody 都是新节点,\n * 因此用 immediate:false + 打开后手动 start(tbody)、关闭时 destroy。\n */\nconst tableRef = ref<TableInstance>();\nconst draggable = useDraggable<TableColumnProProps>(null, clonedColPropsList, {\n immediate: false,\n animation: 150,\n handle: '.gm-drag-handle',\n});\nconst bindDraggable = async () => {\n await nextTick();\n const tbody = (tableRef.value?.$el as HTMLElement | undefined)?.querySelector<HTMLElement>('.el-table__body-wrapper tbody');\n if (tbody) {\n draggable.start(tbody);\n }\n};\n\n// 重新打开弹窗时, 克隆一份新数据,并重新绑定拖拽\nwatch(isShowDrawer, async newValue => {\n if (newValue) {\n clonedColPropsList.value = cloneDeep(colPropsList.value);\n await bindDraggable();\n } else {\n draggable.destroy();\n }\n});\nconst customSettingsValue = computed<TableColumnProProps[]>(() => customSettingsStore.customSettings[props.keyWord]?.[props.type] || []);\nconst { cloned: clonedStore } = useCloned(customSettingsValue);\n\n// 更新选中数据\nconst updateColumns = () => {\n colPropsList.value = clonedColPropsList.value;\n};\n/**\n * 按远程保存的顺序重排列。\n * 模板里新增(远程未保存)的字段,插入到它在默认顺序中前一个已存在字段的后面。\n * 例:默认 1 2 3 4 5,远程存 3 5 2 1 4,模板新增 2.5(在 2 和 3 之间)→ 3 5 2 2.5 1 4。\n * 连续新增、或新增在最前面,也会按默认相邻关系顺序插入。\n */\nconst applySavedOrder = (defaultOrdered: TableColumnProProps[], savedList: TableColumnProProps[]) => {\n // 远程保存顺序中仍存在于默认列的 prop\n const savedProps = savedList.map(s => s.prop).filter(p => defaultOrdered.some(d => d.prop === p));\n if (!savedProps.length) {\n // 没有可用的远程顺序,直接使用默认顺序\n return defaultOrdered;\n }\n // 先按远程顺序放入已存在的列\n const result = savedProps.map(p => defaultOrdered.find(d => d.prop === p)!);\n // 再把新增列按默认顺序插入到其前驱之后\n let cursor = -1;\n for (const d of defaultOrdered) {\n const idx = result.findIndex(r => r.prop === d.prop);\n if (idx !== -1) {\n cursor = idx;\n } else {\n result.splice(cursor + 1, 0, d);\n cursor += 1;\n }\n }\n return result;\n};\n\n// 初始化数据\nconst initColumns = async () => {\n try {\n await customSettingsStore.getCustomSettings({ key_word: props.keyWord, type: props.type }, { defaultValue: [] });\n } catch {}\n // 以默认列为基准,叠加远程保存的 isShow/width/fixed\n const merged = defaultPropsList.value.map(it => {\n const findItem = clonedStore.value.find(v => v.prop === it.prop);\n if (findItem) {\n it.isShow = findItem.isShow;\n it.width = findItem.width;\n if (!isNil(findItem.fixed)) {\n it.fixed = findItem.fixed;\n }\n // it.type = findItem.type;\n }\n return it;\n });\n // 套用远程保存的列顺序,新增字段按默认相邻关系插入\n clonedColPropsList.value = applySavedOrder(merged, clonedStore.value);\n\n updateColumns();\n isInited.value = true;\n};\n\n// 已选中条数\nconst checkedNumber = computed(() => {\n return clonedColPropsList.value.filter(v => v.isShow).length;\n});\n// 全选\nconst checkedAll = computed(() => clonedColPropsList.value.filter(it => it.type !== 'edit').every(v => v.isShow));\n// 半选\nconst isIndeterminate = computed(() => !checkedAll.value && clonedColPropsList.value.filter(it => it.type !== 'edit').some(v => v.isShow));\n// 切换全选\nconst handleCheckAllChange = (val: CheckboxValueType) => {\n clonedColPropsList.value.forEach(v => {\n if (v.type !== 'edit') {\n v.isShow = Boolean(val);\n }\n });\n};\nconst submitLoading = ref(false);\n// 保存\nconst submitSettings = async (options?: { hiddenMessage?: boolean }) => {\n try {\n submitLoading.value = true;\n const { data } = await customSettingsStore.addCustomSettings({\n key_word: props.keyWord,\n value: JSON.stringify(clonedColPropsList.value),\n type: props.type,\n });\n submitLoading.value = false;\n if (data.code !== 200) {\n return;\n }\n // isShowDrawer.value = false;\n updateColumns();\n if (!options?.hiddenMessage) {\n GmMessage.success('保存成功');\n }\n emit('updateColumns');\n } catch (e) {\n console.error(e);\n submitLoading.value = false;\n }\n};\n/**同步远程设置 */\nconst onSyncRemote = async () => {\n try {\n submitLoading.value = true;\n await customSettingsStore.syncRemoteSetting({\n key_word: props.keyWord,\n type: props.type,\n });\n submitLoading.value = false;\n GmMessage.success('同步成功');\n } catch (e) {\n console.error(e);\n submitLoading.value = false;\n }\n};\n// 重置\nconst onReset = () => {\n clonedColPropsList.value = cloneDeep(props.colDefaultPropsList);\n};\n// 点击固定到左侧\nconst toggleFixedLeft = (row: TableColumnProProps) => {\n if (row.fixed === 'left' || row.fixed === true || row.fixed === '') {\n row.fixed = false;\n } else {\n row.fixed = 'left';\n }\n};\n// 点击固定到右侧\nconst toggleFixedRight = (row: TableColumnProProps) => {\n if (row.fixed === 'right') {\n row.fixed = false;\n } else {\n row.fixed = 'right';\n }\n};\nonMounted(() => {\n if (props.disabledRemoteCol) {\n isInited.value = true;\n } else {\n initColumns();\n }\n});\ndefineExpose({\n isInited,\n submitSettings,\n syncPropsList,\n});\n</script>\n"],"names":["_useModel"],"mappings":"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"}
@@ -1 +1 @@
1
- export declare const version = "1.0.2-snapshot.3";
1
+ export declare const version = "1.0.3-snapshot.1";
@@ -1,4 +1,4 @@
1
- const version = "1.0.2-snapshot.3";
1
+ const version = "1.0.3-snapshot.1";
2
2
 
3
3
  export { version };
4
4
  //# sourceMappingURL=version.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.mjs","sources":["../../../../packages/giime/version.ts"],"sourcesContent":["export const version = '1.0.2-snapshot.3';\n"],"names":[],"mappings":"AAAO,MAAM,OAAA,GAAU;;;;"}
1
+ {"version":3,"file":"version.mjs","sources":["../../../../packages/giime/version.ts"],"sourcesContent":["export const version = '1.0.3-snapshot.1';\n"],"names":[],"mappings":"AAAO,MAAM,OAAA,GAAU;;;;"}