@xuekl/cli-components 1.9.146 → 1.9.148

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/XklDict.vue CHANGED
@@ -71,8 +71,28 @@ const filterMethod = (val: any) => {
71
71
  const visibleChange = (visible: boolean) => {
72
72
  if (isDisplaySelectedDataFirst) {
73
73
  if (visible) {
74
- list.value = list.value.sort((a) => {
75
- return selectData.value && (Array.isArray(selectData.value) ? selectData.value.includes(a.dictValue) : selectData.value === a.dictValue) ? -1 : 1
74
+ // 稳定排序逻辑:已选中的排前面,且两组内部都保留原数组顺序
75
+ list.value = list.value.sort((a, b) => {
76
+ // 1. 获取a、b的选中状态
77
+ const aIsSelected = selectData.value && (
78
+ Array.isArray(selectData.value)
79
+ ? selectData.value.includes(a.dictValue)
80
+ : selectData.value === a.dictValue
81
+ );
82
+ const bIsSelected = selectData.value && (
83
+ Array.isArray(selectData.value)
84
+ ? selectData.value.includes(b.dictValue)
85
+ : selectData.value === b.dictValue
86
+ );
87
+
88
+ // ✅ 核心稳定排序规则
89
+ if (aIsSelected && !bIsSelected) {
90
+ return -1; // a选中、b未选 → a排前面
91
+ } else if (!aIsSelected && bIsSelected) {
92
+ return 1; // a未选、b选中 → b排前面
93
+ } else {
94
+ return 0; // 同为选中/同为未选 → 保持原有相对顺序【关键】
95
+ }
76
96
  })
77
97
  }
78
98
  }
package/XklFormInfo.vue CHANGED
@@ -35,8 +35,12 @@ const { form } = props
35
35
  const formList: FormItem[] = []
36
36
  const opts = form._opts || {}
37
37
 
38
+ form._sort = form._sort || []
39
+ let formKeys = Object.keys(form)
40
+ formKeys = [...form._sort, ...formKeys.filter(key => !form._sort.includes(key))]
41
+
38
42
  // 获取符合mode的字段
39
- Object.keys(form).forEach(prop => {
43
+ formKeys.forEach(prop => {
40
44
  if (form['get' + setUpperFirst(prop)]) {
41
45
  let field: FormItem = form['get' + setUpperFirst(prop)]()
42
46
  field.show = field.show || (() => true)
package/XklSelect.vue CHANGED
@@ -242,10 +242,31 @@ const valChangeHandle = (val: string | number | string[] | number[]) => {
242
242
  const visibleChange = (visible: boolean) => {
243
243
  if (isDisplaySelectedDataFirst) {
244
244
  if (visible) {
245
- const valueTarget = config?.valueTarget
246
- dataList.value = dataList.value.sort((a) => {
247
- return selectData.value && (Array.isArray(selectData.value) ? selectData.value.includes(a[valueTarget]) : selectData.value === a[valueTarget]) ? -1 : 1
248
- })
245
+ const valueTarget = config?.valueTarget;
246
+ // 无匹配字段则不排序,避免报错
247
+ if (!valueTarget) return;
248
+ // ✅ 稳定排序核心:a、b两两对比 + 同状态返回0 保持原顺序
249
+ dataList.value = dataList.value.sort((a, b) => {
250
+ // 获取当前项的匹配字段值
251
+ const aVal = a[valueTarget];
252
+ const bVal = b[valueTarget];
253
+ // 判断a/b的选中状态
254
+ const aIsSelected = selectData.value && (
255
+ Array.isArray(selectData.value)
256
+ ? selectData.value.includes(aVal)
257
+ : selectData.value === aVal
258
+ );
259
+ const bIsSelected = selectData.value && (
260
+ Array.isArray(selectData.value)
261
+ ? selectData.value.includes(bVal)
262
+ : selectData.value === bVal
263
+ );
264
+
265
+ // ✅ 排序规则:选中的排前面,同状态则保持原顺序
266
+ if (aIsSelected && !bIsSelected) return -1;
267
+ if (!aIsSelected && bIsSelected) return 1;
268
+ return 0;
269
+ });
249
270
  }
250
271
  }
251
272
  emit('visibleChange', visible)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xuekl/cli-components",
3
- "version": "1.9.146",
3
+ "version": "1.9.148",
4
4
  "description": "element-plus 组件二次封装",
5
5
  "main": "index.ts",
6
6
  "scripts": {