zhengyiming
2 天以前 40ed21141404ea96af41bac752b22c0f9a838168
fix: bug
5个文件已修改
343 ■■■■ 已修改文件
apps/bMiniApp/src/subpackages/task/taskCheck/InnerPage.vue 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/underTakeMiniApp/src/subpackages/task/components/TaskCheckCard.vue 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/underTakeMiniApp/src/subpackages/task/taskCheck/InnerPage.vue 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/underTakeMiniApp/src/subpackages/task/taskCheckDetail/InnerPage.vue 238 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/constants/task.ts 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/bMiniApp/src/subpackages/task/taskCheck/InnerPage.vue
@@ -49,22 +49,27 @@
const { queryState, infiniteLoadingProps } = useCheckReceiveTasks();
function goSubmitTaskDetail(item: API.GetCheckReceiveTasksQueryResultItem) {
  if (
    item.checkReceiveMethod === EnumTaskCheckReceiveMethod.CheckIn &&
    dayjs(queryState.date).isBefore(dayjs(), 'day')
  ) {
    Taro.navigateTo({
      url: `${RouterPath.taskUserSubmitCheckHistories}?id=${item.id}&date=${dayjs(
        queryState.date
      ).format('YYYY-MM-DD')}`,
    });
  } else {
  // if (
  //   item.checkReceiveMethod === EnumTaskCheckReceiveMethod.CheckIn &&
  //   dayjs(queryState.date).isBefore(dayjs(), 'day')
  // ) {
  //   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}`,
  //   });
  // }
    Taro.navigateTo({
      url: `${RouterPath.taskCheckDetail}?id=${item.id}&date=${dayjs(queryState.date).format(
        'YYYY-MM-DD'
      )}&checkReceiveStatus=${queryState.checkReceiveStatus}`,
    });
  }
}
</script>
apps/underTakeMiniApp/src/subpackages/task/components/TaskCheckCard.vue
@@ -9,50 +9,12 @@
      :contactPhoneNumber="contactPhoneNumber"
    >
      <template #actions>
        <template v-if="OrderUtils.isContainCheckIn(checkReceiveMethods)">
          <!-- <nut-button
            v-if="!checkInTime"
            type="primary"
            class="task-check-card-phone-btn"
            @click.stop="emit('checkInOrOut', CheckInOrOutEventEnum.CheckIn)"
            >签到</nut-button
        <div
          class="task-check-card-phone-status"
          :style="{ color: EnumTaskCheckReceiveStatusColor[checkReceiveStatus] }"
          >
          <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
            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
            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>
@@ -67,6 +29,7 @@
  EnumTaskCheckReceiveMethod,
  EnumGetCheckReceiveTasksQueryResultItemCheckStatus,
  EnumTaskUserSubmitCheckReceiveStatus,
  EnumTaskCheckReceiveStatusColor,
} from '@12333/constants';
import { TaskCheckPersonalView } from '@12333/components';
import { CheckInOrOutEventEnum } from '../constants';
apps/underTakeMiniApp/src/subpackages/task/taskCheck/InnerPage.vue
@@ -49,22 +49,27 @@
const { queryState, infiniteLoadingProps } = useCheckReceiveTasks();
function goSubmitTaskDetail(item: API.GetCheckReceiveTasksQueryResultItem) {
  if (
    item.checkReceiveMethod === EnumTaskCheckReceiveMethod.CheckIn &&
    dayjs(queryState.date).isBefore(dayjs(), 'day')
  ) {
    Taro.navigateTo({
      url: `${RouterPath.taskUserSubmitCheckHistories}?id=${item.id}&date=${dayjs(
        queryState.date
      ).format('YYYY-MM-DD')}`,
    });
  } else {
  // if (
  //   item.checkReceiveMethod === EnumTaskCheckReceiveMethod.CheckIn &&
  //   dayjs(queryState.date).isBefore(dayjs(), 'day')
  // ) {
  //   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}`,
  //   });
  // }
    Taro.navigateTo({
      url: `${RouterPath.taskCheckDetail}?id=${item.id}&date=${dayjs(queryState.date).format(
        'YYYY-MM-DD'
      )}&checkReceiveStatus=${queryState.checkReceiveStatus}`,
    });
  }
}
</script>
apps/underTakeMiniApp/src/subpackages/task/taskCheckDetail/InnerPage.vue
@@ -25,114 +25,9 @@
          :checkReceiveStatus="item.checkReceiveStatus"
          :checkReceiveMethods="detail?.checkReceiveMethods"
          :submitCheckReceiveStatus="item.submitCheckReceiveStatus"
          @checkReceive="goTaskDetail(item)"
          @checkInOrOut="(ev) => checkReceiveTask(ev, item)"
        />
      </template>
    </InfiniteLoading>
    <nut-popup v-model:visible="dialogVisible">
      <div class="payroll-form-wrapper">
        <nut-form :model-value="form" ref="formRef">
          <nut-form-item
            label="服务费:"
            class="bole-form-item"
            prop="serviceFee"
            label-width="90px"
          >
            <div class="bole-form-input-wrapper">
              <NumberInput
                v-model.trim="form.serviceFee"
                class="nut-input-text bole-input-text"
                placeholder="请输入服务费"
                :min="0"
                :max="999999999999"
                :precision="2"
                type="text"
                disabled
              />
              <div class="form-input-unit">元</div>
            </div>
          </nut-form-item>
          <nut-form-item
            label="超时:"
            class="bole-form-item"
            prop="timeoutHours"
            label-width="90px"
          >
            <div class="bole-form-input-wrapper">
              <NumberInput
                v-model.trim="form.timeoutHours"
                class="nut-input-text bole-input-text"
                placeholder="请输入超时时长"
                :min="0"
                :max="999999999999"
                :precision="2"
                type="text"
                @change="onTimeoutHoursChange"
              />
              <div class="form-input-unit">小时</div>
            </div>
          </nut-form-item>
          <nut-form-item
            label="超时费用:"
            class="bole-form-item"
            prop="timeoutFee"
            label-width="90px"
          >
            <div class="bole-form-input-wrapper">
              <NumberInput
                v-model.trim="form.timeoutFee"
                class="nut-input-text bole-input-text"
                placeholder="请输入超时费用"
                :min="0"
                :max="999999999999"
                :precision="2"
                type="text"
              />
              <div class="form-input-unit">元</div>
            </div>
          </nut-form-item>
          <nut-form-item
            label="其他费用:"
            class="bole-form-item"
            prop="otherFee"
            label-width="90px"
          >
            <div class="bole-form-input-wrapper">
              <NumberInput
                v-model.trim="form.otherFee"
                class="nut-input-text bole-input-text"
                placeholder="请输入其他费用"
                :max="999999999999"
                :precision="2"
                type="text"
              />
              <div class="form-input-unit">元</div>
            </div>
          </nut-form-item>
          <nut-form-item
            label="结算金额:"
            class="bole-form-item"
            prop="settlementAmount"
            label-width="90px"
          >
            {{ `${settlementAmount}元` }}
          </nut-form-item>
          <nut-form-item
            label="备注:"
            class="bole-form-item alignTop"
            prop="remark"
            label-width="90px"
          >
            <nut-textarea v-model="form.remark" rows="4" placeholder="请输入备注"> </nut-textarea>
          </nut-form-item>
        </nut-form>
        <div class="payroll-form-footer">
          <nut-button @click="handleCancel">取消</nut-button>
          <nut-button type="primary" @click="handleConfirm">确认</nut-button>
        </div>
      </div>
    </nut-popup>
  </LoadingLayout>
</template>
@@ -159,21 +54,6 @@
const date = router.params?.date ?? '';
const checkReceiveStatus = Number(router.params?.checkReceiveStatus);
const dialogVisible = ref(false);
const form = reactive({
  serviceFee: 0,
  timeoutHours: 0,
  timeoutFee: 0,
  otherFee: 0,
  remark: '',
  timeoutServiceFee: 0,
  taskInfoId: '',
  checkInTime: '',
  checkoutTime: '',
});
const detail = ref<API.GetCheckReceiveTasksQueryResultItem>();
const { infiniteLoadingProps } = useInfiniteLoading(
@@ -198,124 +78,6 @@
    queryKey: ['taskCheckReceiveServices/getCheckReceiveTask'],
  }
);
const settlementAmount = computed(() => sumSettlementAmount());
function onTimeoutHoursChange(event: any) {
  form.timeoutFee = Number(form.timeoutServiceFee)
    ? form.timeoutServiceFee * event.detail.value
    : 0;
}
function sumSettlementAmount() {
  return toRound(
    getFeeValue(Number(form.timeoutFee ?? 0)) +
      getFeeValue(Number(form.serviceFee ?? 0)) +
      getFeeValue(Number(form.otherFee ?? 0))
  );
}
function getFeeValue(val: number) {
  return val || 0;
}
async function openDialog(item: API.GetCheckReceiveTaskQueryResultItem) {
  let res = await calcTaskCheckReceive(item);
  if (res) {
    dialogVisible.value = true;
    form.taskInfoId = item.id;
    form.serviceFee = res.serviceFee ?? 0;
    form.timeoutHours = res.timeoutHours ?? 0;
    form.timeoutServiceFee = detail.value?.timeoutServiceFee ?? 0;
    form.otherFee = 0;
    form.timeoutFee = 0;
    form.remark = '';
  }
}
function handleCancel() {
  dialogVisible.value = false;
}
async function handleConfirm() {
  try {
    let params: API.CheckReceiveTaskCommand = {
      taskInfoUserId: form.taskInfoId,
      date: dayjs(date).format('YYYY-MM-DD'),
      // checkOutTime: dayjs().format('YYYY-MM-DD HH:mm:ss'),
      checkReceiveStatus: EnumTaskUserSubmitCheckReceiveStatus.Success,
      serviceFee: form.serviceFee,
      timeoutHours: form.timeoutHours,
      timeoutFee: form.timeoutFee,
      otherFee: form.otherFee,
      remark: form.remark,
      settlementAmount: settlementAmount.value,
    };
    let res = await taskCheckReceiveServices.checkReceiveTask(params);
    if (res) {
      Message.success('提交成功');
      dialogVisible.value = false;
      infiniteLoadingProps.value?.refetch?.();
    }
  } catch (error) {}
}
async function calcTaskCheckReceive(item: API.GetCheckReceiveTaskQueryResultItem) {
  try {
    let params: API.CalcTaskCheckReceiveCommand = {
      taskInfoId: id,
      checkInTime: dayjs(item.checkInTime).format('YYYY-MM-DD HH:mm:ss'),
      checkOutTime: dayjs().format('YYYY-MM-DD HH:mm:ss'),
    };
    return await taskCheckReceiveServices.calcTaskCheckReceive(params);
  } catch (error) {}
}
function goTaskDetail(item: API.GetCheckReceiveTaskQueryResultItem) {
  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}`,
      });
    }
  }
}
async function checkReceiveTask(
  ev: EnumTaskUserSubmitCheckReceiveStatus,
  item: API.GetCheckReceiveTaskQueryResultItem
) {
  try {
    let params: API.CheckReceiveTaskCommand = {
      taskInfoUserId: item.id,
      date: dayjs(date).format('YYYY-MM-DD'),
    };
    if (ev === EnumTaskUserSubmitCheckReceiveStatus.WaitCheckReceive) {
      params.checkInTime = dayjs().format('YYYY-MM-DD HH:mm:ss');
      params.checkReceiveStatus = ev;
    } else if (ev === EnumTaskUserSubmitCheckReceiveStatus.Success) {
      openDialog(item);
      return;
      // params.checkOutTime = dayjs().format('YYYY-MM-DD HH:mm:ss');
      // params.checkReceiveStatus = ev;
    } else if (ev === EnumTaskUserSubmitCheckReceiveStatus.Fail) {
      params.checkReceiveStatus = ev;
    }
    let res = await taskCheckReceiveServices.checkReceiveTask(params);
    if (res) {
      Message.success('提交成功');
      infiniteLoadingProps.value?.refetch?.();
    }
  } catch (error) {}
}
</script>
<style lang="scss">
@import '@/styles/common.scss';
packages/constants/task.ts
@@ -106,6 +106,12 @@
  [EnumTaskCheckReceiveStatus.Completed]: '已验收',
};
export const EnumTaskCheckReceiveStatusColor = {
  [EnumTaskCheckReceiveStatus.WaitSubmit]: Colors.Warning,
  [EnumTaskCheckReceiveStatus.WaitCheckReceive]: Colors.Warning,
  [EnumTaskCheckReceiveStatus.Completed]: Colors.Success,
};
export const EnumTaskUserSubmitCheckReceiveStatusText = {
  [EnumTaskUserSubmitCheckReceiveStatus.WaitSubmit]: '待提交',
  [EnumTaskUserSubmitCheckReceiveStatus.WaitCheckReceive]: '待验收',