From 20619871d0db98f3f298a04e200005e84e0bc6be Mon Sep 17 00:00:00 2001
From: zhengyiming <540361168@qq.com>
Date: 星期四, 13 二月 2025 18:56:54 +0800
Subject: [PATCH] fix: b端

---
 apps/bMiniApp/src/assets/flexJob/icon-share.png                             |    0 
 apps/bMiniApp/src/assets/home/icon-localtion.png                            |    0 
 patches/@nutui__nutui-taro@4.3.13.patch                                     |   12 +
 apps/bMiniApp/src/constants/router.ts                                       |    2 
 apps/bMiniApp/src/subpackages/flexJob/flexJobDetail/flexJobDetail.vue       |  114 ++++++++++++++
 apps/cMiniApp/project.private.config.json                                   |    7 
 apps/bMiniApp/project.private.config.json                                   |    7 
 pnpm-lock.yaml                                                              |   18 -
 apps/bMiniApp/src/app.config.ts                                             |    4 
 apps/bMiniApp/src/assets/flexJob/icon-attention-lg-active.png               |    0 
 packages/components/src/Card/FlexJobTopView.vue                             |   88 +++++++++++
 packages/components/src/index.ts                                            |    1 
 apps/bMiniApp/src/assets/flexJob/icon-attention-lg.png                      |    0 
 packages/components/src/Card/FlexJobCard.vue                                |   81 +--------
 apps/bMiniApp/src/assets/home/icon-logo.png                                 |    0 
 apps/bMiniApp/src/pages/home/index.vue                                      |   70 ++++++--
 apps/bMiniApp/src/pages/home/HomeQueryMenuView.vue                          |   40 ++++
 apps/bMiniApp/src/subpackages/flexJob/flexJobDetail/flexJobDetail.config.ts |    3 
 packages/components/src/Menu/QueryMenuItem.vue                              |    4 
 19 files changed, 348 insertions(+), 103 deletions(-)

diff --git a/apps/bMiniApp/project.private.config.json b/apps/bMiniApp/project.private.config.json
index 032a8e1..8071862 100644
--- a/apps/bMiniApp/project.private.config.json
+++ b/apps/bMiniApp/project.private.config.json
@@ -9,6 +9,13 @@
         "miniprogram": {
             "list": [
                 {
+                    "name": "鐏靛伐璇︽儏",
+                    "pathName": "subpackages/flexJob/flexJobDetail/flexJobDetail",
+                    "query": "id=c4cfe028-23e7-0be8-ee56-3a11e3743b9d",
+                    "launchMode": "default",
+                    "scene": null
+                },
+                {
                     "name": "",
                     "pathName": "subpackages/mine/mineFavorites/mineFavorites",
                     "query": "",
diff --git a/apps/bMiniApp/src/app.config.ts b/apps/bMiniApp/src/app.config.ts
index 4c6fef8..a79020a 100644
--- a/apps/bMiniApp/src/app.config.ts
+++ b/apps/bMiniApp/src/app.config.ts
@@ -74,6 +74,10 @@
       root: 'subpackages/city',
       pages: ['citySelect/citySelect'],
     },
+    {
+      root: 'subpackages/flexJob',
+      pages: ['flexJobDetail/flexJobDetail'],
+    },
   ],
   // preloadRule: {
   //   'pages/mine/index': {
diff --git a/apps/bMiniApp/src/assets/flexJob/icon-attention-lg-active.png b/apps/bMiniApp/src/assets/flexJob/icon-attention-lg-active.png
new file mode 100644
index 0000000..08f2982
--- /dev/null
+++ b/apps/bMiniApp/src/assets/flexJob/icon-attention-lg-active.png
Binary files differ
diff --git a/apps/bMiniApp/src/assets/flexJob/icon-attention-lg.png b/apps/bMiniApp/src/assets/flexJob/icon-attention-lg.png
new file mode 100644
index 0000000..34a1588
--- /dev/null
+++ b/apps/bMiniApp/src/assets/flexJob/icon-attention-lg.png
Binary files differ
diff --git a/apps/bMiniApp/src/assets/flexJob/icon-share.png b/apps/bMiniApp/src/assets/flexJob/icon-share.png
new file mode 100644
index 0000000..546e699
--- /dev/null
+++ b/apps/bMiniApp/src/assets/flexJob/icon-share.png
Binary files differ
diff --git a/apps/bMiniApp/src/assets/home/icon-localtion.png b/apps/bMiniApp/src/assets/home/icon-localtion.png
new file mode 100644
index 0000000..71784b5
--- /dev/null
+++ b/apps/bMiniApp/src/assets/home/icon-localtion.png
Binary files differ
diff --git a/apps/bMiniApp/src/assets/home/icon-logo.png b/apps/bMiniApp/src/assets/home/icon-logo.png
index 084a4b0..ec03de3 100644
--- a/apps/bMiniApp/src/assets/home/icon-logo.png
+++ b/apps/bMiniApp/src/assets/home/icon-logo.png
Binary files differ
diff --git a/apps/bMiniApp/src/constants/router.ts b/apps/bMiniApp/src/constants/router.ts
index 0228ee4..e325089 100644
--- a/apps/bMiniApp/src/constants/router.ts
+++ b/apps/bMiniApp/src/constants/router.ts
@@ -10,6 +10,8 @@
   workbenches = '/pages/workbenches/workbenches',
   editRichContent = '/subpackages/editRichContent/editRichContent',
 
+  flexJobDetail = '/subpackages/flexJob/flexJobDetail/flexJobDetail',
+
   // userInfo = '/subpackages/setting/userInfo/userInfo',
   // setting = '/subpackages/setting/setting/setting',
   // privacyAgreement = '/subpackages/setting/privacyAgreement/privacyAgreement',
diff --git a/apps/bMiniApp/src/pages/home/HomeQueryMenuView.vue b/apps/bMiniApp/src/pages/home/HomeQueryMenuView.vue
index 26a6979..4c5cdf1 100644
--- a/apps/bMiniApp/src/pages/home/HomeQueryMenuView.vue
+++ b/apps/bMiniApp/src/pages/home/HomeQueryMenuView.vue
@@ -1,13 +1,28 @@
 <template>
   <QueryMenuView @close="handleReset" @confirm="emit('close')" cancelText="閲嶇疆">
     <div class="home-query-menu-view">
-      <QueryMenuItem title="缁撶畻鏂瑰紡">
+      <QueryMenuItem title="鎬у埆">
         <ProRadio v-model="query.gender" :value-enum="GenderText" show-all-btn></ProRadio>
       </QueryMenuItem>
-      <QueryMenuItem title="鍛樺伐绂忓埄">
+      <QueryMenuItem title="韬唤">
         <ProRadio v-model="query.gender" :value-enum="GenderText" show-all-btn></ProRadio>
       </QueryMenuItem>
-      <QueryMenuItem title="鎬у埆瑕佹眰">
+      <QueryMenuItem>
+        <template #title>
+          <div class="rang-title-wrapper">
+            <div class="rang-title">骞撮緞</div>
+            <div class="rang-value">{{ query.age[0] }} - {{ query.age[1] }} 宀�</div>
+          </div>
+        </template>
+        <nut-range
+          v-model="query.age"
+          range
+          :min="15"
+          :max="65"
+          class="home-query-menu-range"
+        ></nut-range>
+      </QueryMenuItem>
+      <QueryMenuItem title="璧勬牸璇佷功">
         <ProRadio v-model="query.gender" :value-enum="GenderText" show-all-btn></ProRadio>
       </QueryMenuItem>
     </div>
@@ -33,12 +48,14 @@
 
 const query = defineModel<{
   gender: number | string;
+  age: number[];
 }>('query');
 
 const DefaultQuery = {
   ...query.value,
 };
 
+console.log('query: ', query.value);
 function handleReset() {
   for (const key in DefaultQuery) {
     query.value[key] = DefaultQuery[key];
@@ -53,5 +70,22 @@
   max-height: 400px;
   padding: 30px;
   overflow: auto;
+
+  .home-query-menu-range {
+    padding: 36px 0;
+  }
+
+  .rang-title-wrapper {
+    display: flex;
+    align-items: center;
+
+    .rang-title {
+      margin-right: 36px;
+    }
+
+    .rang-value {
+      color: boleGetCssVar('color', 'primary');
+    }
+  }
 }
 </style>
diff --git a/apps/bMiniApp/src/pages/home/index.vue b/apps/bMiniApp/src/pages/home/index.vue
index 637899a..4c9777e 100644
--- a/apps/bMiniApp/src/pages/home/index.vue
+++ b/apps/bMiniApp/src/pages/home/index.vue
@@ -6,20 +6,15 @@
       </div>
     </template>
     <div class="home-header">
-      <!-- <div class="home-searchbar-wrapper">
-        <div class="searchbar-container">
-          <BlSearchbar
-            v-model.trim="searchValue"
-            placeholder="鎼滅储浠诲姟"
-            @search="handleSearch"
-            @change="handleSearch"
-          ></BlSearchbar>
+      <div class="home-searchbar-wrapper">
+        <div class="city-btn-wrapper">
+          <div class="city-btn" @click="goCitySelect">
+            <img :src="IconLocaltion" class="city-btn-icon" />
+            <div class="city-btn-text">{{ locationCity }}</div>
+          </div>
         </div>
-        <div class="city-btn" @click="goCitySelect">
-          <img :src="IconLocaltion" class="city-btn-icon" />
-          <div class="city-btn-text">{{ locationCity }}</div>
-        </div>
-      </div> -->
+        <div class="reset-localtion">閲嶆柊瀹氫綅</div>
+      </div>
       <div class="home-banner-wrapper">
         <nut-swiper :auto-play="3000">
           <nut-swiper-item v-for="(item, index) in list" :key="index">
@@ -63,7 +58,7 @@
       :key="queryState.orderType"
     >
       <template #renderItem="{ item }">
-        <!-- <TaskCard @click="goTaskDetail(item)" /> -->
+        <FlexJobCard @click="goFlexJobDetail(item)" :showFooterLeft="false" />
       </template>
     </InfiniteLoading>
   </PageLayoutWithBg>
@@ -76,7 +71,7 @@
 import Taro from '@tarojs/taro';
 import { LocationUtils, trim } from '@12333/utils';
 import IconLogo from '@/assets/home/icon-logo.png';
-import { ProTabs, ProTabPane } from '@12333/components';
+import { ProTabs, ProTabPane, FlexJobCard } from '@12333/components';
 import { HomeOrderType } from './constants';
 import { useInfiniteLoading } from '@12333/hooks';
 import { OrderInputType, Gender } from '@12333/constants';
@@ -84,7 +79,7 @@
 import _ from 'lodash';
 import HomeQueryMenuView from './HomeQueryMenuView.vue';
 import HomeQueryPositionMenuView from './HomeQueryPositionMenuView.vue';
-import IconLocaltion from '@/assets/task/icon-localtion.png';
+import IconLocaltion from '@/assets/home/icon-localtion.png';
 
 const { locationCity } = useUser();
 
@@ -92,6 +87,7 @@
 
 const queryMenuState = reactive({
   gender: '' as any as Gender,
+  age: [15, 65],
 });
 
 const queryPositionState = reactive({
@@ -148,6 +144,12 @@
 function handleMenuSelectPositionClose() {
   selectPositionItem.value?.toggle?.();
 }
+
+function goFlexJobDetail(item: API.FrontOrderList) {
+  Taro.navigateTo({
+    url: `${RouterPath.flexJobDetail}?id=${item.id}`,
+  });
+}
 </script>
 
 <style lang="scss">
@@ -167,14 +169,40 @@
     margin-left: 24px;
   }
 
-  .city-btn {
+  .home-searchbar-wrapper {
+    padding: 32px 0 28px;
     display: flex;
     align-items: center;
 
-    .city-btn-text {
-      max-width: 200px;
-      @include ellipsis;
-      margin-right: 12px;
+    .city-btn-wrapper {
+      flex: 1;
+      min-width: 0;
+
+      .city-btn {
+        display: flex;
+        align-items: center;
+        padding-right: 36px;
+        color: boleGetCssVar('text-color', 'primary');
+
+        .city-btn-icon {
+          width: 40px;
+          height: 40px;
+        }
+
+        .city-btn-text {
+          max-width: 200px;
+          @include ellipsis;
+          margin-left: 12px;
+          font-size: 30px;
+        }
+      }
+    }
+
+    .reset-localtion {
+      font-weight: 400;
+      font-size: 24px;
+      color: boleGetCssVar('color', 'primary');
+      line-height: 28px;
     }
   }
 
diff --git a/apps/bMiniApp/src/subpackages/flexJob/flexJobDetail/flexJobDetail.config.ts b/apps/bMiniApp/src/subpackages/flexJob/flexJobDetail/flexJobDetail.config.ts
new file mode 100644
index 0000000..305fdb1
--- /dev/null
+++ b/apps/bMiniApp/src/subpackages/flexJob/flexJobDetail/flexJobDetail.config.ts
@@ -0,0 +1,3 @@
+export default definePageConfig({
+  disableScroll: true,
+});
diff --git a/apps/bMiniApp/src/subpackages/flexJob/flexJobDetail/flexJobDetail.vue b/apps/bMiniApp/src/subpackages/flexJob/flexJobDetail/flexJobDetail.vue
new file mode 100644
index 0000000..054ed39
--- /dev/null
+++ b/apps/bMiniApp/src/subpackages/flexJob/flexJobDetail/flexJobDetail.vue
@@ -0,0 +1,114 @@
+<template>
+  <PageLayoutWithBg class="flexJobDetail-page-wrapper" title="鐏靛伐璇︽儏" :need-auth="false">
+    <LoadingLayout :loading="isLoading" :error="isError" :loadError="refetch">
+      <ContentScrollView style="background-color: transparent">
+        <FlexJobTopView size="small" class="flexJobDetail-top" />
+        <div class="flexJobDetail-contact-info">
+          <div class="flexJobDetail-contact-info-item">
+            <div class="flexJobDetail-contact-info-item-label">鎵嬫満鍙凤細</div>
+            <div class="flexJobDetail-contact-info-item-text">
+              {{ isCollapse ? '13333333333' : '绔嬪嵆鑱旂郴鍚庡彲鏌ョ湅' }}
+            </div>
+          </div>
+          <div class="flexJobDetail-contact-info-item">
+            <div class="flexJobDetail-contact-info-item-label">韬唤璇佸彿锛�</div>
+            <div class="flexJobDetail-contact-info-item-text">
+              {{ isCollapse ? '330902199909******' : '绔嬪嵆鑱旂郴鍚庡彲鏌ョ湅' }}
+            </div>
+          </div>
+        </div>
+      </ContentScrollView>
+      <PageFooter>
+        <PageFooterAction
+          :icon="IconShare"
+          text="鍒嗕韩"
+          :isFlex="false"
+          openType="share"
+        ></PageFooterAction>
+        <PageFooterAction
+          :icon="IconAttentionActive"
+          text="鏀惰棌"
+          :isFlex="false"
+        ></PageFooterAction>
+        <PageFooterBtn type="primary" @click="toggle">绔嬪嵆鑱旂郴</PageFooterBtn>
+      </PageFooter>
+    </LoadingLayout>
+  </PageLayoutWithBg>
+</template>
+
+<script setup lang="ts">
+import Taro from '@tarojs/taro';
+import { useQuery } from '@tanstack/vue-query';
+import * as orderServices from '@12333/services/api/Order';
+import { FlexJobTopView } from '@12333/components';
+import IconShare from '@/assets/flexJob/icon-share.png';
+import IconAttention from '@/assets/flexJob/icon-attention-lg.png';
+import IconAttentionActive from '@/assets/flexJob/icon-attention-lg-active.png';
+import { useToggle } from 'senin-mini/hooks';
+
+defineOptions({
+  name: 'flexJobDetail',
+});
+
+const router = Taro.useRouter();
+const taskId = router.params?.id ?? '';
+
+const {
+  isLoading,
+  isError,
+  data: detail,
+  refetch,
+} = useQuery({
+  queryKey: ['orderServices/getOrdeForDetail', taskId],
+  queryFn: async () => {
+    return await orderServices.getOrdeForDetail(
+      { id: taskId },
+      {
+        showLoading: false,
+      }
+    );
+  },
+  placeholderData: () => ({} as API.OrderInfoDto),
+});
+
+const { isCollapse, toggle } = useToggle();
+</script>
+
+<style lang="scss">
+@import '@/styles/common.scss';
+
+.flexJobDetail-page-wrapper {
+  .flexJobDetail-top {
+    margin-bottom: 20px;
+  }
+
+  .flexJobDetail-contact-info {
+    padding-left: 130px;
+
+    .flexJobDetail-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;
+      }
+
+      .flexJobDetail-contact-info-item-label {
+        color: boleGetCssVar('text-color', 'secondary');
+        margin-right: 8px;
+      }
+
+      .flexJobDetail-contact-info-item-text {
+        color: boleGetCssVar('text-color', 'primary');
+        flex: 1;
+        min-width: 0;
+        @include ellipsis;
+      }
+    }
+  }
+}
+</style>
diff --git a/apps/cMiniApp/project.private.config.json b/apps/cMiniApp/project.private.config.json
index 53ae87f..73439be 100644
--- a/apps/cMiniApp/project.private.config.json
+++ b/apps/cMiniApp/project.private.config.json
@@ -9,6 +9,13 @@
         "miniprogram": {
             "list": [
                 {
+                    "name": "鍩庡競閫夋嫨",
+                    "pathName": "subpackages/city/citySelect/citySelect",
+                    "query": "",
+                    "launchMode": "default",
+                    "scene": null
+                },
+                {
                     "name": "鏈熸湜宀椾綅",
                     "pathName": "subpackages/curriculum/expectPosition/expectPosition",
                     "query": "",
diff --git a/packages/components/src/Card/FlexJobCard.vue b/packages/components/src/Card/FlexJobCard.vue
index 6218572..ed27a18 100644
--- a/packages/components/src/Card/FlexJobCard.vue
+++ b/packages/components/src/Card/FlexJobCard.vue
@@ -1,19 +1,6 @@
 <template>
   <div class="flexJob-card-wrapper">
-    <div class="flexJob-card-top-wrapper">
-      <UserAvatar :size="60" class="flexJob-card-top-avatar" />
-      <div class="flexJob-card-top-info">
-        <div class="flexJob-card-top-info-item">
-          <div class="flexJob-card-top-info-name">{{ '娲嬫磱' }}</div>
-          <div class="flexJob-card-top-info-gender">
-            <img v-if="1" :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">{{ '宸插疄鍚�' }}</div>
-        </div>
-        <div class="flexJob-card-top-info-detail">{{ '26宀� | 闈炲鐢� | 鏈 | 涓婂矖121娆�' }}</div>
-      </div>
-    </div>
+    <FlexJobTopView />
     <div class="flexJob-card-done-list">
       {{
         '鍋氳繃锛氬鎴挎湇鍔″憳銆佸鎴挎湇鍔″憳銆佸鎴垮鎴挎湇鍔″憳銆佸鎴垮仛杩囷細瀹㈡埧鏈嶅姟鍛樸�佸鎴挎湇鍔″憳銆佸鎴垮鎴挎湇鍔″憳銆佸鎴�'
@@ -26,11 +13,14 @@
       <div class="flexJob-card-done-detail-item">{{ '鍦ㄣ�屽畞娉㈤浄杩.閰掑簵銆嶏紝鍋氳繃瀹㈡埧鏈嶅姟鍛�' }}</div>
     </div>
     <div class="flexJob-card-footer">
-      <div class="flexJob-card-footer-left" v-if="showFooterLeft">
-        <slot name="footerLeft">
-          <div class="flexJob-card-footer-text">鍙栨秷鏀惰棌</div>
-        </slot>
+      <div class="flexJob-card-footer-left-wrapper">
+        <div class="flexJob-card-footer-left" v-if="showFooterLeft">
+          <slot name="footerLeft">
+            <div class="flexJob-card-footer-text">鍙栨秷鏀惰棌</div>
+          </slot>
+        </div>
       </div>
+
       <div class="flexJob-card-footer-right" v-if="showFooterRight">
         <slot name="footerRight">
           <nut-button type="primary">绔嬪嵆鑱旂郴</nut-button>
@@ -44,6 +34,7 @@
 import IconMale from '@/assets/mine/icon-male.png';
 import IconFemale from '@/assets/mine/icon-female.png';
 import { CommonTaskCardProps } from './card';
+import FlexJobTopView from './FlexJobTopView.vue';
 
 defineOptions({
   name: 'FlexJobCard',
@@ -74,55 +65,7 @@
   }
 
   .flexJob-card-top-wrapper {
-    display: flex;
-    align-items: center;
     margin-bottom: 38px;
-
-    .flexJob-card-top-avatar {
-      margin-right: 30px;
-    }
-
-    .flexJob-card-top-info {
-      display: flex;
-      flex-direction: column;
-
-      .flexJob-card-top-info-item {
-        display: flex;
-        align-items: center;
-
-        .flexJob-card-top-info-name {
-          font-size: 34px;
-          line-height: 34px;
-          font-weight: bold;
-          color: boleGetCssVar('text-color', 'primary');
-        }
-
-        .flexJob-card-top-info-gender {
-          display: inline-flex;
-          align-items: center;
-          height: 34px;
-          margin: 0 10px;
-
-          .flexJob-card-top-info-gender-icon {
-            width: 24px;
-            height: 24px;
-          }
-        }
-
-        .flexJob-card-top-info-auth {
-          font-size: 28px;
-          line-height: 34px;
-        }
-      }
-
-      .flexJob-card-top-info-detail {
-        font-size: 24px;
-        font-weight: 400;
-        line-height: 28px;
-        margin-top: 12px;
-        color: boleGetCssVar('text-color', 'secondary');
-      }
-    }
   }
 
   .flexJob-card-done-list {
@@ -153,11 +96,15 @@
   .flexJob-card-footer {
     display: flex;
     align-items: center;
-    justify-content: space-between;
     border-top: #d9d9d9 1px solid;
     padding-top: 24px;
     margin-top: 18px;
 
+    .flexJob-card-footer-left-wrapper {
+      flex: 1;
+      min-width: 0;
+    }
+
     .flexJob-card-footer-left {
       .flexJob-card-footer-text {
         font-size: 24px;
diff --git a/packages/components/src/Card/FlexJobTopView.vue b/packages/components/src/Card/FlexJobTopView.vue
new file mode 100644
index 0000000..4f938b6
--- /dev/null
+++ b/packages/components/src/Card/FlexJobTopView.vue
@@ -0,0 +1,88 @@
+<template>
+  <div :class="['flexJob-card-top-wrapper', size]">
+    <UserAvatar :size="size === 'small' ? 50 : 60" class="flexJob-card-top-avatar" />
+    <div class="flexJob-card-top-info">
+      <div class="flexJob-card-top-info-item">
+        <div class="flexJob-card-top-info-name">{{ '娲嬫磱' }}</div>
+        <div class="flexJob-card-top-info-gender">
+          <img v-if="1" :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">{{ '宸插疄鍚�' }}</div>
+      </div>
+      <div class="flexJob-card-top-info-detail">{{ '26宀� | 闈炲鐢� | 鏈 | 涓婂矖121娆�' }}</div>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import IconMale from '@/assets/mine/icon-male.png';
+import IconFemale from '@/assets/mine/icon-female.png';
+
+defineOptions({
+  name: 'FlexJobTopView',
+});
+
+type Props = {
+  size?: 'normal' | 'small';
+};
+
+const props = withDefaults(defineProps<Props>(), {
+  size: 'normal',
+});
+</script>
+
+<style lang="scss">
+@import '@/styles/common.scss';
+
+.flexJob-card-top-wrapper {
+  display: flex;
+  align-items: center;
+
+  .flexJob-card-top-avatar {
+    margin-right: 30px;
+  }
+
+  .flexJob-card-top-info {
+    display: flex;
+    flex-direction: column;
+
+    .flexJob-card-top-info-item {
+      display: flex;
+      align-items: center;
+
+      .flexJob-card-top-info-name {
+        font-size: 34px;
+        line-height: 34px;
+        font-weight: bold;
+        color: boleGetCssVar('text-color', 'primary');
+      }
+
+      .flexJob-card-top-info-gender {
+        display: inline-flex;
+        align-items: center;
+        height: 34px;
+        margin: 0 10px;
+
+        .flexJob-card-top-info-gender-icon {
+          width: 24px;
+          height: 24px;
+        }
+      }
+
+      .flexJob-card-top-info-auth {
+        font-size: 28px;
+        line-height: 34px;
+      }
+    }
+
+    .flexJob-card-top-info-detail {
+      font-size: 24px;
+      font-weight: 400;
+      line-height: 28px;
+      margin-top: 12px;
+      color: boleGetCssVar('text-color', 'secondary');
+    }
+  }
+}
+</style>
diff --git a/packages/components/src/Menu/QueryMenuItem.vue b/packages/components/src/Menu/QueryMenuItem.vue
index 62ed33f..1a85e2e 100644
--- a/packages/components/src/Menu/QueryMenuItem.vue
+++ b/packages/components/src/Menu/QueryMenuItem.vue
@@ -1,7 +1,9 @@
 <template>
   <div class="query-menu-item">
     <div class="query-menu-item-title">
-      {{ title }}
+      <slot name="title">
+        {{ title }}
+      </slot>
     </div>
     <slot></slot>
   </div>
diff --git a/packages/components/src/index.ts b/packages/components/src/index.ts
index 5db4afc..fb30494 100644
--- a/packages/components/src/index.ts
+++ b/packages/components/src/index.ts
@@ -23,6 +23,7 @@
 export { default as MyTaskCard } from './Card/MyTaskCard.vue';
 export { default as FlexJobCard } from './Card/FlexJobCard.vue';
 export { default as TaskPrice } from './Card/TaskPrice.vue';
+export { default as FlexJobTopView } from './Card/FlexJobTopView.vue';
 export { default as QueryMenuView } from './Menu/QueryMenuView.vue';
 export { default as QueryMenuItem } from './Menu/QueryMenuItem.vue';
 export { default as ProRadio } from './Form/ProRadio.vue';
diff --git a/patches/@nutui__nutui-taro@4.3.13.patch b/patches/@nutui__nutui-taro@4.3.13.patch
index 04c7fa9..eba5d18 100644
--- a/patches/@nutui__nutui-taro@4.3.13.patch
+++ b/patches/@nutui__nutui-taro@4.3.13.patch
@@ -35,6 +35,18 @@
        };
      });
      const styles = computed(() => {
+diff --git a/dist/packages/range/Range.js b/dist/packages/range/Range.js
+index 688b67464e4d05dc37996941d941033cea83ee2c..626db4d9889059aa08e1fd675e2333539efc766e 100644
+--- a/dist/packages/range/Range.js
++++ b/dist/packages/range/Range.js
+@@ -288,6 +288,7 @@ const _sfc_main = create({
+       if (disabled.value) {
+         return;
+       }
++      init();
+       touch.start(event);
+       currentValue = props.modelValue;
+       if (isRange(currentValue)) {
 diff --git a/dist/packages/toast/Toast.js b/dist/packages/toast/Toast.js
 index d9084afa94d8bc892f64cfca10eb098d2be4bcb0..ca2309339c0d8b2fca248081783c88c9fb57d2a2 100644
 --- a/dist/packages/toast/Toast.js
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 81c0096..c9d1ace 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -5,7 +5,7 @@
 
 patchedDependencies:
   '@nutui/nutui-taro@4.3.13':
-    hash: jq3denbtva5gwaaxiatjgbkrsm
+    hash: lbmiuhnkw3qnhgejnhbuepf6iq
     path: patches/@nutui__nutui-taro@4.3.13.patch
 
 importers:
@@ -150,7 +150,7 @@
         version: 0.0.9
       '@nutui/nutui-taro':
         specifier: ^4.3.13
-        version: 4.3.13(patch_hash=jq3denbtva5gwaaxiatjgbkrsm)(unplugin-vue-components@0.27.4)(vue@3.5.12)
+        version: 4.3.13(patch_hash=lbmiuhnkw3qnhgejnhbuepf6iq)(unplugin-vue-components@0.27.4)(vue@3.5.12)
       '@tanstack/vue-query':
         specifier: ^4.35.3
         version: 4.35.3(@vue/composition-api@1.7.2)(vue@3.5.12)
@@ -412,7 +412,7 @@
         version: 0.0.9
       '@nutui/nutui-taro':
         specifier: ^4.3.13
-        version: 4.3.13(patch_hash=jq3denbtva5gwaaxiatjgbkrsm)(unplugin-vue-components@0.27.4)(vue@3.5.12)
+        version: 4.3.13(patch_hash=lbmiuhnkw3qnhgejnhbuepf6iq)(unplugin-vue-components@0.27.4)(vue@3.5.12)
       '@tanstack/vue-query':
         specifier: ^4.35.3
         version: 4.35.3(@vue/composition-api@1.7.2)(vue@3.5.12)
@@ -1033,10 +1033,6 @@
     engines: {node: '>=6.9.0'}
     dependencies:
       '@babel/types': 7.25.6
-
-  /@babel/helper-plugin-utils@7.24.8:
-    resolution: {integrity: sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==}
-    engines: {node: '>=6.9.0'}
 
   /@babel/helper-plugin-utils@7.26.5:
     resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==}
@@ -2110,7 +2106,7 @@
       '@babel/core': ^7.0.0-0
     dependencies:
       '@babel/core': 7.25.2
-      '@babel/helper-plugin-utils': 7.24.8
+      '@babel/helper-plugin-utils': 7.26.5
 
   /@babel/plugin-syntax-jsx@7.24.7(@babel/core@7.8.0):
     resolution: {integrity: sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==}
@@ -6207,7 +6203,7 @@
     resolution: {integrity: sha512-10VYAtFC+o1X0anGs+y2PgF1NWMeLFz2JVMRw4BWLg6wbtVbYy9wukLxyGhZC6Yf6t39DcwaGVda8paV7K6/Ew==}
     dev: false
 
-  /@nutui/nutui-taro@4.3.13(patch_hash=jq3denbtva5gwaaxiatjgbkrsm)(unplugin-vue-components@0.27.4)(vue@3.5.12):
+  /@nutui/nutui-taro@4.3.13(patch_hash=lbmiuhnkw3qnhgejnhbuepf6iq)(unplugin-vue-components@0.27.4)(vue@3.5.12):
     resolution: {integrity: sha512-+n8vVZAu92MUX6VEf6gO73Iz3JThjksdb6aSarvciCSydlWWdlQqZwYIGMTG4zOwDfCoQ3HfLa36zVaIJLSn3g==}
     peerDependencies:
       unplugin-vue-components: '>=0.25.1'
@@ -19571,7 +19567,7 @@
       vue: '*'
     dependencies:
       '@nutui/icons-vue-taro': 0.0.9
-      '@nutui/nutui-taro': 4.3.13(patch_hash=jq3denbtva5gwaaxiatjgbkrsm)(unplugin-vue-components@0.27.4)(vue@3.5.12)
+      '@nutui/nutui-taro': 4.3.13(patch_hash=lbmiuhnkw3qnhgejnhbuepf6iq)(unplugin-vue-components@0.27.4)(vue@3.5.12)
       '@tanstack/vue-query': 4.35.3(@vue/composition-api@1.7.2)(vue@3.5.12)
       '@tarojs/components': 3.6.20(postcss@8.4.19)(react@19.0.0)(vue@3.5.12)
       '@tarojs/taro': 3.6.20(postcss@8.4.19)(vue@3.5.12)
@@ -21517,7 +21513,7 @@
     peerDependencies:
       eslint: '>=6.0.0'
     dependencies:
-      debug: 4.3.7
+      debug: 4.4.0
       eslint: 8.23.1
       eslint-scope: 7.2.2
       eslint-visitor-keys: 3.4.3

--
Gitblit v1.9.1