工作中遇到的问题记录

工作问题记录 阅读详情

el-upload limit=1时 无法上传多次

        <el-upload :limit="1" :action="importUrl" :before-upload="beforeUpload" :on-success="handleSuccess" :on-error="handleError" :show-file-list="false" accept=".xlsx" ref="uploadRef">
          <el-button type="primary" icon="Upload" style="margin-left: 10px" :loading="uploadLoading">导入算法</el-button>
        </el-upload>

在成功的钩子函数中使用clearFiles(),清空已上传文件

    handleSuccess(response) {
     if (response.code === 0) {
       ElMessage.success("导入成功");
       this.$refs.uploadRef.clearFiles();
       this.getDataList();
     } else {
       this.handleError(response);
     }
     this.uploadLoading = false;
   },

nginx部署时,有两个前端时的打包配置

非主前端的项目,打包需要加上nginx的路径,例如/point
vite.config.js

export default defineConfig({
  base: "/point",
  build: {
    outDir: 'point'  //输出目录
  },
  plugins: [
    vue(),
    // commonjs()
  ],
  resolve: {
    alias: {
      '@': fileURLToPath(new URL('./src', import.meta.url))
    }
  }
})

打包后的静态文件
在这里插入图片描述
方案二:在nginx配置文件中配置两个server

server {
    listen 8080;  # 第一个端口
    server_name localhost;
    
    location / {
        root html/dist;
        try_files $uri $uri/ /index.html;
    }
}

server {
    listen 8081;  # 第二个端口
    server_name localhost;
    
    location / {
        root html/3dview;
        try_files $uri $uri/ /index.html;
    }
}

打开弹窗组件的处理思路 拒绝用emit

弹窗组件init方法:
先调用表单的resetFields方法(去除校验,恢复默认值)
再清空dataForm
如果是编辑再给dataForm赋值
弹窗常用属性:close-on-click-modal=“false” 禁止点击空白关闭

const init = (row: IObject) => {
  visible.value = true;

  // 重置表单数据
  if (dataFormRef.value) {
    dataFormRef.value.resetFields();
  }
  for (const key in dataForm) {
    dataForm[key] = "";
  }

  if (row) {
    Object.assign(dataForm, row);
  }
};

根据坐标点,转换为图像

<!--
  CAD解析结果预览图片
* @Description
* @ReservedFields
-->
<template>
	<el-dialog :title="title" v-model="open" width="40%" append-to-body @close="clearSvg">
		<div class="svgContainer">
			<svg id="mySvg"></svg>
		</div>
	</el-dialog>
</template>

<script setup>
import * as d3 from 'd3'
import { onMounted, ref, getCurrentInstance } from 'vue'
const { proxy } = getCurrentInstance()
const data = ref([])
const open = ref(false)
const title = ref('')
const width = 480
const offset = 10 // 画布的偏移量

const init = () => {
	open.value = true
	proxy.$nextTick(() => {
		drawSvg()
	})
}
const drawSvg = () => {
	// 找到x坐标的最小值和最大值
	const xMin = d3.min(data.value, (d) => d.x)
	const xMax = d3.max(data.value, (d) => d.x)
	// 找到y坐标的最小值和最大值
	const yMin = d3.min(data.value, (d) => d.y)
	const yMax = d3.max(data.value, (d) => d.y)

	// 计算x和y方向的缩放比例
	const xScale = width / (xMax - xMin)
	const yScale = width / (yMax - yMin)

	// 对坐标点进行缩放和偏移适配到合适范围内
	const scaledData = data.value.map((d) => {
		return {
			x: (d.x - xMin) * xScale + offset,
			y: width - (d.y - yMin) * yScale + offset
		}
	})

	const svg = d3.select('#mySvg')
	const polygon = svg
		.append('polygon')
		.attr('points', function () {
			return scaledData.map((d) => `${d.x},${d.y}`).join(' ')
		})
		.attr('fill', 'none')
		.attr('stroke', 'red')
		.attr('stroke-width', 3)
}

const clearSvg = () => {
	const svg = d3.select('#mySvg')
	svg.selectAll('*').remove()
}

defineExpose({
	init,
	data,
	title
})

onMounted(() => {})
</script>

<style lang="scss" scoped>
.svgContainer {
	width: 100%;
	height: 100%;
	text-align: center;
	svg {
		width: 500px;
		height: 500px;
	}
}
</style>

沿svg轨迹运动

使用animateMotion定义沿路径的动画

  <animateMotion dur="30" repeatCount="1" href="#plane" rotate="auto">
    <mpath xlink:href="#myPath" />
  </animateMotion>

让物体中心在轨迹上

<g transform=“translate(-长的一半,-宽的一半)”> 物体的path</g>

使用gsap动画库

<script setup>
import { onMounted, ref } from 'vue'
import { defineComponent, reactive, toRefs } from 'vue'
import { useRoute } from 'vue-router'
const route = useRoute()
let tl = gsap.timeline({ paused: true })
const pathLength = ref(143.16) // 轨迹实际总长为143km
const speed = ref(0) // 每秒传入的速度(km/s)
const currentMileage = ref(0) // 当前小车的里程(km)

const fnArrayString = route.query.fns
const fns = fnArrayString?.split(',')
route.query.length && (pathLength.value = route.query.length)
function toggleAnimation() {
  if (tl.paused()) {
    tl.play()
  } else {
    tl.pause()
  }
}
function updateProgress() {
  if (speed.value === 0) {
    tl.paused()
    console.log('小车停止')
    return
  }
  // 结束动画
  if (currentMileage.value > pathLength.value) {
    currentMileage.value = pathLength.value
    tl.paused()
  }
  const progress = currentMileage.value / pathLength.value
  tl.progress(progress) //更新进度
}
onMounted(() => {
  const path = document.getElementById('myPath')
  const car = document.getElementById('plane')
  const length = path.getTotalLength()
  tl.add('start')
  tl.to('#plane', {
    motionPath: {
      path: '#myPath', //
      align: '#myPath', // 对齐的参照物
      autoRotate: true, //自动旋转角度
      alignOrigin: [0.5, 0.5] // 水平和垂直方向都位于元素的中心
    },
    yoyo: false
  })
  // 初始进度
  tl.progress(0.00001)
  window.ue = {
    ...window.ue,
    interface: {
      ...window.ue.interface
    }
  }
  // 更新速度
  window.ue.interface[fns[0]] = (speed) => {
    speed.value = speed
  }
  //更新里程
  window.ue.interface[fns[1]] = (mileage) => {
    currentMileage.value = mileage
    updateProgress()
  }
})
</script>

el-input 内容换行

boundData.map((item) => `x:${item.x}, y:${item.y}`).join('\n') // 分隔符用\n

批量处理表单

比如要在表格的每一行对表单进行校验

							<el-form
								:model="row"
								label-width="90px"
								label-position="left"
								:rules="rules"
								:ref="
									(el) => {
										formRefs[row.id] = el
									}
								"
							>
							// js
							const formRefs = reactive({})
							const formRef = formRefs[row.id]
							// 分别对每个表单进行表单校验...

iframe通信总结

		<iframe :src="src" frameborder="0" width="100%" height="100%" ref="iframeRef" @load="iframeLoad" @error="handleIframeError"></iframe>

父窗口向嵌入发送信息时,务必等待iframe加载完毕

父传子窗口:dom.contentWindow.postMessage()

let loadFinish = false
const loading = ref(true)
const iframeLoad = () => {
	loadFinish = true
	const iframe = iframeRef.value
	if (iframe && loadFinish) {
		const dataToSend = {
			id: props.task.id,
			trainType: props.task.trainType,
			train: props.task.train,
			url: props.url
		}
		// 此处延迟发送,经测试立马发送子窗口可能收不到
		setTimeout(() => {
			iframe.contentWindow.postMessage(dataToSend, '*')
			loading.value = false
		}, 500)
	}
}

子窗口:window.addEventListener(‘message’,function(e){})

onMounted(() => {
  // 挂载后初始化视图
  initViewer()
  window.addEventListener('message', function (event) {
    const receivedData = event.data
    if (receivedData.id) {
      id.value = receivedData.id
      trainType.value = receivedData.trainType
      train.value = receivedData.train
      url.value = receivedData.url
      queryAutoConvert()
    }
  })
})

相邻兄弟选择器(+)的使用场景

例如 一个列表,除最后一个元素以外,每个元素距离底部20px 作用的是后面一个child

.child + .child {
margin-top:20px;
}
Vue3 element-plus中el-upload 组件limit 限制上传数量无效 阅读详情

相关推荐

Sentaurus TCAD学习——Scheme编程语言

sentaurus scheme语言学习记录

摸摸小熊猫的博客 968

el-upload 限制上传数量、文件类型

el-upload 限制文件上传数量、类型,limit、on-exceed、accept

Daydreame_r的博客 1万+

Linux显卡管理避坑指南:为什么Xorg总是占用你的NVIDIA GPU?

本文深入解析了在Linux系统上,尤其是双显卡笔记本中,Xorg显示服务器进程占用NVIDIA GPU的根本原因。文章从Xorg的驱动加载机制和NVIDIA驱动的独占性入手,详细对比了禁用配置文件、手动配置xorg.conf、使用官方PRIME方案以及切换到Wayland等主流解决方案的优缺点与适用场景,旨在帮助用户有效释放GPU资源,确保深度学习、游戏等计算任务能独占显卡性能。

xgboost6farmer的博客 270

el-upload上传限制

对elment-UI的上传组件进行一次简易封装,对上传的文件进行限制。

m0_46114541的博客 4534

【C++】POCO学习总结(六):线程、线程池、同步

Poco::RunnableAdapter继承自Poco::Runnable,在Poco::RunnableAdapter构造函数中指定了类和方法;Poco::ThreadLocal是线程局部变量,也叫线程局部存储,意思是模版ThreadLocal中填充的变量属于当前线程,该变量对其他线程而言是隔离的,也就是说该变量是当前线程独有的变量。

郭老二 5100

阿里云一键登录Java后端实战:5分钟搞定号码认证服务集成(附完整代码)

本文详细介绍了如何在Java后端项目中快速集成阿里云号码认证服务(PNVS),实现高效、安全的一键登录功能。文章从核心架构、安全机制解析入手,提供了完整的Maven依赖配置、服务端环境准备、核心业务逻辑实现(包括Token验证、用户处理、异常降级)以及生产环境下的性能优化、监控与部署方案,并附有可直接使用的完整代码示例。

p1q2r的博客 850

elementUi upload上传达到limit后隐藏upload图标

给upload组件添加一个动态class属性,当达到了limit条数据之后就隐藏,否则显示。当时是因为遇到只需要上传一张图片, 又想图片可删除操作而选择的这一种方式处理。

qq_41329302的博客 3101

RK3568下GPIO模拟串口

在嵌入式开发中,硬件 UART 资源可能被其他外设占用。此时,通过 GPIO 模拟 UART(软串口)成为一种灵活的解决方案。本文基于 RK3568 平台,结合 Linux 内核模块,实现高精度软串口通信,并深入分析关键技术细节。可以看到已经接收到数据了,可以自己创建自定义的设备文件到/dev下,也可以按照串口设备的标准创建一个设备,后面有时间我写一篇和标准串口设备结合的gpio模拟串口文章。RK3568 GPIO 模拟串口(软串口)实现详解。将编译好的驱动放到板子上运行。再写个Makefile。

文石_2009的博客 366

在vue2中,使用el-upload组件进行批量上传时,使用了limit进行限制,第一次上传了limit个文件后,无法再次上传问题处理

使用this.$refs.upload.clearFiles()解除限制失败的原因:这里的el-upload上传时使用http-request进行自定义上传,在使用http-request进行上传时on-error、on-success失效了,无法执行,当然在http-request对应的自定义上传事件中也尝试过,失败。在使用el-upload二次封装的组件进行自定义批量上传时,每次上传文件时进行了limit限制:limit='30',当第一次批量上传了limit数量的文件后,无法二次进行上传。

2301_77084596的博客 2036

Android Input——输入事件ANR执行(十六)

上一篇文章我们介绍了输入事件 ANR 的触发流程,这里我们再来看一下输入事件 ANR的执行流程。

小旭的专栏 944

基于深度学习的道路裂缝检测系统完整教程

本文介绍了一种基于深度学习的道路裂缝检测系统完整解决方案。项目采用5466张高质量道路裂缝图像数据集,包含YOLO和Pascal VOC两种标注格式,覆盖多种道路场景。系统利用CNN和YOLO算法实现高效检测,相比传统人工巡检显著提升效率和准确性。文中详细阐述了数据集结构、环境配置和训练流程,包括数据预处理、智能分割策略和质量检查方法。该技术可及时发现道路裂缝隐患,降低维护成本,保障交通安全,为道路养护提供智能化解决方案。

FJN110的博客 299

以后工作过程中的问题可以在这里记录了

以后工作过程中的问题可以在这里记录了

qq_21689611的博客 100

DISM进行系统修复,进度条卡在63.2%的解决方法

一时用不了软件,安装修复的时候也出现问题 DISM一直卡在63.2%,等了好久时间,直接强制退出寻找最终的解决方案

码农研究僧的博客 1万+

开始用博客记录工作中解决的问题。

开始用博客记录工作中解决的问题。

allen_1iu的博客 287

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

记录一下工作中碰到的一些问题

记录一下工作中碰到的一些问题 前端返回值空字符串还是null 后端返回为null的属性,前端控制台 network 不会显示 字符串,数字,对象,为空的时候可以直接返回空字符串,数组的话,还是看情况的,一般情况,数组为空的时候,最好返回空数组,不要返回 空字符串、null 啥的,因为前段判断空字符串的 空数组的方法不一样。 不过这些都不是定死了,可以具体问题具体分析。 springboot中返回值json中null转换空字符串 spring boot 默认使用jackson,上面文章是讲述换成fastjs

weixin_42112223的博客 439

贝叶斯统计 [韦来生编]

贝叶斯(Bayes)统计是近几十年来迅速发展起来的数理统计的一个重要分支。贝叶斯方法与经典统计方法的主要不同之处是进行统计推断时除了利用样本信息外,还要利用参数的先验信息,因此可以提高统计推断或统计决策的效果。它在经济、金融、生物、医学、自然科学和社会科学等许多领域具有广泛的应用。贝叶斯方法的研究已渗透到了统计学的几乎所有领域。作者在给中国科学技术大学概率论与数理统计专业本科生开设的“数理统计”课程中有一章专门讲授“贝叶斯方法和统计决策理论”,近十年来也给中国科学技术大学概率统计专业研究生开设过几次“贝叶斯分析”课。本书是在对过去讲稿的内容作了适当的增减和调整的基础上完成的。  本书共分六章。第1章是绪论,介绍了贝叶斯统计的若干基本概念,同时对必要的数理统计的基础知识有重点地作了回顾。第二章介绍了确定先验分布的若干可供选择的方法。第三章介绍了几类常见统计模型参数的后验分布的主要结果和计算方法。第四章和第五章分别介绍了“贝叶斯统计推断”和“贝叶斯统计决策”的内容。第六章介绍了贝叶斯统计计算的若干方法,包括蒙特卡洛方法和马尔可夫链蒙特卡洛(MCMC)方法以及相关统计软件的简介。本书的每一章附右大量的例题和习题,书末附有常用的几个表格和部分习题解答供读者查用。  大约可在54学时内讲授本书的第1章至第六章的主要内容,教师可根据学时需要选讲本书第1章至第六章的部分内容。书中标“*”号的章节可略去不讲,留给读者作为阅读材料。第六章例题中的R代码和部分例题的数据文件等可从作者个人主页下载。  作者在编写本书的过程中参考了J.O.Berger教授的《统计决策论及贝叶斯分析》和茆诗松教授编写的《贝叶斯统计》等书中的一些内容,以及《贝叶斯分析》一书中由张伟平博士编写的有关贝叶斯统计计算的一些内容。在此表示衷心感谢。  本书编写准备过程中,中国科学技术大学统计与金融系的几个研究生帮助完成了本书部分中文的录入和排版,作者对他们的辛勤工作表示真诚的感谢。高等教育出版社为本书的出版给予了大力支持。在此一并致谢。

工作中遇到的小问题的记录

工作中遇到的小问题的记录 ①Android:open failed: EEXIST (file exists) 手顺: ⑴在实现一个SD卡中的文件从一个路径拷贝到另一个路径的功能时,需要测试当SD卡空间不够的情况下的情况。所以我先让空间保证足够,进行了一次拷贝操作,OK,程序正常。 ⑵然后我把手机连接电脑,通过电脑的资源管理器删除了拷贝的文件,并且让空间不够拷贝。再次进行拷贝操作,这次程序会抛Exceptionopen failed: EEXIST (file exists)。 ⑶然后我再次...

chenfp22的专栏 3204

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

把工作中遇到的问题和解决方法记录下来!

从今天开始决定把实际工作中的问题和解决方法记录下来!有时候遇到过的问题以前都遇到过,就是想不起来了, 非常的郁闷,可能我的记忆力不大好吧。年纪大了?o(∩_∩)o 所以我决定形成一种良好的习惯!那就记住博客的地址吧http://blog.youkuaiyun.com/illhf2008

illhf2008的专栏 812

记录工作中遇到的问题

只要在编程,遇到问题是肯定的,不过经常性遇到弱智的问题可就不太好了。把问题记录下来,提醒自己 问题 主机解析异常,内部多个系统,系统的登录需要从CAS中心得到登录信息,如果失败会提示登录失败。今天一直跳转到失败页面,却没有提示错误信息,弄了半天都没排查到原因 为什么排查的效率慢? 没有按照日志格式输出日...

weixin_33730836的博客 150

【工作出现的一些问题记录】

问题集合代码类微服务类数据库类 代码类 微服务类 数据库类

Chinenana的博客 232

记录工作中k8s的域名映射问题

记录域名映射问题

weixin_51613454的博客 1435

记录工作中遇见的问题系列

@记录工作中遇见的问题系列 echarts在vue中的使用 在下载他人项目的时候遇见 /* externals: { echarts: 'echarts' },*/ 的一块代码,这块代码的意思是打包的时候去除掉echarts 甚至node_model 中的echarts也失效了,只能通过index.html中的《script》标签引入,共勉!! ...

weixin_42534614的博客 140

认真记录总结工作中的问题

之前一直是用有道笔记记录工作中的总结,博客记录笔记总结更好吧,毕竟分享是互联网的核心精神.应该参与进来。

JE的专栏 306

第一次使用博客来记录自己日常遇到的一些问题,以便避免做重复的工作

2019年11月24日,开学已经半个学期了,自己还是一如既往的菜。。。。

jiafa9741的博客 236

入职了,以前的博客也不见了,今天开始新开一帖,记录在工作中遇到的问题与技术上的分享

最近入职了搜房网,知道了一个大家庭的工作方式,一个团队的代码行为规范~ 在工作中遇到的问题,就在此博客中记录了。

liuzhongxiu的博客 456
上一篇: Tornado学习
下一篇: 将node服务设置为开机自启动
Orange_usst_code
博客等级 码龄7年 18粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值