wupengfei
2025-03-11 286f1b727856d6b32a8d237f353ae008f3076deb
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
import { useInfiniteLoading } from '@12333/hooks';
import { OrderInputType, Gender } from '@12333/constants';
import * as flexWorkerServices from '@12333/services/api/FlexWorker';
import _ from 'lodash';
import { trim } from '@12333/utils';
import { MaybeRef } from 'vue';
 
export enum HomeOrderType {
  Recommend = 'Recommend',
  LastShelfTime = 'LastShelfTime',
}
 
type UseTaskListOptions = {
  cityName?: MaybeRef<string>;
};
 
export function useTaskList(options: UseTaskListOptions = {}) {
  const { cityName = '' } = options;
 
  const searchValue = ref('');
 
  const queryMenuState = reactive({
    gender: '' as any as Gender,
  });
 
  const queryState = reactive({
    searchValueTrim: '',
    orderType: HomeOrderType.Recommend,
    companyId: '',
  });
 
  const handleSearch = _.debounce(function () {
    queryState.searchValueTrim = trim(searchValue.value);
  }, 300);
 
  const { infiniteLoadingProps } = useInfiniteLoading(
    ({ pageParam }) => {
      let params: API.GetFlexTaskListInput = {
        pageModel: {
          rows: 20,
          page: pageParam,
          orderInput: [
            queryState.orderType === HomeOrderType.Recommend
              ? { property: 'creationTime', order: OrderInputType.Desc }
              : { property: 'lastShelfTime', order: OrderInputType.Desc },
          ],
        },
      };
 
      return flexWorkerServices.getFlexTaskByArrange(params, {
        showLoading: false,
      });
    },
    {
      queryKey: ['flexWorkerServices/getFlexTaskByArrange', queryState, queryMenuState, cityName],
    }
  );
 
  return {
    searchValue,
    queryState,
    queryMenuState,
    handleSearch,
    infiniteLoadingProps,
  };
}