zhengyiming
2 天以前 92b51e47eb0e53e1e8e13aa0f9135603e1bb03a0
fix: 验收管理
5个文件已添加
16个文件已修改
731 ■■■■ 已修改文件
apps/bMiniApp/project.private.config.json 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/bMiniApp/src/app.config.ts 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/bMiniApp/src/constants/router.ts 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/bMiniApp/src/subpackages/task/components/TaskCheckCard.vue 47 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/bMiniApp/src/subpackages/task/components/TaskCheckHistoryCard.vue 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/bMiniApp/src/subpackages/task/components/TaskCheckPersonalView.vue 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/bMiniApp/src/subpackages/task/constants/index.ts 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/bMiniApp/src/subpackages/task/taskCheck/InnerPage.vue 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/bMiniApp/src/subpackages/task/taskCheckDetail/InnerPage.vue 61 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/bMiniApp/src/subpackages/task/taskUserSubmitCheckHistories/InnerPage.vue 104 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/bMiniApp/src/subpackages/task/taskUserSubmitCheckHistories/taskUserSubmitCheckHistories.config.ts 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/bMiniApp/src/subpackages/task/taskUserSubmitCheckHistories/taskUserSubmitCheckHistories.vue 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/components/src/Card/FlexJobTopView.vue 38 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/constants/apiEnum.ts 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/constants/enum.ts 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/constants/task.ts 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/services/apiV2/index.ts 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/services/apiV2/task.ts 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/services/apiV2/taskCheckReceive.ts 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/services/apiV2/typings.d.ts 161 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/services/apiV2/user.ts 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/bMiniApp/project.private.config.json
@@ -1,25 +1,44 @@
{
  "description": "项目私有配置文件。此文件中的内容将覆盖 project.config.json 中的相同字段。项目的改动优先同步到此文件中。详见文档:https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html",
  "projectname": "bMiniApp",
  "setting": {
    "compileHotReLoad": true,
    "bigPackageSizeSupport": true,
    "urlCheck": false,
    "coverView": true,
    "lazyloadPlaceholderEnable": false,
    "skylineRenderEnable": false,
    "preloadBackgroundData": false,
    "autoAudits": false,
    "useApiHook": true,
    "useApiHostProcess": true,
    "showShadowRootInWxmlPanel": true,
    "useStaticServer": false,
    "useLanDebug": false,
    "showES6CompileOption": false,
    "checkInvalidKey": true,
    "ignoreDevUnusedFiles": true,
    "useIsolateContext": true
  },
  "condition": {},
  "libVersion": "3.9.3"
    "description": "项目私有配置文件。此文件中的内容将覆盖 project.config.json 中的相同字段。项目的改动优先同步到此文件中。详见文档:https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html",
    "projectname": "bMiniApp",
    "setting": {
        "compileHotReLoad": true,
        "bigPackageSizeSupport": true,
        "urlCheck": false,
        "coverView": true,
        "lazyloadPlaceholderEnable": false,
        "skylineRenderEnable": false,
        "preloadBackgroundData": false,
        "autoAudits": false,
        "useApiHook": true,
        "useApiHostProcess": true,
        "showShadowRootInWxmlPanel": true,
        "useStaticServer": false,
        "useLanDebug": false,
        "showES6CompileOption": false,
        "checkInvalidKey": true,
        "ignoreDevUnusedFiles": true,
        "useIsolateContext": true
    },
    "condition": {
        "miniprogram": {
            "list": [
                {
                    "name": "验收管理",
                    "pathName": "subpackages/task/taskCheck/taskCheck",
                    "query": "",
                    "scene": null,
                    "launchMode": "default"
                },
                {
                    "name": "验收详情",
                    "pathName": "subpackages/task/taskCheckDetail/taskCheckDetail",
                    "query": "id=927b9898-1e9f-4aec-99aa-08ddf4e125c9&date=2025-10-19&checkReceiveStatus=10",
                    "launchMode": "default",
                    "scene": null
                }
            ]
        }
    },
    "libVersion": "3.9.3"
}
apps/bMiniApp/src/app.config.ts
@@ -94,6 +94,7 @@
        'taskHandleCheckDetail/taskHandleCheckDetail',
        'taskManage/taskManage',
        'batchTaskList/batchTaskList',
        'taskUserSubmitCheckHistories/taskUserSubmitCheckHistories',
      ],
    },
    {
apps/bMiniApp/src/constants/router.ts
@@ -47,6 +47,7 @@
  taskHandleCheckDetail = '/subpackages/task/taskHandleCheckDetail/taskHandleCheckDetail',
  taskManage = '/subpackages/task/taskManage/taskManage',
  batchTaskList = '/subpackages/task/batchTaskList/batchTaskList',
  taskUserSubmitCheckHistories = '/subpackages/task/taskUserSubmitCheckHistories/taskUserSubmitCheckHistories',
  jobApplicationManage = '/subpackages/jobApplicationManage/jobApplicationManage/jobApplicationManage',
  jobApplicationDetail = '/subpackages/jobApplicationManage/jobApplicationDetail/jobApplicationDetail',
apps/bMiniApp/src/subpackages/task/components/TaskCheckCard.vue
@@ -9,15 +9,36 @@
      :contactPhoneNumber="contactPhoneNumber"
    >
      <template #actions>
        <nut-button
          v-if="checkReceiveStatus === EnumTaskCheckReceiveStatus.WaitCheckReceive"
          type="primary"
          class="task-check-card-phone-btn"
          >验收</nut-button
        >
        <div v-else class="task-check-card-phone-status" :style="{ color: Colors.Success }">
          {{ EnumTaskCheckReceiveStatusText[checkReceiveStatus] }}
        </div>
        <template v-if="checkReceiveMethod === EnumTaskCheckReceiveMethod.CheckIn">
          <nut-button
            v-if="!checkInTime"
            type="primary"
            class="task-check-card-phone-btn"
            @click.stop="emit('checkInOrOut', CheckInOrOutEventEnum.CheckIn)"
            >签到</nut-button
          >
          <nut-button
            v-else-if="!checkOutTime"
            type="primary"
            class="task-check-card-phone-btn"
            @click.stop="emit('checkInOrOut', CheckInOrOutEventEnum.CheckOut)"
            >签出</nut-button
          >
          <div v-else class="task-check-card-phone-status" :style="{ color: Colors.Success }">
            {{ EnumTaskCheckReceiveStatusText[checkReceiveStatus] }}
          </div>
        </template>
        <template v-else>
          <nut-button
            v-if="checkReceiveStatus === EnumTaskCheckReceiveStatus.WaitCheckReceive"
            type="primary"
            class="task-check-card-phone-btn"
            >验收</nut-button
          >
          <div v-else class="task-check-card-phone-status" :style="{ color: Colors.Success }">
            {{ EnumTaskCheckReceiveStatusText[checkReceiveStatus] }}
          </div>
        </template>
      </template>
    </TaskCheckPersonalView>
  </div>
@@ -30,7 +51,9 @@
  EnumUserGender,
  EnumTaskCheckReceiveStatus,
  EnumTaskCheckReceiveStatusText,
  EnumTaskCheckReceiveMethod,
} from '@12333/constants';
import { CheckInOrOutEventEnum } from '../constants';
defineOptions({
  name: 'TaskCheckCard',
@@ -43,12 +66,18 @@
  isReal?: boolean;
  contactPhoneNumber?: string;
  checkReceiveStatus?: EnumTaskCheckReceiveStatus;
  /** 签到时间 */
  checkInTime?: string;
  /** 签出时间 */
  checkOutTime?: string;
  checkReceiveMethod?: EnumTaskCheckReceiveMethod;
};
const props = withDefaults(defineProps<Props>(), {});
const emit = defineEmits<{
  (e: 'checkReceive'): void;
  (e: 'checkInOrOut', ev: CheckInOrOutEventEnum): void;
}>();
</script>
apps/bMiniApp/src/subpackages/task/components/TaskCheckHistoryCard.vue
New file
@@ -0,0 +1,80 @@
<template>
  <div class="task-check-card-wrapper">
    <TaskCheckPersonalView
      class="task-check-card-view"
      :avatar="avatar"
      :name="name"
      :gender="gender"
      :isReal="isReal"
      :contactPhoneNumber="contactPhoneNumber"
    >
      <template #time v-if="!!checkTime">
        {{ dayjs(checkTime).format('HH:mm') }}
      </template>
      <template #actions>
        <div
          class="task-check-card-phone-status"
          :style="{ color: EnumTaskUserSubmitCheckHistoryTypeColor[type] }"
        >
          {{ EnumTaskUserSubmitCheckHistoryTypeText[type] }}
        </div>
      </template>
    </TaskCheckPersonalView>
  </div>
</template>
<script setup lang="ts">
import dayjs from 'dayjs';
import TaskCheckPersonalView from './TaskCheckPersonalView.vue';
import {
  Colors,
  EnumUserGender,
  EnumTaskUserSubmitCheckHistoryType,
  EnumTaskUserSubmitCheckHistoryTypeText,
  EnumTaskUserSubmitCheckHistoryTypeColor,
} from '@12333/constants';
defineOptions({
  name: 'TaskCheckHistoryCard',
});
type Props = {
  avatar?: string;
  name?: string;
  gender?: EnumUserGender;
  isReal?: boolean;
  contactPhoneNumber?: string;
  type?: EnumTaskUserSubmitCheckHistoryType;
  checkTime?: string;
};
const props = withDefaults(defineProps<Props>(), {});
</script>
<style lang="scss">
@import '@/styles/common.scss';
.task-check-card-wrapper {
  background: #ffffff;
  border-radius: 12px;
  padding: 40px;
  padding-right: 26px;
  margin-bottom: 24px;
  &:last-child {
    margin-bottom: 0;
  }
  .task-check-card-view {
    .task-check-card-phone-container {
      margin-top: 0;
    }
  }
  .task-check-card-phone-status {
    font-size: 24px;
    height: 52px;
    line-height: 52px;
  }
}
</style>
apps/bMiniApp/src/subpackages/task/components/TaskCheckPersonalView.vue
@@ -1,5 +1,8 @@
<template>
  <FlexJobTopView :avatar="avatar" :name="name" :gender="gender" :isReal="isReal">
    <template #time>
      <slot name="time"></slot>
    </template>
    <template #detail>
      <div class="task-check-card-phone-container">
        <div class="task-check-card-phone-wrapper">
apps/bMiniApp/src/subpackages/task/constants/index.ts
New file
@@ -0,0 +1,6 @@
export enum CheckInOrOutEventEnum {
  /**签到 */
  CheckIn = 10,
  /**签出 */
  CheckOut = 20,
}
apps/bMiniApp/src/subpackages/task/taskCheck/InnerPage.vue
@@ -36,8 +36,9 @@
<script setup lang="ts">
import { MyTaskCard, ProTabs, ProTabPane, Calendar } from '@12333/components';
import Taro from '@tarojs/taro';
import { EnumTaskCheckReceiveStatus } from '@12333/constants';
import { EnumTaskCheckReceiveStatus, EnumTaskCheckReceiveMethod } from '@12333/constants';
import { useCheckReceiveTasks } from '@12333/hooks';
import dayjs from 'dayjs';
defineOptions({
  name: 'InnerPage',
@@ -46,8 +47,21 @@
const { queryState, infiniteLoadingProps } = useCheckReceiveTasks();
function goSubmitTaskDetail(item: API.GetCheckReceiveTasksQueryResultItem) {
  Taro.navigateTo({
    url: `${RouterPath.taskCheckDetail}?id=${item.id}&date=${queryState.date}&checkReceiveStatus=${queryState.checkReceiveStatus}`,
  });
  if (
    item.checkReceiveMethod === EnumTaskCheckReceiveMethod.CheckIn &&
    dayjs(queryState.date).isBefore(dayjs())
  ) {
    Taro.navigateTo({
      url: `${RouterPath.taskUserSubmitCheckHistories}?id=${item.id}&date=${dayjs(
        queryState.date
      ).format('YYYY-MM-DD')}`,
    });
  } else {
    Taro.navigateTo({
      url: `${RouterPath.taskCheckDetail}?id=${item.id}&date=${dayjs(queryState.date).format(
        'YYYY-MM-DD'
      )}&checkReceiveStatus=${queryState.checkReceiveStatus}`,
    });
  }
}
</script>
apps/bMiniApp/src/subpackages/task/taskCheckDetail/InnerPage.vue
@@ -19,9 +19,13 @@
          :name="item.name"
          :gender="item.gender"
          :isReal="item.isReal"
          :checkInTime="item.checkInTime"
          :checkOutTime="item.checkOutTime"
          :contactPhoneNumber="item.contactPhoneNumber"
          :checkReceiveStatus="item.checkReceiveStatus"
          :checkReceiveMethod="detail?.checkReceiveMethod"
          @checkReceive="goTaskDetail(item)"
          @checkInOrOut="checkReceiveTask"
        />
      </template>
    </InfiniteLoading>
@@ -34,9 +38,10 @@
import { useInfiniteLoading } from '@12333/hooks';
import TaskCheckCard from '../components/TaskCheckCard.vue';
import { MyTaskCard } from '@12333/components';
import { EnumTaskCheckReceiveStatus } from '@12333/constants';
import { setOSSLink } from '@12333/utils';
import { EnumTaskCheckReceiveMethod, EnumTaskCheckReceiveStatus } from '@12333/constants';
import { Message, setOSSLink } from '@12333/utils';
import dayjs from 'dayjs';
import { CheckInOrOutEventEnum } from '../constants';
defineOptions({
  name: 'InnerPage',
@@ -47,8 +52,10 @@
const date = router.params?.date ?? '';
const checkReceiveStatus = Number(router.params?.checkReceiveStatus);
const detail = ref<API.GetCheckReceiveTasksQueryResultItem>();
const { infiniteLoadingProps } = useInfiniteLoading(
  ({ pageParam }) => {
  async ({ pageParam }) => {
    let params: API.GetCheckReceiveTaskQuery = {
      pageModel: {
        rows: 20,
@@ -59,9 +66,11 @@
      checkReceiveStatus: checkReceiveStatus,
    };
    return taskCheckReceiveServices.getCheckReceiveTask(params, {
    let res = await taskCheckReceiveServices.getCheckReceiveTask(params, {
      showLoading: false,
    });
    detail.value = res.objectData;
    return res;
  },
  {
    queryKey: ['taskCheckReceiveServices/getCheckReceiveTask'],
@@ -69,18 +78,38 @@
);
function goTaskDetail(item: API.GetCheckReceiveTaskQueryResultItem) {
  if (item.checkReceiveStatus === EnumTaskCheckReceiveStatus.Completed) {
    Taro.navigateTo({
      url: `${RouterPath.taskCheckedDetail}?id=${item.id}`,
    });
  if (detail.value.checkReceiveMethod !== EnumTaskCheckReceiveMethod.CheckIn) {
    if (item.checkReceiveStatus === EnumTaskCheckReceiveStatus.Completed) {
      Taro.navigateTo({
        url: `${RouterPath.taskCheckedDetail}?id=${item.id}`,
      });
    }
    if (
      item.checkReceiveStatus === EnumTaskCheckReceiveStatus.WaitCheckReceive ||
      item.checkReceiveStatus === EnumTaskCheckReceiveStatus.WaitSubmit
    ) {
      Taro.navigateTo({
        url: `${RouterPath.taskHandleCheckDetail}?id=${item.id}&date=${date}`,
      });
    }
  }
  if (
    item.checkReceiveStatus === EnumTaskCheckReceiveStatus.WaitCheckReceive ||
    item.checkReceiveStatus === EnumTaskCheckReceiveStatus.WaitSubmit
  ) {
    Taro.navigateTo({
      url: `${RouterPath.taskHandleCheckDetail}?id=${item.id}&date=${date}`,
    });
  }
}
async function checkReceiveTask(ev: CheckInOrOutEventEnum) {
  try {
    let params: API.CheckReceiveTaskCommand = {
      id: id,
    };
    if (ev === CheckInOrOutEventEnum.CheckIn) {
      params.checkInTime = dayjs().format('YYYY-MM-DD HH:mm:ss');
    } else if (ev === CheckInOrOutEventEnum.CheckOut) {
      params.checkOutTime = dayjs().format('YYYY-MM-DD HH:mm:ss');
    }
    let res = await taskCheckReceiveServices.checkReceiveTask(params);
    if (res) {
      Message.success('提交成功');
      infiniteLoadingProps.value?.refetch?.();
    }
  } catch (error) {}
}
</script>
apps/bMiniApp/src/subpackages/task/taskUserSubmitCheckHistories/InnerPage.vue
New file
@@ -0,0 +1,104 @@
<template>
  <LoadingLayout>
    <ProTabs
      v-model="queryState.type"
      name="taskUserSubmitCheckHistories-tab"
      :showPaneContent="false"
      class="taskUserSubmitCheckHistories-tabs"
      isTransparent
      title-gutter="8"
      title-scroll
    >
      <ProTabPane :title="`全部`" :pane-key="0"></ProTabPane>
      <ProTabPane
        :title="EnumTaskUserSubmitCheckHistoryTypeText[EnumTaskUserSubmitCheckHistoryType.CheckIn]"
        :pane-key="EnumTaskUserSubmitCheckHistoryType.CheckIn"
      ></ProTabPane>
      <ProTabPane
        :title="EnumTaskUserSubmitCheckHistoryTypeText[EnumTaskUserSubmitCheckHistoryType.CheckOut]"
        :pane-key="EnumTaskUserSubmitCheckHistoryType.CheckOut"
      ></ProTabPane>
      <ProTabPane
        :title="
          EnumTaskUserSubmitCheckHistoryTypeText[EnumTaskUserSubmitCheckHistoryType.UnCheckIn]
        "
        :pane-key="EnumTaskUserSubmitCheckHistoryType.UnCheckIn"
      ></ProTabPane>
      <ProTabPane
        :title="
          EnumTaskUserSubmitCheckHistoryTypeText[EnumTaskUserSubmitCheckHistoryType.UnCheckOut]
        "
        :pane-key="EnumTaskUserSubmitCheckHistoryType.UnCheckOut"
      ></ProTabPane>
    </ProTabs>
    <ChunkTitle :title="title" />
    <InfiniteLoading
      scrollViewClassName="common-infinite-scroll-list"
      v-bind="infiniteLoadingProps"
    >
      <template #renderItem="{ item }">
        <TaskCheckHistoryCard
          :avatar="setOSSLink(item.avatar)"
          :name="item.name"
          :gender="item.gender"
          :isReal="item.isReal"
          :contactPhoneNumber="item.contactPhoneNumber"
          :type="item.type"
          :checkTime="item.checkTime"
        />
      </template>
    </InfiniteLoading>
  </LoadingLayout>
</template>
<script setup lang="ts">
import Taro from '@tarojs/taro';
import * as taskCheckReceiveServices from '@12333/services/apiV2/taskCheckReceive';
import { useInfiniteLoading } from '@12333/hooks';
import TaskCheckHistoryCard from '../components/TaskCheckHistoryCard.vue';
import { ProTabs, ProTabPane } from '@12333/components';
import {
  EnumTaskUserSubmitCheckHistoryTypeText,
  EnumTaskUserSubmitCheckHistoryTypeColor,
  EnumTaskUserSubmitCheckHistoryType,
  WeekCN,
} from '@12333/constants';
import { Message, setOSSLink } from '@12333/utils';
import dayjs from 'dayjs';
defineOptions({
  name: 'InnerPage',
});
const router = Taro.useRouter();
const id = router.params?.id ?? '';
const date = router.params?.date ?? '';
const title = `${dayjs(date).format('YYYY年MM月DD日')} 星期${WeekCN[dayjs(date).day()]}`;
const queryState = reactive({
  type: 0 as any as EnumTaskUserSubmitCheckHistoryType,
});
const { infiniteLoadingProps } = useInfiniteLoading(
  async ({ pageParam }) => {
    let params: API.GetCheckReceiveTaskUserSubmitCheckHistoriesQuery = {
      pageModel: {
        rows: 20,
        page: pageParam,
      },
      taskInfoId: id,
      date: dayjs(date).format('YYYY-MM-DD'),
      type: queryState.type,
    };
    let res = await taskCheckReceiveServices.getCheckReceiveTaskUserSubmitCheckHistories(params, {
      showLoading: false,
    });
    return res;
  },
  {
    queryKey: ['taskCheckReceiveServices/getCheckReceiveTaskUserSubmitCheckHistories', queryState],
  }
);
</script>
apps/bMiniApp/src/subpackages/task/taskUserSubmitCheckHistories/taskUserSubmitCheckHistories.config.ts
New file
@@ -0,0 +1,3 @@
export default definePageConfig({
  disableScroll: true,
});
apps/bMiniApp/src/subpackages/task/taskUserSubmitCheckHistories/taskUserSubmitCheckHistories.vue
New file
@@ -0,0 +1,13 @@
<template>
  <PageLayoutWithBg class="taskUserSubmitCheckHistories-page-wrapper" title="验收详情">
    <InnerPage />
  </PageLayoutWithBg>
</template>
<script setup lang="ts">
import InnerPage from './InnerPage.vue';
defineOptions({
  name: 'taskUserSubmitCheckHistories',
});
</script>
packages/components/src/Card/FlexJobTopView.vue
@@ -7,17 +7,22 @@
    />
    <div class="flexJob-card-top-info">
      <div class="flexJob-card-top-info-item">
        <div class="flexJob-card-top-info-name">{{ name }}</div>
        <div class="flexJob-card-top-info-gender">
          <img
            v-if="gender === EnumUserGender.Male"
            :src="IconMale"
            class="flexJob-card-top-info-gender-icon"
          />
          <img v-else :src="IconFemale" class="flexJob-card-top-info-gender-icon" />
        <div class="flexJob-card-top-info-item-w">
          <div class="flexJob-card-top-info-name">{{ name }}</div>
          <div class="flexJob-card-top-info-gender">
            <img
              v-if="gender === EnumUserGender.Male"
              :src="IconMale"
              class="flexJob-card-top-info-gender-icon"
            />
            <img v-else :src="IconFemale" class="flexJob-card-top-info-gender-icon" />
          </div>
          <div class="flexJob-card-top-info-auth" :class="{ 'is-real-name': isReal }">
            {{ isReal ? '已实名' : '未实名' }}
          </div>
        </div>
        <div class="flexJob-card-top-info-auth" :class="{ 'is-real-name': isReal }">
          {{ isReal ? '已实名' : '未实名' }}
        <div class="flexJob-card-top-info-item-right">
          <slot name="time"></slot>
        </div>
      </div>
      <slot name="detail">
@@ -90,10 +95,23 @@
    flex: 1;
    min-width: 0;
    .flexJob-card-top-info-item-w {
      display: flex;
      align-items: center;
      flex: 1;
      min-width: 0;
    }
    .flexJob-card-top-info-item {
      display: flex;
      align-items: center;
      .flexJob-card-top-info-item-right {
        font-size: 28px;
        line-height: 34px;
        color: boleGetCssVar('text-color', 'secondary');
      }
      .flexJob-card-top-info-name {
        font-size: 34px;
        line-height: 34px;
packages/constants/apiEnum.ts
@@ -485,6 +485,16 @@
  Stopped = 100,
}
/** 任务结算审核状态 */
export enum EnumTaskSettlementAuditStatus {
  /**待审核 */
  Wait = 10,
  /**审核通过 */
  Pass = 20,
  /**驳回 */
  Fail = 30,
}
/** 任务结算单状态 */
export enum EnumTaskSettlementOrderStatus {
  /**待上传 */
@@ -545,15 +555,27 @@
  Stop = 50,
}
/** 任务人员提交信息签到记录类型 */
export enum EnumTaskUserSubmitCheckHistoryType {
  /**签到 */
  CheckIn = 10,
  /**签出 */
  CheckOut = 20,
  /**未到岗 */
  UnCheckIn = 30,
  /**未签出 */
  UnCheckOut = 40,
}
/** 任务验收状态 */
export enum EnumTaskUserSubmitCheckReceiveStatus {
  /**待提交 */
  WaitSubmit = 10,
  /**待验收/未到岗 */
  /**待验收 */
  WaitCheckReceive = 20,
  /**验收通过/已签到 */
  Success = 30,
  /**验收未通过 */
  /**验收未通过/未到岗 */
  Fail = 40,
}
packages/constants/enum.ts
@@ -116,3 +116,5 @@
   */
  UserCertification = 10,
}
export const WeekCN = ['日', '一', '二', '三', '四', '五', '六'];
packages/constants/task.ts
@@ -13,6 +13,7 @@
  GetTaskInfoQueryResultHireButton,
  GetTaskInfoQueryResultApplyButton,
  EnumTaskUserSubmitCheckReceiveStatus,
  EnumTaskUserSubmitCheckHistoryType,
} from './apiEnum';
export const EnumBillingMethodText = {
@@ -155,3 +156,17 @@
  [GetTaskInfoQueryResultApplyButton.WaitHire]: '待确认',
  [GetTaskInfoQueryResultApplyButton.WaitSignContract]: '去签约',
};
export const EnumTaskUserSubmitCheckHistoryTypeText = {
  [EnumTaskUserSubmitCheckHistoryType.CheckIn]: '签到',
  [EnumTaskUserSubmitCheckHistoryType.CheckOut]: '签出',
  [EnumTaskUserSubmitCheckHistoryType.UnCheckIn]: '未到岗',
  [EnumTaskUserSubmitCheckHistoryType.UnCheckOut]: '未签出',
};
export const EnumTaskUserSubmitCheckHistoryTypeColor = {
  [EnumTaskUserSubmitCheckHistoryType.CheckIn]: Colors.Success,
  [EnumTaskUserSubmitCheckHistoryType.CheckOut]: Colors.Success,
  [EnumTaskUserSubmitCheckHistoryType.UnCheckIn]: Colors.Danger,
  [EnumTaskUserSubmitCheckHistoryType.UnCheckOut]: Colors.Info,
};
packages/services/apiV2/index.ts
@@ -5,11 +5,12 @@
import * as enterpriseEmployee from './enterpriseEmployee';
import * as user from './user';
import * as role from './role';
import * as enterpriseWallet from './enterpriseWallet';
import * as ocrUtils from './ocrUtils';
import * as task from './task';
import * as enterprise from './enterprise';
import * as logRecords from './logRecords';
import * as resource from './resource';
import * as enterpriseWallet from './enterpriseWallet';
import * as dictionary from './dictionary';
import * as codeUrl from './codeUrl';
import * as electronSign from './electronSign';
@@ -18,21 +19,21 @@
import * as taskCheckReceive from './taskCheckReceive';
import * as taskUser from './taskUser';
import * as sms from './sms';
import * as logRecords from './logRecords';
import * as menu from './menu';
import * as fileUtils from './fileUtils';
import * as userWallet from './userWallet';
import * as settings from './settings';
import * as menu from './menu';
import * as userWallet from './userWallet';
import * as fileUtils from './fileUtils';
import * as syncDatabase from './syncDatabase';
export default {
  enterpriseEmployee,
  user,
  role,
  enterpriseWallet,
  ocrUtils,
  task,
  enterprise,
  logRecords,
  resource,
  enterpriseWallet,
  dictionary,
  codeUrl,
  electronSign,
@@ -41,10 +42,9 @@
  taskCheckReceive,
  taskUser,
  sms,
  logRecords,
  menu,
  fileUtils,
  userWallet,
  settings,
  menu,
  userWallet,
  fileUtils,
  syncDatabase,
};
packages/services/apiV2/task.ts
@@ -2,6 +2,21 @@
// @ts-ignore
import { request } from '@/utils/request';
/** 审核任务结算 POST /api/flexjob/task/auditTaskSettlement */
export async function auditTaskSettlement(
  body: API.AuditTaskSettlementCommand,
  options?: API.RequestConfig
) {
  return request<string>('/api/flexjob/task/auditTaskSettlement', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json-patch+json',
    },
    data: body,
    ...(options || {}),
  });
}
/** 删除任务 DELETE /api/flexjob/task/deleteTaskInfo */
export async function deleteTaskInfo(body: API.DeleteTaskInfoCommand, options?: API.RequestConfig) {
  return request<number>('/api/flexjob/task/deleteTaskInfo', {
packages/services/apiV2/taskCheckReceive.ts
@@ -86,6 +86,24 @@
  );
}
/** 查询验收任务详情-签到签出记录 POST /api/flexjob/taskCheckReceive/getCheckReceiveTaskUserSubmitCheckHistories */
export async function getCheckReceiveTaskUserSubmitCheckHistories(
  body: API.GetCheckReceiveTaskUserSubmitCheckHistoriesQuery,
  options?: API.RequestConfig
) {
  return request<API.GetCheckReceiveTaskUserSubmitCheckHistoriesQueryResult>(
    '/api/flexjob/taskCheckReceive/getCheckReceiveTaskUserSubmitCheckHistories',
    {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json-patch+json',
      },
      data: body,
      ...(options || {}),
    }
  );
}
/** 查询验收详情 POST /api/flexjob/taskCheckReceive/getCheckReceiveTaskUserSubmits */
export async function getCheckReceiveTaskUserSubmits(
  body: API.GetCheckReceiveTaskUserSubmitsQuery,
packages/services/apiV2/typings.d.ts
@@ -344,6 +344,14 @@
    ids?: string[];
  }
  interface AuditTaskSettlementCommand {
    /** 结算订单Id */
    id?: string;
    auditStatus?: EnumTaskSettlementAuditStatus;
    /** 审核备注 */
    auditRemark?: string;
  }
  interface BaiduOcrBusinessLicenseResultModel {
    /** 企业全称 */
    enterpriseName?: string;
@@ -397,6 +405,16 @@
    sessionKey: string;
  }
  interface BuildOperatorTokenCommand {
    /** 操作密码 */
    password?: string;
  }
  interface BuildOperatorTokenCommandResult {
    /** 操作令牌 */
    operatorToken?: string;
  }
  interface ChangePhoneNumberCommand {
    /** 手机号码 */
    phoneNumber: string;
@@ -416,9 +434,18 @@
  type CheckHealthQuery = Record<string, any>;
  interface CheckOperatorTokenCommand {
    /** 操作令牌 */
    operatorToken?: string;
  }
  interface CheckReceiveTaskCommand {
    /** 提交Id */
    id?: string;
    /** 签到时间 */
    checkInTime?: string;
    /** 签出时间 */
    checkOutTime?: string;
    checkReceiveStatus?: EnumTaskUserSubmitCheckReceiveStatus;
  }
@@ -494,6 +521,8 @@
  interface EditTaskSettlementOrderRosterCommand {
    /** 名单Id */
    id?: string;
    /** 累计工时 */
    totalWorkHours?: number;
    /** 结算金额 */
    settlementAmount: number;
    /** 实发金额 */
@@ -1015,6 +1044,15 @@
    Stopped = 100,
  }
  enum EnumTaskSettlementAuditStatus {
    /**待审核 */
    Wait = 10,
    /**审核通过 */
    Pass = 20,
    /**驳回 */
    Fail = 30,
  }
  enum EnumTaskSettlementOrderStatus {
    /**待上传 */
    Wait = 10,
@@ -1069,14 +1107,25 @@
    Stop = 50,
  }
  enum EnumTaskUserSubmitCheckHistoryType {
    /**签到 */
    CheckIn = 10,
    /**签出 */
    CheckOut = 20,
    /**未到岗 */
    UnCheckIn = 30,
    /**未签出 */
    UnCheckOut = 40,
  }
  enum EnumTaskUserSubmitCheckReceiveStatus {
    /**待提交 */
    WaitSubmit = 10,
    /**待验收/未到岗 */
    /**待验收 */
    WaitCheckReceive = 20,
    /**验收通过/已签到 */
    Success = 30,
    /**验收未通过 */
    /**验收未通过/未到岗 */
    Fail = 40,
  }
@@ -1313,6 +1362,24 @@
    timestamp?: number;
  }
  interface FriendlyResultBuildOperatorTokenCommandResult {
    /** 跟踪Id */
    traceId?: string;
    /** 状态码 */
    code?: number;
    /** 错误码 */
    errorCode?: string;
    data?: BuildOperatorTokenCommandResult;
    /** 执行成功 */
    success?: boolean;
    /** 错误信息 */
    msg?: any;
    /** 附加数据 */
    extras?: any;
    /** 时间戳 */
    timestamp?: number;
  }
  interface FriendlyResultEnterpriseUserElectronSignCommandResult {
    /** 跟踪Id */
    traceId?: string;
@@ -1411,6 +1478,24 @@
    /** 错误码 */
    errorCode?: string;
    data?: GetCheckReceiveTasksQueryResult;
    /** 执行成功 */
    success?: boolean;
    /** 错误信息 */
    msg?: any;
    /** 附加数据 */
    extras?: any;
    /** 时间戳 */
    timestamp?: number;
  }
  interface FriendlyResultGetCheckReceiveTaskUserSubmitCheckHistoriesQueryResult {
    /** 跟踪Id */
    traceId?: string;
    /** 状态码 */
    code?: number;
    /** 错误码 */
    errorCode?: string;
    data?: GetCheckReceiveTaskUserSubmitCheckHistoriesQueryResult;
    /** 执行成功 */
    success?: boolean;
    /** 错误信息 */
@@ -3373,6 +3458,12 @@
    /** 是否实名 */
    isReal?: boolean;
    realMethod?: EnumUserRealMethod;
    /** 签到时间 */
    checkInTime?: string;
    /** 签出时间 */
    checkOutTime?: string;
    /** 操作人 */
    operator?: string;
    /** 最近提交时间 */
    lastSubmitTime?: string;
    checkReceiveStatus?: EnumTaskCheckReceiveStatus;
@@ -3462,6 +3553,45 @@
    lastCheckReceiveTime?: string;
  }
  interface GetCheckReceiveTaskUserSubmitCheckHistoriesQuery {
    /** 任务Id */
    taskInfoId?: string;
    /** 日期 */
    date?: string;
    type?: EnumTaskUserSubmitCheckHistoryType;
    pageModel?: PagedListQueryPageModel;
  }
  interface GetCheckReceiveTaskUserSubmitCheckHistoriesQueryResult {
    pageModel?: PagedListQueryResultPageModel;
    /** 数据 */
    data?: GetCheckReceiveTaskUserSubmitCheckHistoriesQueryResultItem[];
  }
  interface GetCheckReceiveTaskUserSubmitCheckHistoriesQueryResultItem {
    /** 记录Id */
    id?: string;
    /** 头像 */
    avatar?: string;
    /** 姓名 */
    name?: string;
    /** 身份证号 */
    identity?: string;
    gender?: EnumUserGender;
    /** 年龄 */
    age?: number;
    /** 手机号 */
    contactPhoneNumber?: string;
    /** 是否实名 */
    isReal?: boolean;
    realMethod?: EnumUserRealMethod;
    /** 签到签出时间 */
    checkTime?: string;
    /** 操作人 */
    operator?: string;
    type?: EnumTaskUserSubmitCheckHistoryType;
  }
  interface GetCheckReceiveTaskUserSubmitQueryResult {
    /** 提交Id */
    id?: string;
@@ -3495,6 +3625,12 @@
    id?: string;
    /** 验收时间 */
    date?: string;
    /** 签到时间 */
    checkInTime?: string;
    /** 签出时间 */
    checkOutTime?: string;
    /** 操作人 */
    operator?: string;
    /** 提交时间 */
    createdTime?: string;
    /** 验收照片 */
@@ -5534,10 +5670,21 @@
  interface GetSettlementTaskUsersQueryResultDetail {
    /** 结算订单Id */
    id?: string;
    /** 校验验收起始日期 */
    checkReceiveBeginDate?: string;
    /** 校验验收截止日期 */
    checkReceiveEndDate?: string;
    /** 任务名称 */
    name?: string;
    /** 任务单号 */
    code?: string;
    billingMethod?: EnumBillingMethod;
    /** 服务费 */
    serviceFee?: number;
    /** 核定工时 */
    verifyWorkHours?: number;
    /** 超时服务费 */
    timeoutServiceFee?: number;
    settlementOrderStatus?: EnumTaskSettlementOrderStatus;
    /** 结算单名称 */
    settlementOrderName?: string;
@@ -5557,6 +5704,8 @@
  interface GetSettlementTaskUsersQueryResultItem {
    /** 结算名单Id */
    id?: string;
    /** 任务人员Id */
    taskInfoUserId?: string;
    /** 用户信息Id */
    userId?: string;
    /** 姓名 */
@@ -5565,6 +5714,8 @@
    identity?: string;
    /** 手机号 */
    contactPhoneNumber?: string;
    /** 累计工时 */
    totalWorkHours?: number;
    /** 所属银行 */
    bank?: string;
    /** 开户支行名称 */
@@ -6435,6 +6586,8 @@
    bankBranch?: string;
    /** 收款账户 */
    receiveAccount?: string;
    /** 累计工时 */
    totalWorkHours?: number;
    /** 结算金额 */
    settlementAmount?: number;
    /** 实发金额 */
@@ -7121,8 +7274,10 @@
    userName?: string;
    /** 手机号 */
    phoneNumber?: string;
    /** 密码 */
    /** 密码(选填 填了就改不填就不改) */
    password?: string;
    /** 操作密码(选填 填了就改不填就不改) */
    operatorPassword?: string;
    /** 角色Id */
    roleIds?: string[];
    status?: EnumUserStatus;
packages/services/apiV2/user.ts
@@ -2,6 +2,36 @@
// @ts-ignore
import { request } from '@/utils/request';
/** 生成操作令牌 POST /api/user/user/buildOperatorToken */
export async function buildOperatorToken(
  body: API.BuildOperatorTokenCommand,
  options?: API.RequestConfig
) {
  return request<API.BuildOperatorTokenCommandResult>('/api/user/user/buildOperatorToken', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json-patch+json',
    },
    data: body,
    ...(options || {}),
  });
}
/** 校验操作令牌 POST /api/user/user/checkOperatorToken */
export async function checkOperatorToken(
  body: API.CheckOperatorTokenCommand,
  options?: API.RequestConfig
) {
  return request<boolean>('/api/user/user/checkOperatorToken', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json-patch+json',
    },
    data: body,
    ...(options || {}),
  });
}
/** 删除用户银行卡信息 DELETE /api/user/user/deletePersonalUserBankCard */
export async function deletePersonalUserBankCard(
  body: API.DeletePersonalUserBankCardCommand,