| | |
| | | <NoData /> |
| | | </ProTabPane> |
| | | <ProTabPane :title="`相关推荐`" pane-key="3"> |
| | | <NoData /> |
| | | <InfiniteLoading |
| | | scrollViewClassName="common-infinite-scroll-list serciceDetail-recommend-list" |
| | | commonMode |
| | | v-bind="infiniteLoadingProps" |
| | | > |
| | | <template #renderItem="{ item }"> |
| | | <StandardServiceCard |
| | | :file="item.file" |
| | | :name="item.name" |
| | | :minSpecPrice="item.minSpecPrice" |
| | | @click="goSerciceDetail(item)" |
| | | /> |
| | | </template> |
| | | </InfiniteLoading> |
| | | </ProTabPane> |
| | | </ProTabs> |
| | | </InfiniteLoading> |
| | |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import { useStandardServiceDetail } from '@12333/hooks'; |
| | | import { useInfiniteLoading, useStandardServiceDetail } from '@12333/hooks'; |
| | | import Taro from '@tarojs/taro'; |
| | | import * as standardOrderServices from '@12333/services/apiV2/standardOrder'; |
| | | import * as standardServiceServices from '@12333/services/apiV2/standardService'; |
| | |
| | | import IconShare from '@/assets/flexJob/icon-share.png'; |
| | | import IconAttention from '@/assets/flexJob/icon-attention-lg.png'; |
| | | import IconAttentionActive from '@/assets/flexJob/icon-attention-lg-active.png'; |
| | | import { EnumPagedListOrder } from '@12333/constants'; |
| | | |
| | | defineOptions({ |
| | | name: 'serciceDetail', |
| | |
| | | ]; |
| | | skuState.goods = { |
| | | skuId: SkuUtils.DefaultSkuSpecId, |
| | | price: toThousand(res.specs[0].price), |
| | | price: res.specs[0].price, |
| | | imagePath: setOSSLink(res.files[0]), |
| | | name: res.name, |
| | | }; |
| | | queryState.jobCode = res.jobCode; |
| | | }, |
| | | }); |
| | | |
| | |
| | | }); |
| | | }); |
| | | |
| | | async function addStandardOrder(specNumber: number) { |
| | | try { |
| | | const spec = SkuUtils.getCurrentActiveSpec(skuState.sku); |
| | | let params: API.AddStandardOrderCommand = { |
| | | serviceId: detail.value.id, |
| | | serviceName: detail.value.name, |
| | | serviceCode: detail.value.code, |
| | | specId: spec.id, |
| | | specName: spec.name, |
| | | specPrice: detail.value.specs.find((x) => x.id === spec.id)?.price ?? 0, |
| | | specNumber: specNumber, |
| | | addressId: '3fa85f64-5717-4562-b3fc-2c963f66afa6', |
| | | name: detail.value.name, |
| | | contactPhoneNumber: 'string', |
| | | provinceCode: 'string', |
| | | provinceContent: 'string', |
| | | cityCode: 'string', |
| | | cityContent: 'string', |
| | | areaCode: 'string', |
| | | areaContent: 'string', |
| | | addressName: 'string', |
| | | addressDetail: 'string', |
| | | longitude: 0, |
| | | latitude: 0, |
| | | beginTime: '2025-12-24T08:25:08.372Z', |
| | | endTime: '2025-12-24T08:25:08.372Z', |
| | | supplierEnterpriseId: '3fa85f64-5717-4562-b3fc-2c963f66afa6', |
| | | enterpriseEmployeeIds: ['3fa85f64-5717-4562-b3fc-2c963f66afa6'], |
| | | remark: 'string', |
| | | payAccess: 1, |
| | | }; |
| | | let res = await standardOrderServices.addStandardOrder(params); |
| | | } catch (error) {} |
| | | } |
| | | |
| | | async function pay() { |
| | | try { |
| | | let params: API.PayStandardOrderCommand = { |
| | | id: '9e919af2-3d33-4eac-f6dc-08de429676b3', |
| | | }; |
| | | let res = await standardOrderServices.payStandardOrder(params); |
| | | if (res) { |
| | | Taro.requestPayment({ |
| | | timeStamp: res.timestamp, |
| | | nonceStr: res.nonceStr, |
| | | package: res.package, |
| | | signType: res.signType as any, |
| | | paySign: res.paySign, |
| | | }); |
| | | } |
| | | } catch (error) {} |
| | | } |
| | | |
| | | async function handleAttention() { |
| | | const handleAttention = useAccessLogin(async () => { |
| | | try { |
| | | let params: API.CollectionStandardServiceCommand = { |
| | | ids: [id], |
| | |
| | | refetch({ type: 'inactive' }); |
| | | } |
| | | } catch (error) {} |
| | | }); |
| | | |
| | | const queryState = reactive({ |
| | | ignoreId: id, |
| | | jobCode: '', |
| | | }); |
| | | |
| | | const { infiniteLoadingProps, invalidateQueries } = useInfiniteLoading( |
| | | ({ pageParam }) => { |
| | | let params: API.GetStandardServicesQuery = { |
| | | pageModel: { |
| | | rows: 20, |
| | | page: pageParam, |
| | | orderInput: [{ property: 'createdTime', order: EnumPagedListOrder.Desc }], |
| | | }, |
| | | ignoreId: queryState.ignoreId, |
| | | jobCode: queryState.jobCode, |
| | | }; |
| | | |
| | | return standardServiceServices.getOpenStandardServices(params, { |
| | | showLoading: false, |
| | | }); |
| | | }, |
| | | { |
| | | queryKey: ['standardServiceServices/getOpenStandardServices', queryState], |
| | | enabled: computed(() => !!queryState.jobCode), |
| | | } |
| | | ); |
| | | |
| | | function goSerciceDetail(item: API.GetStandardServicesQueryResultItem) { |
| | | Taro.navigateTo({ |
| | | url: `${RouterPath.serciceDetail}?id=${item.id}`, |
| | | }); |
| | | } |
| | | </script> |
| | | |
| | |
| | | .serciceDetail-content-list { |
| | | margin-bottom: 20px; |
| | | } |
| | | |
| | | .serciceDetail-recommend-list { |
| | | .infinite-list-inner { |
| | | display: grid; |
| | | grid-template-columns: repeat(2, 1fr); |
| | | grid-gap: 20px; |
| | | } |
| | | } |
| | | } |
| | | </style> |