跳至主要內容

订单列表

起凡大约 7 分钟起凡商城订单订单列表

订单列表

订单列表
订单列表

用户订单分页查询

订单查询Dto
  • creator { id }: 包含创建者的ID信息,可以按照创建者ID来筛选订单。

使用这个规格(Specification)进行查询时,可以根据用户提供的参数,灵活查询满足条件的所有订单记录,比如按订单备注部分文本、创建和修改时间范围以及创建者ID来过滤订单。

specification ProductOrderSpec {
    #allScalars
    like/i(remark)
    like/i(id)
    ge(createdTime)
    le(createdTime)
    ge(editedTime)
    le(editedTime)
    creator {
      id
    }
}








 
 
 

路由配置

export default defineAppConfig({
  pages: [
    "pages/index/index",
    "pages/user/index",
    "pages/address/address-list",
    "pages/address/address-save",
    "pages/order/order-create",
    "pages/order/order-list",
  ],
});

订单列表页面

小程序端字典

请参考字典翻译字典缓存

字典缓存
import type { DictSpec, Page } from "@/apis/__generated/model/static";
import type { DictDto } from "@/apis/__generated/model/dto";
import { api } from "@/utils/api-instance";

const dictMap: Record<
  number,
  Promise<Page<DictDto["DictRepository/COMPLEX_FETCHER"]>>
> = {};
export const queryDict = (dictSpec: DictSpec) => {
  if (!dictSpec.dictId) return;
  let res = dictMap[dictSpec.dictId];
  if (res) return res;
  res = api.dictController.query({
    body: {
      pageNum: 1,
      pageSize: 1000,
      likeMode: "ANYWHERE",
      query: dictSpec,
      sorts: [{ property: "dictId", direction: "ASC" }],
    },
  });
  dictMap[dictSpec.dictId] = res;
  return res;
};

订单状态选项卡

html

订单选型卡(tab)

  1. <nut-tabs v-model="activeStatus" @change="handleTabChange">: 使用了 nut-tabs 创建含选项卡。v-model="activeStatus" 表示将 activeStatus 数据属性与选项卡的状态进行双向绑定。@change="handleTabChange" 表示当选项卡发生改变时,将调用名为 handleTabChange 的方法。

  2. <nut-tab-pane v-for="tab in tabList" :key="tab.keyId" :title="tab.keyName" :pane-key="tab.keyEnName">: 使用了 nut-tab-pane 组件,它被放置在 nut-tabs 内部。通过 v-for 循环遍历 tabList 数组,为每个选项卡设置了唯一的 key 值(:key="tab.keyId"),标题(:title="tab.keyName"),和面板键值(:pane-key="tab.keyEnName")。

<template>
  <div class="order-list-page">
    <nut-tabs v-model="activeStatus" @change="handleTabChange">
      <nut-tab-pane
        v-for="tab in tabList"
        :key="tab.keyId"
        :title="tab.keyName"
        :pane-key="tab.keyEnName"
      >
      </nut-tab-pane>
    </nut-tabs>
  </div>
</template>

订单展示

html

提示

  1. 使用v-for指令遍历从pageData.content获取的所有订单数据:

    <div class="order" v-for="order in pageData.content" :key="order.id">
    

    这里对每个订单项创建一个新的.order元素。

  2. 在循环内部,使用自定义组件order-row来展示每个订单的详细信息,并将当前订单对象作为属性值传递给该组件:

    <order-row :order="order" @click="switchPage('./order-details?id=' + order.id)">
    

    当用户点击这个订单行时,会触发switchPage事件处理器方法,跳转到对应的订单详情页,URL中包含了当前订单ID。

  3. 根据订单状态动态显示按钮:

    • 如果满足showCancel(order.status)条件,则显示“取消订单”按钮。
    • 如果订单状态为 'TO_BE_PAID',则显示“立即支付”按钮。
<template>
  <div class="order-list-page">
    <nut-tabs v-model="activeStatus" @change="handleTabChange">
      <nut-tab-pane
        v-for="tab in tabList"
        :key="tab.keyId"
        :title="tab.keyName"
        :pane-key="tab.keyEnName"
      >
        <div class="order" v-for="order in pageData.content" :key="order.id">
          <order-row
            :order="order"
            @click="switchPage('./order-details?id=' + order.id)"
          >
            <nut-button size="small" plain v-if="showCancel(order.status)"
              >取消订单</nut-button
            >
            <nut-button
              size="small"
              type="danger"
              plain
              v-if="order.status === 'TO_BE_PAID'"
              >立即支付</nut-button
            >
          </order-row>
        </div>
      </nut-tab-pane>
    </nut-tabs>
  </div>
</template>