From 9e4d0196ba9570110cd4a10bc9693bc6ffa005ba Mon Sep 17 00:00:00 2001
From: zhengyiming <540361168@qq.com>
Date: 星期一, 29 十二月 2025 13:13:08 +0800
Subject: [PATCH] fix: 甲方小程序

---
 apps/housekeepingMiniApp/src/subpackages/sercice/chooseSupplier/chooseSupplier.vue                           |    2 
 packages/services/apiV2/standardOrder.ts                                                                     |   18 +
 apps/housekeepingMiniApp/src/components/JobDetailContent/components/experienceView.vue                       |   61 +++++
 apps/housekeepingMiniApp/src/subpackages/sercice/chooseSupplier/InnerPage.vue                                |    8 
 apps/housekeepingMiniApp/src/subpackages/sercice/EnterpriseEmployeeDetail/EnterpriseEmployeeDetail.config.ts |    3 
 apps/housekeepingMiniApp/src/components/JobDetailContent/components/CurriculumViewItem.vue                   |   55 ++++
 apps/housekeepingMiniApp/src/subpackages/sercice/supplierDetail/supplierDetail.config.ts                     |    3 
 apps/housekeepingMiniApp/src/subpackages/sercice/EnterpriseEmployeeDetail/InnerPage.vue                      |   86 +++++++
 apps/housekeepingMiniApp/src/subpackages/sercice/chooseEnterpriseEmployee/InnerPage.vue                      |   10 
 apps/housekeepingMiniApp/src/subpackages/sercice/supplierDetail/InnerPage.vue                                |   23 +
 apps/housekeepingMiniApp/src/components/JobDetailContent/components/curriculumView.vue                       |  157 +++++++++++++
 packages/services/apiV2/index.ts                                                                             |    4 
 apps/housekeepingMiniApp/src/subpackages/sercice/addStandardOrder/InnerPage.vue                              |   18 +
 apps/housekeepingMiniApp/src/subpackages/sercice/supplierDetail/supplierDetail.vue                           |   13 +
 packages/services/apiV2/typings.d.ts                                                                         |   60 +++++
 packages/constants/apiEnum.ts                                                                                |    2 
 apps/housekeepingMiniApp/src/components/JobDetailContent/JobDetailContent.vue                                |  148 ++++++++++++
 apps/housekeepingMiniApp/src/app.config.ts                                                                   |    2 
 apps/housekeepingMiniApp/src/constants/router.ts                                                             |    2 
 apps/housekeepingMiniApp/src/subpackages/sercice/EnterpriseEmployeeDetail/EnterpriseEmployeeDetail.vue       |   13 +
 20 files changed, 682 insertions(+), 6 deletions(-)

diff --git a/apps/housekeepingMiniApp/src/app.config.ts b/apps/housekeepingMiniApp/src/app.config.ts
index 8d628ee..208a520 100644
--- a/apps/housekeepingMiniApp/src/app.config.ts
+++ b/apps/housekeepingMiniApp/src/app.config.ts
@@ -96,6 +96,8 @@
         'addStandardOrder/addStandardOrder',
         'chooseSupplier/chooseSupplier',
         'chooseEnterpriseEmployee/chooseEnterpriseEmployee',
+        'EnterpriseEmployeeDetail/EnterpriseEmployeeDetail',
+        'supplierDetail/supplierDetail',
       ],
     },
     {
diff --git a/apps/housekeepingMiniApp/src/components/JobDetailContent/JobDetailContent.vue b/apps/housekeepingMiniApp/src/components/JobDetailContent/JobDetailContent.vue
new file mode 100644
index 0000000..3a10cd7
--- /dev/null
+++ b/apps/housekeepingMiniApp/src/components/JobDetailContent/JobDetailContent.vue
@@ -0,0 +1,148 @@
+<template>
+  <ContentView style="background-color: transparent" class="job-detail-content">
+    <FlexJobTopView
+      :avatar="avatar"
+      :name="name"
+      :age="age"
+      :isReal="isReal"
+      :gender="gender"
+      :personalIdentityContent="personalIdentityContent"
+      :educationalBackgroundContent="educationalBackgroundContent"
+      :taskCount="taskCount"
+      size="small"
+      class="job-detail-content-top"
+    />
+    <div class="job-detail-content-contact-info">
+      <div class="job-detail-content-contact-info-item">
+        <div class="job-detail-content-contact-info-item-label">鎵嬫満鍙凤細</div>
+        <div class="job-detail-content-contact-info-item-text">
+          {{ isCollapse ? contactPhoneNumber : '绔嬪嵆鑱旂郴鍚庡彲鏌ョ湅' }}
+        </div>
+      </div>
+      <div class="job-detail-content-contact-info-item">
+        <div class="job-detail-content-contact-info-item-label">韬唤璇佸彿锛�</div>
+        <div class="job-detail-content-contact-info-item-text">
+          {{ isCollapse ? hiddenIDNumberForEnd4(identity) : '绔嬪嵆鑱旂郴鍚庡彲鏌ョ湅' }}
+        </div>
+      </div>
+    </div>
+  </ContentView>
+  <div style="flex: 1; min-height: 0">
+    <ProTabs
+      v-model="tab"
+      name="job-detail-content-tab"
+      :showSmile="false"
+      class="job-detail-content-tabs"
+      isTransparent
+      title-gutter="8"
+      fullHeight
+    >
+      <ProTabPane :title="`绠�鍘哷" pane-key="1">
+        <curriculumView
+          :userExpectJobs="userExpectJobs"
+          :freeTime="freeTime"
+          :jobSeekingStatus="jobSeekingStatus"
+          :userCredentials="userCredentials"
+          :workSeniority="workSeniority"
+          :workExperience="workExperience"
+          :photos="photos"
+          :height="height"
+          :weight="weight"
+          :shoeSize="shoeSize"
+          :videos="videos"
+        />
+      </ProTabPane>
+      <ProTabPane :title="`缁忓巻`" pane-key="2">
+        <experienceView :taskInfoUsers="taskInfoUsers" />
+      </ProTabPane>
+    </ProTabs>
+  </div>
+
+  <PageFooter>
+    <slot name="footer"></slot>
+  </PageFooter>
+</template>
+
+<script setup lang="ts">
+import { FlexJobTopView, ProTabs, ProTabPane } from '@12333/components';
+import { hiddenIDNumberForEnd4 } from '@12333/utils';
+import curriculumView from './components/curriculumView.vue';
+import experienceView from './components/experienceView.vue';
+import { EnumUserGender } from '@12333/constants';
+
+defineOptions({
+  name: 'JobDetailContent',
+});
+
+type Props = {
+  isCollapse: boolean;
+
+  avatar?: string;
+  name?: string;
+  gender?: EnumUserGender;
+  age?: number;
+  isReal?: boolean;
+  personalIdentityContent?: string;
+  educationalBackgroundContent?: string;
+  taskCount?: number;
+  contactPhoneNumber?: string;
+  identity?: string;
+
+  userExpectJobs?: API.GetUserResumeQueryResultExpectJob[];
+  freeTime?: API.EnumPersonalFreeTime;
+  jobSeekingStatus?: API.EnumPersonalJobSeekingStatus;
+  userCredentials?: API.GetUserResumeQueryResultCredential[];
+  workSeniority?: string;
+  workExperience?: string;
+  photos?: string[];
+  videos?: string[];
+  /** 韬珮 */
+  height?: number;
+  /** 浣撻噸 */
+  weight?: number;
+  shoeSize?: number;
+
+  taskInfoUsers?: API.GetUserResumeQueryResultExperience[];
+};
+
+const tab = ref('1');
+const props = withDefaults(defineProps<Props>(), {});
+</script>
+
+<style lang="scss">
+@import '@/styles/common.scss';
+
+.job-detail-content-top {
+  margin-bottom: 20px;
+}
+
+.job-detail-content-contact-info {
+  padding-left: 130px;
+  margin-bottom: 78px;
+
+  .job-detail-content-contact-info-item {
+    display: flex;
+    align-items: center;
+    font-weight: 400;
+    font-size: 24px;
+    line-height: 28px;
+    margin-bottom: 22px;
+
+    &:last-child {
+      margin-bottom: 0;
+    }
+
+    .job-detail-content-contact-info-item-label {
+      color: boleGetCssVar('text-color', 'secondary');
+      margin-right: 8px;
+    }
+
+    .job-detail-content-contact-info-item-text {
+      color: boleGetCssVar('text-color', 'primary');
+      flex: 1;
+      min-width: 0;
+      @include ellipsis;
+    }
+  }
+}
+</style>
diff --git a/apps/housekeepingMiniApp/src/components/JobDetailContent/components/CurriculumViewItem.vue b/apps/housekeepingMiniApp/src/components/JobDetailContent/components/CurriculumViewItem.vue
new file mode 100644
index 0000000..4da3a13
--- /dev/null
+++ b/apps/housekeepingMiniApp/src/components/JobDetailContent/components/CurriculumViewItem.vue
@@ -0,0 +1,55 @@
+<template>
+  <div class="curriculum-list-item">
+    <div class="curriculum-list-item-label" :style="{ width: props.labelWidth }">
+      {{ props.label }}
+    </div>
+    <div class="curriculum-list-item-text">
+      <slot>{{ props.text }}</slot>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+defineOptions({
+  name: 'CurriculumViewItem',
+});
+
+type Props = {
+  label?: string;
+  text?: string;
+  labelWidth?: number | string;
+};
+
+const props = withDefaults(defineProps<Props>(), {
+  labelWidth: 'auto',
+});
+</script>
+
+<style lang="scss">
+@import '@/styles/common.scss';
+
+.job-detail-content-tabs {
+  .curriculum-list-item {
+    display: flex;
+    margin-bottom: 14px;
+    font-weight: 400;
+    font-size: 24px;
+    line-height: 36px;
+
+    &:last-child {
+      margin-bottom: 0;
+    }
+
+    .curriculum-list-item-label {
+      color: boleGetCssVar('text-color', 'secondary');
+    }
+
+    .curriculum-list-item-text {
+      color: boleGetCssVar('text-color', 'primary');
+      flex: 1;
+      min-width: 0;
+      @include ellipsis;
+    }
+  }
+}
+</style>
diff --git a/apps/housekeepingMiniApp/src/components/JobDetailContent/components/curriculumView.vue b/apps/housekeepingMiniApp/src/components/JobDetailContent/components/curriculumView.vue
new file mode 100644
index 0000000..e60bab7
--- /dev/null
+++ b/apps/housekeepingMiniApp/src/components/JobDetailContent/components/curriculumView.vue
@@ -0,0 +1,157 @@
+<template>
+  <ContentScrollView>
+    <Cell :show-title="false">
+      <!-- <CellChunk title="姹傝亴鎰忓悜">
+        <div class="curriculum-list">
+          <CurriculumViewItem label="鏈熸湜宀椾綅锛�">
+            <div class="curriculum-position-list">
+              <div
+                v-for="userExpectJob in userExpectJobs"
+                :key="userExpectJob.expectJobCode"
+                class="curriculum-position-list-item"
+              >
+                {{ userExpectJob.expectJobContent }}
+              </div>
+            </div>
+          </CurriculumViewItem>
+          <CurriculumViewItem label="绌洪棽鏃堕棿锛�" :text="EnumPersonalFreeTimeText[freeTime]">
+          </CurriculumViewItem>
+          <CurriculumViewItem
+            label="姹傝亴鐘舵�侊細"
+            :text="EnumPersonalJobSeekingStatusText[jobSeekingStatus]"
+          >
+          </CurriculumViewItem>
+        </div>
+      </CellChunk> -->
+      <CellChunk title="璧勬牸璇佷功" v-if="_userCredentials.length > 0">
+        <nut-grid square :column-num="3" :border="false" :gutter="20" class="pro-img-grid">
+          <nut-grid-item
+            v-for="(item, index) in _userCredentials"
+            :key="item"
+            class="pro-img-grid-item"
+          >
+            <div class="pro-img-grid-img-item">
+              <PreviewImage :src="item" class="pro-img-grid-img" :urls="_userCredentials" />
+            </div>
+          </nut-grid-item>
+        </nut-grid>
+      </CellChunk>
+      <CellChunk title="宸ヤ綔缁忛獙">
+        <CurriculumViewItem label="宸ヤ綔骞撮檺锛�" :text="workSeniority"> </CurriculumViewItem>
+        <CurriculumViewItem label="宸ヤ綔缁忛獙锛�" :text="workExperience"> </CurriculumViewItem>
+      </CellChunk>
+      <CellChunk title="璇︾粏淇℃伅">
+        <CurriculumViewItem
+          label="韬珮锛�"
+          :text="height && `${height} cm`"
+          :label-width="labelWidth"
+        ></CurriculumViewItem>
+        <CurriculumViewItem
+          label="浣撻噸锛�"
+          :text="weight && `${weight} kg`"
+          :label-width="labelWidth"
+        ></CurriculumViewItem>
+        <CurriculumViewItem
+          label="闉嬬爜锛�"
+          :text="shoeSize && `${shoeSize} 鐮乣"
+          :label-width="labelWidth"
+        ></CurriculumViewItem>
+        <CurriculumViewItem label="涓汉鐓х墖锛�">
+          <nut-grid
+            square
+            :column-num="2"
+            :border="false"
+            :gutter="20"
+            v-if="_photos.length > 0"
+            class="pro-img-grid"
+          >
+            <nut-grid-item v-for="(item, index) in _photos" :key="item" class="pro-img-grid-item">
+              <div class="pro-img-grid-img-item">
+                <PreviewImage :src="item" class="pro-img-grid-img" :urls="_photos" />
+              </div>
+            </nut-grid-item>
+          </nut-grid>
+        </CurriculumViewItem>
+        <CurriculumViewItem label="涓汉瑙嗛锛�">
+          <nut-grid
+            square
+            :column-num="2"
+            :border="false"
+            :gutter="20"
+            v-if="_photos.length > 0"
+            class="pro-img-grid"
+          >
+            <nut-grid-item v-for="(item, index) in _videos" :key="item" class="pro-img-grid-item">
+              <div class="pro-img-grid-img-item">
+                <video class="pro-img-grid-img" :src="item" />
+              </div>
+            </nut-grid-item>
+          </nut-grid>
+        </CurriculumViewItem>
+      </CellChunk>
+    </Cell>
+  </ContentScrollView>
+</template>
+
+<script setup lang="ts">
+import CurriculumViewItem from './CurriculumViewItem.vue';
+import { PreviewImage, Cell, CellChunk } from '@12333/components';
+import Taro from '@tarojs/taro';
+import { EnumPersonalFreeTimeText, EnumPersonalJobSeekingStatusText } from '@12333/constants';
+import { setOSSLink } from '@12333/utils';
+import { Video } from '@tarojs/components';
+
+defineOptions({
+  name: 'curriculumView',
+});
+
+type Props = {
+  userExpectJobs?: API.GetUserResumeQueryResultExpectJob[];
+  freeTime?: API.EnumPersonalFreeTime;
+  jobSeekingStatus?: API.EnumPersonalJobSeekingStatus;
+  userCredentials?: API.GetUserResumeQueryResultCredential[];
+  workSeniority?: string;
+  workExperience?: string;
+  photos?: string[];
+  videos?: string[];
+  /** 韬珮 */
+  height?: number;
+  /** 浣撻噸 */
+  weight?: number;
+  shoeSize?: number;
+};
+
+const props = withDefaults(defineProps<Props>(), {
+  userExpectJobs: () => [],
+  userCredentials: () => [],
+  photos: () => [],
+  videos: () => [],
+});
+
+const _userCredentials = computed(() => props.userCredentials.map((x) => setOSSLink(x.img)));
+const _photos = computed(() => props.photos.map((x) => setOSSLink(x)));
+const _videos = computed(() => props.videos.map((x) => setOSSLink(x)));
+
+const labelWidth = Taro.pxTransform(120);
+</script>
+
+<style lang="scss">
+@import '@/styles/common.scss';
+
+.job-detail-content-tabs {
+  .curriculum-position-list {
+    width: 100%;
+    display: flex;
+    flex-wrap: wrap;
+    column-gap: 24px;
+    row-gap: 16px;
+
+    .curriculum-position-list-item {
+      font-weight: 500;
+      font-size: 24px;
+      color: boleGetCssVar('color', 'warning');
+      line-height: 36px;
+    }
+  }
+}
+</style>
diff --git a/apps/housekeepingMiniApp/src/components/JobDetailContent/components/experienceView.vue b/apps/housekeepingMiniApp/src/components/JobDetailContent/components/experienceView.vue
new file mode 100644
index 0000000..970c589
--- /dev/null
+++ b/apps/housekeepingMiniApp/src/components/JobDetailContent/components/experienceView.vue
@@ -0,0 +1,61 @@
+<template>
+  <ContentScrollView>
+    <Cell title="宀椾綅缁忓巻">
+      <nut-steps
+        v-if="taskInfoUsers.length > 0"
+        direction="vertical"
+        progress-dot
+        :current="10000003"
+        class="job-detail-content-steps"
+      >
+        <nut-step
+          v-for="(taskInfoUser, index) in taskInfoUsers"
+          :key="index"
+          :title="dayjs(taskInfoUser.hireTime).format('YYYY.MM.DD')"
+        >
+          <template #content>
+            <p>鍦▄{ taskInfoUser.enterpriseName }}锛�</p>
+            <p>鍋氳繃{{ taskInfoUser.name }}</p>
+          </template>
+        </nut-step>
+      </nut-steps>
+      <NoData v-else />
+    </Cell>
+  </ContentScrollView>
+</template>
+
+<script setup lang="ts">
+import NoData from '../../NoData/NoData.vue';
+import dayjs from 'dayjs';
+import { Cell } from '@12333/components';
+
+defineOptions({
+  name: 'experienceView',
+});
+
+type Props = {
+  taskInfoUsers?: API.GetUserResumeQueryResultExperience[];
+};
+
+const props = withDefaults(defineProps<Props>(), {
+  taskInfoUsers: () => [],
+});
+</script>
+
+<style lang="scss">
+@import '@/styles/common.scss';
+
+.job-detail-content-tabs {
+  .job-detail-content-steps {
+    .nut-step-main {
+      margin-bottom: 40px;
+    }
+
+    .nut-step:last-child {
+      .nut-step-main {
+        margin-bottom: 0;
+      }
+    }
+  }
+}
+</style>
diff --git a/apps/housekeepingMiniApp/src/constants/router.ts b/apps/housekeepingMiniApp/src/constants/router.ts
index cf7e7fc..2149e00 100644
--- a/apps/housekeepingMiniApp/src/constants/router.ts
+++ b/apps/housekeepingMiniApp/src/constants/router.ts
@@ -37,6 +37,8 @@
   addStandardOrder = '/subpackages/sercice/addStandardOrder/addStandardOrder',
   chooseSupplier = '/subpackages/sercice/chooseSupplier/chooseSupplier',
   chooseEnterpriseEmployee = '/subpackages/sercice/chooseEnterpriseEmployee/chooseEnterpriseEmployee',
+  EnterpriseEmployeeDetail = '/subpackages/sercice/EnterpriseEmployeeDetail/EnterpriseEmployeeDetail',
+  supplierDetail = '/subpackages/sercice/supplierDetail/supplierDetail',
 
   extraPage = '/subpackages/extraPage/extraPage/extraPage',
 }
diff --git a/apps/housekeepingMiniApp/src/subpackages/sercice/EnterpriseEmployeeDetail/EnterpriseEmployeeDetail.config.ts b/apps/housekeepingMiniApp/src/subpackages/sercice/EnterpriseEmployeeDetail/EnterpriseEmployeeDetail.config.ts
new file mode 100644
index 0000000..305fdb1
--- /dev/null
+++ b/apps/housekeepingMiniApp/src/subpackages/sercice/EnterpriseEmployeeDetail/EnterpriseEmployeeDetail.config.ts
@@ -0,0 +1,3 @@
+export default definePageConfig({
+  disableScroll: true,
+});
diff --git a/apps/housekeepingMiniApp/src/subpackages/sercice/EnterpriseEmployeeDetail/EnterpriseEmployeeDetail.vue b/apps/housekeepingMiniApp/src/subpackages/sercice/EnterpriseEmployeeDetail/EnterpriseEmployeeDetail.vue
new file mode 100644
index 0000000..2fd34ca
--- /dev/null
+++ b/apps/housekeepingMiniApp/src/subpackages/sercice/EnterpriseEmployeeDetail/EnterpriseEmployeeDetail.vue
@@ -0,0 +1,13 @@
+<template>
+  <PageLayoutWithBg class="enterpriseEmployeeDetail-page-wrapper" title="鏈嶅姟浜哄憳璇︽儏">
+    <InnerPage />
+  </PageLayoutWithBg>
+</template>
+
+<script setup lang="ts">
+import InnerPage from './InnerPage.vue';
+
+defineOptions({
+  name: 'EnterpriseEmployeeDetail',
+});
+</script>
diff --git a/apps/housekeepingMiniApp/src/subpackages/sercice/EnterpriseEmployeeDetail/InnerPage.vue b/apps/housekeepingMiniApp/src/subpackages/sercice/EnterpriseEmployeeDetail/InnerPage.vue
new file mode 100644
index 0000000..c2278df
--- /dev/null
+++ b/apps/housekeepingMiniApp/src/subpackages/sercice/EnterpriseEmployeeDetail/InnerPage.vue
@@ -0,0 +1,86 @@
+<template>
+  <LoadingLayout :loading="isLoading" :error="isError" :loadError="refetch">
+    <JobDetailContent
+      :avatar="userResumeInfo.avatar"
+      :name="userResumeInfo.name"
+      :age="userResumeInfo.age"
+      :isReal="userResumeInfo.isReal"
+      :gender="userResumeInfo.gender"
+      :personalIdentityContent="userResumeInfo.personalIdentityContent"
+      :educationalBackgroundContent="userResumeInfo.educationalBackgroundContent"
+      :taskCount="userResumeInfo.taskCount"
+      :contactPhoneNumber="userResumeInfo.contactPhoneNumber"
+      :identity="userResumeInfo.identity"
+      :isCollapse="isCollapse"
+      :userExpectJobs="userResumeInfo.userExpectJobs"
+      :freeTime="userResumeInfo.freeTime"
+      :jobSeekingStatus="userResumeInfo.jobSeekingStatus"
+      :userCredentials="userResumeInfo.userCredentials"
+      :workSeniority="userResumeInfo.workSeniority"
+      :workExperience="userResumeInfo.workExperience"
+      :photos="userResumeInfo.photos"
+      :height="userResumeInfo.height"
+      :weight="userResumeInfo.weight"
+      :shoeSize="userResumeInfo.shoeSize"
+      :videos="userResumeInfo.videos"
+      :taskInfoUsers="userResumeInfo.taskInfoUsers"
+    >
+      <template #footer>
+        <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="handleContact">绔嬪嵆鑱旂郴</PageFooterBtn>
+      </template>
+    </JobDetailContent>
+  </LoadingLayout>
+</template>
+
+<script setup lang="ts">
+import Taro from '@tarojs/taro';
+import { useToggle } from 'senin-mini/hooks';
+import { Message } from '@12333/utils';
+import { useUserResume } from '@12333/hooks';
+import { useAccessLogin } from '@/hooks';
+import * as userResumeServices from '@12333/services/apiV2/userResume';
+import IconShare from '@/assets/flexJob/icon-share.png';
+
+defineOptions({
+  name: 'InnerPage',
+});
+
+const router = Taro.useRouter();
+const enterpriseEmployeeId = router.params?.id ?? '';
+const userId = router.params?.userId ?? '';
+
+const { isLoading, isError, userResumeInfo, refetch } = useUserResume({
+  userId: userId,
+});
+
+const { isCollapse, toggle } = useToggle();
+
+const handleContact = useAccessLogin(async () => {
+  try {
+    if (!isCollapse.value) {
+      await userResumeServices.contactUserResume({ id: userId });
+      toggle();
+    } else {
+      Taro.makePhoneCall({
+        phoneNumber: userResumeInfo.value.contactPhoneNumber,
+      });
+    }
+  } catch (error) {}
+});
+</script>
+
+<style lang="scss">
+@import '@/styles/common.scss';
+</style>
diff --git a/apps/housekeepingMiniApp/src/subpackages/sercice/addStandardOrder/InnerPage.vue b/apps/housekeepingMiniApp/src/subpackages/sercice/addStandardOrder/InnerPage.vue
index 5732f29..96aa0a7 100644
--- a/apps/housekeepingMiniApp/src/subpackages/sercice/addStandardOrder/InnerPage.vue
+++ b/apps/housekeepingMiniApp/src/subpackages/sercice/addStandardOrder/InnerPage.vue
@@ -75,6 +75,19 @@
           ></ChooseInputWithSuppliers>
         </nut-form-item>
         <nut-form-item
+          label="鏀粯閫氶亾:"
+          class="bole-form-item"
+          prop="payAccess"
+          label-width="90px"
+          required
+        >
+          <ChooseInputWithPicker
+            v-model="form.payAccess"
+            placeholder="璇烽�夋嫨鏀粯閫氶亾"
+            :value-enum="EnumUserBankCardAccessTextFormStandard"
+          />
+        </nut-form-item>
+        <nut-form-item
           label="澶囨敞:"
           class="bole-form-item alignTop"
           prop="remark"
@@ -118,6 +131,7 @@
   List,
   ListItem,
   ChooseInputWithDatePicker,
+  ChooseInputWithPicker,
 } from '@12333/components';
 import Taro from '@tarojs/taro';
 import { RouterPath } from '@/constants';
@@ -125,7 +139,7 @@
 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 { EnumUserBankCardAccess, EnumUserBankCardAccessTextFormStandard } from '@12333/constants';
 import { Message } from '@12333/utils';
 
 defineOptions({
@@ -147,6 +161,7 @@
   enterpriseEmployeeId: '',
   enterpriseEmployeeName: '',
   remark: '',
+  payAccess: EnumUserBankCardAccess.WeChatPay,
 });
 
 const nowDate = dayjs().toDate();
@@ -169,6 +184,7 @@
   beginTime: [{ required: true, message: '璇烽�夋嫨鏈嶅姟寮�濮嬫椂闂�' }],
   endTime: [{ required: true, message: '璇烽�夋嫨鏈嶅姟缁撴潫鏃堕棿' }],
   enterpriseEmployeeId: [{ required: true, message: '璇烽�夋嫨鏈嶅姟鏈烘瀯' }],
+  payAccess: [{ required: true, message: '璇烽�夋嫨鏀粯閫氶亾' }],
 });
 
 const { isLoading, isError, detail, refetch } = useStandardServiceDetail({
diff --git a/apps/housekeepingMiniApp/src/subpackages/sercice/chooseEnterpriseEmployee/InnerPage.vue b/apps/housekeepingMiniApp/src/subpackages/sercice/chooseEnterpriseEmployee/InnerPage.vue
index 3967215..8faa252 100644
--- a/apps/housekeepingMiniApp/src/subpackages/sercice/chooseEnterpriseEmployee/InnerPage.vue
+++ b/apps/housekeepingMiniApp/src/subpackages/sercice/chooseEnterpriseEmployee/InnerPage.vue
@@ -16,7 +16,9 @@
         :workExperience="item.workExperience"
       >
         <template #actions>
-          <nut-button type="primary" plain>鏌ョ湅璇︽儏</nut-button>
+          <nut-button type="primary" plain @click="goEnterpriseEmployeeDetail(item)"
+            >鏌ョ湅璇︽儏</nut-button
+          >
           <nut-button type="primary" @click="handleChoose(item)">閫夋嫨</nut-button>
         </template>
       </ChooseServerCard>
@@ -70,4 +72,10 @@
   } as SelectEnterpriseEmployeeEvent);
   goBack(2);
 }
+
+function goEnterpriseEmployeeDetail(item: API.GetStandardServiceServersQueryResultItem) {
+  Taro.navigateTo({
+    url: `${RouterPath.EnterpriseEmployeeDetail}?id=${item.id}&userId=${item.userId}`,
+  });
+}
 </script>
diff --git a/apps/housekeepingMiniApp/src/subpackages/sercice/chooseSupplier/InnerPage.vue b/apps/housekeepingMiniApp/src/subpackages/sercice/chooseSupplier/InnerPage.vue
index 48fd7b5..2967878 100644
--- a/apps/housekeepingMiniApp/src/subpackages/sercice/chooseSupplier/InnerPage.vue
+++ b/apps/housekeepingMiniApp/src/subpackages/sercice/chooseSupplier/InnerPage.vue
@@ -12,7 +12,7 @@
         :serviceCount="item.serviceCount"
       >
         <template #actions>
-          <nut-button type="primary" plain>鏌ョ湅璇︽儏</nut-button>
+          <nut-button type="primary" plain @click="goSupplierDetail(item)">鏌ョ湅璇︽儏</nut-button>
           <nut-button type="primary" @click="goEnterpriseEmployee(item)">閫夋嫨</nut-button>
         </template>
       </ChooseSupplierCard>
@@ -69,4 +69,10 @@
     },
   });
 }
+
+function goSupplierDetail(item: API.GetStandardServiceSupplierEnterprisesQueryResultItem) {
+  Taro.navigateTo({
+    url: `${RouterPath.supplierDetail}?id=${item.id}`,
+  });
+}
 </script>
diff --git a/apps/housekeepingMiniApp/src/subpackages/sercice/chooseSupplier/chooseSupplier.vue b/apps/housekeepingMiniApp/src/subpackages/sercice/chooseSupplier/chooseSupplier.vue
index d77734f..2b68d48 100644
--- a/apps/housekeepingMiniApp/src/subpackages/sercice/chooseSupplier/chooseSupplier.vue
+++ b/apps/housekeepingMiniApp/src/subpackages/sercice/chooseSupplier/chooseSupplier.vue
@@ -1,5 +1,5 @@
 <template>
-  <PageLayoutWithBg class="addStandardOrder-page-wrapper" title="閫夋嫨鏈嶅姟鏈烘瀯">
+  <PageLayoutWithBg class="chooseSupplier-page-wrapper" title="閫夋嫨鏈嶅姟鏈烘瀯">
     <InnerPage />
   </PageLayoutWithBg>
 </template>
diff --git a/apps/housekeepingMiniApp/src/subpackages/sercice/supplierDetail/InnerPage.vue b/apps/housekeepingMiniApp/src/subpackages/sercice/supplierDetail/InnerPage.vue
new file mode 100644
index 0000000..6877bde
--- /dev/null
+++ b/apps/housekeepingMiniApp/src/subpackages/sercice/supplierDetail/InnerPage.vue
@@ -0,0 +1,23 @@
+<template>
+  <div></div>
+</template>
+
+<script setup lang="ts">
+import Taro from '@tarojs/taro';
+import CompanyDesc from '../components/CompanyDesc.vue';
+import CompanyTaskList from '../components/CompanyTaskList.vue';
+import CompanyInfo from '../components/CompanyInfo.vue';
+import { ProTabs, ProTabPane } from '@12333/components';
+import { useEnterpriseDetail } from '@12333/hooks';
+
+defineOptions({
+  name: 'InnerPage',
+});
+
+const router = Taro.useRouter();
+const enterpriseId = router.params?.id ?? '';
+</script>
+
+<style lang="scss">
+@import '@/styles/common.scss';
+</style>
diff --git a/apps/housekeepingMiniApp/src/subpackages/sercice/supplierDetail/supplierDetail.config.ts b/apps/housekeepingMiniApp/src/subpackages/sercice/supplierDetail/supplierDetail.config.ts
new file mode 100644
index 0000000..305fdb1
--- /dev/null
+++ b/apps/housekeepingMiniApp/src/subpackages/sercice/supplierDetail/supplierDetail.config.ts
@@ -0,0 +1,3 @@
+export default definePageConfig({
+  disableScroll: true,
+});
diff --git a/apps/housekeepingMiniApp/src/subpackages/sercice/supplierDetail/supplierDetail.vue b/apps/housekeepingMiniApp/src/subpackages/sercice/supplierDetail/supplierDetail.vue
new file mode 100644
index 0000000..177f728
--- /dev/null
+++ b/apps/housekeepingMiniApp/src/subpackages/sercice/supplierDetail/supplierDetail.vue
@@ -0,0 +1,13 @@
+<template>
+  <PageLayoutWithBg class="supplierDetail-page-wrapper" title="鏈嶅姟鏈烘瀯璇︽儏">
+    <InnerPage />
+  </PageLayoutWithBg>
+</template>
+
+<script setup lang="ts">
+import InnerPage from './InnerPage.vue';
+
+defineOptions({
+  name: 'supplierDetail',
+});
+</script>
diff --git a/packages/constants/apiEnum.ts b/packages/constants/apiEnum.ts
index d81c52a..69697f3 100644
--- a/packages/constants/apiEnum.ts
+++ b/packages/constants/apiEnum.ts
@@ -265,6 +265,8 @@
 export enum EnumEnterpriseWalletTransactionType {
   /**鍏呭�� */
   Recharge = 10,
+  /**鏀跺叆 */
+  Income = 11,
   /**杞处 */
   Transfer = 20,
 }
diff --git a/packages/services/apiV2/index.ts b/packages/services/apiV2/index.ts
index 10b88c6..aa4cd2f 100644
--- a/packages/services/apiV2/index.ts
+++ b/packages/services/apiV2/index.ts
@@ -9,13 +9,13 @@
 import * as task from './task';
 import * as enterpriseWallet from './enterpriseWallet';
 import * as ocrUtils from './ocrUtils';
+import * as standardOrder from './standardOrder';
 import * as electronSign from './electronSign';
 import * as resource from './resource';
 import * as logRecords from './logRecords';
 import * as dictionary from './dictionary';
 import * as taskCheckReceive from './taskCheckReceive';
 import * as taskUser from './taskUser';
-import * as standardOrder from './standardOrder';
 import * as standardService from './standardService';
 import * as userResume from './userResume';
 import * as auth from './auth';
@@ -40,13 +40,13 @@
   task,
   enterpriseWallet,
   ocrUtils,
+  standardOrder,
   electronSign,
   resource,
   logRecords,
   dictionary,
   taskCheckReceive,
   taskUser,
-  standardOrder,
   standardService,
   userResume,
   auth,
diff --git a/packages/services/apiV2/standardOrder.ts b/packages/services/apiV2/standardOrder.ts
index 22de738..a38f968 100644
--- a/packages/services/apiV2/standardOrder.ts
+++ b/packages/services/apiV2/standardOrder.ts
@@ -98,6 +98,24 @@
   });
 }
 
+/** 鏌ヨ鏍囧噯璁㈠崟缁撶畻璇︽儏 GET /api/flexjob/standardOrder/getStandardOrderSettlement */
+export async function getStandardOrderSettlement(
+  // 鍙犲姞鐢熸垚鐨凱aram绫诲瀷 (闈瀊ody鍙傛暟swagger榛樿娌℃湁鐢熸垚瀵硅薄)
+  params: API.APIgetStandardOrderSettlementParams,
+  options?: API.RequestConfig
+) {
+  return request<API.GetStandardOrderSettlementQueryResult>(
+    '/api/flexjob/standardOrder/getStandardOrderSettlement',
+    {
+      method: 'GET',
+      params: {
+        ...params,
+      },
+      ...(options || {}),
+    }
+  );
+}
+
 /** 鏌ヨ鏍囧噯璁㈠崟璇︽儏 GET /api/flexjob/standardOrder/getSureStandardOrder */
 export async function getSureStandardOrder(
   // 鍙犲姞鐢熸垚鐨凱aram绫诲瀷 (闈瀊ody鍙傛暟swagger榛樿娌℃湁鐢熸垚瀵硅薄)
diff --git a/packages/services/apiV2/typings.d.ts b/packages/services/apiV2/typings.d.ts
index a623f2f..117a99a 100644
--- a/packages/services/apiV2/typings.d.ts
+++ b/packages/services/apiV2/typings.d.ts
@@ -408,6 +408,11 @@
     scene?: EnumGetStandardOrdersQueryScene;
   }
 
+  interface APIgetStandardOrderSettlementParams {
+    /** 璁㈠崟Id */
+    id?: string;
+  }
+
   interface APIgetStandardServiceParams {
     /** Id */
     id?: string;
@@ -1222,6 +1227,8 @@
   enum EnumEnterpriseWalletTransactionType {
     /**鍏呭�� */
     Recharge = 10,
+    /**鏀跺叆 */
+    Income = 11,
     /**杞处 */
     Transfer = 20,
   }
@@ -3447,6 +3454,24 @@
     timestamp?: number;
   }
 
+  interface FriendlyResultGetStandardOrderSettlementQueryResult {
+    /** 璺熻釜Id */
+    traceId?: string;
+    /** 鐘舵�佺爜 */
+    code?: number;
+    /** 閿欒鐮� */
+    errorCode?: string;
+    data?: GetStandardOrderSettlementQueryResult;
+    /** 鎵ц鎴愬姛 */
+    success?: boolean;
+    /** 閿欒淇℃伅 */
+    msg?: any;
+    /** 闄勫姞鏁版嵁 */
+    extras?: any;
+    /** 鏃堕棿鎴� */
+    timestamp?: number;
+  }
+
   interface FriendlyResultGetStandardOrdersQueryResult {
     /** 璺熻釜Id */
     traceId?: string;
@@ -8228,6 +8253,38 @@
     contactPhoneNumber?: string;
   }
 
+  interface GetStandardOrderSettlementQueryResult {
+    /** 璁㈠崟Id */
+    id?: string;
+    /** 浠樻浜鸿处鎴� */
+    payerAccount?: string;
+    /** 浠樻浜哄悕绉� */
+    payerName?: string;
+    /** 浠樻浜哄紑鎴疯 */
+    payerBank?: string;
+    /** 浠樻浜烘敮琛� */
+    payerBankBranch?: string;
+    /** 鏀舵浜哄鍚� */
+    receiveName?: string;
+    /** 鏀舵璐︽埛 */
+    receiveAccount?: string;
+    /** 鏀舵浜哄紑鎴疯 */
+    receiveBank?: string;
+    /** 鏀舵浜烘敮琛� */
+    receiveBankBranch?: string;
+    /** 甯佺 */
+    currency?: string;
+    /** 甯佺 */
+    currencyName?: string;
+    settlementStatus?: EnumStandardOrderSettlementStatus;
+    /** 缁撶畻鏃堕棿 */
+    settlementTime?: string;
+    /** 缁撶畻閲戦 */
+    settlementAmount?: number;
+    /** 鐢靛瓙鏀舵嵁涓嬭浇閾炬帴 */
+    ereceiptDownloadOssUrl?: string;
+  }
+
   interface GetStandardOrdersQuery {
     scene?: EnumGetStandardOrdersQueryScene;
     /** 鍏抽敭瀛楋紙璁㈠崟鍙�/鏈嶅姟鍚嶏級 */
@@ -8245,6 +8302,7 @@
     partAEnterpriseOrderStatus?: EnumGetStandardOrdersQueryPartAEnterpriseOrderStatus;
     supplierEnterpriseOrderStatus?: EnumGetStandardOrdersQuerySupplierEnterpriseOrderStatus;
     settlementStatus?: EnumStandardOrderSettlementStatus;
+    taskCheckReceiveStatus?: EnumTaskCheckReceiveStatus;
     pageModel?: PagedListQueryPageModel;
   }
 
@@ -8418,6 +8476,8 @@
     id?: string;
     /** 澶村儚 */
     avatar?: string;
+    /** 鐢ㄦ埛ID */
+    userId?: string;
     /** 濮撳悕 */
     name?: string;
     gender?: EnumUserGender;

--
Gitblit v1.10.0