Merge branch 'master' of http://120.26.58.240:8888/r/flexJobMiniApp
| | |
| | | "miniprogram": { |
| | | "list": [ |
| | | { |
| | | "name": "éæ©å°å", |
| | | "pathName": "subpackages/mine/addressManange/addressManange", |
| | | "query": "type=select", |
| | | "name": "é¢çº¦ä¸å", |
| | | "pathName": "subpackages/sercice/addStandardOrder/addStandardOrder", |
| | | "query": "specNumber=1&specId=ccdc16fb-d842-4e66-bdf5-08de43546a8c&id=e4df3802-1e9b-4b21-4ef6-08de43551f52", |
| | | "scene": null, |
| | | "launchMode": "default" |
| | | }, |
| | | { |
| | | "name": "é¢çº¦ä¸å", |
| | | "pathName": "subpackages/sercice/addStandardOrder/addStandardOrder", |
| | | "query": "specNumber=1&specId=72ec3beb-90dc-473b-d214-08de429af188&id=53208c5d-a823-40d3-e79e-08de429af17b", |
| | | "name": "éæ©æå¡äººå", |
| | | "pathName": "subpackages/sercice/chooseEnterpriseEmployee/chooseEnterpriseEmployee", |
| | | "query": "id=cc8c3ad3-522a-4b5e-c1ca-08de41c6b930", |
| | | "launchMode": "default", |
| | | "scene": null |
| | | }, |
| | | { |
| | | "name": "æ°å¢å°å", |
| | | "pathName": "subpackages/mine/editAddress/editAddress", |
| | | "query": "id=53208c5d-a823-40d3-e79e-08de429af17b", |
| | | "name": "éæ©æå¡æºæ", |
| | | "pathName": "subpackages/sercice/chooseSupplier/chooseSupplier", |
| | | "query": "id=e4df3802-1e9b-4b21-4ef6-08de43551f52", |
| | | "launchMode": "default", |
| | | "scene": null |
| | | }, |
| | | { |
| | | "name": "æå¡è¯¦æ
", |
| | | "pathName": "subpackages/sercice/serciceDetail/serciceDetail", |
| | | "query": "id=e4df3802-1e9b-4b21-4ef6-08de43551f52", |
| | | "launchMode": "default", |
| | | "scene": null |
| | | }, |
| | | { |
| | | "name": "éæ©å°å", |
| | | "pathName": "subpackages/mine/addressManange/addressManange", |
| | | "query": "type=select", |
| | | "launchMode": "default", |
| | | "scene": null |
| | | }, |
| | | { |
| | | "name": "æ°å¢å°å", |
| | | "pathName": "subpackages/mine/editAddress/editAddress", |
| | | "query": "id=53208c5d-a823-40d3-e79e-08de429af17b", |
| | | "launchMode": "default", |
| | | "scene": null |
| | |
| | | }, |
| | | { |
| | | root: 'subpackages/sercice', |
| | | pages: ['serciceDetail/serciceDetail', 'addStandardOrder/addStandardOrder'], |
| | | pages: [ |
| | | 'serciceDetail/serciceDetail', |
| | | 'addStandardOrder/addStandardOrder', |
| | | 'chooseSupplier/chooseSupplier', |
| | | 'chooseEnterpriseEmployee/chooseEnterpriseEmployee', |
| | | ], |
| | | }, |
| | | { |
| | | root: 'subpackages/user', |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <ChooseSupplierCard :avatar="avatar" :name="name"> |
| | | <template #name-right> |
| | | <div class="flexJob-card-top-info-gender"> |
| | | <img |
| | | v-if="gender === EnumUserGender.Male" |
| | | :src="IconMale" |
| | | class="flexJob-card-top-info-gender-icon" |
| | | /> |
| | | <img v-else :src="IconFemale" class="flexJob-card-top-info-gender-icon" /> |
| | | </div> |
| | | <div class="flexJob-card-top-info-auth" :class="{ 'is-real-name': isReal }"> |
| | | {{ isReal ? 'å·²å®å' : 'æªå®å' }} |
| | | </div> |
| | | </template> |
| | | <template #infoDetail> |
| | | {{ infoDetail }} |
| | | </template> |
| | | <template #desc> |
| | | {{ workExperience }} |
| | | </template> |
| | | <template #actions> |
| | | <slot name="actions"> </slot> |
| | | </template> |
| | | </ChooseSupplierCard> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import { EnumUserGender } from '@12333/constants'; |
| | | import ChooseSupplierCard from './ChooseSupplierCard.vue'; |
| | | import IconMale from '@/assets/mine/icon-male.png'; |
| | | import IconFemale from '@/assets/mine/icon-female.png'; |
| | | |
| | | defineOptions({ |
| | | name: 'ChooseServerCard', |
| | | }); |
| | | |
| | | type Props = { |
| | | avatar?: string; |
| | | name?: string; |
| | | gender?: EnumUserGender; |
| | | age?: number; |
| | | isReal?: boolean; |
| | | personalIdentityContent?: string; |
| | | educationalBackgroundContent?: string; |
| | | taskCount?: number; |
| | | workExperience?: string; |
| | | }; |
| | | |
| | | const props = withDefaults(defineProps<Props>(), {}); |
| | | |
| | | const infoDetail = computed(() => |
| | | [ |
| | | props.age > 0 ? `${props.age}å²` : '', |
| | | props.personalIdentityContent, |
| | | props.educationalBackgroundContent, |
| | | props.taskCount > 0 ? `ä¸å²${props.taskCount ?? 0}次` : '', |
| | | ] |
| | | .filter(Boolean) |
| | | .join('|') |
| | | ); |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | @import '@/styles/common.scss'; |
| | | </style> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div class="choose-supplier-card-wrapper"> |
| | | <div class="choose-supplier-card-top-wrapper"> |
| | | <Avatar :src="setOSSLink(avatar)" :size="60" class="choose-supplier-card-top-avatar" /> |
| | | <div class="choose-supplier-card-top-info"> |
| | | <div class="flexJob-card-top-info-item"> |
| | | <div class="flexJob-card-top-info-item-w"> |
| | | <div class="flexJob-card-top-info-name">{{ name }}</div> |
| | | <slot name="name-right"></slot> |
| | | </div> |
| | | </div> |
| | | <div class="flexJob-card-top-info-detail"> |
| | | <slot name="infoDetail"> æå¡äººå {{ serverCount }} | æå¡äººæ¬¡ {{ serviceCount }} </slot> |
| | | </div> |
| | | <div class="flexJob-card-top-info-detail-desc"> |
| | | <slot name="desc">{{ mainBusiness }}</slot> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div class="choose-supplier-card-footer"> |
| | | <div class="flexJob-card-footer-left-wrapper"></div> |
| | | <div class="flexJob-card-footer-right"> |
| | | <slot name="actions"> </slot> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import { setOSSLink } from '@12333/utils'; |
| | | import { Avatar } from '@12333/components'; |
| | | |
| | | defineOptions({ |
| | | name: 'ChooseSupplierCard', |
| | | }); |
| | | |
| | | type Props = { |
| | | avatar?: string; |
| | | name?: string; |
| | | mainBusiness?: string; |
| | | serverCount?: number; |
| | | serviceCount?: number; |
| | | }; |
| | | |
| | | const props = withDefaults(defineProps<Props>(), {}); |
| | | </script> |
| | | |
| | | <style lang="scss"> |
| | | @import '@/styles/common.scss'; |
| | | |
| | | .choose-supplier-card-wrapper { |
| | | padding: 32px 24px 20px; |
| | | margin-bottom: 24px; |
| | | background-color: #fff; |
| | | border-radius: 12px; |
| | | |
| | | &:last-child { |
| | | margin-bottom: 0; |
| | | } |
| | | |
| | | .choose-supplier-card-top-wrapper { |
| | | display: flex; |
| | | align-items: center; |
| | | |
| | | .choose-supplier-card-top-avatar { |
| | | margin-right: 30px; |
| | | } |
| | | } |
| | | |
| | | .choose-supplier-card-footer { |
| | | display: flex; |
| | | align-items: center; |
| | | border-top: #d9d9d9 1px solid; |
| | | padding-top: 24px; |
| | | margin-top: 18px; |
| | | |
| | | .flexJob-card-footer-left-wrapper { |
| | | flex: 1; |
| | | min-width: 0; |
| | | } |
| | | |
| | | .flexJob-card-footer-right { |
| | | --nut-button-default-font-size: 24px; |
| | | --nut-button-default-height: 52px; |
| | | --nut-button-default-line-height: 49px; |
| | | |
| | | .nut-button { |
| | | min-width: 144rpx; |
| | | |
| | | &.nut-button--plain { |
| | | border-width: 1px; |
| | | } |
| | | |
| | | &.nut-button { |
| | | margin-left: 10px; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | .choose-supplier-card-top-info { |
| | | display: flex; |
| | | flex-direction: column; |
| | | flex: 1; |
| | | min-width: 0; |
| | | |
| | | .flexJob-card-top-info-item-w { |
| | | display: flex; |
| | | align-items: center; |
| | | flex: 1; |
| | | min-width: 0; |
| | | } |
| | | |
| | | .flexJob-card-top-info-item { |
| | | display: flex; |
| | | align-items: center; |
| | | |
| | | .flexJob-card-top-info-item-right { |
| | | font-size: 28px; |
| | | line-height: 34px; |
| | | color: boleGetCssVar('text-color', 'secondary'); |
| | | } |
| | | |
| | | .flexJob-card-top-info-name { |
| | | font-size: 34px; |
| | | line-height: 34px; |
| | | font-weight: bold; |
| | | color: boleGetCssVar('text-color', 'primary'); |
| | | @include ellipsis; |
| | | } |
| | | |
| | | .flexJob-card-top-info-gender { |
| | | display: inline-flex; |
| | | align-items: center; |
| | | height: 34px; |
| | | margin: 0 10px; |
| | | flex-shrink: 0; |
| | | |
| | | .flexJob-card-top-info-gender-icon { |
| | | width: 24px; |
| | | height: 24px; |
| | | } |
| | | } |
| | | |
| | | .flexJob-card-top-info-auth { |
| | | font-size: 28px; |
| | | line-height: 34px; |
| | | flex-shrink: 0; |
| | | |
| | | &.is-real-name { |
| | | color: #2a9e1b; |
| | | } |
| | | } |
| | | } |
| | | |
| | | .flexJob-card-top-info-detail { |
| | | font-size: 24px; |
| | | font-weight: 400; |
| | | line-height: 28px; |
| | | margin-top: 12px; |
| | | color: boleGetCssVar('text-color', 'regular'); |
| | | @include ellipsis; |
| | | } |
| | | |
| | | .flexJob-card-top-info-detail-desc { |
| | | font-size: 24px; |
| | | font-weight: 400; |
| | | line-height: 28px; |
| | | margin-top: 12px; |
| | | color: boleGetCssVar('text-color', 'secondary'); |
| | | @include ellipsis; |
| | | } |
| | | } |
| | | } |
| | | </style> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <ChooseInput :modelValue="enterpriseEmployeeName" @click="handleOpen()"></ChooseInput> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import { RouterPath } from '@/constants'; |
| | | import { SelectEnterpriseEmployeeEvent } from '@/subpackages/sercice/utils'; |
| | | import { ChooseInput } from '@12333/components'; |
| | | import { Message } from '@12333/utils'; |
| | | import Taro from '@tarojs/taro'; |
| | | import dayjs from 'dayjs'; |
| | | |
| | | defineOptions({ |
| | | name: 'ChooseInputWithSuppliers', |
| | | }); |
| | | |
| | | type Props = { |
| | | serviceId: string; |
| | | beginTime?: string; |
| | | endTime?: string; |
| | | }; |
| | | |
| | | const props = withDefaults(defineProps<Props>(), {}); |
| | | |
| | | const supplierEnterpriseId = defineModel<string>('supplierEnterpriseId'); |
| | | const enterpriseEmployeeId = defineModel<string>('enterpriseEmployeeId'); |
| | | const enterpriseEmployeeName = defineModel<string>('enterpriseEmployeeName'); |
| | | |
| | | const emit = defineEmits<{ |
| | | (e: 'update:modelValue', val: string | number): void; |
| | | (e: 'change'): void; |
| | | }>(); |
| | | encodeURIComponent; |
| | | function handleOpen() { |
| | | if (!props.beginTime || !props.endTime) { |
| | | Message.warning('请å
éæ©æå¡æ¶é´'); |
| | | return; |
| | | } |
| | | Taro.navigateTo({ |
| | | url: `${RouterPath.chooseSupplier}?id=${props.serviceId}&beginTime=${dayjs( |
| | | props.beginTime |
| | | ).format('YYYY-MM-DDTHH:mm')}&endTime=${dayjs(props.endTime).format('YYYY-MM-DDTHH:mm')}`, |
| | | events: { |
| | | onSelectEnterpriseEmployee: function (data: SelectEnterpriseEmployeeEvent) { |
| | | console.log('EditRichContent onChange', data); |
| | | supplierEnterpriseId.value = data.supplierEnterpriseId; |
| | | enterpriseEmployeeId.value = data.enterpriseEmployeeId; |
| | | enterpriseEmployeeName.value = data.enterpriseEmployeeName; |
| | | }, |
| | | }, |
| | | }); |
| | | } |
| | | </script> |
| | |
| | | |
| | | serciceDetail = '/subpackages/sercice/serciceDetail/serciceDetail', |
| | | addStandardOrder = '/subpackages/sercice/addStandardOrder/addStandardOrder', |
| | | chooseSupplier = '/subpackages/sercice/chooseSupplier/chooseSupplier', |
| | | chooseEnterpriseEmployee = '/subpackages/sercice/chooseEnterpriseEmployee/chooseEnterpriseEmployee', |
| | | |
| | | extraPage = '/subpackages/extraPage/extraPage/extraPage', |
| | | } |
| | |
| | | <template> |
| | | <ProTabs |
| | | v-model="queryState.status" |
| | | v-model="queryState.appointmentStatus" |
| | | name="home-tab" |
| | | :showPaneContent="false" |
| | | class="home-tabs" |
| | |
| | | <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" |
| | | :end-time="item.endTime" |
| | | :billing-method="item.billingMethod" |
| | | :benefits="item.benefits" |
| | | :service-fee="item.serviceFee" |
| | | :settlement-cycle="item.settlementCycle" |
| | | :address-name="item.addressName" |
| | | :addressDetail="item.addressDetail" |
| | | :appointmentStatus="item.appointmentStatus" |
| | | @click="goSerciceDetail(item)" |
| | | > |
| | | </ReserveServiceCard> |
| | |
| | | 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 { |
| | | EnumGetStandardOrdersQueryScene, |
| | | EnumPagedListOrder, |
| | | EnumStandardOrderAppointmentStatus, |
| | | GetPersonalApplyTaskInfosQueryStatus, |
| | | } from '@12333/constants'; |
| | | import * as standardOrderServices from '@12333/services/apiV2/standardOrder'; |
| | | import Taro from '@tarojs/taro'; |
| | | |
| | | defineOptions({ |
| | |
| | | }); |
| | | |
| | | const queryState = reactive({ |
| | | status: 0 as any as GetPersonalApplyTaskInfosQueryStatus, |
| | | scene: EnumGetStandardOrdersQueryScene.PartAEnterpriseOrder, |
| | | appointmentStatus: 0 as any as EnumStandardOrderAppointmentStatus, |
| | | }); |
| | | |
| | | const userStore = useUserStore(); |
| | | |
| | | const { infiniteLoadingProps } = useInfiniteLoading( |
| | | ({ pageParam }) => { |
| | | let params: API.GetTaskInfosQuery = { |
| | | let params: API.GetStandardOrdersQuery = { |
| | | pageModel: { |
| | | rows: 20, |
| | | page: pageParam, |
| | | orderInput: [{ property: 'id', order: EnumPagedListOrder.Desc }], |
| | | }, |
| | | scene: queryState.scene, |
| | | }; |
| | | |
| | | return taskServices.getOpenTaskInfos(params, { |
| | | if (!!Number(queryState.appointmentStatus)) { |
| | | params.appointmentStatus = queryState.appointmentStatus; |
| | | } |
| | | |
| | | return standardOrderServices.getStandardOrders(params, { |
| | | showLoading: false, |
| | | }); |
| | | }, |
| | |
| | | <nut-form-item |
| | | label="æå¡æºæ:" |
| | | class="bole-form-item" |
| | | prop="supplierEnterpriseId" |
| | | prop="enterpriseEmployeeId" |
| | | label-width="90px" |
| | | > |
| | | <ChooseInputWithDatePicker |
| | | v-model="form.endTime" |
| | | :minDate="endMinTime" |
| | | :maxDate="endMaxTime" |
| | | <ChooseInputWithSuppliers |
| | | v-model:supplierEnterpriseId="form.supplierEnterpriseId" |
| | | placeholder="è¯·éæ©" |
| | | type="datetime" |
| | | format="YYYY-MM-DD HH:mm:ss" |
| | | ></ChooseInputWithDatePicker> |
| | | :serviceId="id" |
| | | :beginTime="form.beginTime" |
| | | :endTime="form.endTime" |
| | | v-model:enterpriseEmployeeId="form.enterpriseEmployeeId" |
| | | v-model:enterpriseEmployeeName="form.enterpriseEmployeeName" |
| | | ></ChooseInputWithSuppliers> |
| | | </nut-form-item> |
| | | <nut-form-item |
| | | label="夿³¨:" |
| | |
| | | </nut-form> |
| | | </ContentScrollView> |
| | | <PageFooter> |
| | | <div class="addStandardOrder-price-wrapper"> |
| | | <div class="addStandardOrder-price-text">æ¯ä»ï¼</div> |
| | | <nut-price :price="totlePrice" size="large" /> |
| | | </div> |
| | | <PageFooterBtn type="primary" class="business-card-btn" @click="goConfirm" |
| | | >ç«å³ä¸å</PageFooterBtn |
| | | > |
| | |
| | | import * as standardOrderServices from '@12333/services/apiV2/standardOrder'; |
| | | import { FormRules } from '@nutui/nutui-taro/dist/types/__VUE/form/types'; |
| | | import dayjs from 'dayjs'; |
| | | import { EnumUserBankCardAccess } from '@12333/constants'; |
| | | import { Message } from '@12333/utils'; |
| | | |
| | | defineOptions({ |
| | | name: 'InnerPage', |
| | |
| | | endTime: '', |
| | | supplierEnterpriseId: '', |
| | | enterpriseEmployeeId: '', |
| | | enterpriseEmployeeName: '', |
| | | remark: '', |
| | | }); |
| | | |
| | |
| | | const rules = reactive<FormRules>({ |
| | | beginTime: [{ required: true, message: 'è¯·éæ©æå¡å¼å§æ¶é´' }], |
| | | endTime: [{ required: true, message: 'è¯·éæ©æå¡ç»ææ¶é´' }], |
| | | enterpriseEmployeeId: [{ required: true, message: 'è¯·éæ©æå¡æºæ' }], |
| | | }); |
| | | |
| | | const { isLoading, isError, detail, refetch } = useStandardServiceDetail({ |
| | |
| | | form.addressId = nowExistAdd.id; |
| | | }; |
| | | |
| | | const totlePrice = computed(() => { |
| | | return (spec.value?.price ?? 0) * specNumber; |
| | | }); |
| | | |
| | | const formRef = ref<any>(null); |
| | | function goConfirm() { |
| | | if (!formRef.value) return; |
| | | formRef.value.validate().then(({ valid, errors }: any) => { |
| | | if (valid) { |
| | | // addStandardOrder(); |
| | | addStandardOrder(); |
| | | } |
| | | }); |
| | | } |
| | |
| | | specName: spec.value.name, |
| | | specPrice: spec.value.price ?? 0, |
| | | specNumber: specNumber, |
| | | addressId: '3fa85f64-5717-4562-b3fc-2c963f66afa6', |
| | | addressId: form.addressId, |
| | | 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, |
| | | contactPhoneNumber: selectedAddress.value.contactPhoneNumber, |
| | | provinceCode: selectedAddress.value.provinceCode, |
| | | provinceContent: selectedAddress.value.provinceContent, |
| | | cityCode: selectedAddress.value.cityCode, |
| | | cityContent: selectedAddress.value.cityContent, |
| | | areaCode: selectedAddress.value.areaCode, |
| | | areaContent: selectedAddress.value.areaContent, |
| | | addressName: selectedAddress.value.addressName, |
| | | addressDetail: selectedAddress.value.addressDetail, |
| | | longitude: selectedAddress.value.longitude, |
| | | latitude: selectedAddress.value.latitude, |
| | | beginTime: dayjs(form.beginTime).format('YYYY-MM-DD HH:mm'), |
| | | endTime: dayjs(form.endTime).format('YYYY-MM-DD HH:mm'), |
| | | supplierEnterpriseId: form.supplierEnterpriseId, |
| | | enterpriseEmployeeIds: [form.enterpriseEmployeeId], |
| | | remark: form.remark, |
| | | payAccess: EnumUserBankCardAccess.WeChatPay, |
| | | }; |
| | | let res = await standardOrderServices.addStandardOrder(params); |
| | | if (res) { |
| | | pay(res); |
| | | } |
| | | } catch (error) {} |
| | | } |
| | | |
| | | async function pay() { |
| | | async function pay(orderId: string) { |
| | | try { |
| | | let params: API.PayStandardOrderCommand = { |
| | | id: '9e919af2-3d33-4eac-f6dc-08de429676b3', |
| | | id: orderId, |
| | | }; |
| | | let res = await standardOrderServices.payStandardOrder(params); |
| | | if (res) { |
| | | Taro.requestPayment({ |
| | | await Taro.requestPayment({ |
| | | timeStamp: res.timestamp, |
| | | nonceStr: res.nonceStr, |
| | | package: res.package, |
| | | signType: res.signType as any, |
| | | paySign: res.paySign, |
| | | }); |
| | | Message.success('æ¯ä»æå'); |
| | | Taro.redirectTo({ |
| | | url: `${RouterPath.mineOrderDetail}?id=${orderId}`, |
| | | }); |
| | | } |
| | | } catch (error) {} |
| | | } |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | .addStandardOrder-price-wrapper { |
| | | display: flex; |
| | | flex: 2; |
| | | min-width: 0; |
| | | align-items: center; |
| | | padding-left: 28px; |
| | | |
| | | .addStandardOrder-price-text { |
| | | font-size: 32px; |
| | | color: boleGetCssVar('text-color', 'primary'); |
| | | } |
| | | } |
| | | } |
| | | </style> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <InfiniteLoading |
| | | scrollViewClassName="common-page-infinite-scroll-list" |
| | | v-bind="infiniteLoadingProps" |
| | | > |
| | | <template #renderItem="{ item }"> |
| | | <ChooseServerCard |
| | | :avatar="item.avatar" |
| | | :name="item.name" |
| | | :gender="item.gender" |
| | | :age="item.age" |
| | | :isReal="item.isReal" |
| | | :personalIdentityContent="item.personalIdentityContent" |
| | | :educationalBackgroundContent="item.educationalBackgroundContent" |
| | | :taskCount="item.taskCount" |
| | | :workExperience="item.workExperience" |
| | | > |
| | | <template #actions> |
| | | <nut-button type="primary" plain>æ¥ç详æ
</nut-button> |
| | | <nut-button type="primary" @click="handleChoose(item)">éæ©</nut-button> |
| | | </template> |
| | | </ChooseServerCard> |
| | | </template> |
| | | </InfiniteLoading> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import Taro from '@tarojs/taro'; |
| | | import * as standardServiceServices from '@12333/services/apiV2/standardService'; |
| | | import { useInfiniteLoading } from '@12333/hooks'; |
| | | import { EnumPagedListOrder } from '@12333/constants'; |
| | | import { useEvent, useEventChannel } from 'senin-mini/hooks'; |
| | | import { SelectEnterpriseEmployeeEvent } from '../utils'; |
| | | |
| | | defineOptions({ |
| | | name: 'InnerPage', |
| | | }); |
| | | |
| | | const route = Taro.useRouter(); |
| | | const id = route.params?.id ?? ''; |
| | | |
| | | const eventChannel = useEventChannel(); |
| | | |
| | | const { infiniteLoadingProps } = useInfiniteLoading( |
| | | ({ pageParam }) => { |
| | | let params: API.GetStandardServiceServersQuery = { |
| | | pageModel: { |
| | | rows: 20, |
| | | page: pageParam, |
| | | // orderInput: [{ property: 'id', order: EnumPagedListOrder.Desc }], |
| | | }, |
| | | supplierEnterpriseId: id, |
| | | }; |
| | | |
| | | return standardServiceServices.getStandardServiceServers(params, { |
| | | showLoading: false, |
| | | }); |
| | | }, |
| | | { |
| | | queryKey: ['standardServiceServices/getStandardServiceServers', id], |
| | | } |
| | | ); |
| | | |
| | | function handleChoose(item: API.GetStandardServiceServersQueryResultItem) { |
| | | eventChannel.emit('onSelectEnterpriseEmployee', { |
| | | enterpriseEmployeeId: item.id, |
| | | supplierEnterpriseId: id, |
| | | enterpriseEmployeeName: item.name, |
| | | } as SelectEnterpriseEmployeeEvent); |
| | | Taro.navigateBack({ delta: 2 }); |
| | | } |
| | | </script> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | export default definePageConfig({ |
| | | disableScroll: true, |
| | | }); |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <PageLayoutWithBg class="addStandardOrder-page-wrapper" title="éæ©æå¡äººå"> |
| | | <InnerPage /> |
| | | </PageLayoutWithBg> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import InnerPage from './InnerPage.vue'; |
| | | |
| | | defineOptions({ |
| | | name: 'chooseEnterpriseEmployee', |
| | | }); |
| | | </script> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <InfiniteLoading |
| | | scrollViewClassName="common-page-infinite-scroll-list" |
| | | v-bind="infiniteLoadingProps" |
| | | > |
| | | <template #renderItem="{ item }"> |
| | | <ChooseSupplierCard |
| | | :avatar="item.avatar" |
| | | :name="item.enterpriseName" |
| | | :mainBusiness="item.mainBusiness" |
| | | :serverCount="item.serverCount" |
| | | :serviceCount="item.serviceCount" |
| | | > |
| | | <template #actions> |
| | | <nut-button type="primary" plain>æ¥ç详æ
</nut-button> |
| | | <nut-button type="primary" @click="goEnterpriseEmployee(item)">éæ©</nut-button> |
| | | </template> |
| | | </ChooseSupplierCard> |
| | | </template> |
| | | </InfiniteLoading> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import Taro from '@tarojs/taro'; |
| | | import * as standardServiceServices from '@12333/services/apiV2/standardService'; |
| | | import { useInfiniteLoading } from '@12333/hooks'; |
| | | import { EnumPagedListOrder } from '@12333/constants'; |
| | | import { useEvent, useEventChannel } from 'senin-mini/hooks'; |
| | | import { SelectEnterpriseEmployeeEvent } from '../utils'; |
| | | |
| | | defineOptions({ |
| | | name: 'InnerPage', |
| | | }); |
| | | |
| | | const route = Taro.useRouter(); |
| | | const id = route.params?.id ?? ''; |
| | | |
| | | const eventChannel = useEventChannel(); |
| | | |
| | | const { infiniteLoadingProps } = useInfiniteLoading( |
| | | ({ pageParam }) => { |
| | | let params: API.GetStandardServiceSupplierEnterprisesQuery = { |
| | | pageModel: { |
| | | rows: 20, |
| | | page: pageParam, |
| | | // orderInput: [{ property: 'id', order: EnumPagedListOrder.Desc }], |
| | | }, |
| | | serviceId: id, |
| | | }; |
| | | |
| | | return standardServiceServices.getStandardServiceSupplierEnterprises(params, { |
| | | showLoading: false, |
| | | }); |
| | | }, |
| | | { |
| | | queryKey: ['standardServiceServices/getStandardServiceSupplierEnterprises', id], |
| | | } |
| | | ); |
| | | |
| | | function goEnterpriseEmployee(item: API.GetStandardServiceSupplierEnterprisesQueryResultItem) { |
| | | Taro.navigateTo({ |
| | | url: `${RouterPath.chooseEnterpriseEmployee}?id=${item.id}`, |
| | | events: { |
| | | onSelectEnterpriseEmployee: function (data: SelectEnterpriseEmployeeEvent) { |
| | | console.log('SelectEnterpriseEmployeeEvent2: ', data); |
| | | eventChannel.emit('onSelectEnterpriseEmployee', data); |
| | | }, |
| | | }, |
| | | }); |
| | | } |
| | | </script> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | export default definePageConfig({ |
| | | disableScroll: true, |
| | | }); |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <PageLayoutWithBg class="addStandardOrder-page-wrapper" title="éæ©æå¡æºæ"> |
| | | <InnerPage /> |
| | | </PageLayoutWithBg> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import InnerPage from './InnerPage.vue'; |
| | | |
| | | defineOptions({ |
| | | name: 'chooseSupplier', |
| | | }); |
| | | </script> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | export type SelectEnterpriseEmployeeEvent = { |
| | | supplierEnterpriseId: string; |
| | | enterpriseEmployeeId: string; |
| | | enterpriseEmployeeName: string; |
| | | }; |
| | |
| | | export { default as ProCategory } from './Category/Category.vue'; |
| | | export { default as ServiceDetailAddressCard } from './Card/ServiceDetailAddressCard.vue'; |
| | | export { default as ServiceDetailGoodCard } from './Card/ServiceDetailGoodCard.vue'; |
| | | export { default as ChooseInput } from './Input/ChooseInput.vue'; |
| | |
| | | name?: string; |
| | | /** èç³»çµè¯ */ |
| | | contactPhoneNumber?: string; |
| | | /** çå¸åº+详ç»å°å+é¨çå· */ |
| | | /** ç份ç¼å· */ |
| | | provinceCode?: string; |
| | | /** ç份 */ |
| | | provinceContent?: string; |
| | | /** åå¸ç¼å· */ |
| | | cityCode?: string; |
| | | /** åå¸ */ |
| | | cityContent?: string; |
| | | /** åºç¼å· */ |
| | | areaCode?: string; |
| | | /** åº */ |
| | | areaContent?: string; |
| | | /** 详ç»å°å */ |
| | | addressName?: string; |
| | | /** é¨çå· */ |
| | | addressDetail?: string; |
| | | /** ç»åº¦ */ |
| | | longitude?: number; |
| | | /** 纬度 */ |
| | | latitude?: number; |
| | | /** æ¯å¦é»è®¤ */ |
| | | isDefault?: boolean; |
| | | } |