zhengyiming
13 小时以前 28ac7ff126b09110a802473f0471cce98eb363a4
Merge branch 'master' of http://120.26.58.240:8888/r/flexJobMiniApp
已修改8个文件
已添加1个文件
427 ■■■■■ 文件已修改
apps/bStandardMiniApp/src/subpackages/appointmentManage/appointmentManage/InnerPage.vue 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/bStandardMiniApp/src/subpackages/appointmentManage/appointmentManageDetail/InnerPage.vue 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/bStandardMiniApp/src/subpackages/orderManage/orderManage/InnerPage.vue 64 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/bStandardMiniApp/src/subpackages/orderManage/orderManageDetail/InnerPage.vue 48 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/components/src/Card/ReserveServiceCard.vue 132 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/components/src/Card/TaskPrice.vue 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/constants/index.ts 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/constants/standardOrder.ts 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/hooks/standardOrder.ts 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/bStandardMiniApp/src/subpackages/appointmentManage/appointmentManage/InnerPage.vue
@@ -1,6 +1,6 @@
<template>
  <ProTabs
    v-model="queryState.status"
    v-model="queryState.appointmentStatus"
    name="home-tab"
    :showPaneContent="false"
    class="home-tabs"
@@ -11,35 +11,40 @@
    <ProTabPane :title="`全部`" :pane-key="0"></ProTabPane>
    <ProTabPane
      :title="`待确认`"
      :pane-key="GetPersonalApplyTaskInfosQueryStatus.WaitHire"
      :pane-key="EnumStandardOrderAppointmentStatus.WaitSure"
    ></ProTabPane>
    <ProTabPane
      :title="`待服务`"
      :pane-key="GetPersonalApplyTaskInfosQueryStatus.WaitSignContract"
      :pane-key="EnumStandardOrderAppointmentStatus.WaitServe"
    ></ProTabPane>
    <ProTabPane
      :title="`已完成`"
      :pane-key="GetPersonalApplyTaskInfosQueryStatus.HireRefuse"
      :pane-key="EnumStandardOrderAppointmentStatus.Completed"
    ></ProTabPane>
    <ProTabPane :title="`已取消`" :pane-key="40"></ProTabPane>
    <ProTabPane
      :title="`已取消`"
      :pane-key="EnumStandardOrderAppointmentStatus.Cancelled"
    ></ProTabPane>
  </ProTabs>
  <InfiniteLoading
    scrollViewClassName="common-infinite-scroll-list home-list"
    v-bind="infiniteLoadingProps"
    :key="queryState.status"
    :key="queryState.appointmentStatus"
  >
    <template #renderItem="{ item }">
      <ReserveServiceCard
        :name="item.name"
        :serviceName="item.serviceName"
        :begin-time="item.beginTime"
        :serviceFee="item.serviceFee"
        :end-time="item.endTime"
        :billing-method="item.billingMethod"
        :benefits="item.benefits"
        :service-fee="item.serviceFee"
        :settlement-cycle="item.settlementCycle"
        :address-name="item.addressName"
        :supplierEnterpriseName="item.supplierEnterpriseName"
        :address-detail="item.addressDetail"
        :appointmentStatus="item.appointmentStatus"
        @click="goDetail(item)"
      >
        <template #serviceCustome>
          {{ `服务人员:${item.serverNames}` }}
        </template>
      </ReserveServiceCard>
    </template>
  </InfiniteLoading>
@@ -47,40 +52,15 @@
<script setup lang="ts">
import { ProTabs, ProTabPane, ReserveServiceCard } from '@12333/components';
import { useUserStore } from '@/stores/modules/user';
import { useInfiniteLoading } from '@12333/hooks';
import { EnumPagedListOrder, GetPersonalApplyTaskInfosQueryStatus } from '@12333/constants';
import * as taskServices from '@12333/services/apiV2/task';
import { useGetStandardOrders } from '@12333/hooks';
import { EnumStandardOrderAppointmentStatus } from '@12333/constants';
import Taro from '@tarojs/taro';
defineOptions({
  name: 'InnerPage',
});
const queryState = reactive({
  status: 0 as any as GetPersonalApplyTaskInfosQueryStatus,
});
const userStore = useUserStore();
const { infiniteLoadingProps } = useInfiniteLoading(
  ({ pageParam }) => {
    let params: API.GetTaskInfosQuery = {
      pageModel: {
        rows: 20,
        page: pageParam,
        orderInput: [{ property: 'id', order: EnumPagedListOrder.Desc }],
      },
    };
    return taskServices.getOpenTaskInfos(params, {
      showLoading: false,
    });
  },
  {
    queryKey: ['taskServices/getOpenTaskInfos', queryState],
  }
);
const { queryState, infiniteLoadingProps } = useGetStandardOrders();
function goDetail(item: any) {
  Taro.navigateTo({
apps/bStandardMiniApp/src/subpackages/appointmentManage/appointmentManageDetail/InnerPage.vue
@@ -1,7 +1,7 @@
<template>
  <!-- <LoadingLayout :loading="isLoading" :error="isError" :loadError="refetch"> -->
  <ContentScrollView hasPaddingTop>
    <MineServiceDetailView />
    <MineServiceDetailView :addressDetail="detail?.addressDetail" />
  </ContentScrollView>
  <PageFooter>
    <PageFooterBtn type="primary" class="business-card-btn" @click="goCancel"
@@ -17,8 +17,7 @@
<script setup lang="ts">
import { MineServiceDetailView } from '@12333/components';
import Taro from '@tarojs/taro';
import * as standardServiceServices from '@12333/services/apiV2/standardService';
import { RouterPath } from '@/constants';
import { useStandardOrder } from '@12333/hooks';
defineOptions({
  name: 'InnerPage',
@@ -27,6 +26,10 @@
const route = Taro.useRouter();
const id = route.params?.id as string;
const { detail } = useStandardOrder({
  id: id,
});
function goCancel() {}
function goConfirm() {}
apps/bStandardMiniApp/src/subpackages/orderManage/orderManage/InnerPage.vue
@@ -1,6 +1,6 @@
<template>
  <ProTabs
    v-model="queryState.status"
    v-model="queryState.payStatus"
    name="home-tab"
    :showPaneContent="false"
    class="home-tabs"
@@ -9,36 +9,29 @@
    title-scroll
  >
    <ProTabPane :title="`全部`" :pane-key="0"></ProTabPane>
    <ProTabPane
      :title="`待支付`"
      :pane-key="GetPersonalApplyTaskInfosQueryStatus.WaitHire"
    ></ProTabPane>
    <ProTabPane
      :title="`已支付`"
      :pane-key="GetPersonalApplyTaskInfosQueryStatus.WaitSignContract"
    ></ProTabPane>
    <ProTabPane
      :title="`已完成`"
      :pane-key="GetPersonalApplyTaskInfosQueryStatus.HireRefuse"
    ></ProTabPane>
    <ProTabPane :title="`待支付`" :pane-key="EnumStandardOrderPayStatus.Completed"></ProTabPane>
    <ProTabPane :title="`已支付`" :pane-key="EnumStandardOrderPayStatus.Completed"></ProTabPane>
    <ProTabPane :title="`已完成`" :pane-key="EnumStandardOrderPayStatus.Cancelled"></ProTabPane>
  </ProTabs>
  <InfiniteLoading
    scrollViewClassName="common-infinite-scroll-list home-list"
    v-bind="infiniteLoadingProps"
    :key="queryState.status"
    :key="queryState.payStatus"
  >
    <template #renderItem="{ item }">
      <ReserveServiceCard
        :name="item.name"
        :serviceName="item.serviceName"
        :begin-time="item.beginTime"
        :serviceFee="item.serviceFee"
        :end-time="item.endTime"
        :billing-method="item.billingMethod"
        :benefits="item.benefits"
        :service-fee="item.serviceFee"
        :settlement-cycle="item.settlementCycle"
        :address-name="item.addressName"
        :supplierEnterpriseName="item.supplierEnterpriseName"
        :address-detail="item.addressDetail"
        :appointmentStatus="item.appointmentStatus"
        @click="goOrderDetail(item)"
      >
        <template #serviceCustome>
          {{ `服务人员:${item.serverNames}` }}
        </template>
      </ReserveServiceCard>
    </template>
  </InfiniteLoading>
@@ -46,40 +39,15 @@
<script setup lang="ts">
import { ProTabs, ProTabPane, ReserveServiceCard } from '@12333/components';
import { useUserStore } from '@/stores/modules/user';
import { useInfiniteLoading } from '@12333/hooks';
import { EnumPagedListOrder, GetPersonalApplyTaskInfosQueryStatus } from '@12333/constants';
import * as taskServices from '@12333/services/apiV2/task';
import { useGetStandardOrders } from '@12333/hooks';
import { EnumStandardOrderPayStatus } from '@12333/constants';
import Taro from '@tarojs/taro';
defineOptions({
  name: 'InnerPage',
});
const queryState = reactive({
  status: 0 as any as GetPersonalApplyTaskInfosQueryStatus,
});
const userStore = useUserStore();
const { infiniteLoadingProps } = useInfiniteLoading(
  ({ pageParam }) => {
    let params: API.GetTaskInfosQuery = {
      pageModel: {
        rows: 20,
        page: pageParam,
        orderInput: [{ property: 'id', order: EnumPagedListOrder.Desc }],
      },
    };
    return taskServices.getOpenTaskInfos(params, {
      showLoading: false,
    });
  },
  {
    queryKey: ['taskServices/getOpenTaskInfos', queryState],
  }
);
const { queryState, infiniteLoadingProps } = useGetStandardOrders();
function goOrderDetail(item: any) {
  Taro.navigateTo({
apps/bStandardMiniApp/src/subpackages/orderManage/orderManageDetail/InnerPage.vue
@@ -4,11 +4,12 @@
    <MineServiceDetailView />
  </ContentScrollView>
  <PageFooter class="order-settle-bar">
    <div class="order-settle-price-wrapper">
      <div class="order-settle-price-label">支付:</div>
      <nut-price :price="155" size="large" />
    </div>
    <PageFooterBtn type="primary" class="business-card-btn">立即下单</PageFooterBtn>
    <PageFooterBtn class="business-card-btn" @click="cancelStandardOrderAppointment"
      >取消预约</PageFooterBtn
    >
    <PageFooterBtn type="primary" class="business-card-btn" @click="handleSubmit"
      >确认预约</PageFooterBtn
    >
  </PageFooter>
  <!-- </LoadingLayout> -->
</template>
@@ -16,8 +17,10 @@
<script setup lang="ts">
import { MineServiceDetailView } from '@12333/components';
import Taro from '@tarojs/taro';
import * as standardServiceServices from '@12333/services/apiV2/standardService';
import { useCheckReceiveTaskUserSubmit } from '@12333/hooks';
import * as standardOrderServices from '@12333/services/apiV2/standardOrder';
import { Message } from '@12333/utils';
import { goBack } from '@/utils';
import { useStandardOrder } from '@12333/hooks';
defineOptions({
  name: 'InnerPage',
@@ -25,6 +28,37 @@
const route = Taro.useRouter();
const id = route.params?.id as string;
const { detail } = useStandardOrder({
  id: id,
});
async function cancelStandardOrderAppointment() {
  try {
    await Message.confirm({ message: '确认要取消预约吗?' });
    let params: API.CancelStandardOrderAppointmentCommand = {
      id: id,
    };
    let res = await standardOrderServices.cancelStandardOrderAppointment(params);
    if (res) {
      Message.success('操作成功');
      goBack();
    }
  } catch (error) {}
}
async function handleSubmit() {
  try {
    let params: API.SureStandardOrderAppointmentCommand = {
      id: id,
    };
    let res = await standardOrderServices.sureStandardOrderAppointment(params);
    if (res) {
      Message.success('操作成功');
      goBack();
    }
  } catch (error) {}
}
</script>
<style lang="scss">
packages/components/src/Card/ReserveServiceCard.vue
@@ -1,44 +1,44 @@
<template>
  <div class="reserve-service-card-wrapper" :class="{ 'un-read': unRead }">
    <div class="reserve-service-card-title-wrapper">
      <div class="reserve-service-card-title">{{ name }}</div>
      <div class="reserve-service-card-title">{{ serviceName }}</div>
      <slot name="title-right">
        <TaskPrice
          v-if="releaseStatus !== EnumTaskReleaseStatus.Stopped"
          :value="toThousand(serviceFee ?? 0)"
          :unit="BillingMethodEnumUnit[billingMethod]"
          :billingMethod="billingMethod"
        />
        <TaskPrice :value="toThousand(serviceFee ?? 0)" unit="元" />
      </slot>
    </div>
    <div class="reserve-service-card-item-list">
      <div class="reserve-service-card-item">
        æœåŠ¡æ—¶é—´ï¼š{{ dayjs(beginTime).format('YYYYå¹´MM月D日') }} 13:00-15:00
        æœåŠ¡æ—¶é—´ï¼š{{
          `${dayjs(beginTime).format('YYYYå¹´MM月D日 HH:mm:ss')} - ${dayjs(endTime).format(
            'YYYYå¹´MM月D日 HH:mm:ss'
          )}`
        }}
      </div>
      <div class="reserve-service-card-item">服务地址:{{ addressName }}</div>
      <div class="reserve-service-card-item">服务地址:{{ addressDetail }}</div>
    </div>
    <div class="reserve-service-card-footer">
      <div class="reserve-service-card-left">
        <div class="reserve-service-card-footer-address">服务机构:我是机构名称</div>
        <div class="reserve-service-card-footer-address">
          <slot name="serviceCustome"> æœåŠ¡æœºæž„ï¼š{{ supplierEnterpriseName }} </slot>
        </div>
      </div>
      <div class="reserve-service-card-status">待确认</div>
      <div class="reserve-service-card-status">
        <slot name="status">
          {{ EnumStandardOrderAppointmentStatusText[appointmentStatus] }}
        </slot>
      </div>
    </div>
  </div>
</template>
<script setup lang="ts">
import {
  EnumBillingMethod,
  EnumSettlementCycle,
  EnumTaskCheckReceiveStatus,
  EnumTaskRecommendStatus,
  EnumTaskReleaseStatus,
  EnumTaskSettlementStatus,
  EnumTaskStatus,
  EnumUserGender,
  BillingMethodEnumUnit,
  EnumTaskUserHireStatus,
  EnumStandardOrderAppointmentStatus,
  EnumEnterpriseCooperationServiceFeeCollectType,
  EnumStandardOrderSettlementStatus,
  EnumStandardOrderPayStatus,
  EnumStandardOrderAppointmentStatusText,
} from '@12333/constants';
import dayjs from 'dayjs';
import { toThousand } from '@12333/utils';
@@ -51,51 +51,61 @@
type Props = {
  /** Id */
  id?: string;
  /** ä»»åŠ¡åç§° */
  name: string;
  /** ä»»åŠ¡å•å· */
  /** è®¢å•号 */
  code?: string;
  billingMethod?: EnumBillingMethod;
  /** æœåŠ¡å */
  serviceName?: string;
  /** æœåŠ¡å•å· */
  serviceCode?: string;
  /** æœåŠ¡å›¾ç‰‡ */
  serviceFile?: string;
  /** çœå¸‚区+详细地址+门牌号 */
  addressDetail?: string;
  /** æœåŠ¡èµ·å§‹æ—¶é—´ */
  beginTime?: string;
  /** æœåŠ¡æˆªæ­¢æ—¶é—´ */
  endTime?: string;
  /** ä¸‹å•用户Id */
  createdUserId?: string;
  /** ä¸‹å•用户 */
  createdUserName?: string;
  /** è”系电话 */
  createdUserContactPhoneNumber?: string;
  /** ä¸‹å•æ—¶é—´ */
  createdTime?: string;
  appointmentStatus?: EnumStandardOrderAppointmentStatus;
  /** ç”²æ–¹ä¼ä¸šId */
  partyAEnterpriseId?: string;
  /** ç”²æ–¹ä¼ä¸š */
  partyAEnterpriseName?: string;
  /** ä¾›åº”商Id */
  supplierEnterpriseId?: string;
  /** ä¾›åº”商 */
  supplierEnterpriseName?: string;
  /** æœåŠ¡äººå‘˜ */
  serverNames?: string;
  /** æœåŠ¡äººå‘˜è”ç³»ç”µè¯ */
  serverContactPhoneNumbers?: string;
  payStatus?: EnumStandardOrderPayStatus;
  /** æ”¯ä»˜å®Œæˆæ—¶é—´ */
  payCompletedTime?: string;
  /** å®žä»˜é‡‘额 */
  payAmount?: number;
  /** å®žæ”¶é‡‘额 */
  receiveAmount?: number;
  serviceFeeCollectType?: EnumEnterpriseCooperationServiceFeeCollectType;
  /** æœåŠ¡è´¹ */
  serviceFee?: number;
  settlementCycle?: EnumSettlementCycle;
  /** ç¦åˆ© */
  benefits?: API.GetTaskInfoQueryResultBenefit[];
  genderLimit?: EnumUserGender;
  /** èµ„格证书类型 */
  credentialLimits?: API.GetTaskInfoQueryResultCredentialLimit[];
  /** ä»»åŠ¡åœ°ç‚¹æ‰€å±žçœä»½ç¼–å· */
  provinceCode?: string;
  /** ä»»åŠ¡åœ°ç‚¹æ‰€å±žçœä»½ */
  provinceContent?: string;
  /** ä»»åŠ¡åœ°ç‚¹æ‰€å±žåŸŽå¸‚ç¼–å· */
  cityCode?: string;
  /** ä»»åŠ¡åœ°ç‚¹æ‰€å±žåŸŽå¸‚ */
  cityContent?: string;
  /** ä»»åŠ¡åœ°ç‚¹åç§° */
  addressName?: string;
  /** ä»»åŠ¡åœ°ç‚¹è¯¦ç»†åœ°å€ */
  addressDetail?: string;
  /** ç»åº¦ */
  longitude?: number;
  /** çº¬åº¦ */
  latitude?: number;
  /** æŠ¥åäººæ•° */
  userCount?: number;
  status?: EnumTaskStatus;
  /** ä»»åŠ¡å¼€å§‹æ—¶é—´ */
  beginTime?: string;
  /** ä»»åŠ¡ç»“æŸæ—¶é—´ */
  endTime?: string;
  releaseStatus?: EnumTaskReleaseStatus;
  checkReceiveStatus?: EnumTaskCheckReceiveStatus;
  settlementStatus?: EnumTaskSettlementStatus;
  recommendStatus?: EnumTaskRecommendStatus;
  /** åˆ›å»ºæ—¶é—´ */
  createdTime?: string;
  hireStatus?: EnumTaskUserHireStatus;
  settlementStatus?: EnumStandardOrderSettlementStatus;
  /** ç»“算单号 */
  settlementCode?: string;
  /** ç»“ç®—æ—¶é—´ */
  settlementTime?: string;
  /** ç»“算金额 */
  settlementAmount?: number;
  unRead?: boolean;
  showActions?: boolean;
};
const props = withDefaults(defineProps<Props>(), {
packages/components/src/Card/TaskPrice.vue
@@ -1,6 +1,9 @@
<template>
  <div class="task-price">
    <div class="task-price-decimal" v-if="billingMethod !== EnumBillingMethod.Face">
    <div
      class="task-price-decimal"
      v-if="!!billingMethod || billingMethod !== EnumBillingMethod.Face"
    >
      {{ value }}
    </div>
    <div class="task-price-unit">{{ unit }}</div>
packages/constants/index.ts
@@ -15,3 +15,4 @@
export * from './apiEnum';
export * from './enterpriseEmployee';
export * from './enterpriseWallet';
export * from './standardOrder';
packages/constants/standardOrder.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,36 @@
import {
  EnumGetStandardOrdersQueryScene,
  EnumStandardOrderAppointmentStatus,
  EnumStandardOrderPayStatus,
  EnumStandardOrderSettlementStatus,
  EnumStandardServiceReleaseStatus,
} from './apiEnum';
export const EnumStandardServiceReleaseStatusText = {
  [EnumStandardServiceReleaseStatus.InProcess]: '发布中',
  [EnumStandardServiceReleaseStatus.Stopped]: '已停止',
};
export const EnumStandardOrderAppointmentStatusText = {
  [EnumStandardOrderAppointmentStatus.WaitSure]: '待确认',
  [EnumStandardOrderAppointmentStatus.WaitServe]: '待服务',
  [EnumStandardOrderAppointmentStatus.Completed]: '已完成',
  [EnumStandardOrderAppointmentStatus.Cancelled]: '已取消',
};
export const EnumStandardOrderPayStatusText = {
  [EnumStandardOrderPayStatus.Wait]: '待支付',
  [EnumStandardOrderPayStatus.Completed]: '已支付',
  [EnumStandardOrderPayStatus.Cancelled]: '已取消',
};
export const EnumStandardOrderSettlementStatusText = {
  [EnumStandardOrderSettlementStatus.Wait]: '待结算',
  [EnumStandardOrderSettlementStatus.Completed]: '已完成',
};
export const EnumGetStandardOrdersQuerySceneText = {
  [EnumGetStandardOrdersQueryScene.Appointment]: '预约订单',
  [EnumGetStandardOrdersQueryScene.Pay]: '支付订单',
  [EnumGetStandardOrdersQueryScene.Settlement]: '结算订单',
};
packages/hooks/standardOrder.ts
@@ -1,7 +1,10 @@
import { useQuery, useQueryClient } from '@tanstack/vue-query';
import * as standardServiceServices from '@12333/services/apiV2/standardService';
import { computed, MaybeRef, unref } from 'vue';
import * as standardOrderServices from '@12333/services/apiV2/standardOrder';
import { computed, MaybeRef, reactive, unref } from 'vue';
import { groupBy } from 'lodash';
import { useInfiniteLoading } from '@12333/hooks';
import { EnumStandardOrderAppointmentStatus, EnumStandardOrderPayStatus } from '@12333/constants';
type UseStandardServiceDetailOptions = {
  id: MaybeRef<string>;
@@ -95,3 +98,70 @@
    standardServiceListForCategoryMap,
  };
}
export function useGetStandardOrders() {
  const queryState = reactive({
    appointmentStatus: 0 as any as EnumStandardOrderAppointmentStatus,
    payStatus: 0 as any as EnumStandardOrderPayStatus,
  });
  const { infiniteLoadingProps } = useInfiniteLoading(
    ({ pageParam }) => {
      let params: API.GetStandardOrdersQuery = {
        pageModel: {
          rows: 20,
          page: pageParam,
        },
      };
      if (queryState.appointmentStatus) {
        params.appointmentStatus = queryState.appointmentStatus;
      }
      if (queryState.payStatus) {
        params.payStatus = queryState.payStatus;
      }
      return standardOrderServices.getStandardOrders(params, {
        showLoading: false,
      });
    },
    {
      queryKey: ['standardOrderServices/getStandardOrders', queryState],
    }
  );
  return {
    queryState,
    infiniteLoadingProps,
  };
}
type UseStandardOrderOptions = {
  id: MaybeRef<string>;
  onSuccess?: (data: API.GetStandardOrderQueryResult) => any;
};
export function useStandardOrder({ id, onSuccess }: UseStandardOrderOptions) {
  const {
    isLoading,
    isError,
    data: detail,
    refetch,
  } = useQuery({
    queryKey: ['standardOrderServices/getStandardOrder', id],
    queryFn: async () => {
      const params: API.APIgetStandardOrderParams = {
        id: unref(id),
      };
      return await standardOrderServices.getStandardOrder(params, {
        showLoading: false,
      });
    },
    placeholderData: () => ({} as API.GetStandardOrderQueryResult),
    onSuccess(data) {
      onSuccess?.(data);
    },
  });
  return { detail, isLoading, isError, refetch };
}