前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >14.寻光集后台管理系统-产品信息-筛选部分

14.寻光集后台管理系统-产品信息-筛选部分

作者头像
zx钟
发布2022-12-02 16:11:14
3240
发布2022-12-02 16:11:14
举报
文章被收录于专栏:测试游记

在上一章中已经有了一个产品信息的空白页了

这一章来实现它

最终效果

最终页面大概长这样

列表展示

编辑产品

筛选部分(后端)

类别和品牌的内容都是根据实际添加产品的类别和品牌生成的,所以需要有一个接口来获取他们

也就是对产品表中categorybrand进行去重操作

代码语言:javascript
复制
category_list = Product.objects.values_list("category", flat=True).distinct()

去重之后再处理一下脏数据

代码语言:javascript
复制
category_list = [i.strip() for i in category_list if i != "" and i != None]

所以在backend/apps/product/views.py里面添加

代码语言:javascript
复制
@action(methods=['get'], detail=False)
def category_list(self, request):
    """
    返回类别列表
    """
    category_list = Product.objects.values_list("category", flat=True).distinct()
    category_list = [i.strip() for i in category_list if i != "" and i != None]
    return Response(data=category_list)

@action(methods=['get'], detail=False)
def brand_list(self, request):
    """
    返回品牌列表
    """
    brand_list = Product.objects.values_list("brand", flat=True).distinct()
    brand_list = [i.strip() for i in brand_list if i != "" and i != None]
    return Response(data=brand_list)

筛选部分(前端)

接口

新建一个js文件来存放产品信息相关的接口

frontend/src/api/model/products.js

代码语言:javascript
复制
import config from "@/config"
import http from "@/utils/request"

export default {
  list: {
    url: `${config.API_URL1}/product/`,
    name: "获取产品列表",
    get: async function (params) {
      return await http.get(this.url, params);
    }
  },
  add: {
    url: `${config.API_URL1}/product/`,
    name: "添加产品",
    post: async function (data) {
      return await http.post(this.url, data);
    }
  },
  edit: {
    url: `${config.API_URL1}/product/`,
    name: "修改产品",
    put: async function (id, data) {
      return await http.put(`${this.url}${id}/`, data);
    }
  },
  del: {
    url: `${config.API_URL1}/product/`,
    name: "删除产品",
    delete: async function (id) {
      return await http.delete(`${this.url}${id}/`);
    }
  },
  category_list: {
    url: `${config.API_URL1}/product/category_list/`,
    name: "获取全部产品类别",
    get: async function (params) {
      return await http.get(this.url, params);
    }
  },
  brand_list: {
    url: `${config.API_URL1}/product/brand_list/`,
    name: "获取全部产品品牌",
    get: async function (params) {
      return await http.get(this.url, params);
    }
  },
}

顺便放上它的增删改查接口

页面

先简单搭建一下页面结构

代码语言:javascript
复制
<template>
  <el-container>
    <el-header style="height: auto;">
      <sc-select-filter :data="filterData" :label-width="80"></sc-select-filter>
    </el-header>
  </el-container>
</template>

<script>
import scSelectFilter from '@/components/scSelectFilter'

export default {
  name: "product",
  components: {
    scSelectFilter
  },
  data(){
    return  {
      filterData: [
        {
          title: "类别",
          key: "category",
          multiple: false,
          options: [
            {
              label: "全部",
              value: ""
            },
          ]
        },
        {
          title: "品牌",
          key: "brand",
          multiple: false,
          options: [
            {
              label: "全部",
              value: ""
            },
          ]
        }
      ],
    }
  },
  methods:{
  }
}
</script>

<style scoped>

</style>

然后进行数据的获取

在created也就是进入该页面的时候就会去请求这两个接口,然后把数据合并到之前的对象里面,渲染的时候就会增加除了「全部」之外的部分

代码语言:javascript
复制
methods:{
    async get_category_list() {
      var category_list = await this.$API.products.category_list.get()
      this.filterData[0]["options"] = [{label: "全部", value: ""}]
      for (const categoryListElement of category_list) {
        this.filterData[0]["options"].push(
          {
            label: categoryListElement,
            value: categoryListElement
          },
        )
      }
    },
    async get_brand_list() {
      var brand_list = await this.$API.products.brand_list.get()
      this.filterData[1]["options"] = [{label: "全部", value: ""}]
      for (const brandListElement of brand_list) {
        this.filterData[1]["options"].push(
          {
            label: brandListElement,
            value: brandListElement
          },
        )
      }
    },
  },
created() {
  this.get_category_list()
  this.get_brand_list()
},

测试

查看页面可以发现,类别和品牌中的信息不单单只有「全部」了

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-09-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 测试游记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 最终效果
    • 列表展示
      • 编辑产品
      • 筛选部分(后端)
      • 筛选部分(前端)
        • 接口
          • 页面
            • 测试
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档