惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Know Your Adversary
Know Your Adversary
云风的 BLOG
云风的 BLOG
Recent Announcements
Recent Announcements
F
Fortinet All Blogs
B
Blog
罗磊的独立博客
宝玉的分享
宝玉的分享
Vercel News
Vercel News
Martin Fowler
Martin Fowler
N
Netflix TechBlog - Medium
P
Proofpoint News Feed
T
Threatpost
Security Latest
Security Latest
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Stack Overflow Blog
Stack Overflow Blog
I
Intezer
P
Privacy International News Feed
D
Docker
月光博客
月光博客
博客园 - 三生石上(FineUI控件)
M
MIT News - Artificial intelligence
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
L
Lohrmann on Cybersecurity
Google DeepMind News
Google DeepMind News
The Last Watchdog
The Last Watchdog
A
Arctic Wolf
IT之家
IT之家
S
SegmentFault 最新的问题
S
Securelist
博客园 - 叶小钗
N
News and Events Feed by Topic
F
Full Disclosure
Security Archives - TechRepublic
Security Archives - TechRepublic
Engineering at Meta
Engineering at Meta
Hacker News: Ask HN
Hacker News: Ask HN
博客园 - Franky
GbyAI
GbyAI
AI
AI
Y
Y Combinator Blog
WordPress大学
WordPress大学
Latest news
Latest news
Microsoft Security Blog
Microsoft Security Blog
人人都是产品经理
人人都是产品经理
N
News | PayPal Newsroom
The Cloudflare Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
I
InfoQ

博客园 - 彭成刚

Service workers 缓存导致 3000端口占用 解决方案 Unregister - FossFLOW 命令行合并图片成为pdf `magick *.jpg o.pdf` vue2 自动格式化 函数名和括号直接没有空格了 eslint爆红,解决方案,函数名+空格+() vscode 设置 flex gap 对老版本浏览器兼容 - "flex-gap-polyfill": "^1.0.4", 老版 对 vue2 iview 打包失败的解决方案 [软件推荐] 手机同步电脑 PandaControl 开发安卓app 截屏用的 Multi-Layer Perceptron.xlsx 讲明白ai底层本质 pdfjs-3.11.174-legacy-dist.zip 最后一个cdn版本,每次要升级pdfjs 都是这个坑,中间件不支持mjs,但是国产化那个老浏览器媲美ie6 做了一个卷子去底的程序 python-clear-paper [ai问答] js对象 某个属性找到父节点 __parent__ 一键注入函数 buildTreeRelations [精品] npm 内网离线安装包 从缓存本地安装, .tgz安装失败时候,用这个cache方案 三次贝塞尔曲线 一直想要一个 曲线箭头,先AI出个代码先存着。 http-server-o.bat 最方便启动当前目录的index.html [记录] 多文件上传BUG解决记录-选择文件后-修改本地文件名-点击上传失败 的解决过程 vscode 查看全局包函数源码 没安装插件 - 快速跳转第三方库的函数源码 - 在资源管理器视图中显示 自定义快捷键 Alt+Shift+Z vscode vue2项目 自定义 abc类型 自动提示 3种提示方式 分别是 abc this.abc window.abc vscode 提交 github 的 git提交 记得设置 proxy - 基础知识 阻止连点小函数 if(islock()) return vue 双向绑定 对象初始化 不替换指针 用 Object.assign(app.value.modalAddWan, $app.modalAddWan) lunacy 单机离线免费 ui设计工具 平替 figma sketch [工具推荐] 双击最大化 软件右边留出一些空白 MaxMax 软件推荐 [推荐] GLM-4.7 智谱 Agentic Coding AI开发 环境安装 vibe coding 鼠标有小圈圈在转,原因是安全中心在扫描你的程序,关闭扫描方案 右下角广告 查看pid 映射是哪个程序弹框 Process Explorer 我发现我就是太善良了,总愿意相信有免费的api(AI) 软件推荐:Beyond.Compare.v3.3.13.18981 文本对比软件 临时忽略 config.js git命令 node_modules 软连接 win11 mklink /D 两个项目共享一个库 需求:两个分支,两套代码同时修改 iview table 排序 columns 里面写 sortable: 'custom' 不要写 sortable: true 不然会进行二次内部排序序号等 字段。 vue2 重置 data方法 $data $options.data.call(this) vue中 先写 函数调用 再写 函数定义的 小技巧 function caller () {} copy-used-css 代码段 snippet,将指定节点的计算样式获取下拉 获取tailwind网页样式成原生样式 Syntax Error: TypeError: eslint.CLIEngine is not a constructor 解决方案 Comment Anchors [vscode插件推荐] 注释跳转 ANCHOR[id=锚点] LINK path/file.vue#锚点 写了一个undefind 的bug ['',null,undefined].includes(unName) 应该是 typeof unName === 'undefined' pad开发bug vue2 hooks useInnerHeight.vue 解决Table高度实时更新 vscode 左侧栏 显示隐藏 ctrl+b 查看:切换主侧栏可见性 View: Toggle Primary Side Bar Visibility
iview table 单行显示文字 默认key 文字超出宽度 显示... 加tip cut-text2.vue configQueryListFunc.js
彭成刚 · 2026-06-23 · via 博客园 - 彭成刚

iview table 单行显示文字 默认key 文字超出宽度 显示... 加tip cut-text2.vue

cut-text2.vue

<template>
  <Tooltip2 :max-width="tipMaxWidth" :placement="tipPlacement" :disabled="!isOverflow" transfer
    :style="{ width: this.allWidth ? '100%' : null, verticalAlign: verticalAlign ? 'middle' : null, textAlign: toolTipTextAlign }">
    <div ref="textRef" class="text-ellipsis-container" :style="ellipsisStyle" @mouseenter="checkOverflow">
      {{ content }}
    </div>
    <span slot="content">
      <div :style="`max-height:${tipMaxHeight}px;overflow-y:auto;padding:3px;`">{{ content }}</div>
    </span>
  </Tooltip2>
</template>
<script>
import Tooltip2 from '../tooltip'
export default {
  components: { Tooltip2 },
  props: {
    // 文字内容
    content: {
      type: String,
      default: ''
    },
    lines: {
      type: Number,
      default: 1 // 就默认一行 一行最稳定
    },
    // 文字对齐方式
    toolTipTextAlign: {
      type: String,
      default: 'left'
    },
    textAlign: {
      type: String,
      default: 'center'
    },
    tipPlacement: {
      type: String,
      default: 'top'
    },
    tipMaxWidth: {
      type: Number,
      default: 300
    },
    tipMaxHeight: {
      type: Number,
      default: 100
    },
    allWidth: {
      type: Boolean,
      default: true
    },
    verticalAlign: {
      type: Boolean,
      default: false
    }
  },
  computed: {
    ellipsisStyle () {
      // 显式声明 height 为 auto,确保在文字少时完全由内容撑开(1行文字就是1行高度)
      const baseStyle = {
        height: 'auto',
        maxHeight: 'none',
        overflow: 'hidden',
        textOverflow: 'ellipsis',
        boxSizing: 'border-box',
        textAlign: this.textAlign
      }

      if (this.lines === 1) {
        return {
          ...baseStyle,
          whiteSpace: 'nowrap'
        }
      } else {
        return {
          ...baseStyle,
          display: '-webkit-box',
          WebkitLineClamp: this.lines,
          // 额外加上标准属性,兼容部分早期标准或多核浏览器
          lineClamp: this.lines,
          WebkitBoxOrient: 'vertical',
          // 用 break-word 替代 break-all,对老版本浏览器的长英文、标点换行更友好
          wordBreak: 'break-word'
        }
      }
    },
    cutedContent () {
      if (this.content && this.content.length > this.maxCount) {
        return this.content.substring(0, this.maxCount) + '...'
      } else {
        return this.content
      }
    }
  },
  data () {
    return {
      isOverflow: false
    }
  },
  methods: {
    checkOverflow () {
      const el = this.$refs.textRef
      if (!el) return

      if (this.lines === 1) {
        // 单行比较:实际内容宽度 > 容器可视宽度
        this.isOverflow = el.scrollWidth > el.clientWidth
      } else {
        // 多行比较:实际内容高度 > 容器可视高度
        // Firefox 52 支持 scrollHeight 和 clientHeight 的精准判定
        this.isOverflow = el.scrollHeight > el.clientHeight
      }
    }
  },
  created () {
  },
  mounted () { },

  watch: {}
}
</script>

<style lang="less" scoped>
.text-ellipsis-container {
  width: 100%;
  /* 确保块级上下文中,老版本 Firefox 的盒模型表现正常 */
  display: block;
}
</style>

<template>
  <Tooltip v-bind="$attrs"
           v-on="$listeners"
           theme="light"
           transfer
           transferClassName="tooltip2">
    <template v-for="slotName in slotArr"
              :slot="slotName">
      <slot :name="slotName"></slot>
    </template>
  </Tooltip>
</template>
<script>
export default {
  inheritAttrs: false,
  components: {

  },
  props: {

  },
  data () {
    return {
    }
  },
  mounted () {
  },
  created () {

  },
  computed: {
    slotArr () {
      return [...Object.keys(this.$slots)]
    }
  }
}
</script>

configQueryListFunc.js

import CutText2 from '@/components/abc-lib/cut-text2'
export const mergeColumns = (columns) => {
  return columns.map(item => {
    if (item.key) {
      // 设置render
      if (!item.render) {
        // const maxCount = item.maxCount || 60
        item.render = (h, params) => {
          return h(CutText2, {
            props: {
              content: params.row[item.key],
              // lines: 1 就一行 一行最稳定
              // align 这里没有用columns的方式,就为了能表头居中,内容居左
              textAlign: item.textAlign || 'center'
              // maxCount: maxCount
            }
          }, {})
        }
      } else {
        return item
      }
    } else {
      return item
    }
  })
}

columns.js

export const columns = [{
  title: '姓名',
  key: 'name',
  minWidth: 100,
  align: 'center',
}]

使用方法

import { mergeColumns } from '...'
import { columns } from '...'

this.columns = mergeColumns(columns)