dataV下的轮播表利用(保姆级)

锦通  金牌会员 | 2024-11-15 02:25:16 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 881|帖子 881|积分 2643

需求:展示车辆的当天的里程数,取前10名,滚动播放。需求很简朴,思量到dataV组件里有该功能,以是就直接采用了。
  1. <dv-scroll-ranking-board :config="config" style="width:500px;height:220px" />
复制代码
具体代码:
  1. <template>
  2.         <div class="rightboxbottom">  
  3.             <div class="bg-image">
  4.                 <div class="text-gradient">
  5.                 <h1>车辆行驶排行榜</h1>
  6.                 </div>
  7.             </div>
  8.             <div class="body-box">
  9.               <dv-scroll-board class="dv-scr-board" :config="config" ref="scrollBoard" />
  10.             </div>
  11.             <div class="rightBottomNname-content">今日自动驾驶公里数: {{ mileCount }}</div>  
  12.         </div>
  13.       </template>
  14.     <script>
  15.     import axios from 'axios';
  16.     export default {
  17.         data() {
  18.             return {
  19.                 noticeData:[],
  20.                 config: {
  21.                     header: ['id', 'Speed', 'A-mile', 'T-mile'],
  22.                     data: [],
  23.                     index: true,
  24.                     columnWidth: [45],
  25.                     align: ['center'],
  26.                     carousel: 'page',
  27.                     rowNum: 5, //表格行数
  28.                     headerHeight: 35, // 表头高度
  29.                     // headerBGC: '#0f1325', //表头
  30.                     // oddRowBGC: '#0f1325', //奇数行
  31.                     // evenRowBGC: '#171c33', //偶数行
  32.                     waitTime: 4000 ,// 轮播时间
  33.                     // hoverPause : true
  34.                 },
  35.                 mileCount:100,
  36.                 }
  37.             },
  38.         async mounted() {  
  39.             await this.fetchdata();  
  40.             // 开始模拟异步数据返回  
  41.             this.startMockData();
  42.         } ,
  43.         methods: {  
  44.             startMockData() {  
  45.                 // 使用 setTimeout 来模拟定期获取数据,确保每次请求之间有适当的间隔  
  46.                 this.fetchDataAndScheduleNext();  
  47.             },  
  48.             async fetchDataAndScheduleNext() {  
  49.                 try {  
  50.                     await this.fetchdata();  
  51.                     // 设置下一次请求的时间  
  52.                     setTimeout(this.fetchDataAndScheduleNext, 20000); // 20 秒后  
  53.                 } catch (error) {  
  54.                     console.error('Error fetching data:', error);  
  55.                 }  
  56.             },  
  57.             async fetchdata() {  
  58.                 try {  
  59.                     console.log("开始获取数据")
  60.                 //获取今日自动驾驶总公里数
  61.                 const responseAmile = await axios.get('/api/driveSumMile') // 发送请求到 Mock.js 拦截的 URL  
  62.                 this.mileCount = responseAmile.data.mileCount.sumMileToday ;
  63.                 //获取驾驶排名数据
  64.                 const response = await axios.get('/api/driveRank') // 发送请求到 Mock.js 拦截的 URL  
  65.                 const driveRank_data = response.data.driveRank_data ;  
  66.                 console.log("*****获取到的数据driveRank_data****",driveRank_data)
  67.                 const result_data = driveRank_data.map(v => {
  68.                     return [
  69.                         v['vehicle_id'],
  70.                         v['speed'],
  71.                         v['auto_driving_mileage'],
  72.                         v['total_mileage'],
  73.                         ]
  74.                 })
  75.                 console.log("*****result_data****",result_data)
  76.                 // 假设 levelData 包含所需的数据
  77.                 this.updateChart(result_data); // 更新图表数据
  78.                 } catch (error) {  
  79.                 console.error('Error fetching user:', error)  
  80.                 }  
  81.             } ,   
  82.             updateChart(data) {  
  83.                 console.log("*****更新前this.config****",this.config);        
  84.                 this.config.data = data;
  85.                 console.log("*****更新后this.config.data****",this.config);                  
  86.                 this.config={...this.config}
  87.                 console.log("***对象赋值之后this.config***",this.config)
  88.             }  
  89.         }
  90.     }
  91.     </script>
  92.     <style lang="scss" scoped>
  93.     $box-width: 378px;
  94.     $box-height: 320px;
  95.     .rightboxbottom {
  96.       padding: 16px;
  97.       padding-top: 20px;
  98.       height: $box-height;
  99.       width: $box-width;
  100.       border-radius: 5px;
  101.     .bg-image {
  102.     background-image: url('../../assets/title.png') ;
  103.     background-size: 100% ;
  104.     background-repeat: no-repeat;
  105.     background-position: center;
  106.     width: 80%;
  107.     height: 10%; /* 根据需要设置高度 */
  108.     position: relative;
  109.     display: flex;
  110.     justify-content: center;
  111.     align-items: center;
  112.     left:10%;
  113.     top:5px;
  114.     }
  115.     .text-gradient h1 {
  116.         font-size: 18px; /* 根据需要调整字体大小 */
  117.         font-weight: bold;
  118.         color: transparent;
  119.         background-image: linear-gradient(to right, #1c5ee4, #07e2f1, #0080ff);
  120.         -webkit-background-clip: text;
  121.         background-clip: text;
  122.         display: inline-block;
  123.         letter-spacing: 0.2rem;
  124.         text-shadow: 0 0 30px #89deed;        
  125.     }
  126.     .body-box {
  127.         margin-top:12px;
  128.         // border-radius: 10px;
  129.         // overflow: visible;
  130.         .dv-scr-board {
  131.         width: 100%;
  132.         height: $box-height - 105px;
  133.         }
  134.     }
  135.     .rightBottomNname-content {
  136.     text-align: center;  
  137.     margin-top: 12px;  
  138.     font-size : 22px;
  139.     font-weight: 800;
  140.     font-family: 'Times New Roman', Times, serif;
  141.     color: transparent;
  142.     background-image: linear-gradient(to right, #1c5ee4, #07e2f1, #0080ff);
  143.     -webkit-background-clip: text;
  144.     background-clip: text;
  145.     // display: inline-block;
  146.     letter-spacing: 0.2rem;
  147.     text-shadow: 0 0 30px #89deed;  
  148.     }
  149.   }
  150.   </style>
复制代码
上述具体代码中,有几点需留意:
1. 数据更新使借助mockjs 来实现的,等后续接入后端接口,再须改动;
  
2. 在updateChart(data) 这个方法中,更新数据需利用 this.config={...this.config},若仅仅利用this.config.data = data 更新数据,往往结果不能更新;
  
3. config 中的data 数据的数据范例也应留意:应为 data:['foo','foo']
  
4. 更多具体内容可参考官方文档:[DataV 官方文档](http://datav.jiaminghi.com/guide/),上述的2、3两点文档里也有,只是为易错点,需特殊留意
  

本想着这样就可以了,运行了短时间,也很满足。但是过了一会,轮播就出差错了。表现如下:
这个48不是返回的数据,打印config.data ,数据也没问题,只是发现多了告诫:
  1. runtime-core.esm-bundler.js:47  [Vue warn]: Duplicate keys found during update: 48 Make sure keys are unique.
  2.   at <DvScrollBoard class="dv-scr-board" config= Object ref="scrollBoard" >
  3.   at <IndexDynamicDev2>
  4.   at <DvBorderBox12>
  5.   at <Index onVnodeUnmounted=fn<onVnodeUnmounted> ref=Ref< Proxy(Object) > >
  6.   at <RouterView>
  7.   at <App>
复制代码
查了很多资料,也没找到雷同的问题,只有官方论坛一个哥们有雷同,但好像也是因为欣赏器自动翻译引起的,这里不多叙述。也希望后续看到这篇文章的朋侪若出现雷同问题,并有思绪解释的,告知一下。
因为dataV的轮播表是封装好的,本领有限,改不动,(md,人还能让N 憋死 ???)气不过只能换个思绪,用别的给平替掉,发现dataV 中的排名轮播表也可以,就抱着试试的态度用了一下,代码和上述险些同等,具体如下:
  1. <template>
  2. <div class="rightboxbottom">
  3.     <div class="bg-image">
  4.         <div class="text-gradient">
  5.         <h1>车辆行驶排行榜</h1>
  6.         </div>
  7.     </div>
  8.     <div class="body-box">
  9.         <!-- <dv-scroll-board class="dv-scr-board" :config="config" ref="scrollBoard" /> -->
  10.         <dv-scroll-ranking-board class="dv-scr-rank-board" :config="ranking" />
  11.     </div>
  12.         <div class="rightBottomNname-content">今日自动驾驶公里数: {{ mileCount }}</div>  
  13. </div>
  14. </template>
  15.     <script>
  16.     import axios from 'axios';
  17.     export default {
  18.         data() {
  19.             return {
  20.                 ranking: {
  21.                     data: [
  22.                         {
  23.                         name: 'vid1',
  24.                         value: 55
  25.                         },
  26.                         {
  27.                         name: 'vid2',
  28.                         value: 120
  29.                         },
  30.                         {
  31.                         name: 'vid3',
  32.                         value: 78
  33.                         },
  34.                         {
  35.                         name: 'vid4',
  36.                         value: 66
  37.                         },
  38.                         {
  39.                         name: 'vid5',
  40.                         value: 80
  41.                         },
  42.                         {
  43.                         name: 'vid6',
  44.                         value: 80
  45.                         },
  46.                         {
  47.                         name: 'vid7',
  48.                         value: 80
  49.                         },
  50.                         {
  51.                         name: 'vid8',
  52.                         value: 80
  53.                         },
  54.                         {
  55.                         name: 'vid9',
  56.                         value: 80
  57.                         },
  58.                         {
  59.                         name: 'vid10',
  60.                         value: 80
  61.                         }
  62.                     ],
  63.                     carousel: 'page',
  64.                     unit: ' KM'
  65.                 },
  66.                 mileCount:100,
  67.                 }
  68.             },
  69.         async mounted() {  
  70.             await this.fetchdata();  
  71.             // // 开始模拟异步数据返回  
  72.             this.startMockData();
  73.         } ,
  74.         methods: {  
  75.             startMockData() {  
  76.                 // 使用 setTimeout 来模拟定期获取数据,确保每次请求之间有适当的间隔  
  77.                 this.fetchDataAndScheduleNext();  
  78.             },  
  79.             async fetchDataAndScheduleNext() {  
  80.                 try {  
  81.                     await this.fetchdata();  
  82.                     // 设置下一次请求的时间  
  83.                     setTimeout(this.fetchDataAndScheduleNext, 5000); // 20 秒后  
  84.                 } catch (error) {  
  85.                     console.error('Error fetching data:', error);  
  86.                 }  
  87.             },  
  88.             async fetchdata() {  
  89.                 try {  
  90.                     console.log("开始获取数据")
  91.                 //获取今日自动驾驶总公里数
  92.                 const responseAmile = await axios.get('/api/driveSumMile') // 发送请求到 Mock.js 拦截的 URL  
  93.                 this.mileCount = responseAmile.data.mileCount.sumMileToday ;
  94.                 //获取驾驶排名数据
  95.                 const response = await axios.get('/api/driveRank_2') // 发送请求到 Mock.js 拦截的 URL  
  96.                 const driveRank_data = response.data.driveRank_data ;  
  97.                 console.log("*****获取到的数据driveRank_data****",driveRank_data)
  98.                 let result_data = []           
  99.                 driveRank_data.forEach(v => {
  100.                     result_data.push({
  101.                         name: v['vehicle_id'],
  102.                         value: v['auto_driving_mileage']
  103.                     })                    
  104.                 });
  105.                 console.log("*****result_data****",result_data)
  106.                 // 假设 levelData 包含所需的数据
  107.                 this.updateChart(result_data); // 更新图表数据
  108.                 } catch (error) {  
  109.                 console.error('Error fetching user:', error)  
  110.                 }  
  111.             } ,   
  112.             updateChart(data) {  
  113.                 console.log("***赋值之前this.ranking***",this.ranking)
  114.                 this.ranking =  {
  115.                     data: data ,
  116.                     carousel: 'page',
  117.                     unit: ' KM'
  118.                 },
  119.                 console.log("***赋值之后this.ranking***",this.ranking)
  120.             },  
  121.         }
  122.     }
  123.     </script>
  124. <style lang="scss" scoped>
  125.     $box-width: 378px;
  126.     $box-height: 320px;
  127.     .rightboxbottom {
  128.     padding: 16px;
  129.     padding-top: 20px;
  130.     height: $box-height;
  131.     width: $box-width;
  132.     border-radius: 5px;
  133.     .bg-image {
  134.     background-image: url('../../assets/title.png') ;
  135.     background-size: 100% ;
  136.     background-repeat: no-repeat;
  137.     background-position: center;
  138.     width: 80%;
  139.     height: 10%; /* 根据需要设置高度 */
  140.     position: relative;
  141.     display: flex;
  142.     justify-content: center;
  143.     align-items: center;
  144.     left:10%;
  145.     top:5px;
  146.     }
  147.     .text-gradient h1 {
  148.     font-size: 18px; /* 根据需要调整字体大小 */
  149.     font-weight: bold;
  150.     color: transparent;
  151.     background-image: linear-gradient(to right, #1c5ee4, #07e2f1, #0080ff);
  152.     -webkit-background-clip: text;
  153.     background-clip: text;
  154.     display: inline-block;
  155.     letter-spacing: 0.2rem;
  156.     text-shadow: 0 0 30px #89deed;        
  157.     }
  158.     .body-box {
  159.     margin-top:15px;
  160.     margin-left:10px;
  161.     margin-right:10px;
  162.     // border-radius: 10px;
  163.     // overflow: visible;
  164.     .dv-scr-rank-board {
  165.     width: 100%;
  166.     height: $box-height - 115px;  
  167.     }
  168.     }
  169.     .rightBottomNname-content {
  170.     padding-top:15px;
  171.     height:50px;
  172.     text-align: center;  
  173.     font-size : 22px;
  174.     font-weight: 800;
  175.     font-family: 'Times New Roman', Times, serif;
  176.     color: transparent;
  177.     background-image: linear-gradient(to right, #1c5ee4, #07e2f1, #0080ff);
  178.     -webkit-background-clip: text;
  179.     background-clip: text;
  180.     // display: inline-block;
  181.     letter-spacing: 0.2rem;
  182.     text-shadow: 0 0 30px #89deed;  
  183.     }
  184.     }
  185. </style>
复制代码
运行结果展示如下图,因为默认有sort自动排序,倒也符合展示的意图;

本文到这里就竣事了,主要先容了dataV的轮播表的利用及留意事项。若有出现文中雷同环境的小伙伴,接待评论区讨论哈,下一篇见!!!
  1. <注>这里放一篇类似的文章,小伙伴可参考着看下<DataV数据可视化之轮播表>:
  2. https://blog.csdn.net/m0_46183499/article/details/112849298?spm=1001.2101.3001.6650.18&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-18-112849298-blog-131206356.235%5Ev43%5Epc_blog_bottom_relevance_base1&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-18-112849298-blog-131206356.235%5Ev43%5Epc_blog_bottom_relevance_base1&utm_relevant_index=24
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

锦通

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表