wupengfei
2025-03-10 bbf6053159d566a096dfa26627dda19657d928af
apps/cMiniApp/src/pages/home/index.vue
@@ -16,7 +16,7 @@
          ></BlSearchbar>
        </div>
        <div class="city-btn" @click="goCitySelect">
          <Location2 :size="16" />
          <img :src="IconLocaltion" class="city-btn-icon" />
          <div class="city-btn-text">{{ locationCity }}</div>
        </div>
      </div>
@@ -44,7 +44,7 @@
        <Menu>
          <MenuItem title="筛选" ref="selectItem">
            <HomeQueryMenuView
              v-model:gender="queryState.gender"
              v-model:query="queryMenuState"
              @close="handleMenuSelectClose"
            ></HomeQueryMenuView>
          </MenuItem>
@@ -64,35 +64,30 @@
</template>
<script setup lang="ts">
import { useUser } from '@/hooks';
import { useUser, useTaskList, HomeOrderType } from '@/hooks';
import { useUserStore } from '@/stores/modules/user';
import { RectDown, Location2 } from '@nutui/icons-vue-taro';
import Taro from '@tarojs/taro';
import { LocationUtils, trim } from '@12333/utils';
import { setLocationCity } from '@/utils';
import _ from 'lodash';
import IconLogo from '@/assets/home/icon-logo.png';
import { useInfiniteLoading } from '@12333/hooks';
import { OrderInputType, Gender } from '@12333/constants';
import * as orderServices from '@12333/services/api/Order';
import { TaskCard, ProTabs, ProTabPane } from '@12333/components';
import { HomeOrderType } from './constants';
import HomeQueryMenuView from './HomeQueryMenuView.vue';
import IconLocaltion from '@/assets/task/icon-localtion.png';
const { locationCity } = useUser();
const searchValue = ref('');
const queryState = reactive({
  searchValueTrim: '',
  orderType: HomeOrderType.Recommend,
  gender: '' as any as Gender,
});
const handleSearch = _.debounce(function () {
  queryState.searchValueTrim = trim(searchValue.value);
}, 300);
const userStore = useUserStore();
const { searchValue, queryState, handleSearch, infiniteLoadingProps, queryMenuState } = useTaskList(
  { cityName: locationCity }
);
onMounted(async () => {
  try {
    await setLocationCity();
  } catch (error) {}
});
function goCitySelect() {
  Taro.navigateTo({
@@ -107,36 +102,13 @@
  'https://storage.360buyimg.com/jdc-article/fristfabu.jpg',
]);
const { infiniteLoadingProps } = useInfiniteLoading(
  ({ pageParam }) => {
    let params: API.FrontOrderListInput = {
      pageModel: {
        rows: 20,
        page: pageParam,
        orderInput: [
          queryState.orderType === HomeOrderType.Recommend
            ? { property: 'isRecommend', order: OrderInputType.Desc }
            : { property: 'lastShelfTime', order: OrderInputType.Desc },
        ],
      },
    };
    return orderServices.getFrontOrderList(params, {
      showLoading: false,
    });
  },
  {
    queryKey: ['orderServices/getFrontOrderList', queryState],
  }
);
const selectItem = ref();
function handleMenuSelectClose() {
  selectItem.value?.toggle?.();
}
function goTaskDetail(item: API.FrontOrderList) {
function goTaskDetail(item: API.GetFlexTaskListOutput) {
  Taro.navigateTo({
    url: `${RouterPath.taskDetail}?id=${item.id}`,
  });
@@ -171,6 +143,11 @@
      padding-left: 36px;
      color: boleGetCssVar('text-color', 'primary');
      .city-btn-icon {
        width: 40px;
        height: 40px;
      }
      .city-btn-text {
        max-width: 200px;
        @include ellipsis;