• vue3-admin商品管理后台项目(后台主控台开发与交互)


    现在我们继续来进行后台主控台的开发和交互
    首先是统计面板组件的开发:
    首先需要拿到数据,就从提供的接口拿:
    在api文件夹下创建一个index.js

    import axios from '~/axios'
    
    // 主控面板第一行数据接口
    export function getStatistics1(){
       
        return axios.get("/admin/statistics1")
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    然后再编辑Index.vue

    <template>
        <div>
            <el-row :gutter="20">
                <!-- 每块6-->
                <el-col :span="6" :offset="0" v-for="(item, index) in panels" :key="index">
                    <!-- 卡片组件 -->
                    <!-- 去掉边框 -->
                    <el-card shadow="hover" class="border-0">
                        <template #header>
                            <!-- 利用flex布局的左右布局justify-between -->
                            <div class="flex justify-between">
                                <!-- 字体大小改为text-sm -->
                                <span class="text-sm">{
       {
        item.title }}</span>
                                <!-- 后端返回回来的颜色值是unitColor -->
                                <el-tag :type="item.unitColor" effect="plain">
                                    <!-- 后端返回的值(年) -->
                                    {
       {
        item.unit }}
                                </el-tag>
                            </div>
                        </template>
                        <!-- card body -->
                        <!-- 加大字体,加粗,灰色 -->
                        <span class="text-3xl font-bold text-gray-500">
                        	<!-- 数值 -->
                            {
       {
        item.value }}
                        </span>
    
                        <!-- 分割线 -->
                        <el-divider />
                        <!-- 字体缩小,灰色 -->
                        <div class="flex justify-between text-sm text-gray-500">
                            <span>{
       {
        item.subTitle }}</span>
                            <span>{
       {
        item.subValue }}</span>
                        </div>
                    </el-card>
    
                </el-col>
            </el-row>
        </div>
    </template>
    <!-- 响应式api ,ref,一个变量响应式,普通类型,script里面count.value,template里面直接{
       {
       count}}-->
    <!-- 响应式api , reactive,用于对象 script里面form.count++,template里面直接{
       {
       form.count}}-->
    
    <script setup>
    import {
        ref } from 'vue'
    import {
        getStatistics1 } from "~/api/index.js"
    
    // 接收四个面板数据
    const panels = ref([])
    // 请求拦截器已经统一传了token,不用传多于参数
    getStatistics1()
        .then(res => {
       
            panels.value = res.panels
            // 拿到了四个面板的数据
            // console.log(res)
            // console.log(panels.value)
        })
    </script>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76

    主要是用到了卡片组件以及layout布局,因为element plus提供的layout布局默认是占24格,而我们第一层数据面板有四条数据,所以我们就是每一块占6个,所以里面的:span里面的值是6.看看效果:
    在这里插入图片描述
    拿到了数据。

    然后我们利用骨架屏优化体验:
    这里我们要用到element提供给我们的一个骨架屏组件:
    skeleton骨架屏
    在index.vue里面加上骨架屏:

    <template>
        <div>
            <el-row :gutter="20">
                <!-- 只有当内容全部为0的时候,才显示骨架屏 -->
                <template v-if="panels.length == 0">
                    <!-- 骨架屏 -->
                    <el-col :span="6" v-for="i in 4" :key="i">
                        <el-skeleton style="width:100%;" animated loading>
                            <template #template>
                                <!-- 卡片组件 -->
                                <!-- 去掉边框 -->
                                <el-card shadow="hover" class="border-0">
                                    <template #header>
                                        <!-- 利用flex布局的左右布局justify-between -->
                                        <div class="flex justify-between">
                                            <!-- 字体大小改为text-sm -->
                                            <el-skeleton-item variant="text" style="width: 50%" />
                                            <!-- 后端返回回来的颜色值是unitColor -->
                                            <el-skeleton-item variant="text" style="width: 10%" />
                                        </div>
                                    </template>
                                    <!-- card body -->
                                    <!-- 加大字体,加粗,灰色 -->
                                    <el-skeleton-item variant="h3" style="width: 80%" />
    
                                    <!-- 分割线 -->
                                    <el-divider />
                                    <!-- 字体缩小,灰色 -->
                                    <div class="flex justify-between text-sm text-gray-500">
                                        <el-skeleton-item variant="text" style="width: 50%" />
                                        <el
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
  • 相关阅读:
    小程序提示没有找到可以构建的NPM包解决方法
    在字节跳动干了3年测试开发,30岁即将退休的我,告诉你软件测试的真实就业前景
    将json数据导入到ES集群——解决方案对比&填坑日记
    微软出品自动化神器【Playwright+Java】系列(九)多线程、重定向、弹出新窗口、截图、新页面、录制、页面对象模式操作
    Java =》 String类
    Spark的应用架构和程序层次结构
    Apt适配子修饰PEG-PLGA纳米粒/载CCR5抗体的PLGA纳米颗粒的研究制备
    Java加密算法有几种?
    Web_单一视频文件mp4转换为m3u分段ts文件实现边下边播
    k8s 入门到实战--部署应用到 k8s
  • 原文地址:https://blog.csdn.net/qq_45628733/article/details/127540263