shop_font_1

今天做第二个分类页面,会对axios进行二次封装,对leancloud进行数据请求,整体页面如下:

                                         

首先集成axios(leancloud文件会放在shop_font_1文件里面大家有需要可以到里面找)

配置/src/config.js

这是我的leancloud凭证

baseURL就是REST API 服务器地址,详细操作可以看我主页的这篇文章https://blog.csdn.net/m0_56164661/article/details/134386454?spm=1001.2014.3001.5502

再在utils文件夹下编写request.js二次封装axios以对leancloud实现数据异步请求

首先我们通过axios中的create方法实例化一个service对象,再对service对象添加请求拦截器,响应应拦截器,请求拦截器在这章只涉及分类数据请求,后面会对做登录界面的时候会对token进行验证。

request.js代码:

import axios from 'axios';
import myconfig from '@/config.js'
import { showLoadingToast, showToast, closeToast } from 'vant'


const service =axios.create({baseURL: myconfig.baseURL})

//请求拦截器
service.interceptors.request.use(
    config =>{
        config.headers["X-LC-Id"]= myconfig.appid;
        config.headers["X-LC-Key"]= myconfig.masterkey+",master";
    

    return config
})



//响应拦截器
service.interceptors.response.use(
    response =>{
        if (response.data.results)
            return response.data.results
        else
            return response.data

    }, error => {
        closeToast()
        showToast({
            message: '请求失败',
            type: 'fail'
        })
        console.log(error)
    }
)

export default service

然后到Category.vue,一般来说数据先行,所以先获取一级导航栏需要的menu数组,代码如下:

import request from "@/utils/request";

onMounted(() => {
  loadCategoryList();
});

const loadCategoryList = async () => {
  let data = await request.get("/1.1/scan/classes/category");
  console.log(111, data);
  const treeData = convertToTree(data);
  console.log(treeData);
  //   // 将转换后的数据赋值给menus
  menus.value = treeData;
};

// 将一维数组转换成树形结构的方法
const convertToTree = (data) => {
  const treeData = [];
  const map = {};
  // 遍历一维数组数据,建立节点映射表
  for (const item of data) {
    map[item.id] = { ...item, children: [] };
  }
  // 遍历映射表,将节点添加到父节点的children中
  for (const item of data) {
    const node = map[item.id];
    if (item.pid === "0") {
      treeData.push(node);
    } else {
      const parent = map[item.pid];
      parent.children.push(node);
    }
  }
  return treeData;
};

使用异步请求从“/1.1/scan/classes/category”端点获取数据(假设是带有方法的已定义对象)。然后,它记录接收到的数据,并使用该函数将其转换为树状结构。最后,将转换后的树数据分配给变量。

一级导航栏:

代码如下:

 <div class="menu-left">
      <!-- 一级导航栏 -->
      <van-sidebar v-model="tabValue">
        <van-sidebar-item
          :title="item.name"
          v-for="(item, index) in menus"
          :key="index"
          @click="handleMenulist(index)"
        />
      </van-sidebar>
    </div>

这里我们使用了Vant组件库里面的侧边导航栏<van-sidebar>,v-for遍历菜单数组menus

二级导航栏:

<!-- 二级导航栏 -->
    <div class="menu-right" ref="itemList">
      <!-- 显示二级分类 -->
      <div class="cate">
        <h4 class="cate-title">{{ menus[tabValue].name }}</h4>
        <ul class="cate-item">
          <li v-for="(item, index2) in menus[tabValue].children" :key="index2">
            <router-link class="cate-item-wrapper" to="/">
              <div class="cate-item-img">
                <img :src="item.picture" alt="" />
              </div>
              <span>{{ item.name }}</span>
            </router-link>
          </li>
        </ul>
      </div>
    </div>

别忘记在script标签中声明 itemList和tabValue
const itemList = ref();

const tabValue = ref(0);

那么现在一级导航栏和二级导航栏我们都有了,需要实现点击一级导航栏联动二级导航栏

参考这里:https://juejin.cn/post/7078592288611368990                                                                                   vue3+vant3使用van-sidebar侧边导航组件实现菜单左右联动效果

//左侧菜单点击联动右侧
const handleMenulist = (index) => {
  tabValue.value = index;
  console.log("index=", index);
};

less代码:

ul {
  margin: 0;
  padding: 0;
}
li {
  list-style: none;
}
.menu {
  display: flex;
  position: absolute;
  text-align: center;
  top: 46px;
  bottom: 50px;
  width: 100%;
  overflow: hidden;
}
.menu-right {
  flex: 1;
  overflow-y: scroll;
  background: #fff;

  .cate {
    height: 100%;

    .cate-title {
      margin: 0;
      text-align: left;
      font-size: 14px;
      color: #333;
      font-weight: bold;
      padding: 10px;
    }
    .cate-item {
      padding: 7px 10px 10px;
      display: flex;
      overflow: hidden;
      flex-wrap: row wrap;
      li {
        width: 33.3%;

        .cate-item-img {
          width: 100%;
          img {
            width: 70px;
            height: 70px;
          }
        }
        span {
          display: inline-block;
          font-size: 14px;
          color: #333;
        }
      }
    }
  }
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
import numpy as np import csv import pandas as pd import numpy as npjk import matplotlib.pyplot as plt plt.rcParams['font.sans-serif']=['SimHei']#解决图标中汉字显示问题 plt.rcParams['axes.unicode_minus']=False#解决图标中汉字显示问题 from urllib.request import urlopen,Request from bs4 import BeautifulSoup #云计算2113方宇-2021058226 headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36'} url = 'https://search.jd.com/Search?keyword=%E8%93%9D%E7%89%99%E9%BC%A0%E6%A0%87&enc=utf-8&wq=%E8%93%9D%E7%89%99%E9%BC%A0%E6%A0%87&pvid=405a663911e84dd3822389ef5b97c147' response = Request(url,headers=headers) res = urlopen(response) data = res.read().decode('utf-8') soup = BeautifulSoup(data,'html.parser') ddd=soup.find('ul',class_="gl-warp clearfix") bbb=ddd.select('li>.gl-i-wrap>.p-price>strong>i')#价格 ccc=ddd.select('li>.gl-i-wrap>.p-shop>span>a')#店名 #云计算2113方宇2021058226 get_rmb_date = [] for i in bbb: get_rmb_date.append(i.text) get_shop_date = [] for i in ccc: get_shop_date.append(i.text) data = [] for i in range(len(get_shop_date)): temp = [] temp.append(get_shop_date[i]) temp.append(get_rmb_date[i]) data.append(temp) print(data) #云计算2113-方宇2021058226 f = open('D:/mypython/mycode/2021058226.csv','w',encoding='utf-8') csv_write = csv.writer(f) csv_write.writerow(['商品店家','商品价格']) for i in data: csv_write.writerow(i) f.close() #云计算2113方宇-2021058226 csv_file ='D:/mypython/mycode/2021058226.csv' csv_data=pd.read_csv(csv_file,low_memory=False) csv_df=pd.DataFrame(csv_data) dfl=csv_df.head(n=10) print(dfl) plt.figure(figsize = (10,6)) x = np.arange(10) y = np.array(dfl['商品店家']) xticks = list(dfl['商品价格']) print(x,y,xticks) p=[0,1,2,3,4,5,6,7,8,9] plt.xticks(p,y,rotation=20) plt.bar(p,xticks,color='red') plt.show()如何将词云柱状图按序排列
06-08
如果想将柱状图按照序排列,可以先对数据进行排序,再绘制柱状图。以下是修改后的代码: ```python import numpy as np import csv import pandas as pd import numpy as npjk import matplotlib.pyplot as plt from wordcloud import WordCloud plt.rcParams['font.sans-serif']=['SimHei']#解决图标中汉字显示问题 plt.rcParams['axes.unicode_minus']=False#解决图标中汉字显示问题 from urllib.request import urlopen,Request from bs4 import BeautifulSoup headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36'} url = 'https://search.jd.com/Search?keyword=%E8%93%9D%E7%89%99%E9%BC%A0%E6%A0%87&enc=utf-8&wq=%E8%93%9D%E7%89%99%E9%BC%A0%E6%A0%87&pvid=405a663911e84dd3822389ef5b97c147' response = Request(url,headers=headers) res = urlopen(response) data = res.read().decode('utf-8') soup = BeautifulSoup(data,'html.parser') ddd=soup.find('ul',class_="gl-warp clearfix") bbb=ddd.select('li>.gl-i-wrap>.p-price>strong>i')#价格 ccc=ddd.select('li>.gl-i-wrap>.p-shop>span>a')#店名 get_rmb_date = [] for i in bbb: get_rmb_date.append(float(i.text)) get_shop_date = [] for i in ccc: get_shop_date.append(i.text) # 对数据进行排序 data = sorted(zip(get_shop_date, get_rmb_date), key=lambda x: x[1], reverse=True) get_shop_date, get_rmb_date = zip(*data) print(data) f = open('D:/mypython/mycode/2021058226.csv','w',encoding='utf-8') csv_write = csv.writer(f) csv_write.writerow(['商品店家','商品价格']) for i in data: csv_write.writerow(i) f.close() csv_file ='D:/mypython/mycode/2021058226.csv' csv_data=pd.read_csv(csv_file,low_memory=False) csv_df=pd.DataFrame(csv_data) dfl=csv_df.head(n=10) print(dfl) plt.figure(figsize = (10,6)) x = np.arange(10) y = np.array(dfl['商品店家']) xticks = list(dfl['商品价格']) print(x,y,xticks) p = [0,1,2,3,4,5,6,7,8,9] plt.xticks(p, y, rotation=20) plt.bar(p, xticks, color='red') plt.show() ``` 这样,柱状图就会按照商品价格的高低进行排列。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值