那些年遇到过的问题与解决方案

news2024/11/24 0:26:16

目录

一、当我们想进行数据回显并且只是让用户查看信息不能编辑时,置灰处理

二、多选框初始化加载问题

三、时间处理

获取当前年月日

时间自定义格式化 

时间脱敏处理,去掉秒 

四、input输入框处理

input输入框设定为只能输入0与正整数

刚进页面就定位到某处并输入框聚焦

五、浏览器控制台——Network使用教学

​编辑

​编辑

六、判断元素是否进入可视区域js方法

使用演示:当进入可视区域标题全部展示,否则标题吸顶只展示一部分

七、关于富文本展示有很多可用的插件,但个人推荐el-tiptap,结合elementUi比较实用

八、检测元素类型


写在前面,博主是个在北京打拼的码农,从事前端工作5年了,做过十多个大大小小不同类型的项目,最近心血来潮在这儿写点东西,欢迎大家多多指教。

  • 对于文章中出现的任何错误请大家批评指出,一定及时修改。
  • 有任何想要讨论和学习的问题可联系我:13287946835@139.com。
  • 发布文章的风格因专栏而异,均自成体系,不足之处请大家指正。

那些年遇到过的问题与解决方案

本文关键字:bug、elementUi、vue

一、当我们想进行数据回显并且只是让用户查看信息不能编辑时,置灰处理

当我们想进行数据回显并且只是让用户查看信息不能编辑时,通常会加上禁止选择属性(例如elementUi的disabled),现在我们不用一个个的写了,有时候回显的数据有很多,写着太麻烦了,要做很多无用功,我发现可以通过css做到区域置灰加禁止点击、选择。但要注意的是,记得置灰的时候取消掉选择框的clear操作(例如elementUi的el-select——clearable功能)。

.gray-model {
  user-select: none;

  pointer-events: none;
cursor: not-allowed;//不能点击的效果可有可无
  filter: grayscale(100%);
  -webkit-filter: grayscale(100%);
}

最终效果: 

二、多选框初始化加载问题

定义对象addMessage:{},从详情获取数据addMessage=res.data;  渲染add.feedbackMaterials,报错

 <el-checkbox-group v-if="caliberType&&caliberType.length" v-model="addMessage.feedbackMaterials">
             <el-checkbox
                v-for="(item, index) in caliberType"
                :label="item.code"
                :key="index"
                >{{ item.name }}</el-checkbox
              >
            </el-checkbox-group>

原因:model对象里的值不能是null
v-model绑定的对象导致,初始化addMessage的时候没有在空对象里定义feedbackMaterials的值

从接口获取详情信息后,可以这样处理一下

三、时间处理

获取当前年月日

    //获取当前时间,格式:yyyy-mm-dd hh:mm:ss
    getNow() {
      var now = new Date(),
        y = now.getFullYear(),
        month = now.getMonth(),
        d = now.getDate(),
        h = now.getHours(),
        m = now.getMinutes(),
        s = now.getSeconds();
      return (
        y +
        "-" +
        (month + 1) +
        "-" +
        d +
        " " +
        (h > 9 ? h : "0" + h) +
        ":" +
        (m > 9 ? m : "0" + m) +
        ":" +
        (s > 9 ? s : "0" + s)
      );
    },

时间自定义格式化 

//时间格式化
function timeFormat(time, fmStr = "yyyy-mm-dd hh:mm") {
  if (!time) return;
  time = new Date(time);
  const weekCN = "一二三四五六日";
  const weekEN = [
    "Monday",
    "Tuesday",
    "Wednesday",
    "Thursday",
    "Friday",
    "Saturday",
    "Sunday",
  ];

  let year = time.getFullYear();
  let month = time.getMonth() + 1;
  let day = time.getDate();
  let hours = time.getHours();
  let minutes = time.getMinutes();
  let seconds = time.getSeconds();
  let milliSeconds = time.getMilliseconds();
  let week = time.getDay();

  month = month >= 10 ? month : "0" + month;
  day = day >= 10 ? day : "0" + day;
  hours = hours >= 10 ? hours : "0" + hours;
  minutes = minutes >= 10 ? minutes : "0" + minutes;
  seconds = seconds >= 10 ? seconds : "0" + seconds;

  if (fmStr.indexOf("yyyy") !== -1) {
    fmStr = fmStr.replace("yyyy", year);
  } else {
    fmStr = fmStr.replace("yy", (year + "").slice(2));
  }
  fmStr = fmStr.replace("mm", month);
  fmStr = fmStr.replace("dd", day);
  fmStr = fmStr.replace("hh", hours);
  fmStr = fmStr.replace("mm", minutes);
  fmStr = fmStr.replace("ss", seconds);
  fmStr = fmStr.replace("SSS", milliSeconds);
  fmStr = fmStr.replace("W", weekCN[week - 1]);
  fmStr = fmStr.replace("ww", weekEN[week - 1]);
  fmStr = fmStr.replace("w", week);

  return fmStr;
}

时间脱敏处理,去掉秒 

 

readTime.substring(0, 16)

四、input输入框处理

input输入框设定为只能输入0与正整数


 <input
              type="number"
              oninput="value=value.replace(/^0+(\d)|[^\d]+/g,'')"
              class="inputBox50 inputBox"
              placeholder="填写反馈时限,单位小时,可为空"
              v-model="addMessage.feedbackDeadline"
              style="width: 60%;  border: 1px solid #999;"
            />

刚进页面就定位到某处并输入框聚焦


<div ref='feedback'>


  <textarea ref="inputRemark"

              style="  border: 1px solid #c0c4cc;"

              class="textareaBox textareaBox80"

              v-model="addMessage.remark"

            /></div>


mounted里写:

          this.$refs.feedback.scrollIntoView();
          this.$refs.inputRemark.focus();
     

五、浏览器控制台——Network使用教学

六、判断元素是否进入可视区域js方法

isInViewport(element) {
      const scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
      const offsetTop = element.offsetTop;
      const windowHeight = window.innerHeight;
      const elementHeight = element.offsetHeight;

      return (
        offsetTop - scrollTop < windowHeight && offsetTop - scrollTop + elementHeight > 0
      );
    },

使用演示:当进入可视区域标题全部展示,否则标题吸顶只展示一部分

 

<template>
  <div>
    <van-sticky>
      <van-nav-bar @click-left="() => $router.go(-1)">
        <template #left>
          <van-icon name="arrow-left" />
        </template>
        <template v-if="isShow" #title>
          <span
            v-if="detailInfo.flag || detailInfo.flag == 0"
            :class="'color' + detailInfo.flag"
            >【{{ typeObj[detailInfo.flag] }}】</span
          >{{ detailInfo.title }}
        </template>
      </van-nav-bar>
    </van-sticky>
    <div
      class="flex-box"
      style="overflow: hidden; padding: 0.25rem 0.25rem 0.5rem 0.25rem"
    >
      <div v-show="!isShow" class="title">
        <span
          v-if="detailInfo.flag || detailInfo.flag == 0"
          :class="'color' + detailInfo.flag"
          >【{{ typeObj[detailInfo.flag] }}】</span
        >{{ detailInfo.title }}
      </div>
      <div ref="titleRef" style="height: 0.05rem"></div>
      <div class="content">{{ detailInfo.content }}{{ detailInfo.content }}{{ detailInfo.content }}</div>

      <div class="flex-end">
        <span>发布单位:{{ detailInfo.sendOrgName }}</span>
      </div>
      <div class="flex-end">
        <span>发布时间:{{ common.timeFormat(detailInfo.publishtime) }}</span>
      </div>
    </div>
  </div>
</template>
<script>
import * as common from "@js/common";
import * as api from "@/request/api";
export default {
  name: "Notice",
  data() {
    return {
      isShow: false,
      typeObj: { 0: "普通", 1: "重要", 2: "紧急" },
      userInfo: common.getUserInfo(),
      common: common,
      noticeListLoading: false,
      detailInfo: [],
    };
  },
  created() {
    this.onLoadNotice();
    document.title = "消息通知";
  },
  mounted() {
    window.addEventListener("scroll", (e) => this.titleShow());
  },
  watch: {},
  methods: {
    isInViewport(element) {
      const scrollTop =
        document.documentElement.scrollTop || document.body.scrollTop;
      const offsetTop = element.offsetTop;
      const windowHeight = window.innerHeight;
      const elementHeight = element.offsetHeight;

      return (
        offsetTop - scrollTop < windowHeight &&
        offsetTop - scrollTop + elementHeight > 0
      );
    },
    titleShow() {
      const ele = this.$refs.titleRef;
      if (ele && this.isInViewport(ele)) {
        this.isShow = false;
      } else {
        this.isShow = true;
      }
    },
    async onLoadNotice() {
      const params = {
        id: this.$route.query.id,
      };
      this.detailInfo = (await api.getNoticeDetail(params)).data.data || {};

      this.noticeListLoading = false;
    },
  },
  beforeDestroy() {
    window.removeEventListener("scroll", (e) => this.titleShow());
  },
};
</script>
<style lang="less" scoped>
.font-set{
     font-size: 0.28rem;
  font-family: PingFang SC;
  color: #333333;
  line-height: 0.43rem;
  word-break: break-word;
}
.color0 {
  color: #02ba7d;
}
.color1 {
  color: gold;
}
.color2 {
  color: red;
}
.title {
  font-size: 0.34rem;
  font-family: PingFang SC;
  font-weight: 500;
  color: #333333;
  line-height: 0.48rem;

  margin-bottom: 0.2rem;
  word-break: break-word;
}
.content {
  text-indent: 2em;
 .font-set
}
.flex-end {
  display: flex;
  justify-content: flex-end;
 .font-set
}
</style>

七、关于富文本展示有很多可用的插件,但个人推荐el-tiptap,结合elementUi比较实用

element-tiptap - npm

js点击局部高亮——推荐driver.js

GitHub - kamranahmedse/driver.js: A light-weight, no-dependency, vanilla JavaScript engine to drive the user's focus across the page

八、检测元素类型

检测元素是否是字符串

var typeStr='';

typeof  typeStr =='string'

检测元素是否为对象

typeStr.constructor===Object

检测对象是否为空

const obj ={};

JSON.stringify(obj)=='{}'

检测元素是否为数组

Array.isArray(typeStr)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1180103.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

macOS磁盘分区调整软件--Paragon Camptune X 中文

Paragon Camptune X是一款专为Mac用户设计的强大分区大小调整工具。通过它&#xff0c;用户可以简便地调整Mac硬盘上的分区大小&#xff0c;实现存储空间的高效管理。无论是需要在Mac和Windows系统之间切换的双系统用户&#xff0c;还是有其他特定存储需求的用户&#xff0c;Ca…

携手创新算网应用:英特尔助力中国移动“算启新程”

10月11日&#xff0c;以“算启新程 智享未来”为主题的2023中国移动全球合作伙伴大会在中国广州保利世贸博览馆拉开帷幕。 大会围绕“CT、IT、DT技术融合”、“连接、算力、能力服务融合”、“新一代信息技术与生产、生活、治理应用融合”三个融合&#xff0c;聚焦科技创新、行…

(11_06)函数计算 FC 3.0 发布,全面降价,最高幅度达93%,阶梯计费越用越便宜

作为国内最早布局 Serverless 的云厂商之一&#xff0c;阿里云在 2017 年推出函数计算 FC&#xff0c;开发者只需编写代码并上传&#xff0c;函数计算就会自动准备好相应的计算资源&#xff0c;大幅简化开发运维过程。阿里云函数计算持续在 Serverless GPU 方面投入研发&#x…

Cmasher颜色包--共53种--全平台可用

Cmasher颜色包–共53种–全平台可用 往期推荐&#xff1a; ColorCET颜色包–共99种–全平台可用 ColorCET颜色包–共35种–全平台可用 Scientific colour maps颜色包–共35种–全平台可用 SciCoMap颜色包_共180种–全平台可用 海洋专用cmocean颜色包_共22种–全平台可用 Python…

pytoch安装指定版本教程pytorch1.3安装笔记

一、先生成一个环境 如果电脑里安装了其他的torch版本&#xff0c;另外生成一个环境可以防止原先torch版本被替换掉。 打开conda的终端窗口输入以下命令就可以生成一个名为torch_1.3的环境&#xff1a; conda create -n torch_1.3 python3.6 输入以下命令进入到torch_1.3的…

工作记录---(Explain执行计划详解--基于HS)--每天都要保持学习状态和专注的状态啊!!!

Explain详细说明&#xff1a; id列 id列的编号是 select 的序列号&#xff0c;有几个 select 就有几个id&#xff0c;并且id的顺序是按 select 出现的顺序增长的。MySQL将 select 查询分为简单查询(SIMPLE)和复杂查询(PRIMARY)。 复杂查询分为三类&#xff1a;简单子查询、派…

MXNet中图解稀疏矩阵(Sparse Matrix)的压缩与还原

1、概述 对于稀疏矩阵的解释&#xff0c;就是当矩阵里面零元素远远多于非零元素&#xff0c;且非零元素没有规律&#xff0c;这样的矩阵就叫做稀疏矩阵&#xff0c;反过来就是稠密矩阵&#xff0c;其中非零元素的数量与所有元素的比值叫做稠密度&#xff0c;一般稠密度小于0.0…

妙用Java 8中的 Function接口,消灭if...else(非常新颖的写法)

文章目录 Function 函数式接口Supplier供给型函数Consumer消费型函数Runnable无参无返回型函数Function函数的表现形式为接收一个参数&#xff0c;并返回一个值。Supplier、Consumer和Runnable可以看作Function的一种特殊表现形式 使用小技巧处理抛出异常的if处理if分支操作如果…

项目流程管理工具 OmniPlan Pro 4 mac中文版软件介绍

OmniPlan Pro mac是 The Omni Group 为 macOS 和 iOS 操作系统开发的项目管理软件。它允许用户创建和管理复杂的项目、定义任务、分配资源、跟踪进度和生成报告。 OmniPlan Pro mac包括甘特图、网络图、关键路径分析、资源均衡和成本跟踪等功能。 借助 OmniPlan Pro&#xff0…

G3ESa HENF318736R1 E3EB HENF315129R1

G3ESa HENF318736R1 E3EB HENF315129R1 该ARC研究探索了当前和历史市场表现以及相关技术和业务趋势&#xff0c;确定了领先的技术供应商&#xff0c;并为中央电站发电应用中的分布式控制系统的全球市场提供了五年全球预测。这项新研究基于ARC行业领先的市场研究数据库、广泛的…

《安富莱嵌入式周报》第326期:航空航天级CANopen协议栈,开源USB PD电源和功耗分析,开源EtherCAT伺服驱动板,时序绘制软件,现代机器人设计

周报汇总地址&#xff1a;嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 更新一期视频教程&#xff1a; BSP视频教程第28期&#xff1a;CANopen协议栈专题&#xff0c;CANopen主从机组网实战&a…

分享34个发布商会PPT,总有一款适合您

分享34个发布商会PPT&#xff0c;总有一款适合您 链接&#xff1a;https://pan.baidu.com/s/1jP9toqTZONWeDIcxvw1wxg?pwd8888 提取码&#xff1a;8888 Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 学习知识费力气&#xff0c;收集整理更不易。知识付费甚…

重装系统后,anaconda如何恢复

电脑中给予anaconda创建了100个虚拟环境&#xff08;夸张了&#xff09; 因为硬盘的问题&#xff0c;需要重装系统&#xff0c;于是搜了一下如何恢复anaconda&#xff0c;如下&#xff1a; 1. cd 到anaconda的安装路径&#xff1b; 2. 运行下面命令&#xff1a; python .\L…

建设项目管理中的 5 大预算挑战

为建设项目管理制定可靠、准确的预算是一项艰巨的任务&#xff0c;对于中小型建筑企业来说尤其如此。预算必须精确&#xff0c;同时还要考虑到每项工作的独特性和复杂性。 一项建筑行业相关调查统计了参与施工预算流程的人员所面临的最大挑战&#xff0c;分别是时间、预算、不…

V90伺服EPOS模式点动控制(详细介绍+完整SCL代码)

V90伺服驱动器采用西门子标准报文111加FB284(SINA_POS)详细的报文组态和功能块请参考下面文章链接: 博途1200/1500PLC V90 PN通信控制 (FB284功能块)_fb284功能块文档说明_RXXW_Dor的博客-CSDN博客文章浏览阅读5.3k次。先简单说下如何获取FB284,一般有2种方法,Startdrive软…

java项目之摄影器材租赁系统(ssm框架)

项目简介 摄影器材租赁系统实现了以下功能&#xff1a; 管理员&#xff1a;个人中心、用户管理、商家管理、器材信息管理、器材租赁管理、聊天信息管理、聊天回复管理、归还提醒管理、租赁反馈管理、论坛管理、系统管理、我的收藏管理 押金缴纳管理、扣除押金管理等等。用户&…

二百零一、Flink——Flink配置状态后端运行后报错:Can not create a Path from an empty string

一、目的 在尚硅谷学习用Flink配置状态后端的项目中&#xff0c;运行报错Exception in thread "main" java.lang.IllegalArgumentException: Can not create a Path from an empty string 二、Flink的状态后端(state backend)类型 &#xff08;一&#xff09;Memo…

Linux系统安装宝塔面板

系统安装要求 宝塔Linux面板操作系统支持&#xff1a;Centos、Ubuntu、Deepin、Alibaba Cloud Linux、Debian和Fedora&#xff0c;建议使用购买ECS后全新未操作的系统或执行初始化后的系统。 不支持32位系统。 请确认在安装宝塔面板前&#xff0c;未通过任何方式或程序安装Ap…

1.1 微信支付接入指引与支付安全

微信支付接入指引与支付安全 文章目录 微信支付接入指引与支付安全一、微信产品介绍1.1 付款码支付1.2 JSAPI支付1.3 小程序支付1.4 Native支付1.5 APP支付1.6 刷脸支付 二、接入指引2.1 获取商户号2.2 获取AppID2.3 绑定商户号与AppId2.4 获取秘钥和证书2.4.1 申请API秘钥2.4.…

Java进阶篇--Executors类创建常见线程池

目录 线程池架构 newSingleThreadExecutor newFixedThreadPool newCachedThreadPool newScheduledThreadPool Executors和ThreaPoolExecutor创建线程池的区别 两种提交任务的方法 线程池架构 线程池是一种线程管理的机制&#xff0c;用于维护和复用线程&#xff0c;以…