李富豪 vor 8 Monaten
Ursprung
Commit
8fa1e34373

+ 21 - 21
package.json

@@ -13,36 +13,36 @@
     "build:mp-weixin": "uni build -p mp-weixin"
   },
   "dependencies": {
-    "@dcloudio/uni-app": "3.0.0-4040520250104002",
-    "@dcloudio/uni-app-harmony": "3.0.0-4040520250104002",
-    "@dcloudio/uni-app-plus": "3.0.0-4040520250104002",
-    "@dcloudio/uni-components": "3.0.0-4040520250104002",
-    "@dcloudio/uni-h5": "3.0.0-4040520250104002",
-    "@dcloudio/uni-mp-alipay": "3.0.0-4040520250104002",
-    "@dcloudio/uni-mp-baidu": "3.0.0-4040520250104002",
-    "@dcloudio/uni-mp-jd": "3.0.0-4040520250104002",
-    "@dcloudio/uni-mp-kuaishou": "3.0.0-4040520250104002",
-    "@dcloudio/uni-mp-lark": "3.0.0-4040520250104002",
-    "@dcloudio/uni-mp-qq": "3.0.0-4040520250104002",
-    "@dcloudio/uni-mp-toutiao": "3.0.0-4040520250104002",
-    "@dcloudio/uni-mp-weixin": "3.0.0-4040520250104002",
-    "@dcloudio/uni-mp-xhs": "3.0.0-4040520250104002",
-    "@dcloudio/uni-quickapp-webview": "3.0.0-4040520250104002",
+    "@dcloudio/uni-app": "3.0.0-4050720250324001",
+    "@dcloudio/uni-app-harmony": "3.0.0-4050720250324001",
+    "@dcloudio/uni-app-plus": "3.0.0-4050720250324001",
+    "@dcloudio/uni-components": "3.0.0-4050720250324001",
+    "@dcloudio/uni-h5": "3.0.0-4050720250324001",
+    "@dcloudio/uni-mp-alipay": "3.0.0-4050720250324001",
+    "@dcloudio/uni-mp-baidu": "3.0.0-4050720250324001",
+    "@dcloudio/uni-mp-jd": "3.0.0-4050720250324001",
+    "@dcloudio/uni-mp-kuaishou": "3.0.0-4050720250324001",
+    "@dcloudio/uni-mp-lark": "3.0.0-4050720250324001",
+    "@dcloudio/uni-mp-qq": "3.0.0-4050720250324001",
+    "@dcloudio/uni-mp-toutiao": "3.0.0-4050720250324001",
+    "@dcloudio/uni-mp-weixin": "3.0.0-4050720250324001",
+    "@dcloudio/uni-mp-xhs": "3.0.0-4050720250324001",
+    "@dcloudio/uni-quickapp-webview": "3.0.0-4050720250324001",
     "dayjs": "^1.11.0",
     "vue": "^3.5.0",
-    "wot-design-uni": "^1.6.0"
+    "wot-design-uni": "^1.8.0"
   },
   "devDependencies": {
     "@dcloudio/types": "^3.4.0",
-    "@dcloudio/uni-automator": "3.0.0-4040520250104002",
-    "@dcloudio/uni-cli-shared": "3.0.0-4040520250104002",
-    "@dcloudio/uni-stacktracey": "3.0.0-4040520250104002",
-    "@dcloudio/vite-plugin-uni": "3.0.0-4040520250104002",
+    "@dcloudio/uni-automator": "3.0.0-4050720250324001",
+    "@dcloudio/uni-cli-shared": "3.0.0-4050720250324001",
+    "@dcloudio/uni-stacktracey": "3.0.0-4050720250324001",
+    "@dcloudio/vite-plugin-uni": "3.0.0-4050720250324001",
     "@types/node": "^22.0.0",
     "@uni-helper/vite-plugin-uni-components": "^0.2.0",
     "@vue/runtime-core": "^3.5.0",
     "sass": "1.77.0",
-    "typescript": "^5.7.0",
+    "typescript": "^5.8.0",
     "vite": "5.4.0"
   }
 }

+ 37 - 30
src/apis/index.ts

@@ -6,18 +6,17 @@ export type LoginApiParams = {
   password: string,
 };
 
-export type FetchHouseListApiParams = {
-  pageNum: number,
-  pageSize: number,
-};
-
-export type FetchRegionListApiParams = {
-  dictType: string,
+export type FetchRoomDetailApiParams = {
+  positionId: string,
+  communityId: string,
+  roomId: string
 };
 
 export type FetchFacilityListApiParams = Partial<{
-  facilitiesTitle: string,
-  dictType: string,
+  positionId: string,
+  communityId: string,
+  roomId: string,
+  regionId: string,
   pageNum: number,
   pageSize: number,
 }>;
@@ -25,12 +24,13 @@ export type FetchFacilityListApiParams = Partial<{
 // Api函数类型
 export type LoginApi = (data: LoginApiParams) => Promise<any>;
 export type LogoutApi = () => Promise<any>;
-export type FetchBannerListApi = () => Promise<any>;
-export type FetchHouseListApi = (data: FetchHouseListApiParams) => Promise<any>;
-export type FetchHouseDetailApi = (id: string) => Promise<any>;
-export type FetchRegionListApi = (data: FetchRegionListApiParams) => Promise<any>;
+export type FetchBannerListApi = (positionId: string) => Promise<any>;
+export type FetchProductPositionListApi = () => Promise<any>;
+export type FetchRoomInfoApi = (positionId: string) => Promise<any>;
+export type FetchRoomDetailApi = (data: FetchRoomDetailApiParams) => Promise<any>;
+export type FetchFacilitySearchListApi = () => Promise<any>;
 export type FetchFacilityListApi = (data: FetchFacilityListApiParams) => Promise<any>;
-export type FetchFacilityDetailApi = (id: string) => Promise<any>;
+export type FetchFacilityDetailApi = (facilitiesId: string) => Promise<any>;
 
 // 登录
 const loginApi: LoginApi = async (data) => {
@@ -43,42 +43,49 @@ const logoutApi: LogoutApi = async () => {
 };
 
 // 获取轮播图列表
-const fetchBannerListApi: FetchBannerListApi = async () => {
-  return api.get('/system/img/wximg');
+const fetchBannerListApi: FetchBannerListApi = async (positionId) => {
+  return api.get(`/system/img/wximg/${positionId}`);
+};
+
+// 获取产品定位列表
+const fetchProductPositionListApi: FetchProductPositionListApi = async () => {
+  return api.get('/system/position/group');
 };
 
-// 获取房型列表
-const fetchHouseListApi: FetchHouseListApi = async (data) => {
-  return api.get('/system/room/wxlist', data);
+// 获取房型信息
+const fetchRoomInfoApi: FetchRoomInfoApi = async (positionId) => {
+  return api.get(`/system/position/room/${positionId}`);
 };
 
 // 获取房型详情
-const fetchHouseDetailApi: FetchHouseDetailApi = async (id) => {
-  return api.get(`/system/room/${id}`);
+const fetchRoomDetailApi: FetchRoomDetailApi = async (data) => {
+  const { positionId, communityId, roomId } = data;
+  return api.get(`/system/position/room/detail/${positionId}/${communityId}/${roomId}`);
 };
 
-// 获取区域列表
-const fetchRegionListApi: FetchRegionListApi = async (data) => {
-  return api.get('/system/dict/data/list', data);
+// 获取设施检索列表
+const fetchFacilitySearchListApi: FetchFacilitySearchListApi = async () => {
+  return api.get('/system/position/ficationBtn');
 };
 
 // 获取设施列表
 const fetchFacilityListApi: FetchFacilityListApi = async (data) => {
-  return api.get('/system/facilities/list', data);
+  return api.post('/system/facilities/facPage', data);
 };
 
 // 获取设施详情
-const fetchFacilityDetailApi: FetchFacilityDetailApi = async (id) => {
-  return api.get(`/system/facilities/${id}`);
+const fetchFacilityDetailApi: FetchFacilityDetailApi = async (facilitiesId) => {
+  return api.get(`/system/facilities/${facilitiesId}`);
 };
 
 export const apis = {
   login: loginApi,
   logout: logoutApi,
   fetchBannerList: fetchBannerListApi,
-  fetchHouseList: fetchHouseListApi,
-  fetchHouseDetail: fetchHouseDetailApi,
-  fetchRegionList: fetchRegionListApi,
+  fetchProductPositionList: fetchProductPositionListApi,
+  fetchRoomInfo: fetchRoomInfoApi,
+  fetchRoomDetail: fetchRoomDetailApi,
+  fetchFacilitySearchList: fetchFacilitySearchListApi,
   fetchFacilityList: fetchFacilityListApi,
   fetchFacilityDetail: fetchFacilityDetailApi,
 };

+ 13 - 1
src/pages.json

@@ -13,7 +13,7 @@
 			}
 		},
 		{
-			"path": "pages/home/houseDetail/index",
+			"path": "pages/home/roomDetail/index",
 			"style": {
 				"navigationBarTitleText": "房型详情"
 			}
@@ -30,6 +30,12 @@
 				"navigationBarTitleText": "设施详情"
 			}
 		},
+		{
+			"path": "pages/standard/index/index",
+			"style": {
+				"navigationBarTitleText": "规范标准"
+			}
+		},
 		{
 			"path": "pages/mine/index/index",
 			"style": {
@@ -61,6 +67,12 @@
 				"iconPath": "static/tabbar/facility.png",
 				"selectedIconPath": "static/tabbar/facility_selected.png"
 			},
+			{
+				"pagePath": "pages/standard/index/index",
+				"text": "规范标准",
+				"iconPath": "static/tabbar/facility.png",
+				"selectedIconPath": "static/tabbar/facility_selected.png"
+			},
 			{
 				"pagePath": "pages/mine/index/index",
 				"text": "我的",

+ 5 - 5
src/pages/facility/facilityDetail/index.vue

@@ -19,7 +19,7 @@ import { onLoad } from '@dcloudio/uni-app';
 import { apis } from '@/apis';
 
 interface State {
-  id: string,
+  facilitiesId: string,
   photoList: string[],
   info: {
     title: string,// 标题
@@ -28,7 +28,7 @@ interface State {
 };
 
 const state = reactive<State>({
-  id: '',
+  facilitiesId: '',
   photoList: [],
   info: {
     title: '',
@@ -40,7 +40,7 @@ const api = {
   // 获取设施详情
   fetchFacilityDetail: async () => {
     try {
-      const res = await apis.fetchFacilityDetail(state.id);
+      const res = await apis.fetchFacilityDetail(state.facilitiesId);
       const data = res.data;
       const photoList = data.sysimg.map((item: any) => item.url);
       state.photoList = photoList;
@@ -69,8 +69,8 @@ const init = async () => {
 };
 
 onLoad((options) => {
-  const data = options as { id: string };
-  state.id = data.id;
+  const data = options as { facilitiesId: string };
+  state.facilitiesId = data.facilitiesId;
   init();
 });
 

+ 125 - 61
src/pages/facility/index/index.vue

@@ -2,23 +2,13 @@
   <view class="facility">
     <wd-sticky :z-index="10">
       <view class="facility-top">
-        <wd-search :placeholder-left="true" placeholder="请输入内容" v-model="state.text">
-          <template #suffix>
-            <view style="display: flex;align-items: center;margin: 0 20rpx;">
-              <wd-button size="small" @click="onClickSearch">
-                搜索
-              </wd-button>
-            </view>
-          </template>
-        </wd-search>
-        <wd-tabs slidable="always" v-model="state.tabValue" @change="onChangeTabs">
-          <wd-tab v-for="(item, index) in state.tabList" :title="item.label" :name="item.value" :key="index" />
-        </wd-tabs>
+        <wd-picker placeholder="请选择分类" :columns="state.columns" v-model="state.pickerValue"
+          :columnChange="onChangeClassify" @confirm="onClickConfirm" @clear="onClickClear" :clearable="true" />
       </view>
     </wd-sticky>
     <view class="facility-list">
       <view class="facility-list-item" v-for="(item, index) in state.list" :key="index"
-        @click="onClickNavigate(item.id)">
+        @click="onClickNavigate(item.facilitiesId)">
         <view class="facility-list-item-sign">
           {{ item.sign }}
         </view>
@@ -42,14 +32,27 @@ import { onShow, onReachBottom } from '@dcloudio/uni-app';
 import { apis } from '@/apis';
 
 interface State {
-  text?: string,
-  tabList: {
-    label: string,
-    value: string,
+  facilitySearchList: {
+    positionId: string,
+    positionName: string,
+    communityId: string,
+    roomId: string,
+    regionList: {
+      regionId: string,
+      regionName: string,
+      positionId: string,
+    }[],
   }[],
-  tabValue?: string,
+  columns: any[],
+  pickerValue: string[],
+  query: Partial<{
+    positionId: string,
+    communityId: string,
+    roomId: string,
+    regionId: string,
+  }>,
   list: {
-    id: string,
+    facilitiesId: string,
     url: string,
     sign: string,
     title: string,
@@ -63,9 +66,15 @@ interface State {
 };
 
 const state = reactive<State>({
-  text: undefined,
-  tabList: [],
-  tabValue: undefined,
+  facilitySearchList: [],
+  columns: [],
+  pickerValue: [],
+  query: {
+    positionId: undefined,
+    communityId: undefined,
+    roomId: undefined,
+    regionId: undefined,
+  },
   list: [],
   page: {
     pageNumber: 1,
@@ -75,21 +84,45 @@ const state = reactive<State>({
 });
 
 const api = {
-  // 获取区域列表
-  fetchRegionList: async () => {
+  // 获取设施检索列表
+  fetchFacilitySearchList: async () => {
     try {
-      const data = {
-        dictType: 'region_type',
-      };
-      const res = await apis.fetchRegionList(data);
-      const list = res.rows.map((item: any) => {
+      const res = await apis.fetchFacilitySearchList();
+      state.facilitySearchList = res.data.filter((item: any) => item.regionList);
+
+      const positionList = state.facilitySearchList.map(item => {
         return {
-          label: item.dictLabel,
-          value: item.dictValue,
+          label: item.positionName,
+          value: item.positionId,
+          communityId: item.communityId,
+          roomId: item.roomId,
+          regionList: item.regionList,
+        };
+      })
+
+      let regionList: { label: string, value: string }[] = [];
+
+      if (state.pickerValue) {
+        const positionId = state.pickerValue[0];
+        const item = positionList.find(item => item.value === positionId);
+        if (item) {
+          regionList = item.regionList.map(item => {
+            return {
+              label: item.regionName,
+              value: item.regionId,
+            };
+          });
         }
-      });
-      state.tabList = list;
-      state.tabValue = list.length ? list[0].value : undefined;
+      } else {
+        regionList = positionList[0].regionList.map(item => {
+          return {
+            label: item.regionName,
+            value: item.regionId,
+          };
+        });
+      }
+
+      state.columns = [positionList, regionList];
     } catch (error: any) {
       console.error(error);
     }
@@ -101,16 +134,15 @@ const api = {
     });
     try {
       const data = {
-        facilitiesTitle: state.text,
-        dictType: state.tabValue,
+        ...state.query,
         pageNum: state.page.pageNumber,
         pageSize: state.page.pageSize,
       };
       const res = await apis.fetchFacilityList(data);
       const list = res.rows.map((item: any) => {
         return {
-          id: item.facilitiesId,
-          url: item.sysimg[0].url,
+          facilitiesId: item.facilitiesId,
+          url: item.sysimg ? item.sysimg[0].url : '',
           sign: item.facilitiesName,
           title: item.facilitiesTitle,
           description: item.facilitiesDesc,
@@ -130,39 +162,50 @@ const api = {
 }
 
 const init = async () => {
-  // 获取区域列表
-  await api.fetchRegionList();
+  // 获取设施检索列表
+  await api.fetchFacilitySearchList();
   // 获取设施列表
   await api.fetchFacilityList();
 };
 
 onShow(() => {
+  const roomInfo = uni.getStorageSync('roomInfo');
+  if (roomInfo) {
+    state.pickerValue = [roomInfo.positionId, roomInfo.regionId];
+    state.query = roomInfo;
+  }
   state.page = {
     ...state.page,
     pageNumber: 1,
   };
+  uni.removeStorageSync('roomInfo');
   init();
 });
 
-// 更改分
-const onChangePagination = async () => {
-  const { pageNumber, pageSize, total } = state.page;
-  if (total > pageNumber * pageSize) {
-    state.page = {
-      ...state.page,
-      pageNumber: pageNumber + 1,
-    }
-    // 获取设施列表
-    await api.fetchFacilityList(true);
+// 更改分
+const onChangeClassify = (pickerView: any, value: any, columnIndex: number, resolve: Function) => {
+  if (columnIndex === 0) {// 修改定位时-更新区域
+    const regionList = value[columnIndex].regionList.map((item: any) => {
+      return {
+        label: item.regionName,
+        value: item.regionId,
+      };
+    })
+    pickerView.setColumnData(1, regionList);
   }
+  resolve();
 }
 
-onReachBottom(() => {
-  onChangePagination();
-});
-
-// 点击搜索
-const onClickSearch = async () => {
+const onClickConfirm = async (value: any) => {
+  const list = value.selectedItems;
+  const { value: positionId, communityId, roomId } = list[0];
+  const { value: regionId } = list[1];
+  state.query = {
+    positionId: positionId,
+    communityId: communityId,
+    roomId: roomId,
+    regionId: regionId,
+  }
   state.page = {
     ...state.page,
     pageNumber: 1,
@@ -171,9 +214,13 @@ const onClickSearch = async () => {
   await api.fetchFacilityList();
 }
 
-// 更改标签页
-const onChangeTabs = async ({ name }: { name: string }) => {
-  state.tabValue = name;
+const onClickClear = async () => {
+  state.query = {
+    positionId: undefined,
+    communityId: undefined,
+    roomId: undefined,
+    regionId: undefined,
+  }
   state.page = {
     ...state.page,
     pageNumber: 1,
@@ -182,10 +229,27 @@ const onChangeTabs = async ({ name }: { name: string }) => {
   await api.fetchFacilityList();
 }
 
+// 更改分页
+const onChangePagination = async () => {
+  const { pageNumber, pageSize, total } = state.page;
+  if (total > pageNumber * pageSize) {
+    state.page = {
+      ...state.page,
+      pageNumber: pageNumber + 1,
+    }
+    // 获取设施列表
+    await api.fetchFacilityList(true);
+  }
+}
+
+onReachBottom(() => {
+  onChangePagination();
+});
+
 // 点击跳转
-const onClickNavigate = (id: string) => {
+const onClickNavigate = (facilitiesId: string) => {
   uni.navigateTo({
-    url: `/pages/facility/facilityDetail/index?id=${id}`,
+    url: `/pages/facility/facilityDetail/index?facilitiesId=${facilitiesId}`,
   });
 }
 </script>

+ 140 - 155
src/pages/home/index/index.vue

@@ -2,45 +2,39 @@
   <view class="home">
     <view>
       <wd-drop-menu>
-        <wd-drop-menu-item :options="state.addressList" v-model="state.address" />
+        <wd-drop-menu-item :options="state.productPositionList" v-model="state.positionId" />
       </wd-drop-menu>
     </view>
     <view>
       <wd-swiper :autoplay="true" :list="state.swiperList" />
     </view>
-    <view class="home-menu">
-      <view class="home-menu-item" v-for="(item, index) in menuList" :key="index">
-        <wd-img width="60rpx" height="60rpx" :src="item.icon" />
-        <view class="home-menu-item-right">
-          <view style="font-weight: 400;">
-            {{ item.title }}
+    <view class="home-room">
+      <view class="home-room-item" v-for="(item, index) in state.roomList" :key="index"
+        @click="onClickNavigate(item.communityId, item.roomId)">
+        <wd-img width="60rpx" height="60rpx" :src="item.url" />
+        <view class="home-room-item-right">
+          <view class="home-room-item-right-title">
+            {{ item.roomTitle }}
           </view>
-          <view style="font-size: 24rpx;margin-top: 10rpx;">
-            {{ item.text }}
+          <view class="home-room-item-right-text">
+            {{ item.roomDesc }}
           </view>
         </view>
       </view>
     </view>
-    <view class="home-house">
-      <view class="home-house-title">
+    <view class="home-situation">
+      <view class="home-situation-title">
         <view>
-          最新发布
+          概况
         </view>
-        <wd-icon name="arrow-right" />
       </view>
-      <view class="home-house-item" v-for="(item, index) in state.houseList" :key="index"
-        @click="onClickNavigate(item.id)">
-        <wd-img width="220rpx" height="180rpx" radius="8rpx" mode="aspectFill" :src="item.url" />
-        <view class="home-house-item-right">
-          <view class="home-house-item-right-title">
-            {{ item.title }}
-          </view>
-          <view class="home-house-item-right-text">
-            {{ item.content }}
-          </view>
-          <view class="home-house-item-right-date">
-            {{ item.date }}
-          </view>
+      <view class="home-situation-content">
+        <image mode="widthFix" :src="state.productPositionInfo.url" />
+        <view class="home-situation-content-title">
+          {{ state.productPositionInfo.positionTitle }}
+        </view>
+        <view>
+          {{ state.productPositionInfo.positionDesc }}
         </view>
       </view>
     </view>
@@ -48,109 +42,111 @@
 </template>
 
 <script lang="ts" setup>
-import { reactive } from 'vue';
+import { reactive, watch } from 'vue';
 import { onShow } from '@dcloudio/uni-app';
+import iconTowelSrc from '@/static/home/icon_towel.svg';
+import iconCitySrc from '@/static/home/icon_city.svg';
 import { apis } from '@/apis';
-import dayjs from 'dayjs';
 
 interface State {
-  address: string,
-  addressList: {
+  positionId: string,
+  productPositionList: {
     label: string,
     value: string,
   }[],
   swiperList: string[],
-  houseList: {
-    id: string,
+  roomList: {
+    communityId: string,
+    roomId: string,
+    roomTitle: string,
+    roomDesc: string,
     url: string,
-    title: string,
-    content: string,
-    date: string,
   }[],
+  productPositionInfo: {
+    positionId: string,
+    positionTitle: string,
+    positionDesc: string,
+    url: string,
+  },
 };
 
 const state = reactive<State>({
-  address: '1',
-  addressList: [
-    {
-      label: '太保家园·郑州国际颐养社区',
-      value: '1',
-    },
-    {
-      label: '太保家园·郑州国际颐养社区2',
-      value: '2',
-    },
-    {
-      label: '太保家园·郑州国际颐养社区3',
-      value: '3',
-    }
-  ],
+  positionId: '',
+  productPositionList: [],
   swiperList: [],
-  houseList: [],
-});
-
-const menuList = [
-  {
-    icon: '/static/home/icon_towel.svg',
-    title: '生活用房',
-    text: '能力完好老年人',
-  },
-  {
-    icon: '/static/home/icon_badminton.svg',
-    title: '文娱与健身用房',
-    text: '',
+  roomList: [],
+  productPositionInfo: {
+    positionId: '',
+    positionTitle: '',
+    positionDesc: '',
+    url: '',
   },
-  {
-    icon: '/static/home/icon_file.svg',
-    title: '康复与医疗用房',
-    text: '',
-  },
-  {
-    icon: '/static/home/icon_medical.svg',
-    title: '服务管理用房',
-    text: '',
-  },
-  {
-    icon: '/static/home/icon_sign.svg',
-    title: '交通空间',
-    text: '',
-  },
-  {
-    icon: '/static/home/icon_city.svg',
-    title: '建筑细节',
-    text: '',
-  }
-];
+});
 
 const api = {
+  // 获取产品定位列表
+  fetchProductPositionList: async () => {
+    try {
+      const res = await apis.fetchProductPositionList();
+      const list = res.data.map((item: any) => {
+        return {
+          label: item.positionName,
+          value: item.positionId,
+        }
+      });
+      state.productPositionList = list;
+      if (list.length) {
+        state.positionId = list[0].value;
+      }
+    } catch (error: any) {
+      console.error(error);
+    }
+  },
   // 获取轮播图列表
   fetchBannerList: async () => {
     try {
-      const res = await apis.fetchBannerList();
-      const list = res.rows.map((item: any) => item.url);
+      const res = await apis.fetchBannerList(state.positionId);
+      const list = res.data.map((item: any) => item.url);
       state.swiperList = list;
     } catch (error: any) {
       console.error(error);
     }
   },
-  // 获取房型列表
-  fetchHouseList: async () => {
+  // 获取房型信息
+  fetchRoomInfo: async () => {
     try {
-      const data = {
-        pageNum: 1,
-        pageSize: 2,
-      };
-      const res = await apis.fetchHouseList(data);
-      const list = res.rows.map((item: any) => {
-        return {
-          id: item.roomId,
-          url: item.sysimg[0].url,
-          title: item.roomTitle,
-          content: item.roomDesc,
-          date: dayjs(item.createTime).format('YYYY-MM-DD HH:mm:ss'),
+      const res = await apis.fetchRoomInfo(state.positionId);
+      const info = res.data;
+
+      const item = info.community.find((item: any) => item.isMaster === '1');
+      if (item) {
+        const list = item.room.map((record: any, index: number) => {
+          return {
+            communityId: item.communityId,
+            roomId: record.roomId,
+            roomTitle: record.roomTitle,
+            roomDesc: record.roomDesc,
+            url: (index + 1) % 2 === 0 ? iconCitySrc : iconTowelSrc,
+          }
+        })
+        state.roomList = list;
+      }
+
+      const getUrl = () => {
+        const item = info.sysimg.find((item: any) => item.enumC === '0');
+        if (item) {
+          return item.url;
+        } else {
+          return '';
         }
-      });
-      state.houseList = list.slice(0, 2);
+      }
+
+      state.productPositionInfo = {
+        positionId: info.positionId,
+        positionTitle: info.positionTitle,
+        positionDesc: info.positionDesc,
+        url: getUrl(),
+      }
     } catch (error: any) {
       console.error(error);
     }
@@ -161,12 +157,8 @@ const init = async () => {
   uni.showLoading({
     title: '加载中',
   });
-  await Promise.all([
-    // 获取轮播图列表
-    api.fetchBannerList(),
-    // 获取房型列表
-    api.fetchHouseList(),
-  ]);
+  // 获取产品定位列表
+  await api.fetchProductPositionList();
   uni.hideLoading();
 };
 
@@ -174,10 +166,19 @@ onShow(() => {
   init();
 });
 
+watch(() => state.positionId, async () => {
+  await Promise.all([
+    // 获取轮播图列表
+    api.fetchBannerList(),
+    // 获取房型信息
+    api.fetchRoomInfo(),
+  ]);
+});
+
 // 点击跳转
-const onClickNavigate = (id: string) => {
+const onClickNavigate = (communityId: string, roomId: string) => {
   uni.navigateTo({
-    url: `/pages/home/houseDetail/index?id=${id}`,
+    url: `/pages/home/roomDetail/index?positionId=${state.positionId}&communityId=${communityId}&roomId=${roomId}`,
   });
 }
 </script>
@@ -186,7 +187,7 @@ const onClickNavigate = (id: string) => {
 .home {
   padding: 0 20rpx;
 
-  &-menu {
+  &-room {
     display: flex;
     flex-wrap: wrap;
     margin-top: 20rpx;
@@ -200,10 +201,28 @@ const onClickNavigate = (id: string) => {
       margin-bottom: 20rpx;
 
       &-right {
-        margin-left: 20rpx;
+        flex: 1;
         display: flex;
         flex-direction: column;
         justify-content: center;
+        margin-left: 20rpx;
+
+        &-title {
+          font-weight: bold;
+          white-space: nowrap;
+          overflow: hidden;
+          text-overflow: ellipsis;
+          margin-bottom: 1rpx;
+        }
+
+        &-text {
+          display: -webkit-box;
+          -webkit-box-orient: vertical;
+          -webkit-line-clamp: 1;
+          line-clamp: 1;
+          overflow: hidden;
+          text-overflow: ellipsis;
+        }
       }
     }
 
@@ -218,7 +237,7 @@ const onClickNavigate = (id: string) => {
     }
   }
 
-  &-house {
+  &-situation {
     padding: 20rpx;
     background: #FFFFFF;
     border: 2rpx solid $border-color;
@@ -226,8 +245,6 @@ const onClickNavigate = (id: string) => {
     margin-bottom: 20rpx;
 
     &-title {
-      padding-bottom: 20rpx;
-      border-bottom: 2rpx solid $border-color;
       display: flex;
       justify-content: space-between;
       align-items: center;
@@ -235,48 +252,16 @@ const onClickNavigate = (id: string) => {
       margin-bottom: 20rpx;
     }
 
-    &-item {
-      display: flex;
-      padding-bottom: 20rpx;
-      border-bottom: 2rpx solid $border-color;
-      margin-bottom: 20rpx;
-
-      &-right {
-        flex: 1;
-        margin-left: 20rpx;
-        display: flex;
-        flex-direction: column;
-        justify-content: space-between;
-        overflow: hidden;
-
-        &-title {
-          font-weight: bold;
-          white-space: nowrap;
-          overflow: hidden;
-          text-overflow: ellipsis;
-        }
-
-        &-text {
-          display: -webkit-box;
-          -webkit-box-orient: vertical;
-          -webkit-line-clamp: 2;
-          line-clamp: 2;
-          overflow: hidden;
-          text-overflow: ellipsis;
-        }
-
-        &-date {
-          font-size: $font-size-mini;
-          color: $gray-color;
-          text-align: right;
-        }
+    &-content {
+      image {
+        width: 100%;
+        margin-bottom: 20rpx;
       }
-    }
 
-    &-item:last-child {
-      padding-bottom: 0;
-      border-bottom: none;
-      margin-bottom: 0;
+      &-title {
+        font-weight: bold;
+        margin-bottom: 20rpx;
+      }
     }
   }
 }

+ 89 - 27
src/pages/home/houseDetail/index.vue → src/pages/home/roomDetail/index.vue

@@ -1,12 +1,12 @@
 <template>
-  <view class="home-houseDetail">
+  <view class="home-roomDetail">
     <wd-swiper :autoplay="false" :list="state.photoList" :indicator="{ type: 'fraction' }"
-      indicatorPosition="bottom-right" @click="onClickSwiper(state.photoList)" />
-    <view class="home-houseDetail-content">
-      <view class="home-houseDetail-content-title">
+      indicatorPosition="bottom-right" @click="onClickLookPhoto(state.photoList)" />
+    <view class="home-roomDetail-content">
+      <view class="home-roomDetail-content-title">
         {{ state.info.title }}
       </view>
-      <view class="home-houseDetail-content-chunk">
+      <view class="home-roomDetail-content-chunk">
         <view v-if="state.info.size">
           {{ state.info.size }}m²
         </view>
@@ -17,16 +17,26 @@
           {{ state.info.floorNum }}楼
         </view>
       </view>
+      <view class="home-roomDetail-content-title">
+        户型
+      </view>
+      <view>
+        <image style="width: 100%;" :src="state.info.url" mode="widthFix" @click="onClickLookPhoto([state.info.url])"
+          v-if="state.info.url" />
+      </view>
       <!-- 区域 -->
       <view v-for="(item, index) in state.areaList" :key="index">
-        <view class="home-houseDetail-content-title">
-          {{ item.title }}
+        <view class="area-title" @click="onClickNavigate(item.regionId)">
+          <view>
+            {{ item.title }}
+          </view>
+          <wd-icon name="arrow-right" size="32rpx" color="#651FFF" />
         </view>
         <view style="margin-bottom: 10rpx;">
           <wd-swiper :autoplay="false" :list="item.photoList" :indicator="{ type: 'fraction' }"
-            indicatorPosition="bottom-right" @click="onClickSwiper(item.photoList)" />
+            indicatorPosition="bottom-right" @click="onClickLookPhoto(item.photoList)" />
         </view>
-        <view class="home-houseDetail-content-text">
+        <view class="home-roomDetail-content-text">
           {{ item.description }}
         </view>
       </view>
@@ -40,7 +50,11 @@ import { onLoad } from '@dcloudio/uni-app';
 import { apis } from '@/apis';
 
 interface State {
-  id: string,
+  params: {
+    positionId: string,
+    communityId: string,
+    roomId: string,
+  },
   photoList: string[],
   info: {
     title: string,// 标题
@@ -48,8 +62,10 @@ interface State {
     size: string,// 面积
     direction: string,// 朝向
     floorNum: string,// 楼层
+    url: string,
   },
   areaList: {
+    regionId: string,
     title: string,
     description: string,
     photoList: string[],
@@ -57,7 +73,11 @@ interface State {
 };
 
 const state = reactive<State>({
-  id: '',
+  params: {
+    positionId: '',
+    communityId: '',
+    roomId: '',
+  },
   photoList: [],
   info: {
     title: '',
@@ -65,27 +85,44 @@ const state = reactive<State>({
     size: '',
     direction: '',
     floorNum: '',
+    url: '',
   },
   areaList: [],
 });
 
 const api = {
   // 获取房型详情
-  fetchHouseDetail: async () => {
+  fetchRoomDetail: async () => {
     try {
-      const res = await apis.fetchHouseDetail(state.id);
-      const data = res.data;
-      const photoList = data.sysimg.map((item: any) => item.url);
+      const data = state.params;
+      const res = await apis.fetchRoomDetail(data);
+      const community = res.data.community;
+      const room = community.room;
+
+      const photoList = community.sysimg.map((item: any) => item.url);
       state.photoList = photoList;
+
+      const getUrl = () => {
+        const item = room.sysimg.find((item: any) => item.enumC === '0');
+        if (item) {
+          return item.url;
+        } else {
+          return '';
+        }
+      }
+
       state.info = {
-        title: data.roomTitle,
-        description: data.roomDesc,
-        size: data.roomSize,
-        direction: data.direction,
-        floorNum: data.floorNum,
+        title: room.roomTitle,
+        description: room.roomDesc,
+        size: room.roomSize,
+        direction: room.direction,
+        floorNum: room.floorNum,
+        url: getUrl(),
       }
-      const areaList = data.region.map((item: any) => {
+
+      const areaList = room.region.map((item: any) => {
         return {
+          regionId: item.regionId,
           title: item.regionTitle,
           description: item.regionDesc,
           photoList: item.sysimg.map((record: any) => record.url),
@@ -108,26 +145,42 @@ const init = async () => {
     title: '加载中',
   });
   // 获取房型详情
-  await api.fetchHouseDetail();
+  await api.fetchRoomDetail();
   uni.hideLoading();
 };
 
 onLoad((options) => {
-  const data = options as { id: string };
-  state.id = data.id;
+  const data = options as { positionId: string, communityId: string, roomId: string };
+  state.params = data;
   init();
 });
 
-// 点击轮播
-const onClickSwiper = (list: string[]) => {
+// 点击查看图片
+const onClickLookPhoto = (list: string[]) => {
   uni.previewImage({
     urls: list,
   });
 }
+
+// 点击跳转
+const onClickNavigate = (regionId: string) => {
+  const { positionId, communityId, roomId } = state.params;
+
+  uni.setStorageSync('roomInfo', {
+    positionId: positionId,
+    communityId: communityId,
+    roomId: roomId,
+    regionId: regionId,
+  });
+
+  uni.switchTab({
+    url: '/pages/facility/index/index',
+  });
+}
 </script>
 
 <style lang="scss" scoped>
-.home-houseDetail {
+.home-roomDetail {
   :deep(.wd-swiper__track) {
     border-radius: 0;
   }
@@ -141,6 +194,15 @@ const onClickSwiper = (list: string[]) => {
       margin: 20rpx 0;
     }
 
+    .area-title {
+      font-weight: bold;
+      color: $primary-color;
+      display: flex;
+      justify-content: space-between;
+      align-items: center;
+      margin: 20rpx 0;
+    }
+
     &-chunk {
       width: 100%;
       padding: 20rpx;

+ 268 - 0
src/pages/standard/index/index.vue

@@ -0,0 +1,268 @@
+<template>
+  <view class="home">
+    <view>
+      <wd-drop-menu>
+        <wd-drop-menu-item :options="state.productPositionList" v-model="state.positionId" />
+      </wd-drop-menu>
+    </view>
+    <view>
+      <wd-swiper :autoplay="true" :list="state.swiperList" />
+    </view>
+    <view class="home-room">
+      <view class="home-room-item" v-for="(item, index) in state.roomList" :key="index"
+        @click="onClickNavigate(item.communityId, item.roomId)">
+        <wd-img width="60rpx" height="60rpx" :src="item.url" />
+        <view class="home-room-item-right">
+          <view class="home-room-item-right-title">
+            {{ item.roomTitle }}
+          </view>
+          <view class="home-room-item-right-text">
+            {{ item.roomDesc }}
+          </view>
+        </view>
+      </view>
+    </view>
+    <view class="home-situation">
+      <view class="home-situation-title">
+        <view>
+          概况
+        </view>
+      </view>
+      <view class="home-situation-content">
+        <image mode="widthFix" :src="state.productPositionInfo.url" />
+        <view class="home-situation-content-title">
+          {{ state.productPositionInfo.positionTitle }}
+        </view>
+        <view>
+          {{ state.productPositionInfo.positionDesc }}
+        </view>
+      </view>
+    </view>
+  </view>
+</template>
+
+<script lang="ts" setup>
+import { reactive, watch } from 'vue';
+import { onShow } from '@dcloudio/uni-app';
+import iconTowelSrc from '@/static/home/icon_towel.svg';
+import iconCitySrc from '@/static/home/icon_city.svg';
+import { apis } from '@/apis';
+
+interface State {
+  positionId: string,
+  productPositionList: {
+    label: string,
+    value: string,
+  }[],
+  swiperList: string[],
+  roomList: {
+    communityId: string,
+    roomId: string,
+    roomTitle: string,
+    roomDesc: string,
+    url: string,
+  }[],
+  productPositionInfo: {
+    positionId: string,
+    positionTitle: string,
+    positionDesc: string,
+    url: string,
+  },
+};
+
+const state = reactive<State>({
+  positionId: '',
+  productPositionList: [],
+  swiperList: [],
+  roomList: [],
+  productPositionInfo: {
+    positionId: '',
+    positionTitle: '',
+    positionDesc: '',
+    url: '',
+  },
+});
+
+const api = {
+  // 获取产品定位列表
+  fetchProductPositionList: async () => {
+    try {
+      const res = await apis.fetchProductPositionList();
+      const list = res.data.map((item: any) => {
+        return {
+          label: item.positionName,
+          value: item.positionId,
+        }
+      });
+      state.productPositionList = list;
+      if (list.length) {
+        state.positionId = list[0].value;
+      }
+    } catch (error: any) {
+      console.error(error);
+    }
+  },
+  // 获取轮播图列表
+  fetchBannerList: async () => {
+    try {
+      const res = await apis.fetchBannerList(state.positionId);
+      const list = res.data.map((item: any) => item.url);
+      state.swiperList = list;
+    } catch (error: any) {
+      console.error(error);
+    }
+  },
+  // 获取房型信息
+  fetchRoomInfo: async () => {
+    try {
+      const res = await apis.fetchRoomInfo(state.positionId);
+      const info = res.data;
+
+      const item = info.community.find((item: any) => item.isMaster === '1');
+      if (item) {
+        const list = item.room.map((record: any, index: number) => {
+          return {
+            communityId: item.communityId,
+            roomId: record.roomId,
+            roomTitle: record.roomTitle,
+            roomDesc: record.roomDesc,
+            url: (index + 1) % 2 === 0 ? iconCitySrc : iconTowelSrc,
+          }
+        })
+        state.roomList = list;
+      }
+
+      const getUrl = () => {
+        const item = info.sysimg.find((item: any) => item.enumC === '0');
+        if (item) {
+          return item.url;
+        } else {
+          return '';
+        }
+      }
+
+      state.productPositionInfo = {
+        positionId: info.positionId,
+        positionTitle: info.positionTitle,
+        positionDesc: info.positionDesc,
+        url: getUrl(),
+      }
+    } catch (error: any) {
+      console.error(error);
+    }
+  }
+}
+
+const init = async () => {
+  uni.showLoading({
+    title: '加载中',
+  });
+  // 获取产品定位列表
+  await api.fetchProductPositionList();
+  uni.hideLoading();
+};
+
+onShow(() => {
+  init();
+});
+
+watch(() => state.positionId, async () => {
+  await Promise.all([
+    // 获取轮播图列表
+    api.fetchBannerList(),
+    // 获取房型信息
+    api.fetchRoomInfo(),
+  ]);
+});
+
+// 点击跳转
+const onClickNavigate = (communityId: string, roomId: string) => {
+  uni.navigateTo({
+    url: `/pages/home/roomDetail/index?positionId=${state.positionId}&communityId=${communityId}&roomId=${roomId}`,
+  });
+}
+</script>
+
+<style lang="scss" scoped>
+.home {
+  padding: 0 20rpx;
+
+  &-room {
+    display: flex;
+    flex-wrap: wrap;
+    margin-top: 20rpx;
+
+    &-item {
+      width: calc(50% - 10rpx);
+      padding: 40rpx 20rpx;
+      border-radius: $border-radius-base;
+      display: flex;
+      align-items: center;
+      margin-bottom: 20rpx;
+
+      &-right {
+        flex: 1;
+        display: flex;
+        flex-direction: column;
+        justify-content: center;
+        margin-left: 20rpx;
+
+        &-title {
+          font-weight: bold;
+          white-space: nowrap;
+          overflow: hidden;
+          text-overflow: ellipsis;
+          margin-bottom: 1rpx;
+        }
+
+        &-text {
+          display: -webkit-box;
+          -webkit-box-orient: vertical;
+          -webkit-line-clamp: 1;
+          line-clamp: 1;
+          overflow: hidden;
+          text-overflow: ellipsis;
+        }
+      }
+    }
+
+    &-item:nth-child(odd) {
+      background: #F1EFF8;
+      margin-right: 10rpx;
+    }
+
+    &-item:nth-child(even) {
+      background: #FAF3F0;
+      margin-left: 10rpx;
+    }
+  }
+
+  &-situation {
+    padding: 20rpx;
+    background: #FFFFFF;
+    border: 2rpx solid $border-color;
+    border-radius: $border-radius-base;
+    margin-bottom: 20rpx;
+
+    &-title {
+      display: flex;
+      justify-content: space-between;
+      align-items: center;
+      font-weight: bold;
+      margin-bottom: 20rpx;
+    }
+
+    &-content {
+      image {
+        width: 100%;
+        margin-bottom: 20rpx;
+      }
+
+      &-title {
+        font-weight: bold;
+        margin-bottom: 20rpx;
+      }
+    }
+  }
+}
+</style>

+ 0 - 6
src/static/home/icon_badminton.svg

@@ -1,6 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 48 48" width="27" height="28" style="" filter="none">
-    
-    <g>
-    <path d="M19.5 44C21.99 44 24 41.99 24 39.5V19H20L15 39.5C15 41.99 17.01 44 19.5 44Z" stroke="rgba(246,97,5,1)" stroke-width="4" stroke-miterlimit="2" stroke-linecap="round" stroke-linejoin="round" fill="none"></path><path d="M20 19H16L6.67996 37.9C5.56996 40.51 7.15996 43.64 9.97996 43.97C10.15 43.99 10.32 44 10.5 44C12.99 44 15 41.99 15 39.5" stroke="rgba(246,97,5,1)" stroke-width="4" stroke-miterlimit="2" stroke-linecap="round" stroke-linejoin="round" fill="none"></path><path d="M28.5 44C26.01 44 24 41.99 24 39.5V19H28L33 39.5C33 41.99 30.99 44 28.5 44Z" stroke="rgba(246,97,5,1)" stroke-width="4" stroke-miterlimit="2" stroke-linecap="round" stroke-linejoin="round" fill="none"></path><path d="M28 19H32L41.32 37.9C42.43 40.51 40.84 43.64 38.02 43.97C37.85 43.99 37.68 44 37.5 44C35.01 44 33 41.99 33 39.5" stroke="rgba(246,97,5,1)" stroke-width="4" stroke-miterlimit="2" stroke-linecap="round" stroke-linejoin="round" fill="none"></path><path d="M16.06 13C16.02 12.67 16 12.34 16 12C16 7.58 19.58 4 24 4C28.42 4 32 7.58 32 12C32 12.34 31.98 12.67 31.94 13H16.06Z" fill="none" stroke="rgba(246,97,5,1)" stroke-width="4" stroke-miterlimit="2" stroke-linecap="round" stroke-linejoin="round"></path>
-    </g>
-  </svg>

+ 0 - 6
src/static/home/icon_file.svg

@@ -1,6 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 48 48" width="27" height="28" style="" filter="none">
-    
-    <g>
-    <rect width="48" height="48" fill="rgba(67,11,206,1)" fill-opacity="0.01" stroke="none"></rect><path d="M23 42H19H15H9C7.89543 42 7 41.1046 7 40V8C7 6.89543 7.89543 6 9 6H37C38.1046 6 39 6.89543 39 8V15V19.5" stroke="rgba(67,11,206,1)" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" fill="none"></path><path d="M36.6364 27C39.0463 27 41 28.8804 41 31.2C41 34.2196 38.0909 36.8 36.6364 38.2C35.6667 39.1333 34.4545 40.0667 33 41C31.5455 40.0667 30.3333 39.1333 29.3636 38.2C27.9091 36.8 25 34.2196 25 31.2C25 28.8804 26.9537 27 29.3636 27C30.8814 27 32.2182 27.7459 33 28.8775C33.7818 27.7459 35.1186 27 36.6364 27Z" fill="none" stroke="rgba(67,11,206,1)" stroke-width="4" stroke-linejoin="round"></path><path d="M15 14H31" stroke="rgba(67,11,206,1)" stroke-width="4" stroke-linecap="round" fill="none"></path>
-    </g>
-  </svg>

+ 0 - 6
src/static/home/icon_medical.svg

@@ -1,6 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32" width="27" height="28" style="" filter="none">
-    
-    <g>
-    <path d="M4.215 5.959c1.568-1.569 3.735-2.539 6.129-2.539 2.167 0 4.149 0.796 5.669 2.111l-0.011-0.009c1.508-1.305 3.489-2.099 5.655-2.099 4.786 0 8.667 3.88 8.667 8.667 0 2.158-0.789 4.132-2.094 5.65l0.010-0.011-10.353 10.387c-0.483 0.483-1.149 0.781-1.886 0.781-0.666 0-1.275-0.244-1.743-0.648l0.003 0.003-0.147-0.135-10.352-10.388c-1.296-1.506-2.086-3.48-2.086-5.639 0-2.393 0.97-4.56 2.539-6.129l0-0zM6.1 7.844c-1.085 1.086-1.757 2.586-1.757 4.242 0 1.557 0.593 2.976 1.566 4.043l-0.004-0.005 0.195 0.205 9.9 9.9 7.071-7.072-4.713-4.713-1.413 1.413c-0.724 0.724-1.724 1.172-2.829 1.172-2.209 0-4-1.791-4-4 0-1.104 0.447-2.104 1.171-2.828l2.803-2.804c-1.016-0.817-2.322-1.311-3.744-1.311-1.558 0-2.977 0.594-4.044 1.567l0.005-0.004-0.205 0.195zM17.415 11.615c0.241-0.241 0.575-0.39 0.943-0.39s0.701 0.149 0.943 0.39l5.656 5.656 0.944-0.941c1.087-1.086 1.759-2.587 1.759-4.244 0-3.314-2.686-6-6-6-1.558 0-2.978 0.594-4.045 1.568l0.005-0.004-0.204 0.195-4.243 4.243c-0.241 0.241-0.391 0.575-0.391 0.943 0 0.313 0.108 0.601 0.289 0.829l-0.002-0.003 0.104 0.116c0.241 0.241 0.575 0.391 0.943 0.391 0.313 0 0.601-0.108 0.829-0.289l-0.003 0.002 0.116-0.104 2.357-2.357z" fill="rgba(246,97,5,1)"></path>
-    </g>
-  </svg>

+ 0 - 6
src/static/home/icon_sign.svg

@@ -1,6 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 48 48" width="27" height="28" style="" filter="none">
-    
-    <g>
-    <rect width="48" height="48" fill="rgba(67,11,206,1)" fill-opacity="0.01" stroke="none"></rect><path d="M6 10V22H38L44 16L38 10L6 10Z" fill="none" stroke="rgba(67,11,206,1)" stroke-width="4" stroke-linejoin="round"></path><path d="M23 22V44" stroke="rgba(67,11,206,1)" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" fill="none"></path><path d="M23 4V10" stroke="rgba(67,11,206,1)" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" fill="none"></path><path d="M18 44H28" stroke="rgba(67,11,206,1)" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" fill="none"></path>
-    </g>
-  </svg>

+ 1 - 0
src/typings/components.d.ts

@@ -15,6 +15,7 @@ declare module 'vue' {
     WdIcon: typeof import('wot-design-uni/components/wd-icon/wd-icon.vue')['default']
     WdImg: typeof import('wot-design-uni/components/wd-img/wd-img.vue')['default']
     WdInput: typeof import('wot-design-uni/components/wd-input/wd-input.vue')['default']
+    WdPicker: typeof import('wot-design-uni/components/wd-picker/wd-picker.vue')['default']
     WdSearch: typeof import('wot-design-uni/components/wd-search/wd-search.vue')['default']
     WdSticky: typeof import('wot-design-uni/components/wd-sticky/wd-sticky.vue')['default']
     WdSwiper: typeof import('wot-design-uni/components/wd-swiper/wd-swiper.vue')['default']