跳至主要內容

订单列表

起凡大约 6 分钟

订单列表

订单列表
订单列表

用户订单分页查询

  • 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;
};

订单展示

  1. <div class="order-list-page">:定义一个包裹整个订单列表内容的容器,类名为"order-list-page"。

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

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

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

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

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

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

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

    • 如果满足showCancel(order.status)条件,则显示“取消订单”按钮。
    • 如果订单状态为 'TO_BE_PAID',则显示“立即支付”按钮。
<template>
  <div class="order-list-page">
    <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>
  </div>
</template>