vue element-ui el-table表格二次封装 自定义el-table表格组件 vue封装表格组件

2023-10-26

CommTable.vue table组件

<template>
  <div>
    <el-table
      :data="tableData"
      border
      :class="tabClass ? tabClass : null"
      :showHeader="showHeader ? showHeader : true"
      :spanMethod="spanMethod ? spanMethod : null"
      element-loading-text="加载中..."
      v-loading="loading"
      :height="height ? height : null"
      :maxHeight="maxHeight ? maxHeight : null"
      :ref="tabRef ? tabRef : null"
      :header-cell-style="smallRow ? lineStyle : null"
      :cell-style="smallRow ? lineStyle : null"
      @sort-change="sortByKey"
      @selection-change="selectionChange"
      :row-key="rowKey ? rowKey : null"
    >
      <!-- 详情内容展示 需要showExpand属性  -->
      <el-table-column type="expand" v-if="showExpand">
        <template slot-scope="{ row }">
          <slot name="expand" :data="row"></slot>
        </template>
      </el-table-column>
      <!-- checkout复选框  selectionObj对象 {show: true, fixed: true}-->
      <el-table-column type="selection" align="center" width="50" v-if="selectionObj.show" :fixed="selectionObj.fixed ? true : false ">
      </el-table-column>
      <el-table-column
        v-for="({ prop, label, width, minWidth ,sortBy, slotName, countLimit, childrenList, className, columnFlag, fixed }, index) in tablecolumn"
        :key="index"
        :prop="prop ? prop : null"
        :label="label ? label : null"
        :width="width ? width : null"
        :min-width="minWidth ? minWidth : 100"
        :sort-by="sortBy ? sortBy : null"
        :sortable="sortBy ? (columnFlag ? 'column' : true) : null"
        :className="className ? className : null"
        :fixed="fixed ? fixed : null"
        :render-header="renderHeader ? renderHeader : null"
        align="center"
      >
      <!-- 自定义表头 -->
      <template  slot="header" >
        <slot v-if="slotName" :name="slotName+'Header'" ></slot>
      </template>
      <!-- 自定义内容 -->
      <template v-if="!childrenList" slot-scope="{row, $index}">
        <!-- 自定义tamplate -->
        <!-- prop没有值的情况 传整个row -->
        <div  v-if="slotName" >
          <slot :name="slotName" :data="prop ? row[prop] : null" :index="$index" :rowData="row"></slot>
        </div>
        <!-- 字数(countLimit控制)超出显示tip -->
        <div v-else>
          <div v-if="row[prop] && row[prop].length > (countLimit ? countLimit : 50)">
              <el-tooltip effect="dark" :content="row[prop]" placement="top" popper-class="tooltipsCont">
                  <span class="limitInfo">{{row[prop] | textSubstr((countLimit ? countLimit : 50))}}</span>
              </el-tooltip>
          </div>
          <div  v-else>
              <span >{{row[prop] | emptyText}}</span>
          </div>
        </div>
      </template>

      <!-- 如果有多组数据 注: 必传prop  childrenList为数据配置项 -->
      <el-table-column
      v-if="childrenList && childrenList.length > 0"
      v-for="(item, index) in childrenList"
      :label="item.label"
      :key="index"
      :width="width ? width : null"
      :min-width="minWidth ? minWidth : 100"
      align="center">
        <template slot-scope="{row, $index}">
           <!-- 自定义tamplate -->
          <div  v-if="slotName">
            <!-- 插槽传值 data:数组数据 prop:当前数组对象的key index:行索引 -->
            <slot  :name="slotName" :data="prop ? row[prop] : []" :prop="item.prop" :rowData="row" :index="$index"></slot>
          </div>
          <!-- 不是自定义默认遍历数据 row[prop] 获取数组 item.prop为数组配置项的prop -->
          <div v-else >
            <div class="flex-column">
              <div v-for="(dataItem, dataIndex) in row[prop]" :key="dataIndex">
                {{dataItem[item.prop]}}
              </div>
            </div>
          </div>
        </template>
      </el-table-column>
      </el-table-column>
    </el-table>
    <!-- 分页插槽 -->
    <slot name="el-pagination"></slot>
  </div>
</template>
<script>
import { PropsType } from "../propsType.js";
import Sortable from "sortablejs";
export default {
  name: "comm_table",
  data() {
    return {
      lineStyle:{
        'font-size': '14px',
        'height': '45px',
        'padding': '3px 0'
      },
    };
  },
  props: {
    tableData: PropsType.Array,
    tablecolumn: PropsType.Array,
    loading: PropsType.Boolean,//loading
    showExpand: PropsType.Boolean,//是否展示详情行
    selectionObj: PropsType.Object,//是否展示详情行
    height: PropsType.Number,//表格高度
    maxHeight: PropsType.Number,//表格最大高
    tabRef:  PropsType.String,//表格ref
    smallRow: PropsType.Boolean,//控制表格行高
    showHeader: PropsType.Boolean,//是否显示表头
    spanMethod: PropsType.Function,//合并行合并列
    renderHeader: PropsType.Function,//自定义表头
    tabClass: PropsType.String,//表格class [拖动表格需要的参数]
    rowKey: PropsType.String,//表格唯一标识 [拖动表格需要的参数]
    dragTableFlag: PropsType.Boolean,//是否可拖动表格排序 [拖动表格需要的参数]
  },
  watch: {
  },
  methods: {
      sortByKey (column) {//排序
      let params = {}
      if(column.order){
        if (column.column) {
          params.orderBy = column.column.sortBy
          params.desc = column.column.order === 'descending'
          params.order = true;
        }
      }else{//排序恢复
        params.order = false;
      }
      // else {//自定义初始化排序 看情况传入
        //例如
        // params.orderBy = 'avgSales'
        // params.desc = true
      // }
      this.$emit('sortChange', params)
    },
    selectionChange(val) {// 表格checkbox 选择行回调
      this.$emit('selectionChange', val)
    },
    rowDrop() {
      // 此时找到的元素是要拖拽元素的父容器
      const tbody = document.querySelector(`.${this.tabClass} .el-table__body-wrapper tbody`);
      const _this = this;
      Sortable.create(tbody, {
        // 指定父元素下可被拖拽的子元素
        draggable: ".el-table__row",
        onEnd({ newIndex, oldIndex }) {
          if (newIndex !== oldIndex) {
            const currRow = _this.tableData.splice(oldIndex, 1)[0];
            _this.tableData.splice(newIndex, 0, currRow);
            _this.$emit('getDragTableSort', _this.tableData);
          }
        },
      });
    },
  },
  filters: {
    textSubstr (value, qtd = 50, mask = '...') {
      if (!value) return '-';
      return value.length > qtd ? `${value.substring(0, qtd)}${mask}` : value
    },
    emptyText(value){//数据为0的情况显示
      if(value === ''){
	 	  return '-'
	  }
      return value ?? '-'; //或者 (value !== undefined && value !== null) ? vaule : '-'
    }
  },
  mounted() {
    this.dragTableFlag && this.rowDrop();
  },
};
</script>
<style lang="scss">
.tooltipsCont{
  max-width: 500px;
  max-height: 450px;
}
</style>
<style lang="scss" scoped>
.limitInfo{
  cursor: pointer;
}
.flex-column{
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
}
</style>


组件中使用的 propsType.js

export const PropsType = {
  Array: {
    type: Array,
    default: ()=>([])
  },
  Object: {
    type: Object,
    default: ()=>({})
  },
  Boolean: {
    type: Boolean,
    default: false,
  },
  String: {
    type: String,
    default: ''
  },
  Number: {
    type: Number,
    default: 0
  },
  Function: Function,
  Promise: Promise
}

如何使用CommTable组件【基本展示】

<template>
  <div class="content">
    <div>
      <h1>EC2</h1>
      <CommTable
        tabRef="ec2Table"
        :tableData="tableData"
        :height="450"
        :tablecolumn="tablecolumn"
        :loading="tableLoading"
        :smallRow="true"
        @sortChange="getSortParams"
      >
        <template v-slot:state="{data, index}">
          {{data ? '显示' : '隐藏'}}
        </template>
        <template v-slot:desired="{data, index}">
          {{desiredList.filter(e=>e.value===data)[0].label || '-'}}
        </template>
        <template v-slot:skuProductList="{data, index, prop}">
          <!-- prop是属性 data是当前值 -->
          <div class="flex-column">
            <span v-for="(item, itemIndex) in data" :key="itemIndex">
              {{item[prop]}}
            </span>
          </div>
        </template>
        <template v-slot:operate="{rowData, index}">
          <el-button @click="openEC2Dialog(rowData)" size="mini" type="primary">编辑</el-button>
        </template>
        <el-pagination slot="el-pagination" @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page.sync="pageNum" :page-sizes="[10, 15, 20, 30, 50]" :page-size="pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total">
        </el-pagination>
      </CommTable>
    </div>
    <EC2Dialog :dialogVisible.sync="ec2visible" :rowObj="selectRow"></EC2Dialog>
  </div>
</template>
<script>
import CommTable from "src/components/partials/CommTable.vue";
import EC2Dialog from './components/editEC2Dialog.vue';
export default {
  name: "operationManagement",
  components: {
    CommTable,
    EC2Dialog
  },
  data() {
    const skuProductColumn = [
        {prop: 'name', label: 'sku'},
        {prop: 'count', label: '数量'},
        {prop: 'price', label: '价格'},
      ];
    return {
      tableData: [],
      tablecolumn: [
        { prop: "id", label: "ID" },
        { prop: "name", label: "名称" },
        { prop: "state", label: "状态" , slotName: 'state'},
        { prop: "instances", label: "实用类型" },
        { prop: 'skuProductList',label: 'sku信息', slotName: 'skuProductList', minWidth: 200, childrenList: skuProductColumn},
        { prop: "privateIPAddres", label: "私有IP地址", sortBy: "privateIPAddres", countLimit: 3, width: 120 },
        { prop: "publicIPAddres", label: "公有IP地址" },
        { prop: "functionDescription", label: "描述" },
        { prop: "desired", label: "预期状态" ,slotName: 'desired'},
        { prop: '', label: '操作', slotName: 'operate',}
      ],
	  desiredList: [
	  	{ value: 'stop', label: '停止' },
        { value: 'delete', label: '删除' },
        { value: 'start', label: '启动' },
      ],
      tableLoading: false,
      ec2visible: false,
      pageSize: 15,
      pageNum: 1,
      total: 0,
      selectRow: {}
    };
  },
  methods: {
    initData() {
      this.tableLoading = true;
      setTimeout(() => {
        this.tableLoading = false;
        this.tableData = [...Array(10).keys()].map((e) => ({
          id: e,
          name: "name" + e,
          state: false,
          instances: "实用类型",
          privateIPAddres: "私有IP地址",
          publicIPAddres: "公有IP地址",
          functionDescription: "描述",
          desired: Math.random() > .5 ? 'stop' : 'delete',
          skuProductList: [
            {name: 'H60523D1', count: 2, price: 39.99},
            {name: 'H60523D2', count: 10, price: 5.99},
          ]
        }));
        this.total = 10
      }, 1000);
    },
    openEC2Dialog(row) {
      this.selectRow = Object.assign({},row);
      console.log(this.selectRow,'selectRow')
      this.ec2visible = true;
    },
    getSortParams(params) {
      console.log("sore", params);
    },
    handleCurrentChange(val) {
      this.pageNum = val;
      this.initData();
    },
    handleSizeChange(val) {
      this.pageSize = val;
      this.pageNum = 1;
      this.initData();
    },
  },
  mounted() {
    this.initData();
  },
};
</script>
<style lang="scss" scoped>
.content {
  padding: 20px;
}
.flex-column{
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
}
</style>

**column的配置项介绍 **

{ prop, label, width, minWidth ,sortBy, slotName, countLimit, childrenList, className, columnFlag, fixed }
prop: 字段值
label: 显示名称
…宽度
sortBy: 是排序 当有设置的时候 给定一个字符串 然后 就会通过事件返回这个字符串的排序对象参数
slotName : 是自定义字段 有时候表格内容可能需要改动 添加按钮什么的就需要添加这个
countLimit: 字段展示的字符数
childrenList: 数组数据配置 => [{prop:‘字段值’, label:‘表头’}];
className: 给列名添加类名
columnFlag: 区分前后台排序 默认为前台排序 为true时 后台排序
fixed: 定位

 tablecolumn: [
        { prop: "id", label: "ID" },
        { prop: "name", label: "名称" },
        { prop: "state", label: "状态" , slotName: 'state'},
        { prop: "instances", label: "实用类型" },
        { prop: 'skuProductList',label: 'sku信息', slotName: 'skuProductList', minWidth: 200, childrenList: skuProductColumn},
        { prop: "privateIPAddres", label: "私有IP地址", sortBy: "privateIPAddres", countLimit: 3, width: 120 },
        { prop: "publicIPAddres", label: "公有IP地址" },
        { prop: "functionDescription", label: "描述" },
        { prop: "desired", label: "预期状态" ,slotName: 'desired'},
        { prop: '', label: '操作', slotName: 'operate',}
      ],

我调用的时候 有些字段是自定义字段 需要枚举值才可以展示 还有最后的操作按钮

展示一下效果
分页也是可选的 不需要可以不传入插槽就行了
在这里插入图片描述
按钮点击的弹框 事件参数都是可以获取当前表格的值

// 插槽会返回当前插名称 根据插槽名称自定义样式 当前数据 data 如果没有传prop 返回即为空;
当前行数据rowData 和 当前行索引index
//<slot  :name="slotName" :data="prop ? row[prop] : null" :prop="item.prop" :rowData ="row" :index="$index"></slot>
//比如编辑按钮 我们只需要拿到行数据和索引就可以操作你的数据了
 <template v-slot:operate="{rowData, index}">
          <el-button @click="openEC2Dialog(rowData)" size="mini" type="primary">编辑					</el-button>
 </template>

在这里插入图片描述

支持自定义表头功能

两种方法
一: 传递renderHeader方法
在这里插入图片描述
methods里添加方法

renderHeader(h, { column }) {
        switch (column.property) {
          case 'functionDescription':
            return [h('span', {}, [column.label+'这是自定义']), h('el-tooltip', { props: { placement: 'top', effect: 'light' } }, [h('div', { slot: 'content' }, [h('p', {}, ['一个提示'])]), h('i', { class: 'helpTips el-icon-info' ,style: 'cursor:pointer;'})])]
          default:
            return [h('span', {}, [column.label])]
        }
      },

然后查看效果
在这里插入图片描述
二:通过插槽
在这里插入图片描述
这里的是slotName+'Header’的方式 只要定义了slotName然后就可以设置了
在这里插入图片描述
我这里改动的是操作的显示 查看一下效果
在这里插入图片描述
这两种方法都可以改变表头 但是不要一起使用 一起使用会被第一个方法覆盖 插槽就不生效了~

详情内容展示

CommTable组件传入 showExpand true
然后在
在这里插入图片描述
自定义内容就行了

<CommTable
        :tableData="tableData"
        :maxHeight="350"
        :tablecolumn="tablecolumn"
        :showExpand="true"
        :loading="tableLoading"
        :smallRow="true"
        >
        <template v-slot:expand="{data}">
          <span>详情内容{{data}}</span>
        </template>
        <template v-slot:postContent="{data, index}">
          <div style="max-height: 46px;cursor: pointer;" v-clamp v-html="JSON.parse(data).content"></div>
        </template>
        <template v-slot:operate="{rowData, index}">
          <el-button @click="openTimeSelDialog(rowData)" size="mini" type="primary">置顶</el-button>
        </template>
    </CommTable>

效果图
在这里插入图片描述

可拖动表格支持

//表格组件使用插件 sortablejs 自行npm下载依赖
import Sortable from "sortablejs";

使用案例

//template
//需要传入的字段: 
// dragTableFlag: 是否可以拖动 默认false 为true的时候需要传入下面的字段
//rowKey:能唯一确定行的key 
//tabClass: 这个需要给定一个值 如果是多个表格都需要拖动要唯一 
//@getDragTableSort: 为拖动后的回调 返回内容为当前表格数据
<CommTable
        :tableData="tableData"
        :maxHeight="350"
        :tablecolumn="tablecolumn"
        :loading="tableLoading"
        :dragTableFlag="true"
        @getDragTableSort="getDragTableSort"
        rowKey="id"
        :tabClass='`detailClass${rowId}`'
        :smallRow="true"
        >
   </CommTable>
 
 //methods
 getDragTableSort(data){
	console.log(data);//为表格当前排序的值 可以在这里作相应的取值操作或请求
 }

表格复选框选择 及其定位功能

checkbox 回调函数selectionChange
:selectionObj=“{show: true, fixed: true}” 是否显示行复选框 是否定位

 <CommTable
        :tableData="tableData"
        :tablecolumn="tablecolumn"
        :selectionObj="{show: true, fixed: true}"
        ref="tableRef"
        @selectionChange="selectionChange"
        :loading="loading"
        >
 </CommTable>  

效果查看
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vue element-ui el-table表格二次封装 自定义el-table表格组件 vue封装表格组件 的相关文章

  • 如何从模板脚本访问 AngularJS 变量

    我的控制器 scope totals totals 我的模板 按 html 注入的预期工作 totals 但我需要的是访问变量totals在模板的脚本中 如下所示 我试过了 scope totals totals totals 等 均无济于
  • JavaScript 中的“this”如何工作?

    我知道还有其他几篇关于这个主题的帖子 但它们仍然让我感到困惑 我已经包含了 jQuery 和所有内容 我有一个简单的 javascript 类 如下例所示 function CarConstructor this speed 19 in m
  • 构建基于纯 JavaScript 的 Web 应用程序(客户端和服务器端)是否有意义? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我一直认为 JavaScript 是任何 Web 应用程序客户端的一个很好的补充 或者更确切地说 在过去几年中 是一个必须具备的功能 即使当我开
  • 使用 Ctrl+v 或右键单击 -> 粘贴检测粘贴的文本

    使用 JavaScript 如何检测用户将哪些文本粘贴到文本区域 您可以使用粘贴事件来检测大多数浏览器中的粘贴 尤其是 Firefox 2 当您处理粘贴事件时 记录当前选择 然后设置一个简短的计时器 在粘贴完成后调用一个函数 然后 该函数可
  • 使用 Javascript 防止刷新“跳转”

    我注意到 如果您在一个页面上并且向下滚动了很多 如果您刷新页面 大多数浏览器会将您跳回到您的位置 有什么办法可以防止这种情况发生吗 我研究了两个选项 但在 Webkit Firefox 上都不一致 window scrollTo 0 1 h
  • 我可以将 RegExp 和 Function 存储在 JSON 中吗?

    给定一个像这样的块 var foo regexp http fun function 将其存储在 JSON 中的正确方法是什么 您必须将 RegExp 作为字符串存储在 JSON 对象中 然后您可以从字符串构造一个 RegExp 对象 JS
  • 我可以使用 javascript 捕获并保存网页的当前状态吗

    我需要使用 javascript 获取页面的全部内容并将其发送到服务器脚本以保存它 我想在用户使用 AJAX 和其他 javascript 工具对页面进行一些更改后执行此操作 我不想要某些元素的状态 我想基本上获取 body 标记内的所有内
  • JS中的递归排序

    在一次采访中 我被要求编写一个程序 算法来使用递归对数字数组进行排序 虽然我含糊地回答了它 但我尝试并想出了以下代码 您可以使用以下JSFiddle https jsfiddle net RajeshDixit 2u9mLegv 1 链接来
  • 我在 firebase.auth.ApplicationVerifier 中遇到问题

    错误发生在signInWithPhoneNumber 的第二个参数中 我无法解决这个问题 我使用了三种方法来发送 otp 验证 otp 和最后用于验证码 methods sendOTP e e preventDefault if this
  • angular.isdefine 有什么好处?

    有什么好处angular isdefined超过和超过foo undefined 我一时想不出有什么好处 在 Javascript 中以任何方式访问真正未定义的变量 除了 typeof 都会抛出错误 你只能使用Angular isDefin
  • 如何为 HTML 验证提供自定义验证错误消息?

    当我使用默认 HTML 验证时 它会显示默认错误消息 这不是我想向客户显示的 我需要自定义消息并为每个验证提供不同的信息 例如最小 最大 类型和要求 例如 该字段为必填项 值不匹配 参考传统的HTML代码
  • 强制 Javascript 编码风格的工具[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我需要自动检查不同人编写的javascript源代码的风格 你知道有什么好的工具可以做到这一点吗 与 emacs 集成将是一个优势 先感谢
  • Vue Chart.js - 数据变化时图表不更新

    我正在使用 Vue js 和 Chart js 绘制一些图表 每次我调用该函数时generateChart 图表不会自动更新 当我在 Vue Devtools 中检查数据时 它们是正确的 但图表没有反映数据 但是 当我调整窗口大小时 图表确
  • JavaScript 从 json 迭代键和值? [复制]

    这个问题在这里已经有答案了 我正在尝试迭代以下 json VERSION 2006 10 27 a JOBNAME EXEC JOBHOST Test LSFQUEUE 45 LSFLIMIT 2006 10 27 NEWUSER 3 NE
  • Cordova/Phonegap 通过 JavaScript 在应用程序浏览器中打印

    我想从我正在开发的 iPad 应用程序打印一页 或某些页面 应用程序启动时所做的第一件事是通过以下代码加载外部网站 window location https 我现在想从这个外部网站打印一些东西 在 iPad 上的 Safari 中效果很好
  • Html页面在底部加载

    我需要一个 HTML 页面在页面加载时自动向下滚动 所以基本上加载在底部 可以使用JavaScipt吗 请您帮助我或引导我走向正确的方向 感谢所有帮助 谢谢 尝试这个 window scroll 0 document documentEle
  • 有没有办法在不托管网站的情况下呈现网站并共享它?

    我正在为一个项目创建一个 repl it 网站 问题是我的老师要求不要发布该网站 这意味着我无法使用 repl it 来托管它 我想知道是否有任何方法可以制作可以通过 Google Chrome 查看的网站副本 而无需连接到主机 我有所有的
  • 哪个 SVG/SMIL DOM 元素具有“beginElement”方法?

    最终 这是针对将在 Firefox 中运行的 Kiosk 风格的应用程序 使用 jQuery 1 6 4 因此答案可能是特定于 Firefox 的 我正在尝试制作动画 SVG 但我正在尝试通过动态插入 SMIL 来为其设置动画 我没有看到任
  • 使用node和multer将图像上传到heroku不起作用

    我正在尝试使用 Node 后端将图像文件上传到 Heroku 我可以使其工作 同样的过程在本地主机测试中工作得很好 但是在将我的项目部署到 Heroku 并测试它之后 过程和文件中出现错误不会上传 后端 let storage multer
  • 如何了解来自不同...“命名空间”的变量?

    如何从外部 javascript 文件中访问在另一个地方声明的某个变量 假设在一个 html 文件中我有以下内容 在 otherfile html 的部分中 我有 alert a 我如何确保收到一条提示消息 某事 我认为Google Ads

随机推荐

  • 【新手入门篇】React+ant design

    本篇着重讲解如何使用官方的demo 至于React及antd的安装及配置在本文末尾会给出相应的参考链接 创建一个React项目之后 create react app 你的项目名 在新建的项目目录下引入antd组件库 yarn add ant
  • Ubuntu 23.10 支持基于 TPM 的全磁盘加密

    将于下个月发布的 Ubuntu 23 10 增加了一项实验性功能 初步支持基于 TPM 的全磁盘加密 该功能利用系统的可信平台模块 TPM 缺点是这种额外的安全性依赖于 Snaps 包括内核和 GRUB 引导加载器 Ubuntu 开发商 C
  • 输出该单链表的中间结点的值,如果链表长度为偶数,则输出中间靠右的结点

    输出该单链表的中间结点的值 如果链表长度为偶数 则输出中间靠右的结点 题目要求 输入数据创建一个单链表 实现一种算法 输出该单链表的中间结点的值 如果链表长度为偶数 则输出 中间靠右 的结点 如果链表只有一个元素 则输出唯一的元素 算法思路
  • 【华为机试真题 JAVA】水果搬运问题-200

    题目描述 一组工人搬运一批水果 用一维数组存储工人编号和水果名称以及搬运重量 要求先按水果分组 然后按搬运重量排序输出 输入描述 第一行包括一个整数 N 1 N 100 代表工人的个数 接下来的 N 行每行包括两个整数 p 和 q 分别代表
  • 关于STM32的SPI使用DAM首发的回调问题

    本人第一次使用HAL库 然后用SPI操作FLAH 担心数据量大 于是打算使用DMA 之前是用的LL库 然后发现了一个问题 SPI怎么都接收不到数据 想了一下应该是片选引脚的问题 我应该在DMA传输结束时关闭引脚 但是之前都是用LL库 判断标
  • spring无侵入自动生成接口文档

    背景 spring cloud多个微服务开发了很多接口 紧急对接前端 需要快速提供一批接口的文档 且不同微服务的接口由多位同事开发且注释非常的少各有不同 现在需要不修改代码不添加注释的情况下能自动的扫描接口并生成文档 本文将详细介绍实现此需
  • X264的参考帧设置

    1 以r1884为例 r ref lt 整数 gt Reference Frame 即参考帧 决定最多可能的参考帧数 有效范围值1 16 该值越大 压缩率越高 但大于6后对压缩率的贡献很低 可以看压制完后x264 info ref 项 例如
  • sqlserver 登录名和用户名

    解释 登录名 通俗的讲 平时连接数据库是用的就是登录名 而不是用户名 是数据库服务级别 登录数据库之后 这个登录名有什么权限 比如可以访问那个数据库 或者表 存储过程 视图等 甚至字段权限 是有与之对应的用户 用户名 决定 注 也可以从服务
  • 手风琴(折叠面板)

    目录 一 Layui手风琴 1 1 引用layui的css和js 1 2 开启手风琴的代码示例 1 3 静态数据 1 4 最终效果图 二 Bootstrap手风琴 2 1 引用Bootstrap的css和js 2 2 开启手风琴的代码示例
  • Python 第一章 基础知识(6) 函数

    函数就像可以用来实现特定功能的小程序一样 Python的很多函数都能做很奇妙的事情 先来介绍一个内建函数 即是Python自带的已经定义好的函数 可以直接用 gt gt gt pow 2 3 8 这个函数实现了2 2 2的算法 这种使用函数
  • Angular 中 web worker的使用

    web worker就是在web应用程序中使用的worker 这个worker是独立于web主线程的 在后台运行的线程 web worker的优点就是可以将工作交给独立的其他线程去做 这样就不会阻塞主线程 第一步 ng g webWorke
  • 快速生成26个英文字母

    在学习中经常会拿26个英文字母序列做为字符串的例子来说明 但是自己又不想每次都自己手动输入 所以就想写个方法能快速的生成这个字符串 generate 26 english Characters return void public stat
  • C# 9.0:Records

    转自 翁智华 cnblogs com wzh2010 p 13950647 html 概述 在C 9 0下record是一个关键字 微软官方目前暂时将它翻译为记录类型 传统面向对象的编程的核心思想是一个对象有着唯一标识 封装着随时可变的状态
  • JenKins结合cppcheck及cpplint进行代码风格及静态代码检测

    JenKins结合cppcheck及cpplint 最近公司需要在Jenkins上安装cppcheck及cpplint进行代码风格及静态代码检测 这里记录下过程 前提条件 安装了Jenkins 步骤如下 第一步 安装cppcheck并配置环
  • [Linux] yum和apt-get用法及区别

    一般来说著名的linux系统基本上分两大类 1 RedHat系列 Redhat Centos Fedora等 2 Debian系列 Debian Ubuntu等 RedHat 系列 1 常见的安装包格式 rpm包 安装rpm包的命令是 rp
  • vs2019调试时中文乱码解决办法

    vs2013 vs2019系列文章目录 文章目录 vs2013 vs2019系列文章目录 问题描述 一 解决 解决方法1 在我机器上仍然未解决 解决方法2 在我机器上可行 调试时中文显示效果 问题描述 vs2019调试时中文乱码 但是在vs
  • except Exception as e作用

    小记 今天在查看poc时 发现这段代码不理解 所以B站搜索了一下 把别人讲的内容爬了一下 coding utf 8 a int input 请输入数字0 try if a 0 print a except Exception as e 作用
  • Redis高可用集群(哨兵、集群)

    文章目录 前言 一 主从复制 1 1 主从复制的作用 1 2 主从复制流程 1 3 主从复制搭建 二 哨兵模式 2 1 哨兵模式的作用 2 2 哨兵结构的组成 2 3 故障转移机制 2 4 哨兵模式搭建 三 集群模式 3 1 集群的作用 3
  • shell 脚本调试工具

    bashdb 是一个类似GDB的脚本调试软件 具有断点 单步执行 观察变量等功能 安装方法 sudo apt get install bashdb bashdb 使用方法 bashdb options script name script
  • vue element-ui el-table表格二次封装 自定义el-table表格组件 vue封装表格组件

    CommTable vue table组件