wupengfei
2 天以前 762ee921146f8557c2b9ce96df36ad85959c0f18
apps/bMiniApp/src/subpackages/task/components/TaskCheckCard.vue
@@ -10,7 +10,7 @@
    >
      <template #actions>
        <template v-if="checkReceiveMethod === EnumTaskCheckReceiveMethod.CheckIn">
          <nut-button
          <!-- <nut-button
            v-if="!checkInTime"
            type="primary"
            class="task-check-card-phone-btn"
@@ -26,7 +26,21 @@
          >
          <div v-else class="task-check-card-phone-status" :style="{ color: Colors.Success }">
            {{ EnumTaskCheckReceiveStatusText[checkReceiveStatus] }}
          </div>
          </div> -->
          <template
            v-if="props.submitCheckReceiveStatus !== EnumTaskUserSubmitCheckReceiveStatus.Fail"
          >
            <nut-button
              v-if="!checkInTime || !checkOutTime"
              type="primary"
              class="task-check-card-phone-btn"
              @click.stop="handleMore"
              >操作</nut-button
            >
            <div v-else class="task-check-card-phone-status" :style="{ color: Colors.Success }">
              {{ EnumTaskCheckReceiveStatusText[checkReceiveStatus] }}
            </div>
          </template>
        </template>
        <template v-else>
          <nut-button
@@ -45,19 +59,29 @@
</template>
<script setup lang="ts">
import TaskCheckPersonalView from './TaskCheckPersonalView.vue';
import {
  Colors,
  EnumUserGender,
  EnumTaskCheckReceiveStatus,
  EnumTaskCheckReceiveStatusText,
  EnumTaskCheckReceiveMethod,
  EnumGetCheckReceiveTasksQueryResultItemCheckStatus,
  EnumTaskUserSubmitCheckReceiveStatus,
} from '@12333/constants';
import { TaskCheckPersonalView } from '@12333/components';
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;
@@ -71,14 +95,75 @@
  /** 签出时间 */
  checkOutTime?: string;
  checkReceiveMethod?: EnumTaskCheckReceiveMethod;
  submitCheckReceiveStatus?: EnumTaskUserSubmitCheckReceiveStatus;
};
const props = withDefaults(defineProps<Props>(), {});
const emit = defineEmits<{
  (e: 'checkReceive'): void;
  (e: 'checkInOrOut', ev: CheckInOrOutEventEnum): void;
  (e: 'checkInOrOut', ev: EnumTaskUserSubmitCheckReceiveStatus): void;
}>();
const menuList = computed(() => {
  let _menuList = [];
  if (props.checkReceiveMethod === EnumTaskCheckReceiveMethod.CheckIn) {
    _menuList.push({
      name: '未到岗',
      value: ManageActions.OutWork,
    });
    if (!props.checkInTime) {
      _menuList.push({
        name: '签到',
        value: ManageActions.CheckIn,
      });
    } else if (!props.checkOutTime) {
      _menuList.push({
        name: '签出',
        value: ManageActions.CheckOut,
      });
    }
  }
  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', EnumTaskUserSubmitCheckReceiveStatus.WaitCheckReceive);
      break;
    case ManageActions.CheckOut:
      emit('checkInOrOut', EnumTaskUserSubmitCheckReceiveStatus.Success);
      break;
    case ManageActions.OutWork:
      emit('checkInOrOut', EnumTaskUserSubmitCheckReceiveStatus.Fail);
      break;
  }
}
</script>
<style lang="scss">