wupengfei
2025-12-03 fa5ee26bb701b816efc811c193ee55504a6efd51
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
<template>
  <div class="searchbar-container" v-if="showQueryState">
    <BlSearchbar
      v-model.trim="searchValue"
      placeholder="搜索姓名/身份证号"
      @search="handleSearch"
      @change="handleSearch"
    ></BlSearchbar>
  </div>
  <InfiniteLoading scrollViewClassName="common-infinite-scroll-list" v-bind="infiniteLoadingProps">
    <template #renderItem="{ item }">
      <FlexJobCard
        :name="item.name"
        :gender="item.gender"
        :age="item.age"
        :avatar="item.avatar"
        :isReal="item.isReal"
        :educationalBackgroundContent="item.educationalBackgroundContent"
        :personalIdentityContent="item.personalIdentityContent"
        :workExperience="item.workExperience"
        :workSeniority="item.workSeniority"
        :taskCount="item.taskCount"
        :showFooterLeft="false"
      >
        <template #footerRight>
          <template v-if="showQueryState">
            <nut-button type="primary" @click.stop="handleArrange(item)">安排</nut-button>
            <nut-button type="primary" @click.stop="setTaskUserHire(item)">取消录用</nut-button>
          </template>
 
          <div v-else class="batch-task-card-status">已安排</div>
        </template>
      </FlexJobCard>
    </template>
  </InfiniteLoading>
</template>
 
<script setup lang="ts">
import Taro from '@tarojs/taro';
import { useInfiniteLoading } from '@12333/hooks';
import {
  EnumTaskUserArrangeStatus,
  EnumPagedListOrder,
  EnumGetArrangeTaskUsersQueryApplyStatus,
  EnumTaskUserHireStatus,
} from '@12333/constants';
import * as taskUserServices from '@12333/services/apiV2/taskUser';
import _ from 'lodash';
import { Message, trim } from '@12333/utils';
import { FlexJobCard } from '@12333/components';
 
defineOptions({
  name: 'InnerPage',
});
 
const searchValue = ref('');
const router = Taro.useRouter();
const id = router.params?.id ?? '';
const status = Number(router.params?.status);
const queryState = reactive({
  keywords: '',
});
 
const showQueryState = computed(() => {
  return status === EnumTaskUserArrangeStatus.Wait;
});
 
const handleSearch = _.debounce(function () {
  queryState.keywords = trim(searchValue.value);
}, 300);
 
const { infiniteLoadingProps, invalidateQueries } = useInfiniteLoading(
  ({ pageParam }) => {
    let params: API.GetArrangeTaskUsersQuery = {
      keywords: queryState.keywords,
      arrangeStatus: status,
      applyStatus: EnumGetArrangeTaskUsersQueryApplyStatus.Completed,
      id: id,
      pageModel: {
        rows: 20,
        page: pageParam,
        orderInput: [{ property: 'id', order: EnumPagedListOrder.Desc }],
      },
    };
 
    return taskUserServices.getArrangeTaskUsers(params, {
      showLoading: false,
    });
  },
  {
    queryKey: ['taskUserServices/getArrangeTaskUsers', queryState],
  }
);
 
async function handleArrange(item: API.GetArrangeTaskUsersQueryResultItem) {
  try {
    let params: API.SetTaskUserArrangeCommand = {
      enterpriseEmployeeId: item.id,
      taskInfoId: id,
      arrangeStatus: EnumTaskUserArrangeStatus.Complete,
    };
    let res = await taskUserServices.setTaskUserArrange(params);
    if (res) {
      Message.success('已安排');
      invalidateQueries();
    }
  } catch (error) {}
}
 
async function setTaskUserHire(row: API.GetArrangeTaskUsersQueryResultItem) {
  try {
    let params: API.SetTaskUserHireCommand = {
      id: row.id,
      hireStatus: EnumTaskUserHireStatus.Cancel,
    };
    let res = await taskUserServices.setTaskUserHire(params);
    if (res) {
      Message.success('已取消录用');
      invalidateQueries();
    }
  } catch (error) {}
}
</script>
 
<style lang="scss">
@import '@/styles/common.scss';
 
.searchbar-container {
  padding: boleGetCssVar('size', 'body-padding-h');
  padding-top: 0;
}
 
.batchTaskList-page-wrapper {
  .batch-task-card-status {
    line-height: 52px;
    color: boleGetCssVar('text-color', 'primary');
    font-size: 24px;
  }
}
</style>