hooks.js 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import {getDays, addDeliver} from '@apis';
  2. import {useMutation, useQuery} from '@tanstack/react-query';
  3. import dayjs from 'dayjs';
  4. import {useEffect, useState, useMemo} from 'react';
  5. import {showLoading, hideLoading, showToast, showModal} from '@tarojs/taro';
  6. import {useNavigate} from '@hooks';
  7. export function useDate(customerNo) {
  8. const [date, setDate] = useState('');
  9. const {data} = useQuery({
  10. queryKey: [getDays.name, customerNo],
  11. async queryFn() {
  12. showLoading({title: '获取发货时长', mask: true});
  13. const data = await getDays(customerNo);
  14. hideLoading({noConflict: true});
  15. if (data.code === '200') return Number(data.data.days);
  16. return 0;
  17. },
  18. enabled: customerNo.length > 0,
  19. initialData: 0,
  20. });
  21. useEffect(
  22. function () {
  23. setDate(dayjs().add(data, 'day').format('YYYY-MM-DD'));
  24. },
  25. [data],
  26. );
  27. function onDateChagne(e) {
  28. setDate(e.detail.value);
  29. }
  30. return [date, onDateChagne];
  31. }
  32. export function useSubmit({goodsList, customerNo, truckNo, date}) {
  33. const dataList = useMemo(
  34. function () {
  35. return goodsList.map(function ({no, num}) {
  36. return {partNumber: no, qty: num};
  37. });
  38. },
  39. [goodsList],
  40. );
  41. const {pop} = useNavigate();
  42. const {isLoading, mutate} = useMutation({
  43. mutationFn: addDeliver,
  44. onSuccess({code}) {
  45. if (code === '200') {
  46. pop();
  47. showToast({title: '上传成功', icon: 'success'});
  48. }
  49. },
  50. });
  51. function onSubmit() {
  52. if (!customerNo || !truckNo) {
  53. return showToast({title: '请先扫码', icon: 'error'});
  54. }
  55. showModal({
  56. title: '提交发货',
  57. content: `你确定要提交${truckNo}${customerNo}发货单吗?`,
  58. success({confirm}) {
  59. confirm &&
  60. mutate({dataList, customer: customerNo, truckNo, arrivalTime: date});
  61. },
  62. });
  63. }
  64. return [isLoading, onSubmit];
  65. }