zhengyiming
2 天以前 36f2c20ea3df022390b677e782d8a4cd25f21f69
apps/bMiniApp/src/subpackages/task/components/TaskCheckCard.vue
@@ -1,5 +1,5 @@
<template>
  <div class="task-check-card-wrapper" @click.stop="emit('taskChecked')">
  <div class="task-check-card-wrapper" @click.stop="emit('checkReceive')">
    <TaskCheckPersonalView
      class="task-check-card-view"
      :avatar="avatar"
@@ -9,16 +9,39 @@
      :contactPhoneNumber="contactPhoneNumber"
    >
      <template #actions>
        <nut-button
          v-if="checkReceiveStatus === EnumTaskCheckReceiveStatus.WaitCheckReceive"
          type="primary"
          class="task-check-card-phone-btn"
          @click.stop="emit('checkReceive')"
          >验收</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> -->
          <nut-button type="primary" class="task-check-card-phone-btn" @click.stop="handleMore"
            >操作</nut-button
          >
        </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>
@@ -31,11 +54,21 @@
  EnumUserGender,
  EnumTaskCheckReceiveStatus,
  EnumTaskCheckReceiveStatusText,
  EnumTaskCheckReceiveMethod,
} from '@12333/constants';
import { CheckInOrOutEventEnum } from '../constants';
import { Portal } from 'senin-mini/components';
import { ActionSheet } from '@nutui/nutui-taro';
defineOptions({
  name: 'TaskCheckCard',
});
enum ManageActions {
  CheckIn = 1,
  CheckOut,
  OutWork,
}
type Props = {
  avatar?: string;
@@ -44,14 +77,77 @@
  isReal?: boolean;
  contactPhoneNumber?: string;
  checkReceiveStatus?: EnumTaskCheckReceiveStatus;
  /** 签到时间 */
  checkInTime?: string;
  /** 签出时间 */
  checkOutTime?: string;
  checkReceiveMethod?: EnumTaskCheckReceiveMethod;
};
const props = withDefaults(defineProps<Props>(), {});
const emit = defineEmits<{
  (e: 'checkReceive'): void;
  (e: 'taskChecked'): void;
  (e: 'checkInOrOut', ev: CheckInOrOutEventEnum): void;
}>();
const menuList = computed(() => {
  let _menuList = [];
  if (props.checkReceiveMethod === EnumTaskCheckReceiveMethod.CheckIn) {
    _menuList.push(
      {
        name: '签到',
        value: ManageActions.CheckIn,
      },
      {
        name: '签出',
        value: ManageActions.CheckOut,
      },
      {
        name: '未到岗',
        value: ManageActions.OutWork,
      }
    );
  }
  return _menuList;
});
function handleMore() {
  Portal.add((key) => {
    return h(
      Portal.Container,
      { keyNumber: key, delayOpen: true },
      {
        default: ({ open, onClose }) =>
          // @ts-ignore
          h(ActionSheet, {
            visible: open.value,
            'onUpdate:visible': () => onClose(),
            menuItems: menuList.value,
            onChoose: (item) => {
              handleEmit(item);
              onClose();
            },
          }),
      }
    );
  });
}
function handleEmit(action: { name: string; value: number }) {
  switch (action.value) {
    case ManageActions.CheckIn:
      emit('checkInOrOut', CheckInOrOutEventEnum.CheckIn);
      break;
    case ManageActions.CheckOut:
      emit('checkInOrOut', CheckInOrOutEventEnum.CheckOut);
      break;
    case ManageActions.OutWork:
      emit('checkInOrOut', CheckInOrOutEventEnum.CheckOut);
      break;
  }
}
</script>
<style lang="scss">