vue下载表格为excel文件,需要后端传递list集合

Ruoyi项目传List到后台并使用Excel模板下载数据的方法以及遇到的各种前后端数据交互问题 阅读详情

一次学习记录

原文链接:(16条消息) Vue--表格导出excel(导出table表格所有数据)_Hsu yiqi的博客-优快云博客_vue表格导出excelicon-default.png?t=M3C8https://blog.youkuaiyun.com/weixin_44791115/article/details/1016029802个js下载链接:

                链接地址:https://pan.baidu.com/s/1itpx7GqPhp44CWdK-NT5qw
                提取码:kzlr

俩js的代码放到最后面

目录

开始:

1.把2个js放到项目文件夹中src下,例:src/excel中

 2.安装3个依赖包:npm ,cnpm都可以

3.在页面中methods里添加事件方法,

4.在页面添加一个按钮,并绑定事件exportData,例

Export2Excel.js的内容

Blob.js的内容


开始:

1.把2个js放到项目文件夹中src下,例:src/excel中

 2.安装3个依赖包:npm ,cnpm都可以

 npm install -S file-saver
 npm install -S xlsx
 npm install -D script-loader

3.在页面中methods里添加事件方法,

根据自己情况修改:

        1.userList是data中自己定义的用来接收后端数据的变量

        2.require("@/excel/Export2Excel"),@代表src的文件位置

        3.tHeader代表excel的表头,与变量无关

        4.filterVal代表与表头对应的userList中的属性变量,(查看后端传递过来的数据)

        5.export_json_to_excel(tHeader, data, "论坛用户信息列表");," "中为excel表名

methods: {
	//触发按钮点击下载事件
        exportData() {
            this.excelData = this.userList;  //将你要导出的数组数据(historyList)赋值给excelDate
            this.export2Excel(); //调用export2Excel函数,填写表头(clomns里的type)和对应字段(historyList里的属性名)
        },
        //表格数据写入excel
        export2Excel() {
        var that = this;
        require.ensure([], () => {
            const {
            export_json_to_excel
            } = require("@/excel/Export2Excel");  
            //这里使用绝对路径( @表示src文件夹 ),使用@/+存放export2Excel的路径【也可以写成相对于你当前"xxx.vue"文件的相对路径,例如我的页面放在assets文件夹同级下的views文件夹下的“home.vue”里,那这里路径也可以写成"../assets/excel/Export2Excel"】
            const tHeader = ["账号", "回答数", "用户权限", "创建时间","经验值","id"]; // 导出的excel表头名信息
            const filterVal = [
            "account",
            "answercnt",
            "auth",
            "createtime",
            "experience",
            "id"
            ]; // 导出的excel表头字段名,需要导出表格字段名
            const list = that.excelData;
            const data = that.formatJson(filterVal, list);

            export_json_to_excel(tHeader, data, "论坛用户信息列表"); // 导出的表格名称,根据需要自己命名
        });
        },
        //格式转换,直接复制即可,不需要修改什么
        formatJson(filterVal, jsonData) {
        return jsonData.map(v => filterVal.map(j => v[j]));
        }
}

4.在页面添加一个按钮,并绑定事件exportData,例

 <el-row>
   <el-button type="success" @click="exportData" >下载Excel表格</el-button>
 </el-row>

=====这就可以使用了,点击按钮后浏览器会自动下载=====

Export2Excel.js的内容

/* eslint-disable */
require('script-loader!file-saver');
require('script-loader!./../excel/Blob');
require('script-loader!xlsx/dist/xlsx.core.min');
function generateArray(table) {
    let out = [];
    let rows = table.querySelectorAll('tr');
    let ranges = [];
    for (let R = 0; R < rows.length; ++R) {
        let outRow = [];
        let row = rows[R];
        let columns = row.querySelectorAll('td');
        for (let C = 0; C < columns.length; ++C) {
            let cell = columns[C];
            let colspan = cell.getAttribute('colspan');
            let rowspan = cell.getAttribute('rowspan');
            let cellValue = cell.innerText;
            if (cellValue !== "" && cellValue == +cellValue) cellValue = +cellValue;

            //Skip ranges
            ranges.forEach(function (range) {
                if (R >= range.s.r && R <= range.e.r && outRow.length >= range.s.c && outRow.length <= range.e.c) {
                    for (let i = 0; i <= range.e.c - range.s.c; ++i) outRow.push(null);
                }
            });

            //Handle Row Span
            if (rowspan || colspan) {
                rowspan = rowspan || 1;
                colspan = colspan || 1;
                ranges.push({s: {r: R, c: outRow.length}, e: {r: R + rowspan - 1, c: outRow.length + colspan - 1}});
            }
            ;

            //Handle Value
            outRow.push(cellValue !== "" ? cellValue : null);

            //Handle Colspan
            if (colspan) for (let k = 0; k < colspan - 1; ++k) outRow.push(null);
        }
        out.push(outRow);
    }
    return [out, ranges];
};

function datenum(v, date1904) {
    if (date1904) v += 1462;
    let epoch = Date.parse(v);
    return (epoch - new Date(Date.UTC(1899, 11, 30))) / (24 * 60 * 60 * 1000);
}

function sheet_from_array_of_arrays(data, opts) {
    let ws = {};
    let range = {s: {c: 10000000, r: 10000000}, e: {c: 0, r: 0}};
    for (let R = 0; R !== data.length; ++R) {
        for (let C = 0; C !== data[R].length; ++C) {
            if (range.s.r > R) range.s.r = R;
            if (range.s.c > C) range.s.c = C;
            if (range.e.r < R) range.e.r = R;
            if (range.e.c < C) range.e.c = C;
            let cell = {v: data[R][C]};
            if (cell.v == null) continue;
            let cell_ref = XLSX.utils.encode_cell({c: C, r: R});

            if (typeof cell.v === 'number') cell.t = 'n';
            else if (typeof cell.v === 'boolean') cell.t = 'b';
            else if (cell.v instanceof Date) {
                cell.t = 'n';
                cell.z = XLSX.SSF._table[14];
                cell.v = datenum(cell.v);
            }
            else cell.t = 's';

            ws[cell_ref] = cell;
        }
    }
    if (range.s.c < 10000000) ws['!ref'] = XLSX.utils.encode_range(range);
    return ws;
}

function Workbook() {
    if (!(this instanceof Workbook)) return new Workbook();
    this.SheetNames = [];
    this.Sheets = {};
}

function s2ab(s) {
    let buf = new ArrayBuffer(s.length);
    let view = new Uint8Array(buf);
    for (let i = 0; i !== s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;
    return buf;
}

export function export_table_to_excel(id) {
    let theTable = document.getElementById(id);
    let oo = generateArray(theTable);
    let ranges = oo[1];

    /* original data */
    let data = oo[0];
    let ws_name = "SheetJS";
    console.log(data);

    let wb = new Workbook(), ws = sheet_from_array_of_arrays(data);

    /* add ranges to worksheet */
    // ws['!cols'] = ['apple', 'banan'];
    ws['!merges'] = ranges;

    /* add worksheet to workbook */
    wb.SheetNames.push(ws_name);
    wb.Sheets[ws_name] = ws;

    let wbout = XLSX.write(wb, {bookType: 'xlsx', bookSST: false, type: 'binary'});

    saveAs(new Blob([s2ab(wbout)], {type: "application/octet-stream"}), "test.xlsx")
}

function formatJson(jsonData) {
    console.log(jsonData)
}
export function export_json_to_excel(th, jsonData, defaultTitle) {

    /* original data */

    let data = jsonData;
    data.unshift(th);
    let ws_name = "SheetJS";

    let wb = new Workbook(), ws = sheet_from_array_of_arrays(data);


    /* add worksheet to workbook */
    wb.SheetNames.push(ws_name);
    wb.Sheets[ws_name] = ws;

    let wbout = XLSX.write(wb, {bookType: 'xlsx', bookSST: false, type: 'binary'});
    let title = defaultTitle || '列表';
    saveAs(new Blob([s2ab(wbout)], {type: "application/octet-stream"}), title + ".xlsx")
}

Blob.js的内容

/*! @source http://purl.eligrey.com/github/Blob.js/blob/master/Blob.js */
(function(view){view.URL=view.URL||view.webkitURL;if(view.Blob&&view.URL){try{new Blob;return}catch(e){}}var BlobBuilder=view.BlobBuilder||view.WebKitBlobBuilder||view.MozBlobBuilder||(function(view){var get_class=function(object){return Object.prototype.toString.call(object).match(/^\[object\s(.*)\]$/)[1]},FakeBlobBuilder=function BlobBuilder(){this.data=[]},FakeBlob=function Blob(data,type,encoding){this.data=data;this.size=data.length;this.type=type;this.encoding=encoding},FBB_proto=FakeBlobBuilder.prototype,FB_proto=FakeBlob.prototype,FileReaderSync=view.FileReaderSync,FileException=function(type){this.code=this[this.name=type]},file_ex_codes=("NOT_FOUND_ERR SECURITY_ERR ABORT_ERR NOT_READABLE_ERR ENCODING_ERR "+"NO_MODIFICATION_ALLOWED_ERR INVALID_STATE_ERR SYNTAX_ERR").split(" "),file_ex_code=file_ex_codes.length,real_URL=view.URL||view.webkitURL||view,real_create_object_URL=real_URL.createObjectURL,real_revoke_object_URL=real_URL.revokeObjectURL,URL=real_URL,btoa=view.btoa,atob=view.atob,ArrayBuffer=view.ArrayBuffer,Uint8Array=view.Uint8Array;FakeBlob.fake=FB_proto.fake=true;while(file_ex_code--){FileException.prototype[file_ex_codes[file_ex_code]]=file_ex_code+1}if(!real_URL.createObjectURL){URL=view.URL={}}URL.createObjectURL=function(blob){var type=blob.type,data_URI_header;if(type===null){type="application/octet-stream"}if(blob instanceof FakeBlob){data_URI_header="data:"+type;if(blob.encoding==="base64"){return data_URI_header+";base64,"+blob.data}else{if(blob.encoding==="URI"){return data_URI_header+","+decodeURIComponent(blob.data)}}if(btoa){return data_URI_header+";base64,"+btoa(blob.data)}else{return data_URI_header+","+encodeURIComponent(blob.data)}}else{if(real_create_object_URL){return real_create_object_URL.call(real_URL,blob)}}};URL.revokeObjectURL=function(object_URL){if(object_URL.substring(0,5)!=="data:"&&real_revoke_object_URL){real_revoke_object_URL.call(real_URL,object_URL)}};FBB_proto.append=function(data){var bb=this.data;if(Uint8Array&&(data instanceof ArrayBuffer||data instanceof Uint8Array)){var str="",buf=new Uint8Array(data),i=0,buf_len=buf.length;for(;i<buf_len;i++){str+=String.fromCharCode(buf[i])}bb.push(str)}else{if(get_class(data)==="Blob"||get_class(data)==="File"){if(FileReaderSync){var fr=new FileReaderSync;bb.push(fr.readAsBinaryString(data))}else{throw new FileException("NOT_READABLE_ERR")}}else{if(data instanceof FakeBlob){if(data.encoding==="base64"&&atob){bb.push(atob(data.data))}else{if(data.encoding==="URI"){bb.push(decodeURIComponent(data.data))}else{if(data.encoding==="raw"){bb.push(data.data)}}}}else{if(typeof data!=="string"){data+=""}bb.push(unescape(encodeURIComponent(data)))}}}};FBB_proto.getBlob=function(type){if(!arguments.length){type=null}return new FakeBlob(this.data.join(""),type,"raw")};FBB_proto.toString=function(){return"[object BlobBuilder]"};FB_proto.slice=function(start,end,type){var args=arguments.length;if(args<3){type=null}return new FakeBlob(this.data.slice(start,args>1?end:this.data.length),type,this.encoding)};FB_proto.toString=function(){return"[object Blob]"};FB_proto.close=function(){this.size=this.data.length=0};return FakeBlobBuilder}(view));view.Blob=function Blob(blobParts,options){var type=options?(options.type||""):"";var builder=new BlobBuilder();if(blobParts){for(var i=0,len=blobParts.length;i<len;i++){builder.append(blobParts[i])}}return builder.getBlob(type)}}(typeof self!=="undefined"&&self||typeof window!=="undefined"&&window||this.content||this));

Vue项目中Excel数据导入实战:前端解析、分片上传与性能优化 数据导入是Web开发中的常见需求,尤其在前后端分离架构中,它涉及文件处理、数据解析与异步交互。其核心原理在于将外部数据(如Excel文件)高效、准确地转换为系统可用的结构化数据。从技术价值看,优秀的数据导入功能能显著提升运营效率、降低人工错误,并改善用户体验。在应用场景上,后台管理系统的批量操作、电商平台商品上架、数据分析报表迁移等都依赖于此。本文聚焦于Vue生态,深入探讨如何利用SheetJS的xlsx库实现前端Excel解析,并结合分片上传、Web Worker等高级优化方案,构建一个健壮、高性能的导入 阅读详情

相关推荐

Vue文件预览全攻略:PDF、Excel、Word、图片混合方案与避坑实践

文件预览是现代Web应用中的常见需求,其核心原理是让浏览器或特定组件能够解析并展示不同格式文件的内容。从技术实现上,主要分为浏览器原生渲染、服务器端转换和纯前端解析三大路径,每种方案在兼容性、性能与架构复杂度上各有取舍。对于Vue开发者而言,采用混合策略能有效平衡开发效率与用户体验:利用pdf.js处理PDF,结合sheetjs与luckysheet应对Excel,并选用mammoth.js或docx-preview渲染Word文档。在工程实践中,需特别注意内存泄漏、大文件性能、XSS安全等常见问题,并通过

weixin_34343308的博客 448

vue前台向后台传list

实体类中有list&amp;amp;lt;,&amp;amp;gt;型的实体,直接接收是接收不到的。 因此我们需要了解前台传过来的参数是什么类型的。 1.一般情况下,前台传过来的参数是string型的,如下参数为tempData const tempData = Object.assign({}, this.temp) const tempDatas = JSON.stringify(tempData) carMod...

是卿卿 3万+

3小时搭建SpringBoot+Vue3后台管理系统:毕业设计实战教程

前后端分离架构是现代Web应用开发的主流模式,其核心原理是将用户界面(前端)与业务逻辑和数据(后端)解耦,通过RESTful API进行通信。这种架构模式的技术价值在于提升了开发效率、便于团队协作,并增强了系统的可维护性和可扩展性。在应用场景上,它广泛适用于企业后台管理系统、中台服务以及各类需要快速迭代的Web应用。本教程聚焦于一个典型的实战案例——基于SpringBoot和Vue3的后台管理系统,它整合了**增删改查**和**用户管理**等核心功能,为初学者和毕业生提供了一个可直接运行、模块清晰的脚手架项

weixin_30847939的博客 364

前端vue.js传参list集合 ,springBoot后端接受方式。

前端vue.js传参list集合 ,springBoot后端接受方式

weixin_45907672的博客 8601

Java SSM+Vue建筑公司官网项目实战:从环境搭建到功能测试全流程

企业级Web应用开发通常采用分层架构与前后端分离模式,以实现高内聚、低耦合的系统设计。其核心原理在于通过RESTful API进行数据交互,后端负责业务逻辑与数据持久化,前端专注于用户界面与交互体验。这种架构的技术价值在于提升开发效率、便于团队协作与维护,并支持模块化扩展。在Java技术生态中,SSM(Spring、Spring MVC、MyBatis)框架组合因其成熟稳定、文档丰富,成为构建后端服务的经典选择,广泛应用于各类企业级应用场景,如内容管理系统、电商平台及企业官网。本文聚焦于一个典型的**建筑公

weixin_30621959的博客 497

SpringBoot+Vue在线考试系统:1小时快速部署与全栈实践指南

前后端分离架构已成为现代Web应用开发的主流模式,其核心原理在于将用户界面与业务逻辑解耦,通过RESTful API进行通信。这种架构模式的技术价值在于提升了开发效率、便于团队协作,并增强了系统的可维护性和可扩展性。在众多应用场景中,在线考试系统是典型代表,它综合运用了用户管理、题库管理、试卷生成和自动阅卷等关键技术。本文聚焦于一个基于SpringBoot和Vue.js实现的在线考试系统项目,该项目提供了完整的源码、数据库和文档,旨在帮助初学者快速搭建并理解全栈开发流程。通过手把手的部署指南和常见问题排查,

weixin_30675247的博客 335

前端vue给后端list集合对象传值

今天编写项目时遇到一些问题,就是不知道前端怎么给后端的list赋值 因为前面做的都是单个查询 如下 package com.chx.disService.query; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.io.Serializable; @ApiModel(value = "数据查询对象", desc

Rocky balboa 9520

SpringBoot+Vue健身房管理系统:从零部署到二次开发全指南

前后端分离架构是现代Web开发的主流模式,它将应用逻辑拆分为独立的前端用户界面和后端服务,通过API进行通信。这种模式的核心原理在于前端(如Vue.js)专注于视图渲染和交互,后端(如SpringBoot)则处理业务逻辑与数据持久化,两者通过RESTful API进行数据交换。其技术价值在于提升了开发效率、实现了技术栈解耦,并便于团队协作与独立部署。典型的应用场景包括各类企业级后台管理系统、电商平台以及内容管理平台。本文以健身房管理系统为具体案例,深入解析了如何基于SpringBoot和Vue技术栈,从环境

weixin_30411819的博客 358

vue.js向后台传list参数

由前台向后台传递List参数。

weixin_43776272的博客 3323

SpringBoot+Vue新能源汽车充电服务系统:从环境搭建到功能测试全流程

前后端分离架构是现代Web应用开发的主流模式,其核心原理是将用户界面(前端)与业务逻辑和数据(后端)解耦,通过API进行通信。这种架构模式的技术价值在于提升了开发效率、便于团队协作,并增强了系统的可维护性和可扩展性。在工程实践中,SpringBoot作为后端框架,以其快速构建和简化配置著称,而Vue.js则以其响应式和组件化在前端开发中广受欢迎。两者的结合,尤其适用于需要快速实现业务闭环的管理系统开发,例如物联网平台、电商后台或各类服务管理系统。本文聚焦于一个典型应用场景——新能源汽车充电服务系统,详细阐述

weixin_33834628的博客 467

SpringBoot+Vue仓库管理系统实战:从零部署到核心代码解析

企业级应用开发中,前后端分离架构已成为主流范式,它通过清晰的职责划分提升了开发效率和系统可维护性。其核心原理在于后端专注于提供RESTful API处理业务逻辑与数据持久化,前端则负责用户界面与交互,两者通过HTTP协议进行数据通信。这种模式的技术价值在于支持团队并行开发、便于技术栈选型以及增强系统的可扩展性。在诸如电商后台、OA系统、**仓库管理系统(WMS)** 等各类管理平台中广泛应用。本文聚焦于一个采用 **SpringBoot** 与 Vue 实现的完整仓库管理系统开源项目,详细拆解其环境搭建、部

weixin_33860553的博客 402

VUE: 将Json (后台返回的数据-list) 数据转换为Excel文件并实现前端下载

【代码】VUE: 将Json (后台返回的数据-list) 数据转换为Excel文件并实现前端下载。

hac_kill_you的博客 1686

PaddleOCR GPU部署:从环境配置到避坑实战指南

本文详细介绍了PaddleOCR GPU部署的全过程,从环境配置到避坑实战指南。通过分析常见的部署失败原因,提供硬件兼容性自查、软件环境精配方案以及路径配置的解决方案,帮助用户高效完成GPU加速的OCR任务部署,避免90%的常见错误。

weixin_30839881的博客 417

Spring Boot+Vue前后端分离家居物流管理系统毕业设计实战

前后端分离架构已成为现代Web应用开发的主流模式,其核心原理是将用户界面与业务逻辑解耦,通过RESTful API进行数据交互。这种架构模式的技术价值在于提升了开发效率、便于团队协作,并增强了系统的可维护性和可扩展性。在工程实践中,它广泛应用于各类企业级管理系统、电商平台等场景。本文聚焦于一个典型的应用实例——家居物流管理系统,该项目基于Spring Boot和Vue.js技术栈构建,为计算机相关专业的毕业设计提供了一个完整、可运行的参考方案。项目涵盖了从订单管理、仓储配送到数据分析的全流程,并提供了详细的

weixin_34331102的博客 592

Cadence数模混合仿真实战:从Verilog到ADE L的完整流程解析

本文详细解析了Cadence数模混合仿真的完整流程,从Verilog代码编写到ADE L仿真环境配置。通过实战案例讲解如何创建Config文件、搭建混合信号原理图,并分享提高仿真效率的技巧和常见问题排查方法,帮助工程师掌握这一关键芯片设计验证技术。

weixin_29246195的博客 986

关于LIO-SAM编译时出现错误 /usr/bin/ld: 找不到 -lBoost::timer

关于LIO-SAM编译时出现错误: 下载LIO-SAM代码 进入LIO-SAM文件夹,通过以下代码编译: mkdir build cd build cmake .. make 报错: /usr/bin/ld: 找不到 -lBoost::timer collect2: error: ld returned 1 exit status CMakeFiles/lio_sam_imuPreintegration.dir/build.make:759: recipe for target 'devel/lib/li

wwtx的博客 3648

SpringBoot+Vue3前后端分离项目实战:课程管理系统开发指南

前后端分离架构已成为现代Web应用开发的主流模式,它通过将用户界面与业务逻辑解耦,实现了开发效率与维护性的双重提升。其核心原理在于前端负责视图渲染与用户交互,后端专注于API与数据处理,两者通过RESTful API进行通信。这种架构的技术价值在于支持团队并行开发、技术栈灵活选型以及更好的可扩展性,广泛应用于管理系统、电商平台等场景。本文聚焦于一个典型的**课程管理系统**实战案例,详细演示了如何整合**SpringBoot**后端与**Vue3**前端,从环境搭建、功能实现到部署上线的完整流程,为Java

weixin_33769125的博客 375

Vue3实战:从零构建ElementPlus后台管理系统全流程

本文详细介绍了从零开始使用Vue3和ElementPlus构建后台管理系统的全流程。内容涵盖环境准备、项目初始化、Vite配置、SCSS样式体系搭建、ElementPlus组件库引入与配置,以及封装可复用的SvgIcon组件进行图标管理,旨在帮助开发者快速搭建现代化、可维护的中后台应用。

weixin_29011239的博客 158

Spring Boot + Vue3 汽车租赁系统:全栈开发实战与毕业设计模板

前后端分离架构是现代Web应用开发的主流范式,其核心思想是将用户界面(前端)与业务逻辑和数据(后端)解耦,通过API进行通信。这种架构模式提升了开发效率、团队协作的灵活性以及系统的可维护性。在技术实现上,Spring Boot作为Java领域广受欢迎的微服务框架,以其自动配置和快速启动的特性,简化了RESTful API服务的构建。而Vue3作为渐进式前端框架,凭借其组合式API和出色的响应式系统,为构建动态用户界面提供了强大支持。将两者结合,能够高效构建结构清晰、易于扩展的企业级应用。本博客聚焦于一个典型

weixin_33860528的博客 323

微调大模型如何准备数据集——常用数据集,Alpaca和ShareGPT

在大模型微调中,我们一般使用Alpaca 和 ShareGPT和两种格式的数据集。

Science prince的博客 1095

在 SAP 中修改 Profile 文件中的主机名需要谨慎操作,需需确保所有相关配置保持一致

在SAP系统中修改Profile文件主机名需谨慎操作,主要步骤包括:1)停止相关SAP服务;2)重命名并编辑实例级Profile文件(如ER1_D00_OLDHOST改为ER1_D00_LRPSAP),修改所有含旧主机名的参数;3)可选更新默认Profile文件;4)在Windows系统中调整注册表配置;5)验证一致性后重启服务。关键注意:保持大小写统一、修改前备份文件、集群环境需同步所有节点。通过系统日志确认新主机名生效且无报错。

金牌架构师 1049

SpringBoot与Vue实战:仓库管理系统全栈开发与部署指南

前后端分离架构是现代Web应用开发的主流范式,其核心原理是将用户界面(前端)与业务逻辑和数据(后端)解耦,通过API进行通信。这种架构模式的技术价值在于提升了开发效率、增强了系统可维护性,并支持多端复用。在电商、ERP、仓储管理等应用场景中,它被广泛用于构建复杂的管理系统。本文以SpringBoot和Vue技术栈为核心,结合MySQL数据库,深入解析如何构建一个功能完整的仓库管理系统。通过剖析库存管理、权限控制等核心模块,文章详细展示了从环境搭建、项目初始化到核心业务逻辑(如入库出库的事务处理)实现的全过程

keke1314520的博客 392

【Zephyr电源与功耗专题】13_PMU电源驱动介绍

本文介绍的PMU芯片包含2路DCDC和6路LDO,在Zephyr实时操作系统下实现了完整的电源管理解决方案。

zero的博客 842

Spring Boot+Vue教学业绩系统实战:从环境搭建到二次开发全指南

在数字化转型浪潮中,Web应用开发已成为提升组织效率的关键技术。其核心原理在于通过前后端分离架构,将用户界面与业务逻辑解耦,实现高内聚、低耦合的系统设计。这种架构模式的技术价值在于提升了开发效率、便于团队协作与维护,并支持快速迭代。在众多应用场景中,教学管理系统的数字化改造尤为典型,它能够将传统繁琐的纸质流程升级为可追溯、可统计的在线平台。本文聚焦于一个基于Spring Boot和Vue.js的教学业绩备案系统实战项目,详细解析如何利用主流技术栈实现教学业绩的流程化管理,涵盖环境配置、核心功能测试及性能优化

weixin_30727835的博客 431

第三方 API 调用 OpenClaw 出现 LLM request timed out 的解决方案

本文主要介绍了第三方 API 调用 OpenClaw 出现 LLM request timed out 的解决方案,希望能对使用OpenClaw的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 8万+

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

基于SpringBoot+Vue的红色旅游系统:毕业设计全栈开发实战指南

这次我们来看一个基于SpringBoot和Vue的红色革命老区旅游系统。对于计算机专业的同学来说,毕业设计选题是个技术活,既要体现技术栈的完整性,又要贴合实际应用场景。这个项目将红色文化与现代旅游服务相结合,是一个兼具技术实践和社会意义的选题。 这个项目本质上是一个前后端分离的Web应用,后端采用SpringBoot框架,前端使用Vue.js,数据库选用MySQL。它不是一个简单的信息展示网站,而是一个功能相对完整的旅游服务平台,核心在于对红色革命老区这一特定主题的旅游资源进行数字化管理和服务。对于毕设而言

weixin_34178244的博客 303

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

上一篇: mybatis返回刚插入数据的自增长主键
下一篇: vue+elementui,上传excel文件显示内容并添加数据
619008336
博客等级 码龄5年 33粉丝 41原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值