From 1d472eb06970c85b0edfb58871956bc2c8d69916 Mon Sep 17 00:00:00 2001
From: zhengyiming <540361168@qq.com>
Date: 星期四, 25 十二月 2025 17:44:46 +0800
Subject: [PATCH] fix: 甲方小程序
---
apps/housekeepingMiniApp/src/subpackages/sercice/addStandardOrder/InnerPage.vue | 277 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 277 insertions(+), 0 deletions(-)
diff --git a/apps/housekeepingMiniApp/src/subpackages/sercice/addStandardOrder/InnerPage.vue b/apps/housekeepingMiniApp/src/subpackages/sercice/addStandardOrder/InnerPage.vue
new file mode 100644
index 0000000..7855001
--- /dev/null
+++ b/apps/housekeepingMiniApp/src/subpackages/sercice/addStandardOrder/InnerPage.vue
@@ -0,0 +1,277 @@
+<template>
+ <LoadingLayout :loading="isLoading" :error="isError" :loadError="refetch">
+ <ContentScrollView hasPaddingTop>
+ <ServiceDetailAddressCard
+ :name="selectedAddress?.name ?? ''"
+ :contactPhoneNumber="selectedAddress?.contactPhoneNumber ?? ''"
+ :addressDetail="selectedAddress?.addressDetail ?? ''"
+ showArrow
+ @click="goSelectAddress"
+ />
+ <ServiceDetailGoodCard
+ :name="detail?.name"
+ :price="spec?.price"
+ :specName="spec?.name"
+ :specNumber="specNumber"
+ :imgUrl="detail?.files?.[0]"
+ />
+ <!-- <List>
+ <ListItem title="鏈嶅姟鏃堕棿">
+ <template #extra>
+ <div class="mine-service-detail-view-list-item">{{ '璇烽�夋嫨' }}</div>
+ </template>
+ </ListItem>
+ <ListItem title="鏈嶅姟鏈烘瀯">
+ <template #extra>
+ <div class="mine-service-detail-view-list-item">{{ '璇烽�夋嫨' }}</div>
+ </template>
+ </ListItem>
+ </List> -->
+ <nut-form :model-value="form" ref="formRef" :rules="rules" class="addStandardOrder-form">
+ <nut-form-item
+ label="鏈嶅姟寮�濮嬫椂闂�:"
+ class="bole-form-item"
+ prop="beginTime"
+ label-width="90px"
+ >
+ <ChooseInputWithDatePicker
+ v-model="form.beginTime"
+ :minDate="nowDate"
+ placeholder="璇烽�夋嫨"
+ type="datetime"
+ format="YYYY-MM-DD HH:mm:ss"
+ ></ChooseInputWithDatePicker>
+ </nut-form-item>
+ <nut-form-item
+ label="鏈嶅姟缁撴潫鏃堕棿:"
+ class="bole-form-item"
+ prop="endTime"
+ label-width="90px"
+ >
+ <ChooseInputWithDatePicker
+ v-model="form.endTime"
+ :minDate="endMinTime"
+ :maxDate="endMaxTime"
+ placeholder="璇烽�夋嫨"
+ type="datetime"
+ format="YYYY-MM-DD HH:mm:ss"
+ ></ChooseInputWithDatePicker>
+ </nut-form-item>
+ <nut-form-item
+ label="澶囨敞:"
+ class="bole-form-item alignTop"
+ prop="remark"
+ label-width="90px"
+ >
+ <nut-textarea
+ v-model="form.remark"
+ class="bole-input-textarea"
+ rows="4"
+ placeholder="璇峰~鍐欏娉ㄤ俊鎭�"
+ >
+ </nut-textarea>
+ </nut-form-item>
+ </nut-form>
+ </ContentScrollView>
+ <PageFooter>
+ <PageFooterBtn type="primary" class="business-card-btn" @click="goConfirm"
+ >绔嬪嵆涓嬪崟</PageFooterBtn
+ >
+ </PageFooter>
+ <nut-address
+ v-model:visible="form.selectAddressVisible"
+ v-model:value="form.addressId"
+ type="exist"
+ :exist-address="existAddress"
+ :is-show-custom-address="false"
+ @selected="selected"
+ exist-address-title="閫夋嫨鍦板潃"
+ ></nut-address>
+ </LoadingLayout>
+</template>
+
+<script setup lang="ts">
+import {
+ ServiceDetailAddressCard,
+ ServiceDetailGoodCard,
+ List,
+ ListItem,
+ ChooseInputWithDatePicker,
+} from '@12333/components';
+import Taro from '@tarojs/taro';
+import { RouterPath } from '@/constants';
+import { useStandardServiceDetail } from '@12333/hooks';
+import * as standardOrderServices from '@12333/services/apiV2/standardOrder';
+import { FormRules } from '@nutui/nutui-taro/dist/types/__VUE/form/types';
+import dayjs from 'dayjs';
+
+defineOptions({
+ name: 'InnerPage',
+});
+
+const route = Taro.useRouter();
+const id = route.params?.id ?? '';
+const specId = route.params?.specId ?? '';
+const specNumber = Number(route.params?.specNumber);
+
+const form = reactive({
+ addressId: '',
+ selectAddressVisible: false,
+ beginTime: '',
+ endTime: '',
+ supplierEnterpriseId: '',
+ enterpriseEmployeeIds: [] as string[],
+ remark: '',
+});
+
+const nowDate = dayjs().toDate();
+const endMinTime = computed(() => {
+ if (form.beginTime) {
+ return dayjs(form.beginTime).add(1, 'minute').toDate();
+ } else {
+ return dayjs().toDate();
+ }
+});
+const endMaxTime = computed(() => {
+ if (form.beginTime) {
+ return dayjs(dayjs(form.beginTime).format('YYYY-MM-DD 23:59:59')).toDate();
+ } else {
+ return undefined;
+ }
+});
+
+const rules = reactive<FormRules>({
+ beginTime: [{ required: true, message: '璇烽�夋嫨鏈嶅姟寮�濮嬫椂闂�' }],
+ endTime: [{ required: true, message: '璇烽�夋嫨鏈嶅姟缁撴潫鏃堕棿' }],
+});
+
+const { isLoading, isError, detail, refetch } = useStandardServiceDetail({
+ id,
+});
+
+const spec = computed(() => {
+ if (detail.value.specs?.length > 0) {
+ return detail.value.specs.find((x) => x.id === specId);
+ }
+ return null;
+});
+
+const { infiniteLoadingProps } = useEnterpriseAddresses({
+ rows: 100,
+ onSuccess(res) {
+ const data = res.pages[0].data;
+ const address = data.find((item) => item.isDefault);
+ if (address) {
+ form.addressId = address.id;
+ } else {
+ form.addressId = data[0].id;
+ }
+ },
+});
+
+const existAddress = computed(() => {
+ return infiniteLoadingProps.value.flattenListData.map((x) => ({
+ id: x.id,
+ addressDetail: x.addressDetail,
+ cityName: '',
+ countyName: '',
+ provinceName: '',
+ selectedAddress: x.id === form.addressId,
+ townName: '',
+ name: x.name,
+ phone: x.contactPhoneNumber,
+ }));
+});
+
+const selectedAddress = computed(() => {
+ const address = infiniteLoadingProps.value.flattenListData.find(
+ (item) => item.id === form.addressId
+ );
+ return address || infiniteLoadingProps.value.flattenListData[0];
+});
+
+function goSelectAddress() {
+ // Taro.navigateTo({
+ // url: `${RouterPath.addressManange}?mode=select`,
+ // });
+ form.selectAddressVisible = true;
+}
+
+const selected = (prevExistAdd, nowExistAdd, arr) => {
+ form.addressId = nowExistAdd.id;
+};
+
+const formRef = ref<any>(null);
+function goConfirm() {
+ if (!formRef.value) return;
+ formRef.value.validate().then(({ valid, errors }: any) => {
+ if (valid) {
+ // addStandardOrder();
+ }
+ });
+}
+
+async function addStandardOrder() {
+ try {
+ let params: API.AddStandardOrderCommand = {
+ serviceId: detail.value.id,
+ serviceName: detail.value.name,
+ serviceCode: detail.value.code,
+ specId: spec.value.id,
+ specName: spec.value.name,
+ specPrice: spec.value.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) {}
+}
+</script>
+
+<style lang="scss">
+@import '@/styles/common.scss';
+
+.addStandardOrder-page-wrapper {
+ .addStandardOrder-form {
+ .nut-cell-group__wrap {
+ box-shadow: none;
+ }
+ }
+}
+</style>
--
Gitblit v1.10.0