wangzhibo
2026-07-16 b57020623cf0c946706573bf102e548c3a544423
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
import { useCore } from "../../../hooks";
 
// 排序
export function useSort({
    config,
    Table,
    emit
}: {
    config: ClTable.Config;
    Table: Vue.Ref<any>;
    emit: Vue.Emit;
}) {
    const { crud } = useCore();
 
    // 设置默认排序Ï
    const defaultSort = (function () {
        let { prop, order } = config.defaultSort || {};
 
        const item = config.columns.find((e) =>
            ["desc", "asc", "descending", "ascending"].find((a) => a == e.sortable)
        );
 
        if (item) {
            prop = item.prop;
            order = ["descending", "desc"].find((a) => a == item.sortable)
                ? "descending"
                : "ascending";
        }
 
        if (order && prop) {
            crud.params.order = ["descending", "desc"].includes(order) ? "desc" : "asc";
            crud.params.prop = prop;
 
            return {
                prop,
                order
            };
        }
 
        return {};
    })();
 
    // 排序监听
    function onSortChange({ prop, order }: { prop: string | undefined; order: string }) {
        if (config.sortRefresh) {
            if (order === "descending") {
                order = "desc";
            }
 
            if (order === "ascending") {
                order = "asc";
            }
 
            if (!order) {
                prop = undefined;
            }
 
            crud.refresh({
                prop,
                order,
                page: 1
            });
        }
 
        emit("sort-change", { prop, order });
    }
 
    // 改变排序
    function changeSort(prop: string, order: string) {
        if (order === "desc") {
            order = "descending";
        }
 
        if (order === "asc") {
            order = "ascending";
        }
 
        Table.value?.sort(prop, order);
    }
 
    return {
        defaultSort,
        onSortChange,
        changeSort
    };
}