| | |
| | | "miniprogram": { |
| | | "list": [ |
| | | { |
| | | "name": "æå¡è¯¦æ
", |
| | | "pathName": "subpackages/sercice/serciceDetail/serciceDetail", |
| | | "query": "id=53208c5d-a823-40d3-e79e-08de429af17b", |
| | | "scene": null, |
| | | "launchMode": "default" |
| | | }, |
| | | { |
| | | "name": "æå¡ç¡®è®¤", |
| | | "pathName": "subpackages/mine/mineReserveServiceConfirm/mineReserveServiceConfirm", |
| | | "query": "id=undefined", |
| | | "launchMode": "default", |
| | | "scene": null |
| | | }, |
| | | { |
| | | "name": "åæ¶åå ", |
| | | "pathName": "subpackages/mine/mineReserveServiceCancel/mineReserveServiceCancel", |
| | | "query": "id=undefined", |
| | | "launchMode": "default", |
| | | "scene": null |
| | | }, |
| | | { |
| | | "name": "é¢çº¦è¯¦æ
", |
| | | "pathName": "subpackages/mine/mineReserveServiceDetail/mineReserveServiceDetail", |
| | | "query": "", |
| | | "launchMode": "default", |
| | | "scene": null |
| | | }, |
| | | { |
| | | "name": "订å详æ
", |
| | | "pathName": "subpackages/mine/mineOrderDetail/mineOrderDetail", |
| | | "query": "id=123", |
| | | "scene": null, |
| | | "launchMode": "default" |
| | | "launchMode": "default", |
| | | "scene": null |
| | | }, |
| | | { |
| | | "name": "æ°å¢å°å", |
| | |
| | | 'addressManange/addressManange', |
| | | 'editAddress/editAddress', |
| | | 'mineOrderDetail/mineOrderDetail', |
| | | 'mineReserveServiceDetail/mineReserveServiceDetail', |
| | | 'mineReserveServiceCancel/mineReserveServiceCancel', |
| | | 'mineReserveServiceConfirm/mineReserveServiceConfirm', |
| | | ], |
| | | }, |
| | | { |
| | |
| | | addressManange = '/subpackages/mine/addressManange/addressManange', |
| | | editAddress = '/subpackages/mine/editAddress/editAddress', |
| | | mineOrderDetail = '/subpackages/mine/mineOrderDetail/mineOrderDetail', |
| | | mineReserveServiceDetail = '/subpackages/mine/mineReserveServiceDetail/mineReserveServiceDetail', |
| | | mineReserveServiceCancel = '/subpackages/mine/mineReserveServiceCancel/mineReserveServiceCancel', |
| | | mineReserveServiceConfirm = '/subpackages/mine/mineReserveServiceConfirm/mineReserveServiceConfirm', |
| | | |
| | | serciceDetail = '/subpackages/sercice/serciceDetail/serciceDetail', |
| | | |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div class="standard-service-card-wrapper"> |
| | | <img :src="setOSSLink(file)" class="standard-service-card-cover" /> |
| | | <div class="standard-service-card-content"> |
| | | <div class="standard-service-card-content-title">{{ name }}</div> |
| | | <div class="standard-service-card-content-price-wrapper"> |
| | | <div class="standard-service-card-content-price">{{ minSpecPrice ?? 0 }}</div> |
| | | <div class="standard-service-card-content-suffix">èµ·</div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import { setOSSLink } from '@12333/utils'; |
| | | |
| | | defineOptions({ |
| | | name: 'StandardServiceCard', |
| | | }); |
| | | |
| | | type Props = { |
| | | id?: string; |
| | | file?: string; |
| | | name?: string; |
| | | /** æä½è§æ ¼ä»·æ ¼ */ |
| | | minSpecPrice?: number; |
| | | }; |
| | | |
| | | const props = withDefaults(defineProps<Props>(), {}); |
| | | </script> |
| | | |
| | | <style lang="scss"> |
| | | @import '@/styles/common.scss'; |
| | | |
| | | .standard-service-card-wrapper { |
| | | background-color: #fff; |
| | | border-radius: 12px; |
| | | |
| | | .standard-service-card-cover { |
| | | height: 240px; |
| | | border-radius: 12px; |
| | | object-fit: cover; |
| | | width: 100%; |
| | | } |
| | | |
| | | .standard-service-card-content { |
| | | padding: 16px; |
| | | padding-bottom: 24px; |
| | | |
| | | .standard-service-card-content-title { |
| | | font-weight: 600; |
| | | font-size: 28px; |
| | | color: boleGetCssVar('text-color', 'primary'); |
| | | margin-bottom: 24px; |
| | | } |
| | | |
| | | .standard-service-card-content-price-wrapper { |
| | | display: flex; |
| | | align-items: flex-end; |
| | | |
| | | .standard-service-card-content-price { |
| | | font-weight: 600; |
| | | font-size: 32px; |
| | | color: #ff3949; |
| | | } |
| | | |
| | | .standard-service-card-content-suffix { |
| | | font-weight: 400; |
| | | font-size: 24px; |
| | | color: #ff3949; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | </style> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | import { useQuery, useQueryClient } from '@tanstack/vue-query'; |
| | | import * as advertisementServices from '@12333/services/apiV2/advertisement'; |
| | | import { EnumAdvertisementPage, CategoryCode } from '@12333/constants'; |
| | | import { useDictionaryDataSelect } from '@12333/hooks'; |
| | | import _ from 'lodash'; |
| | | |
| | | export function useShowAdvertisements() { |
| | | const { data: advertisements, refetch } = useQuery({ |
| | | queryKey: ['enterpriseWalletServices/getEnterpriseWalletAccessSelect'], |
| | | queryFn: () => { |
| | | return advertisementServices.getShowAdvertisements( |
| | | { |
| | | page: EnumAdvertisementPage.PartAWxmpHome, |
| | | }, |
| | | { |
| | | showLoading: false, |
| | | } |
| | | ); |
| | | }, |
| | | placeholderData: () => [] as API.GetShowAdvertisementsQueryResultItem[], |
| | | }); |
| | | return { |
| | | advertisements, |
| | | advertisementRefetch: refetch, |
| | | }; |
| | | } |
| | | |
| | | export function usePositionGrid() { |
| | | const { dictionaryDataList: positionList } = useDictionaryDataSelect({ |
| | | categoryCode: CategoryCode.Position, |
| | | }); |
| | | |
| | | const positionListChunk = computed(() => _.chunk(positionList.value, 8)); |
| | | |
| | | const positionGrid = computed(() => positionList.value.slice(0, 8)); |
| | | |
| | | return { |
| | | positionListChunk, |
| | | positionGrid, |
| | | }; |
| | | } |
| | |
| | | <div class="searchbar-container"> |
| | | <BlSearchbar |
| | | v-model.trim="searchValue" |
| | | placeholder="æç´¢ä»»å¡" |
| | | placeholder="æç´¢" |
| | | @search="handleSearch" |
| | | @change="handleSearch" |
| | | ></BlSearchbar> |
| | |
| | | </div> |
| | | <div class="home-banner-wrapper"> |
| | | <nut-swiper :auto-play="3000"> |
| | | <nut-swiper-item v-for="(item, index) in list" :key="index"> |
| | | <img :src="item" class="banner-img" draggable="false" /> |
| | | <nut-swiper-item v-for="(item, index) in advertisements" :key="item.id"> |
| | | <img :src="item.file" class="banner-img" draggable="false" /> |
| | | </nut-swiper-item> |
| | | </nut-swiper> |
| | | </div> |
| | | <div class="home-recommend-wrapper"> |
| | | <!-- <div class="home-recommend-wrapper"> |
| | | <div class="home-recommend-item">æ¨è</div> |
| | | <div class="home-recommend-item">æ¨è</div> |
| | | <div class="home-recommend-item">æ¨è</div> |
| | | </div> |
| | | </div> --> |
| | | <!-- <nut-swiper :loop="false"> |
| | | <nut-swiper-item |
| | | v-for="(chunk, index) in positionListChunk" |
| | | :key="index" |
| | | style="height: 160px" |
| | | > --> |
| | | <nut-grid class="home-gird"> |
| | | <nut-grid-item text="text"><Dongdong /></nut-grid-item> |
| | | <nut-grid-item text="text"><Dongdong /></nut-grid-item> |
| | | <nut-grid-item text="text"><Dongdong /></nut-grid-item> |
| | | <nut-grid-item text="text"><Dongdong /></nut-grid-item> |
| | | <nut-grid-item text="text"><Dongdong /></nut-grid-item> |
| | | <nut-grid-item text="text"><Dongdong /></nut-grid-item> |
| | | <nut-grid-item text="text"><Dongdong /></nut-grid-item> |
| | | <nut-grid-item text="text"><Dongdong /></nut-grid-item> |
| | | <nut-grid-item v-for="item in positionGrid" :key="item.value" :text="item.label"> |
| | | <img :src="setOSSLink(item.data.field2)" class="home-grid-item-icon" /> |
| | | <!-- <Dongdong /> --> |
| | | </nut-grid-item> |
| | | </nut-grid> |
| | | <!-- </nut-swiper-item> |
| | | </nut-swiper> --> |
| | | </div> |
| | | <div class="home-good-list"> |
| | | <TaskCard |
| | | <StandardServiceCard |
| | | v-for="item in infiniteLoadingProps.flattenListData" |
| | | :key="item.id" |
| | | @click="goTaskDetail(item)" |
| | | @click="goSerciceDetail(item)" |
| | | v-bind="item" |
| | | style="min-width: 0" |
| | | /> |
| | |
| | | import { setLocationCity } from '@/utils'; |
| | | import _ from 'lodash'; |
| | | import IconLogo from '@/assets/home/icon-logo.png'; |
| | | import { TaskCard, ProTabs, ProTabPane } from '@12333/components'; |
| | | import HomeQueryMenuView from './HomeQueryMenuView.vue'; |
| | | import { TaskCard } from '@12333/components'; |
| | | import IconLocaltion from '@/assets/task/icon-localtion.png'; |
| | | import { useAllAreaList, useTaskList, HomeOrderType } from '@12333/hooks'; |
| | | import { useAllAreaList, useInfiniteLoading, useTaskList } from '@12333/hooks'; |
| | | import { useAccessLogin } from '@/hooks'; |
| | | import { Dongdong } from '@nutui/icons-vue-taro'; |
| | | import { usePositionGrid, useShowAdvertisements } from './hooks'; |
| | | import { setOSSLink, trim } from '@12333/utils'; |
| | | import * as standardServiceServices from '@12333/services/apiV2/standardService'; |
| | | import { EnumPagedListOrder, EnumStandardServiceReleaseStatus } from '@12333/constants'; |
| | | import StandardServiceCard from './StandardServiceCard.vue'; |
| | | |
| | | const { locationCity } = useUser(); |
| | | |
| | | const { findAreaCodeFromName } = useAllAreaList(); |
| | | const searchValue = ref(''); |
| | | const queryState = reactive({ |
| | | keywords: '', |
| | | }); |
| | | |
| | | const { searchValue, queryState, handleSearch, infiniteLoadingProps, queryMenuState } = useTaskList( |
| | | const handleSearch = _.debounce(function () { |
| | | queryState.keywords = trim(searchValue.value); |
| | | }, 300); |
| | | |
| | | const { infiniteLoadingProps, invalidateQueries } = useInfiniteLoading( |
| | | ({ pageParam }) => { |
| | | let params: API.GetStandardServicesQuery = { |
| | | pageModel: { |
| | | rows: 20, |
| | | page: pageParam, |
| | | orderInput: [ |
| | | { property: 'createdTime', order: EnumPagedListOrder.Desc }, |
| | | { property: 'recommendStatus', order: EnumPagedListOrder.Desc }, |
| | | ], |
| | | }, |
| | | releaseStatus: EnumStandardServiceReleaseStatus.InProcess, |
| | | keywords: queryState.keywords, |
| | | }; |
| | | |
| | | return standardServiceServices.getStandardServices(params, { |
| | | showLoading: false, |
| | | }); |
| | | }, |
| | | { |
| | | cityCode: computed(() => findAreaCodeFromName(locationCity.value)), |
| | | enabled: computed(() => !!findAreaCodeFromName(locationCity.value)), |
| | | queryKey: ['standardServiceServices/getStandardServices', queryState], |
| | | } |
| | | ); |
| | | |
| | | const { advertisementRefetch, advertisements } = useShowAdvertisements(); |
| | | |
| | | const { positionListChunk, positionGrid } = usePositionGrid(); |
| | | |
| | | onMounted(async () => { |
| | | try { |
| | | await setLocationCity(); |
| | |
| | | }); |
| | | } |
| | | |
| | | const list = ref([ |
| | | 'https://storage.360buyimg.com/jdc-article/NutUItaro34.jpg', |
| | | 'https://storage.360buyimg.com/jdc-article/NutUItaro2.jpg', |
| | | 'https://storage.360buyimg.com/jdc-article/welcomenutui.jpg', |
| | | 'https://storage.360buyimg.com/jdc-article/fristfabu.jpg', |
| | | ]); |
| | | |
| | | const selectItem = ref(); |
| | | |
| | | function handleMenuSelectClose() { |
| | | selectItem.value?.toggle?.(); |
| | | } |
| | | |
| | | function goTaskDetail(item: API.GetTaskInfosQueryResultItem) { |
| | | // Taro.navigateTo({ |
| | | // url: `${RouterPath.taskDetail}?id=${item.id}&from=apply`, |
| | | // }); |
| | | function goSerciceDetail(item: API.GetStandardServicesQueryResultItem) { |
| | | Taro.navigateTo({ |
| | | url: `${RouterPath.serciceDetail}?id=${item.id}`, |
| | | }); |
| | | } |
| | | |
| | | const goTaskApply = useAccessLogin((item: API.GetTaskInfosQueryResultItem) => { |
| | | console.log('item: ', item); |
| | | }); |
| | | </script> |
| | | |
| | | <style lang="scss"> |
| | |
| | | |
| | | .home-gird { |
| | | margin-bottom: 20px; |
| | | |
| | | .home-grid-item-icon { |
| | | width: 64px; |
| | | height: 64px; |
| | | object-fit: cover; |
| | | } |
| | | } |
| | | |
| | | .home-header { |
| | |
| | | <template> |
| | | <div class="mine-service-detail-view-wrapper"> |
| | | <div class="mine-service-detail-view-address"> |
| | | <div class="mine-service-detail-view-address mine-service-detail-card"> |
| | | <div class="mine-service-detail-view-title-wrapper"> |
| | | <div class="mine-service-detail-view-title">æå¡å°å</div> |
| | | </div> |
| | | <div class="mine-service-detail-view-item">æµæ±ç宿³¢å¸éå·åºæ²³æ¸
åè·¯55å·å浪大å¦24å±</div> |
| | | <div class="mine-service-detail-view-item">é³é³ 13333333333</div> |
| | | </div> |
| | | <nut-card |
| | | :img-url="'//img10.360buyimg.com/n2/s240x240_jfs/t1/210890/22/4728/163829/6163a590Eb7c6f4b5/6390526d49791cb9.jpg!q70.jpg'" |
| | | :title="'æå¡åç§°'" |
| | | :price="'155.00'" |
| | | vip-price="" |
| | | ></nut-card> |
| | | <div class="mine-service-detail-card"> |
| | | <nut-card |
| | | :img-url="'//img10.360buyimg.com/n2/s240x240_jfs/t1/210890/22/4728/163829/6163a590Eb7c6f4b5/6390526d49791cb9.jpg!q70.jpg'" |
| | | :title="'æå¡åç§°'" |
| | | :price="'155.00'" |
| | | > |
| | | <template #prolist> |
| | | <div class="card-tag-list"> |
| | | <span class="tag">æ´»é²</span> |
| | | <span class="tag">礼ç</span> |
| | | <span class="tag">å½äº§</span> |
| | | </div> |
| | | </template> |
| | | <template #origin> |
| | | <div></div> |
| | | </template> |
| | | </nut-card> |
| | | </div> |
| | | |
| | | <List> |
| | | <ListItem title="订åç¶æ" :showArrow="false"> |
| | | <template #extra> |
| | |
| | | @import '@/styles/common.scss'; |
| | | |
| | | .mine-service-detail-view-wrapper { |
| | | .mine-service-detail-view-address { |
| | | .mine-service-detail-card { |
| | | padding: 24px 32px; |
| | | margin-bottom: 24px; |
| | | background-color: #fff; |
| | | border-radius: 12px; |
| | | |
| | | .card-tag-list { |
| | | margin: 6px 0 2px; |
| | | height: 30px; |
| | | overflow: hidden; |
| | | display: flex; |
| | | |
| | | .tag { |
| | | padding: 0 10px; |
| | | border-radius: 2px; |
| | | font-size: 20px; |
| | | height: 30px; |
| | | line-height: 30px; |
| | | color: #999; |
| | | background-color: #f2f2f7; |
| | | margin-right: 10px; |
| | | } |
| | | } |
| | | } |
| | | |
| | | .mine-service-detail-view-address { |
| | | .mine-service-detail-view-title-wrapper { |
| | | display: flex; |
| | | align-items: center; |
| | |
| | | <ContentScrollView hasPaddingTop> |
| | | <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> |
| | | </PageFooter> |
| | | <!-- </LoadingLayout> --> |
| | | </template> |
| | | |
| | |
| | | |
| | | <style lang="scss"> |
| | | @import '@/styles/common.scss'; |
| | | |
| | | .mineOrderDetail-page-wrapper { |
| | | .order-settle-bar { |
| | | .order-settle-price-wrapper { |
| | | height: 100%; |
| | | flex: 1; |
| | | min-width: 0; |
| | | display: flex; |
| | | align-items: center; |
| | | margin-left: 28px; |
| | | |
| | | .order-settle-price-label { |
| | | color: boleGetCssVar('text-color', 'primary'); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | </style> |
| | |
| | | <template> |
| | | <PageLayoutWithBg class="mineHire-page-wrapper" :title="'æçé¢çº¦'"> |
| | | <PageLayoutWithBg class="mineReserveService-page-wrapper" :title="'æçé¢çº¦'"> |
| | | <InnerPage></InnerPage> |
| | | </PageLayoutWithBg> |
| | | </template> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <ContentScrollView :paddingH="false"> |
| | | <nut-form :model-value="form" ref="formRef" :rules="rules"> |
| | | <nut-form-item class="bole-form-item" prop="reason"> |
| | | <nut-textarea v-model="form.reason" rows="4" placeholder="请è¾å
¥"> </nut-textarea> |
| | | </nut-form-item> |
| | | </nut-form> |
| | | </ContentScrollView> |
| | | <PageFooter> |
| | | <PageFooterBtn type="primary" @click="handleConfirm">æäº¤</PageFooterBtn> |
| | | </PageFooter> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import Taro from '@tarojs/taro'; |
| | | import * as standardServiceServices from '@12333/services/apiV2/standardService'; |
| | | import { FormRules } from '@nutui/nutui-taro/dist/types/__VUE/form/types'; |
| | | |
| | | defineOptions({ |
| | | name: 'InnerPage', |
| | | }); |
| | | |
| | | const route = Taro.useRouter(); |
| | | const id = route.params?.id as string; |
| | | |
| | | const form = reactive({ |
| | | reason: '', |
| | | }); |
| | | |
| | | const rules = reactive<FormRules>({ |
| | | reason: [{ required: true, message: '请è¾å
¥åæ¶åå ' }], |
| | | }); |
| | | |
| | | const formRef = ref<any>(null); |
| | | function handleConfirm() { |
| | | if (!formRef.value) return; |
| | | formRef.value.validate().then(({ valid, errors }: any) => { |
| | | if (valid) { |
| | | confirm(); |
| | | } |
| | | }); |
| | | } |
| | | |
| | | async function confirm() { |
| | | try { |
| | | } catch (error) {} |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss"> |
| | | @import '@/styles/common.scss'; |
| | | </style> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | export default definePageConfig({ |
| | | disableScroll: true, |
| | | }); |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <PageLayout class="mineReserveServiceCancel-page-wrapper" :title="'åæ¶åå '" has-border> |
| | | <InnerPage></InnerPage> |
| | | </PageLayout> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import InnerPage from './InnerPage.vue'; |
| | | |
| | | defineOptions({ |
| | | name: 'mineReserveServiceCancel', |
| | | }); |
| | | </script> |
| | | |
| | | <style lang="scss"> |
| | | @import '@/styles/common.scss'; |
| | | </style> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <ContentScrollView style="background-color: transparent" has-padding-top> |
| | | <TaskCheckFileCard |
| | | :created-time="'2025-12-12 12:12:12'" |
| | | :userCheckInTime="'2025-12-12 12:12:12'" |
| | | :userCheckOutTime="'2025-12-12 12:12:12'" |
| | | :checkReceiveStatus="10" |
| | | :checkReceiveMethods="[10]" |
| | | :files="list" |
| | | ></TaskCheckFileCard> |
| | | <nut-form :model-value="form" ref="formRef" :rules="rules" label-position="top"> |
| | | <nut-form-item class="bole-form-item" prop="remark" label="夿³¨"> |
| | | <nut-textarea v-model="form.remark" rows="4" placeholder="请è¾å
¥"> </nut-textarea> |
| | | </nut-form-item> |
| | | </nut-form> |
| | | </ContentScrollView> |
| | | <PageFooter> |
| | | <PageFooterBtn type="primary" @click="handleConfirm">æäº¤</PageFooterBtn> |
| | | </PageFooter> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import Taro from '@tarojs/taro'; |
| | | import * as standardServiceServices from '@12333/services/apiV2/standardService'; |
| | | import { FormRules } from '@nutui/nutui-taro/dist/types/__VUE/form/types'; |
| | | import { TaskCheckFileCard } from '@12333/components'; |
| | | import { setOSSLink } from '@12333/utils'; |
| | | |
| | | defineOptions({ |
| | | name: 'InnerPage', |
| | | }); |
| | | |
| | | const list = ref([ |
| | | 'https://storage.360buyimg.com/jdc-article/NutUItaro34.jpg', |
| | | 'https://storage.360buyimg.com/jdc-article/NutUItaro2.jpg', |
| | | 'https://storage.360buyimg.com/jdc-article/welcomenutui.jpg', |
| | | 'https://storage.360buyimg.com/jdc-article/fristfabu.jpg', |
| | | ]); |
| | | |
| | | const route = Taro.useRouter(); |
| | | const id = route.params?.id as string; |
| | | |
| | | const form = reactive({ |
| | | remark: '', |
| | | }); |
| | | |
| | | const rules = reactive<FormRules>({}); |
| | | |
| | | const formRef = ref<any>(null); |
| | | function handleConfirm() { |
| | | if (!formRef.value) return; |
| | | formRef.value.validate().then(({ valid, errors }: any) => { |
| | | if (valid) { |
| | | confirm(); |
| | | } |
| | | }); |
| | | } |
| | | |
| | | async function confirm() { |
| | | try { |
| | | } catch (error) {} |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss"> |
| | | @import '@/styles/common.scss'; |
| | | </style> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | export default definePageConfig({ |
| | | disableScroll: true, |
| | | }); |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <PageLayout class="mineReserveServiceConfirm-page-wrapper" :title="'æå¡ç¡®è®¤'" has-border> |
| | | <InnerPage></InnerPage> |
| | | </PageLayout> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import InnerPage from './InnerPage.vue'; |
| | | |
| | | defineOptions({ |
| | | name: 'mineReserveServiceConfirm', |
| | | }); |
| | | </script> |
| | | |
| | | <style lang="scss"> |
| | | @import '@/styles/common.scss'; |
| | | </style> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <!-- <LoadingLayout :loading="isLoading" :error="isError" :loadError="refetch"> --> |
| | | <ContentScrollView hasPaddingTop> |
| | | <MineServiceDetailView /> |
| | | </ContentScrollView> |
| | | <PageFooter> |
| | | <PageFooterBtn type="primary" class="business-card-btn" @click="goCancel" |
| | | >åæ¶æå¡</PageFooterBtn |
| | | > |
| | | <PageFooterBtn type="primary" class="business-card-btn" @click="goConfirm" |
| | | >æå¡ç¡®è®¤</PageFooterBtn |
| | | > |
| | | </PageFooter> |
| | | <!-- </LoadingLayout> --> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import MineServiceDetailView from '../../components/MineServiceDetailView.vue'; |
| | | import Taro from '@tarojs/taro'; |
| | | import * as standardServiceServices from '@12333/services/apiV2/standardService'; |
| | | import { RouterPath } from '@/constants'; |
| | | |
| | | defineOptions({ |
| | | name: 'InnerPage', |
| | | }); |
| | | |
| | | const route = Taro.useRouter(); |
| | | const id = route.params?.id as string; |
| | | |
| | | function goCancel() { |
| | | Taro.navigateTo({ |
| | | url: `${RouterPath.mineReserveServiceCancel}?id=${id}`, |
| | | }); |
| | | } |
| | | |
| | | function goConfirm() { |
| | | Taro.navigateTo({ |
| | | url: `${RouterPath.mineReserveServiceConfirm}?id=${id}`, |
| | | }); |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss"> |
| | | @import '@/styles/common.scss'; |
| | | </style> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | export default definePageConfig({ |
| | | disableScroll: true, |
| | | }); |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <PageLayout class="mineReserveServiceDetail-page-wrapper" title="é¢çº¦è¯¦æ
" has-border> |
| | | <InnerPage /> |
| | | </PageLayout> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import InnerPage from './InnerPage.vue'; |
| | | |
| | | defineOptions({ |
| | | name: 'mineReserveServiceDetail', |
| | | }); |
| | | </script> |
| | |
| | | <PageLayoutWithBg class="mineHire-page-wrapper" :title="'æå¡å'" :need-auth="false"> |
| | | <LoadingLayout :loading="isLoading" :error="isError" :loadError="refetch"> |
| | | <ContentScrollView style="background-color: transparent"> serciceDetail </ContentScrollView> |
| | | <PageFooter> |
| | | <!-- <PageFooterAction |
| | | :icon="IconShare" |
| | | text="å享" |
| | | :isFlex="false" |
| | | openType="share" |
| | | ></PageFooterAction> |
| | | <PageFooterAction |
| | | :icon="userResumeInfo.isCollected ? IconAttentionActive : IconAttention" |
| | | text="æ¶è" |
| | | :isFlex="false" |
| | | @click="handleAttention" |
| | | ></PageFooterAction> --> |
| | | <PageFooterBtn type="primary" @click="pay">é¢çº¦ä¸å</PageFooterBtn> |
| | | <PageFooterBtn type="primary" @click="pay">é¢çº¦ä¸å</PageFooterBtn> |
| | | </PageFooter> |
| | | </LoadingLayout> |
| | | </PageLayoutWithBg> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import { useTaskInfo } from '@12333/hooks'; |
| | | import InnerPage from './InnerPage.vue'; |
| | | import { useStandardServiceDetail } from '@12333/hooks'; |
| | | import Taro from '@tarojs/taro'; |
| | | import * as standardOrderServices from '@12333/services/apiV2/standardOrder'; |
| | | |
| | | defineOptions({ |
| | | name: 'serciceDetail', |
| | |
| | | const router = Taro.useRouter(); |
| | | const id = router.params?.id ?? ''; |
| | | |
| | | const { isLoading, isError, detail, refetch } = useTaskInfo({ |
| | | const { isLoading, isError, detail, refetch } = useStandardServiceDetail({ |
| | | id, |
| | | }); |
| | | |
| | | async function addStandardOrder() { |
| | | try { |
| | | let params: API.AddStandardOrderCommand = { |
| | | serviceId: '3fa85f64-5717-4562-b3fc-2c963f66afa6', |
| | | serviceName: 'string', |
| | | specId: '3fa85f64-5717-4562-b3fc-2c963f66afa6', |
| | | specName: 'string', |
| | | specPrice: 0, |
| | | specNumber: 0, |
| | | addressId: '3fa85f64-5717-4562-b3fc-2c963f66afa6', |
| | | beginTime: '2025-12-24T06:44:24.840Z', |
| | | endTime: '2025-12-24T06:44:24.840Z', |
| | | supplierEnterpriseId: '3fa85f64-5717-4562-b3fc-2c963f66afa6', |
| | | enterpriseEmployeeIds: ['3fa85f64-5717-4562-b3fc-2c963f66afa6'], |
| | | remark: 'string', |
| | | payAccess: 1, |
| | | payAmount: 0, |
| | | }; |
| | | 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) {} |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss"> |
| | |
| | | export * from './payrollChange'; |
| | | export * from './dialog'; |
| | | export * from './insurance'; |
| | | export * from './standardOrder'; |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | import { useQuery, useQueryClient } from '@tanstack/vue-query'; |
| | | import * as standardServiceServices from '@12333/services/apiV2/standardService'; |
| | | import { MaybeRef, unref } from 'vue'; |
| | | |
| | | type UseStandardServiceDetailOptions = { |
| | | id: MaybeRef<string>; |
| | | }; |
| | | |
| | | export function useStandardServiceDetail({ id }: UseStandardServiceDetailOptions) { |
| | | const { data, refetch, isLoading, isError } = useQuery({ |
| | | queryKey: ['standardServiceServices/getStandardService', id], |
| | | queryFn: async () => { |
| | | let params: API.APIgetStandardServiceParams = { |
| | | id: unref(id), |
| | | }; |
| | | |
| | | return await standardServiceServices.getStandardService(params, { |
| | | showLoading: false, |
| | | }); |
| | | }, |
| | | placeholderData: () => ({} as API.GetStandardServiceQueryResult), |
| | | }); |
| | | |
| | | return { |
| | | detail: data, |
| | | refetch, |
| | | isLoading, |
| | | isError, |
| | | }; |
| | | } |
| | |
| | | }); |
| | | } |
| | | |
| | | /** ç¦ç¨ä¼ä¸ POST /api/user/enterprise/disabledEnterprise */ |
| | | export async function disabledEnterprise( |
| | | body: API.DisabledEnterpriseCommand, |
| | | options?: API.RequestConfig |
| | | ) { |
| | | return request<number>('/api/user/enterprise/disabledEnterprise', { |
| | | method: 'POST', |
| | | headers: { |
| | | 'Content-Type': 'application/json-patch+json', |
| | | }, |
| | | data: body, |
| | | ...(options || {}), |
| | | }); |
| | | } |
| | | |
| | | /** æ¥è¯¢ä¼ä¸è¯¦æ
GET /api/user/enterprise/getEnterprise */ |
| | | export async function getEnterprise( |
| | | // å å çæçParamç±»å (ébodyåæ°swaggeré»è®¤æ²¡æçæå¯¹è±¡) |
| | |
| | | body: API.AddStandardOrderCommand, |
| | | options?: API.RequestConfig |
| | | ) { |
| | | return request<API.AddStandardOrderCommandResult>('/api/flexjob/standardOrder/addStandardOrder', { |
| | | return request<string>('/api/flexjob/standardOrder/addStandardOrder', { |
| | | method: 'POST', |
| | | headers: { |
| | | 'Content-Type': 'application/json-patch+json', |
| | |
| | | payAmount?: number; |
| | | } |
| | | |
| | | interface AddStandardOrderCommandResult { |
| | | /** Id */ |
| | | id?: string; |
| | | /** æ¯ä»å°å */ |
| | | payUrl?: string; |
| | | } |
| | | |
| | | interface AgainSureTaskSettlementOrderRosterCommand { |
| | | /** ååId */ |
| | | id?: string; |
| | |
| | | ids: string[]; |
| | | } |
| | | |
| | | interface DisabledEnterpriseCommand { |
| | | ids?: string[]; |
| | | /** æ¯å¦å·²ç¦ç¨ */ |
| | | isDisabled?: boolean; |
| | | } |
| | | |
| | | interface EditEnterpriseEmployeeCommand { |
| | | /** Id */ |
| | | id?: string; |
| | |
| | | settlementTimeEnd?: string; |
| | | } |
| | | |
| | | interface FriendlyResultAddStandardOrderCommandResult { |
| | | /** è·è¸ªId */ |
| | | traceId?: string; |
| | | /** ç¶æç */ |
| | | code?: number; |
| | | /** é误ç */ |
| | | errorCode?: string; |
| | | data?: AddStandardOrderCommandResult; |
| | | /** æ§è¡æå */ |
| | | success?: boolean; |
| | | /** éè¯¯ä¿¡æ¯ */ |
| | | msg?: any; |
| | | /** éå æ°æ® */ |
| | | extras?: any; |
| | | /** æ¶é´æ³ */ |
| | | timestamp?: number; |
| | | } |
| | | |
| | | interface FriendlyResultBatchEnterpriseSignContractCommandResult { |
| | | /** è·è¸ªId */ |
| | | traceId?: string; |
| | |
| | | /** æ¯å¦å·²é
ç½® */ |
| | | isConfigured?: boolean; |
| | | type?: EnumEnterpriseType; |
| | | /** å建æ¶é´-èµ·å§ */ |
| | | createdTimeBegin?: string; |
| | | /** å建æ¶é´-æªæ¢ */ |
| | | createdTimeEnd?: string; |
| | | pageModel?: PagedListQueryPageModel; |
| | | } |
| | | |
| | |
| | | societyCreditCode?: string; |
| | | /** æ¯å¦å®å */ |
| | | isReal?: boolean; |
| | | /** æ¯å¦ç¦ç¨ */ |
| | | isDisabled?: boolean; |
| | | /** è系人 */ |
| | | contacts?: string; |
| | | /** èç³»çµè¯ */ |
| | | contactPhoneNumber?: string; |
| | | /** ç¨æ·Id */ |
| | | userId?: string; |
| | | /** ç¨æ·å */ |
| | | userName?: string; |
| | | /** ææºå· */ |
| | | userPhoneNumber?: string; |
| | | /** æå¨ç份 */ |
| | | provinceContent?: string; |
| | | /** æå¨åå¸ */ |
| | |
| | | serviceFeeCollectType?: EnumEnterpriseCooperationServiceFeeCollectType; |
| | | /** æå¡è´¹ */ |
| | | serviceFeeRate?: number; |
| | | /** å建æ¶é´ */ |
| | | createdTime?: string; |
| | | } |
| | | |
| | | interface GetEnterpriseWalletAccessSelectQueryOption { |
| | |
| | | } |
| | | |
| | | interface HistoryQueryResultItem { |
| | | /** Id */ |
| | | id?: string; |
| | | /** è·è¸ªId */ |
| | | traceId?: string; |
| | | /** æä½äºº */ |