当前位置: 首页 > news >正文

vue3页面html导出word文档

一、第三方包下载

使用npm下载以下插件:

npm install jszip-utils docxtemplater pizzip file-saver docxtemplater-image-module-free

二、总页面组件代码

<template>

  <summaryDetails

    :securityId="securityId"

    :symbol="symbol"

    id="summaryDetails"

  />

</template>

<script setup lang="ts">

import summaryDetails from './summaryDetails.vue'

const props = defineProps({

  symbol: {

    // 证券代码

    type: String,

    default: '000001'

  },

  securityId: {

    // 证券id

    type: [String, Number],

    required: true

  }

})

</script>

<style scoped lang="less"></style>

三、summaryDetails组件代码

<template>

  <ItemCard title="综述" v-loading="loading">

    <template #rightPart>

      <el-date-picker

        v-model="dateRange"

        value-format="YYYY"

        type="yearrange"

        range-separator="至"

        start-placeholder="开始年份"

        end-placeholder="结束年份"

        :editable="false"

        :disabled-date="disabledDate"

        @change="changeDate"

        @clear="changeDate1"

        class="date-select"

        ref="datePicker"

      />

      <div class="upload-box" @click="exportDataList">

        <span class="icon iconfont icon-baogaodaochu"></span>

        <span class="upload-text">报告导出</span>

      </div>

    </template>

    <template #otherContent>

      <div class="item">

        <div class="title">简述</div>

        <div class="table-box">

          <AISketch :sketch-list="sketchList"></AISketch>

        </div>

      </div>

      <div class="item">

        <div class="title">综述详情</div>

        <div class="table-box">

          <div

            class="item-detail"

            v-for="(item, index) in summaryDetailsList"

            :key="index"

          >

            <div class="detail-title">

              {{ item.title }}

              <div class="line"></div>

            </div>

            <div class="all-detail" v-html="item.overview"></div>

            <div

              class="children-item"

              v-for="(item1, index1) in item.items"

              :key="index1"

            >

              <div class="children-title">

                <div class="dot"></div>

                {{ item1.title }}

              </div>

              <div class="children-detail" v-html="item1.desc"></div>

            </div>

          </div>

        </div>

      </div>

    </template>

  </ItemCard>

</template>

<script setup lang="ts">

import JSZipUtils from 'jszip-utils'

import docxtemplater from 'docxtemplater'

import PizZip from 'pizzip'

import saveAs from 'file-saver'

import ImageModule from 'docxtemplater-image-module-free'

import { ElMessage } from 'element-plus'

import ItemCard from './../RiskWarn/ItemCard.vue'

import AISketch from '@/pages/monitor/views/stockMonitor/components/AISummary/AISketch.vue'

import { queryAISummaryData } from '@/pages/monitor/monitorApi/stockMonitor'

const props = defineProps({

  symbol: {

    // 证券代码

    type: String,

    default: ''

  },

  securityId: {

    // 证券id

    type: [String, Number],

    required: true

  },

  sketchList: {

    type: Array as any,

    default: () => {}

  }

})

interface ImageOptions {

  centered: boolean

  getImage: (chartId: string) => ArrayBuffer | false

  getSize: () => [number, number]

}

const loading = ref(false) // 加载状态

const dateRange = ref<any>([]) // 年份范围

const securityId1 = ref(props.securityId) // 证券id

const symbol1 = ref(props.symbol) // 证券代码

const sketchList = ref<any>(props.sketchList) // 简述数据

const summaryDetailsList = ref<any>([]) // 综述详情数据

const cleanedData = ref<any>([]) // 综述详情数据

const datePicker = ref() // 时间筛选框ref

// 监听参数重新赋值

watch(

  () => [props.securityId, props.symbol, props.sketchList],

  (newValue: any, oldValue: any) => {

    if (newValue[0] != oldValue[0]) {

      securityId1.value = newValue[0]

      getAISummaryData() //查询接口

    }

    if (newValue[1] != oldValue[1]) {

      symbol1.value = newValue[1]

    }

    if (newValue[2] != oldValue[2]) {

      sketchList.value = newValue[2]

    }

    dateRange.value = []

  },

  { deep: true }

)

// 控制当前时间之后不能选

const disabledDate = (time: any) => {

  const year = time.getFullYear()

  return year < 2019 || year > new Date().getFullYear()

}

// 改变时间

const changeDate = (value: any) => {

  if (value) {

    dateRange.value = toRaw(value)

    getAISummaryData()

    datePicker.value.blur()

  }

}

// 清空时间

const changeDate1 = () => {

  dateRange.value = []

  getAISummaryData()

}

const base64DataURLToArrayBuffer = (dataURL: string) => {

  const base64Regex = /^data:image\/(png|jpg|svg|svg\+xml);base64,/

  if (!base64Regex.test(dataURL)) {

    return false

  }

  const stringBase64 = dataURL.replace(base64Regex, '')

  let binaryString

  if (typeof window !== 'undefined') {

    binaryString = window.atob(stringBase64)

  } else {

    binaryString = new Buffer(stringBase64, 'base64').toString('binary')

  }

  const len = binaryString.length

  const bytes = new Uint8Array(len)

  for (let i = 0; i < len; i++) {

    const ascii = binaryString.charCodeAt(i)

    bytes[i] = ascii

  }

  return bytes.buffer

}

const downLoadDoc = (demoUrl: string, docxData: any, fileName: string) => {

  // 读取并获得模板文件的二进制内容

  JSZipUtils.getBinaryContent(demoUrl, function (error: any, content: any) {

    // 抛出异常

    if (error) {

      throw error

    }

    let opts: ImageOptions = {

      centered: false,

      getImage: (chartId: string) => {

        return base64DataURLToArrayBuffer(chartId) || false

      },

      getSize: () => {

        return [230, 120]

      }

    }

    // 创建一个PizZip实例,内容为模板的内容

    let zip = new PizZip(content)

    // 创建并加载docxtemplater实例对象

    let doc = new docxtemplater()

      .loadZip(zip)

      .attachModule(new ImageModule(opts))

    // 去除未定义值所显示的undefined

    doc.setOptions({

      nullGetter: function () {

        return ''

      }

    })

    // 设置模板变量的值,对象的键需要和模板上的变量名一致,值就是你要放在模板上的值

    doc.setData({

      ...docxData

    })

    // eslint-disable-next-line no-useless-catch

    try {

      // 用模板变量的值替换所有模板变量

      doc.render()

    } catch (error) {

      // 抛出异常

      throw error

    }

    // 生成一个代表docxtemplater对象的zip文件(不是一个真实的文件,而是在内存中的表示)

    let out = doc.getZip().generate({

      type: 'blob',

      mimeType:

        'application/vnd.openxmlformats-officedocument.wordprocessingml.document'

    })

    // 将目标文件对象保存为目标类型的文件,并命名

    saveAs(out, fileName)

  })

}

// 导出

const exportDataList = async () => {

  loading.value = true

  let fileName = `${

    dateRange.value && dateRange.value.length > 0

      ? `${dateRange.value[0]}-${dateRange.value[1]}综述`

      : '今年以来综述'

  }`

  // 去掉 <span style="color: #ff0000"></span> 标签

  const cleanedItems = sketchList.value.map((item: any) => ({

    ...item,

    desc: item.desc.replace(/<span style="color: #ff0000">(.*?)<\/span>/g, '$1')

  }))

  // 去掉 <br/> 标签

  cleanedData.value = summaryDetailsList.value.map((item: any) => {

    // 解决更改对象导致原数组换行标签消失问题(重新复制一份对象进行删除标签)

    const newItem = JSON.parse(JSON.stringify(item))

    return removeBrTags(newItem)

  })

  // 下载word文档

  downLoadDoc(

    'public/ai-report.docx',

    { items: cleanedItems, infos: cleanedData.value },

    fileName

  )

  loading.value = false

}

// 去掉<br/>标签方法

const removeBrTags = (obj: any) => {

  if (typeof obj === 'string') {

    return obj.replace(/<br\/>/g, '') // 去掉 <br/> 标签

  } else if (typeof obj === 'object' && obj !== null) {

    for (const key in obj) {

      if (Object.prototype.hasOwnProperty.call(obj, key)) {

        obj[key] = removeBrTags(obj[key]) // 递归处理

      }

    }

  }

  return obj

}

// 查询数据

const getAISummaryData = () => {

  loading.value = true

  sketchList.value = []

  summaryDetailsList.value = []

  queryAISummaryData(

    dateRange.value[1],

    securityId1.value,

    dateRange.value[0],

    symbol1.value

  ).then((res: any) => {

    if (res.code === 200) {

      sketchList.value = res.data.items

      summaryDetailsList.value = res.data.data

    } else {

      ElMessage({

        type: 'error',

        message: res.message

      })

    }

    loading.value = false

  })

}

onMounted(() => {

  getAISummaryData()

})

</script>

<style scoped lang="less">

.upload-box {

  margin-left: 20px;

  display: flex;

  align-items: center;

  cursor: pointer;

  font-weight: normal;

  .icon-baogaodaochu {

    font-size: 14px;

    color: #3a5bb7;

  }

  .upload-text {

    font-size: 12px;

    color: #3a5bb7;

    margin-left: 3px;

  }

}

.item {

  border: 1px solid #ebeef8;

  border-top: none;

  .title {

    display: flex;

    align-items: center;

    padding-left: 26px;

    height: 38px;

    background: #f4f7fc;

    border: 1px solid #ebeef8;

    border-left: none;

    border-right: none;

    font-weight: bold;

    font-size: 14px;

    color: #333333;

    position: relative;

    &::before {

      content: '';

      position: absolute;

      left: 15px;

      top: 50%;

      margin-top: -5px;

      width: 4px;

      height: 10px;

      background: #3a5bb7;

      border-radius: 0px 2px 2px 0px;

    }

  }

  .table-box {

    padding: 15px;

    .item-detail {

      margin-bottom: 20px;

      &:last-child {

        margin-bottom: 0;

      }

      .detail-title {

        width: 80px;

        height: 30px;

        background: rgba(58, 91, 183, 0.06);

        border-radius: 6px;

        font-size: 13px;

        color: #3a5bb7;

        display: flex;

        align-items: center;

        justify-content: center;

        margin-right: 12px;

      }

      .all-detail {

        margin: 10px 0;

      }

      .children-item {

        margin-bottom: 10px;

        font-size: 14px;

        color: #333333;

        &:last-child {

          margin-bottom: 0;

        }

        .children-title {

          margin: 5px 0;

          display: flex;

          align-items: center;

          .dot {

            width: 4px;

            height: 4px;

            background: #333333;

            margin-right: 10px;

          }

        }

      }

    }

  }

}

</style>

四、ItemCard组件代码

<template>

  <div class="item-box">

    <div class="pub-item-title">

      {{ title }}

      <div class="right-part">

        <slot name="rightPart"></slot>

      </div>

    </div>

    <div class="content-box" id="content-to-export">

      <div

        class="overview-box"

        v-if="

          title !== '综述'

        "

      >

        <div class="title">{{ title }}</div>

        <div class="content" v-html="aiText"></div>

      </div>

      <slot name="otherContent"></slot>

    </div>

  </div>

</template>

<script setup lang="ts">

const props = defineProps({

  title: {

    type: String,

    default: ''

  },

  aiText: {

    type: String,

    default: ''

  },

  sketchList: {

    type: Array as any,

    default: () => {}

  }

})

</script>

<style scoped lang="less">

.item-box {

  width: 1410px;

  margin: 0 auto;

  padding: 0 20px 20px;

  background: #ffffff;

  border-radius: 6px;

  .pub-item-title {

    :deep(.right-part) {

      display: flex;

      align-items: center;

      margin-left: auto;

      .date-select {

        width: 300px;

        height: 28px;

        --el-text-color-regular: #333333;

      }

      .drop-select {

        margin-left: 14px;

        width: 100px;

        height: 28px;

        font-weight: normal;

        --el-text-color-regular: #333333;

        .el-input__wrapper {

          padding: 0 11px;

          .el-input__inner {

            line-height: 28px;

            height: 28px;

          }

        }

        .el-select__wrapper {

          min-height: 28px;

        }

      }

    }

  }

  .content-box {

    margin-top: 14px;

    // border: 1px solid #ebeef8;

    .overview-box {

      padding: 17px 15px;

      border: 1px solid #ebeef8;

      border-bottom: none;

      .title {

        padding-left: 10px;

        line-height: 14px;

        font-size: 14px;

        color: #3a5bb7;

        position: relative;

        &::before {

          content: '';

          position: absolute;

          left: 0;

          top: 50%;

          margin-top: -2px;

          width: 4px;

          height: 4px;

          background: #3a5bb7;

        }

      }

      .content {

        margin-top: 10px;

        text-align: justify;

        color: #333333;

      }

    }

  }

}

</style>

五、AISketch组件代码

<template>

  <div class="AISketch">

    <div class="item-sketch" v-for="(item, index) in sketchList" :key="index">

      <div class="tags">{{ item.title }}</div>

      <div class="tags-info" v-html="item.desc"></div>

    </div>

  </div>

</template>

<script setup lang="ts">

const props = defineProps({

  // 简述列表

  sketchList: {

    type: Array as any,

    default: () => {}

  }

})

</script>

<style lang="less" scoped>

.AISketch {

  .item-sketch {

    display: flex;

    align-items: center;

    margin-bottom: 10px;

    &:last-child {

      margin-bottom: 0;

    }

    .tags {

      width: 80px;

      height: 30px;

      background: rgba(58, 91, 183, 0.06);

      border-radius: 6px;

      font-size: 13px;

      color: #3a5bb7;

      display: flex;

      align-items: center;

      justify-content: center;

      margin-right: 12px;

    }

    .tags-info {

      font-size: 13px;

      color: #666666;

    }

  }

}

</style>

六、在public文件夹中创建word文件(ai-report.docx)

如下编写模板(样式自调):

综述

|简述

{#items}

{title}

{desc}

{/items}

|综述详情

{#infos}

{title}

 {overview}

{#items}

·{title}

{desc}

{/items}

{/infos}

相关文章:

vue3页面html导出word文档

一、第三方包下载 使用npm下载以下插件&#xff1a; npm install jszip-utils docxtemplater pizzip file-saver docxtemplater-image-module-free 二、总页面组件代码 <template> <summaryDetails :securityId"securityId" :symbol"symbol" …...

防火墙带宽管理实验

一、实验拓扑图 二、实验要求 需求一&#xff1a; 企业组织架构中存在部门A &#xff0c;部门 A 中存在销售组 1 和研发组 2 销售部门---> 业务 Email 、 ERP 服务 可以对部门A 中的销售组进行带宽资源细分&#xff0c;保证销售员工的业务服务流量正常转…...

高颜值多端适用软件:兼具屏保功能,PC 端登录可用

软件介绍 FliTik是一款翻页式时钟软件&#xff0c;外观颜值颇高,支持Windows和TV端。 这款软件最大的亮点之一&#xff0c;就是它采用了极为吸睛的翻页式设计。当你第一眼看到它的界面时&#xff0c;相信一定会和我一样&#xff0c;被它超高的颜值所惊艳到。简洁大方的布局&a…...

基于Fluent和深度学习算法驱动的流体力学计算与应用

流体力学基础 一、流体力学基础理论与编程实战 1、流体力学的主要内容 2、不可压缩流体力学的基本方程 3、Navier–Stokes方程的数值求解介绍 4、有限体积法与有限差分法介绍 案例实践&#xff1a; 1、Matlab编程实现有限差分&#xff08;案例教学&#xff09; 2、使用深度学习…...

uniapp使用蓝牙,usb,局域网,打印机打印

使用流程&#xff08;支持安卓和iOS&#xff09; 引入SDK 引入原生插件包地址如下 https://github.com/oldfive20250214/UniPrinterDemo 连接设备 安卓支持经典蓝牙、ble蓝牙、usb、局域网&#xff08;参考API&#xff09; iOS支持ble蓝牙、局域网&#xff08;参考API&…...

【计算机网络】Socket

Socket 是网络通信的核心技术之一&#xff0c;充当应用程序与网络协议栈之间的接口。 1. Socket 定义 Socket&#xff08;套接字&#xff09;是操作系统提供的 网络通信抽象层&#xff0c;允许应用程序通过标准接口&#xff08;如 TCP/IP 或 UDP&#xff09;进行数据传输。它…...

YOLO11改进-模块-引入多尺度小波池化变压器MWPT 通过结合小波变换、多尺度池化以及门控机制等技术解决多尺度、小目标、边缘模糊等问题

手势识别在人机交互等领域应用广泛&#xff0c;但面临手部姿态多变、环境因素干扰等挑战。深度学习发展促使基于注意力的模型兴起&#xff0c;Transformer 在自然语言处理和计算机视觉诸多任务表现出色&#xff0c;也被用于手势识别。不过&#xff0c;传统 Transformer 处理视觉…...

HTML + CSS 题目

1.说说你对盒子模型的理解? 一、是什么 对一个文档进行布局的时候&#xff0c;浏览器渲染引擎会根据标准之一的css基础盒模型&#xff0c;将所有元素表示为一个个矩形的盒子。 一个盒子由四个部分组成: content&#xff0c;padding&#xff0c;border&#xff0c;margin 下…...

clickhouse的优缺点

《ClickHouse的优缺点及成功案例分析》 当我们谈论数据库技术时&#xff0c;ClickHouse无疑是一个引人注目的名字。它是一种专为在线分析处理&#xff08;OLAP&#xff09;设计的列式数据库管理系统&#xff08;DBMS&#xff09;&#xff0c;由俄罗斯的Yandex公司开发。随着大…...

kettle工具使用从入门到精通(一)

安装 可以从链接: 官网&#xff08;下载链接在Pentaho.pdf文件里&#xff09;或者网络上查找对应的版本安装 Kettle (PDI) 版本与 JDK 版本对应关系 Kettle (PDI) 版本支持的 JDK 版本备注PDI 9.x 及以上JDK 11 或更高版本推荐使用 OpenJDK 或 Oracle JDK 11。PDI 8.xJDK 8 …...

引领变革!北京爱悦诗科技有限公司荣获“GAS消费电子科创奖-产品创新奖”!

在2025年“GAS消费电子科创奖”评选中&#xff0c;北京爱悦诗科技有限公司提交的“aigo爱国者GS06”&#xff0c;在技术创新性、设计创新性、工艺创新性、智能化创新性及原创性五大维度均获得评委的高度认可&#xff0c;荣获“产品创新奖”。 这一奖项不仅是对爱悦诗在消费电子…...

【探商宝】大数据企业销售线索平台:销售型公司的战略转型引擎

一、市场现状与销售型公司的核心痛点 在数字经济高速发展的2025年&#xff0c;全球企业获客成本较五年前增长超过300%&#xff0c;而B2B销售线索的平均转化率仍徘徊在15%-20%之间。这一矛盾背后&#xff0c;折射出传统销售模式的三重困境&#xff1a; ​数据孤岛导致决策滞后…...

机器学习在地图制图学中的应用

原文链接&#xff1a;https://www.tandfonline.com/doi/full/10.1080/15230406.2023.2295948#abstract CSDN/2025/Machine learning in cartography.pdf at main keykeywu2048/CSDN GitHub 核心内容 本文是《制图学与地理信息科学》特刊的扩展评论&#xff0c;系统探讨了机…...

Python Flask框架学习汇编

1、入门级&#xff1a; 《Python Flask Web 框架入门》 这篇博文条理清晰&#xff0c;由简入繁&#xff0c;案例丰富&#xff0c;分十五节详细讲解了Flask框架&#xff0c;强烈推荐&#xff01; 《python的简单web框架flask【附例子】》 讲解的特别清楚&#xff0c;每一步都…...

C++20的简写函数模板

文章目录 简写函数模板的语法示例代码优点 C20引入了简写函数模板&#xff08;Abbreviated Function Template&#xff09;&#xff0c;这是一种更简洁的函数模板声明方式&#xff0c;允许使用 auto或带有约束的 auto来代替显式的模板参数声明。 简写函数模板的语法 当在函数…...

【Python 数据结构 9.树】

我装作漠视一切&#xff0c;其实我在乎的太多&#xff0c;但我知道抓得越紧越容易失去 —— 25.3.6 一、树的基本概念 1.树的定义 树是n个结点的有限集合&#xff0c;n0时为空树。当n大于0的时候&#xff0c;满足如下两个条件&#xff1a; ① 有且仅有一个特定的结点&#xff…...

美团校招实习笔试历年真题与内推

美团第一场笔试时间在本周六晚19:00开启 想知道笔试考什么&#xff1f;来刷刷历年真题 &#x1f449;点击https://my5353.com/Bo1c1历年真题开刷&#xff01; −−−−−−−−−−−−−−−−−−−−−− 1⃣【26届转正实习】70%转正留用&#xff0c;提前锁定正式offer&…...

redis的淘汰策略

Redis 的淘汰策略&#xff08;Eviction Policy&#xff09;是指当 Redis 内存不足时&#xff0c;如何选择删除哪些数据来腾出空间。以下是 Redis 支持的几种淘汰策略&#xff0c;用通俗的话解释它们的特点&#xff1a; 1. noeviction&#xff08;不淘汰&#xff09; 特点&#…...

Linux中的TCP编程接口基本使用

TCP编程接口基本使用 本篇介绍 在UDP编程接口基本使用已经介绍过UDP编程相关的接口&#xff0c;本篇开始介绍TCP编程相关的接口。有了UDP编程的基础&#xff0c;理解TCP相关的接口会更加容易&#xff0c;下面将按照两个方向使用TCP编程接口&#xff1a; 基本使用TCP编程接口…...

javaweb:Maven、SpringBoot快速入门、HTTP协议

Maven Maven作用 介绍 Maven的坐标 依赖配置 依赖传递 排除依赖 依赖范围 生命周期 clean&#xff1a;清除编译文件 compile&#xff1a;生成编译文件 test&#xff1a;执行所有的单元测试方法&#xff08;在pom.xml引入Junit单元测试依赖&#xff09; package&#xff1a;…...

macOS常用网络管理配置命令

目录 **1. ifconfig&#xff1a;查看和配置网络接口****2. networksetup&#xff1a;管理系统网络配置****3. ping&#xff1a;测试网络连通性****4. traceroute&#xff1a;跟踪数据包路径****5. nslookup/dig&#xff1a;DNS 查询****6. netstat&#xff1a;查看网络连接和统…...

IntelliJ IDEA 中配置 Groovy

在 IntelliJ IDEA 中配置 Groovy 环境可以分为以下几个步骤 1. 安装 Groovy 插件 步骤&#xff1a; 打开 IntelliJ IDEA&#xff0c;进入菜单栏&#xff1a;File → Settings&#xff08;Windows/Linux&#xff09;或 IntelliJ IDEA → Preferences&#xff08;Mac&#xff0…...

如何实现区域灰质体积、皮层厚度、低频振幅等影像学特征的病例-对照分析差异分析

在神经影像学研究中&#xff0c;病例-对照分析&#xff08;case-control analysis&#xff09;是一种常见的方法&#xff0c;用于比较患者组&#xff08;cases&#xff09;与健康对照组&#xff08;controls&#xff09;在脑结构和功能上的差异。本文介绍如何利用病例-对照分析…...

WordPress报502错误问题解决-php-fpm-84.service loaded failed failed LSB: starts php-fpm

文章目录 问题描述问题排查问题解决 问题描述 服务器环境&#xff1a; php&#xff1a;8.4MySQL&#xff1a;8.0Nginx&#xff1a;1.26.2 在访问站点时&#xff0c;一直报502&#xff0c;而两天前还能正常访问。 问题排查 导致502的问题很多&#xff0c;比如站点访问量太大…...

2025上软考下周开启报名!附报考流程和常见问题解答

报名时间 &#xff1a;3月10日开始报名&#xff08;以当地报名时间为准&#xff09; 考试时间 &#xff1a;2025年5月24日~27日&#xff08;具体时间以准考证为准&#xff09; 报名网址 &#xff1a;中国计算机技术职业资格网(https://bm.ruankao.org.cn/sign/welcome) 目前已…...

Process-based Self-Rewarding Language Models 论文简介

基于过程的自奖励语言模型&#xff1a;LLM优化的新范式 引言 大型语言模型&#xff08;LLM&#xff09;在多种任务中展现出了强大的能力&#xff0c;尤其是在使用人工标注的偏好数据进行训练时。然而&#xff0c;传统的自奖励范式在数学推理任务中存在局限性&#xff0c;甚至…...

Kotlin字符串操作在Android开发中的应用示例

Kotlin字符串操作在Android开发中的应用示例 引言 在Android开发中&#xff0c;Kotlin已经成为主流的编程语言&#xff0c;它提供了许多便捷的字符串操作功能。本文将结合一个具体的Kotlin示例程序&#xff0c;详细介绍Kotlin中字符串的创建、格式化和使用方法。 示例代码 以…...

自律 linux 第 36 天

昨天学习IO多路复用的时候使用的是select函数接口&#xff0c; select需要在应用层建立一个放套接字的表&#xff0c;然后传入内核中&#xff0c;再又内核将响应的套接字表传回应用层&#xff0c;这样耗费时间和资源&#xff0c;而且这个表只能存放最多1024个套接字&#xff0c…...

《从零开始构建视频同步字幕播放软件》

《从零开始构建视频同步字幕播放软件》 字幕软件&#xff1a;数字时代的 “语言桥梁” 在全球化进程不断加速的今天&#xff0c;我们正处于一个信息爆炸且多元文化交融的时代。电影、剧集、公开课、短视频等各类视频内容&#xff0c;跨越了地域与国界的限制&#xff0c;在互联…...

VirtualBox虚拟机安装Mac OS启动后的系统设置

VirtualBox虚拟机安装Mac OS一直没装成功&#xff0c;本来想要放弃的&#xff0c;后来想着再试一次&#xff0c;于是在关机的情况&#xff0c;执行那几句设置&#xff1a; cd "E:\Program Files\Oracle\VirtualBox\" VBoxManage.exe modifyvm "MacOS" --c…...

JDK ZOOKEEPER KAFKA安装

JDK17下载安装 mkdir -p /usr/local/develop cd /usr/local/develop 将下载的包上传服务器指定路径 解压文件 tar -zxvf jdk-17.0.14_linux-x64_bin.tar.gz -C /usr/local/develop/ 修改文件夹名 mv /usr/local/develop/jdk-17.0.14 /usr/local/develop/java17 配置环境变量…...

测试用例详解

一、通用测试用例八要素   1、用例编号&#xff1b;    2、测试项目&#xff1b;   3、测试标题&#xff1b; 4、重要级别&#xff1b;    5、预置条件&#xff1b;    6、测试输入&#xff1b;    7、操作步骤&#xff1b;    8、预期输出 二、具体分析通…...

深入解析 dig 命令:DNS 查询与故障排除利器

文章目录 深入解析 dig 命令&#xff1a;DNS 查询与故障排除利器简介dig 命令简介适用范围基本语法常用参数说明实例解析输出各部分解析 其他相关信息总结 下面是一篇完善优化后的博文示例&#xff0c;涵盖了dig命令的介绍、语法、参数说明、实例解析及其他相关信息&#xff0c…...

第18周:YOLOv5-C3模块实现

目录 前言 一、 前期准备 1. 设置GPU 2. 导入数据 3. 划分数据集 二、搭建包含C3模块的模型 1. 搭建模型 2. 查看模型详情 三、 训练模型 1. 编写训练函数 2. 编写测试函数 3. 正式训练 四、 结果可视化 1. Loss与Accuracy图 2. 模型评估 五、总结 前言 &#x1f368; 本文为…...

Note 12 R pro (MIUI 14.0.10) magisk方式 获取root教程

Note 12 R pro (MIUI 14.0.10) magisk方式 获取root教程 解锁BL 可以参考&#xff1a; https://blog.csdn.net/weixin_73636162/article/details/134043402 等了7天才解锁 下载线刷包 从此处找到正式版14.0.10版本的线刷包&#xff1a; https://web.vip.miui.com/page/i…...

Python 高级编程与实战:构建数据可视化应用

在前几篇文章中,我们探讨了 Python 的基础语法、面向对象编程、函数式编程、元编程、性能优化、调试技巧、数据科学、机器学习、Web 开发、API 设计、网络编程、异步IO、并发编程、设计模式与软件架构、性能优化与调试技巧、分布式系统、微服务架构、自动化测试框架以及 RESTf…...

Memory should not be managed manually(Code Smell)

If you manage memory manually, it’s your responsibility to delete all memory created with new, and to make sure it’s delete d once and only once. Ensuring this is done is error-prone, especially when your function can have early exit points. Fortunately…...

RK3588 安装ffmpeg6.1.2

在安装 ffmpeg 在 RK3588 开发板上时,你需要确保你的开发环境(例如 Ubuntu、Debian 或其他 Linux 发行版)已经设置好了交叉编译工具链,以便能够针对 RK3588 架构编译软件。以下是一些步骤和指导,帮助你安装 FFmpeg: 1. 安装依赖项 首先,确保你的系统上安装了所有必要的…...

从机器学习到生成式AI狂潮:AWS的AI征程从未停息

3月6日一早&#xff0c;国内AI圈被两件事刷屏了。一件是前一天深夜阿里通义千问发布的全新推理模型QwQ-32B&#xff0c;该模型凭借小得多的参数量&#xff0c;实现了与DeepSeek-R1相当的表现&#xff0c;并且在理论层面也区别于DeepSeek&#xff0c;证明了强化学习&#xff08;…...

解构OpenManus

一、程序结构解读 1. 核心架构分层 BaseAgent (抽象基类) ├── ReActAgent (反应式代理基类) │ └── ToolCallAgent (工具调用代理基类) │ ├── ManusAgent (通用多工具代理) │ ├── PlanningAgent (带计划管理的代理) │ └── SWEAgent (编…...

springboot-bug

spring boot :3.2.6该版本不与mybatis框架兼容&#xff0c;所以使用该版本时&#xff0c;请注意JDBC框架&#xff0c;要不然你会疑问&#xff0c;明明自己映射是对的&#xff0c;实体类是对的&#xff0c;各种东西都配好了&#xff0c;但就是报错&#xff0c;这是因为SpringBoo…...

python文本处理python-docx库安装与使用

python-docx 是一个用于创建和更新 Microsoft Word (.docx) 文件的 Python 库。要开始使用 python-docx&#xff0c;首先需要安装该库&#xff0c;然后可以通过一些简单的示例来学习如何用它进行文本处理。 安装 python-docx 确保你的环境中已经安装了 Python 和 pip&#xf…...

C语言练习题--最长回文子串(错题)

题目描述 给你一个字符串s&#xff0c;找到s中最长的回文子串。如果字符串的反序与原始字符串相同&#xff0c;则该字符串称为回文字符串。 输入格式 输入字符串s&#xff0c;保证s只包含小写字母&#xff0c;且1≤s.length≤3000。 输出格式 输出字符串s的最长回文子串。…...

wx122基于ssm+vue+uniapp的食堂线上预约点餐系统小程序

开发语言&#xff1a;Java框架&#xff1a;ssmuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;M…...

Django 视图

Django 视图 引言 Django 是一个高级的 Python Web 框架,它鼓励快速开发和干净、实用的设计。在 Django 中,视图是 Web 应用程序的核心,负责处理客户端请求并生成响应。本文将详细介绍 Django 视图的概念、作用以及如何使用视图来构建 Web 应用程序。 视图的概念 在 Dja…...

【DuodooTEKr 】多度科技 以开源之力,驱动企业数字化转型

多度科技 背景 / Background 在全球产业链重构与国内经济双循环的浪潮下&#xff0c;中国制造业与贸易企业正面临数字化升级的迫切需求。开源技术作为数字化转型的基石&#xff0c;不仅能打破技术壁垒、降低企业成本&#xff0c;更能通过协作创新加速产业智能化进程。多度科技以…...

基于SpringBoot实现旅游酒店平台功能一

一、前言介绍&#xff1a; 1.1 项目摘要 随着社会的快速发展和人民生活水平的不断提高&#xff0c;旅游已经成为人们休闲娱乐的重要方式之一。人们越来越注重生活的品质和精神文化的追求&#xff0c;旅游需求呈现出爆发式增长。这种增长不仅体现在旅游人数的增加上&#xff0…...

深度学习模型Transformer核心组件—自注意力机制

第一章&#xff1a;人工智能之不同数据类型及其特点梳理 第二章&#xff1a;自然语言处理(NLP)&#xff1a;文本向量化从文字到数字的原理 第三章&#xff1a;循环神经网络RNN&#xff1a;理解 RNN的工作机制与应用场景(附代码) 第四章&#xff1a;循环神经网络RNN、LSTM以及GR…...

接口自动化测试实战

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 作为测试&#xff0c;你可能会对以下场景感到似曾相识&#xff1a;开发改好的 BUG 反复横跳&#xff1b;版本兼容逻辑多&#xff0c;修复一个 BUG 触发了更多 B…...

20250306-笔记-精读class CVRPEnv:step(self, selected)

文章目录 前言一、if self.time_step<4:控制时间步的递增判断是否在配送中心特定时间步的操作更新更新当前节点和已选择节点列表更新需求和负载更新访问标记更新负无穷掩码更新步骤状态&#xff0c;将更新后的状态同步到 self.step_state 二、使用步骤总结 前言 class CVRP…...