elementui el-table 封装表格

news2024/12/28 19:14:59

ps:   1.3版本

案例:

完整代码:

可直接复制粘贴,但一定要全看完!

v-slot="scopeRows" 是vue3的写法;

vue2是 slot-scope="scope"

<template>
  <!-- 简单表格、多层表头、页码、没有合并列行 -->
  <div class="maintenPublictable">
    <!--cell-style 改变某一列行的背景色 -->
    <!-- tree-props 配置树形子表
    row-click: 单击事件
    highlight-current-row:高亮选中某行
    default-expand-all:默认是否展开字列表
    current-change:管理选中时触发的事件
    selection-change:多选框
    row-key="id":    id:一定要跟后台返回来的id一致,不一致,会出错
    -->
    <!-- :tree-props="{ children: 'children', hasChildren: 'hasChildren' }" -->
    <el-table
      ref="table"
      :data="tableData"
      :height="getHeight"
      border
      highlight-current-row
      @selection-change="handleSelectionChange"
      :key="itemKey"
      :cell-style="tableCellStyle"
      @row-click="clickRow"
      row-key="ID"
      :default-expand-all="defaultall"
      :highlight-current-row="highlightCurrent"
      @current-change="handleCurrentChangeRow"
      :tree-props="{ children: 'Children', }"
    >
      <el-table-column
        type="index"
        width="55"
        label="序号"
      >
      </el-table-column>
      <el-table-column
        type="selection"
        v-if="isSelection"
        width="55"
      >
      </el-table-column>
      <!-- item.direction 方向,判断居中还是靠右 -->
      <template v-for="(item, index) in tableHeader">
        <!-- 1. 这是第一层 -->
        <!-- sortable: 排序 -->
        <el-table-column
          v-if="!item.Children"
          :key="index"
          :prop="item.prop"
          :label="item.label"
          header-align="center"
          :align="item.direction"
          :min-width="item.width"
          :sortable="item.sortable"
        >
          <!--需封装动态展示并且适合多种输入  todo          -->
          <template
            v-slot="scopeRows"
            v-if="item.label === '在库数量'"
          >
            <el-input
              v-model="scopeRows.row.editRow.InStockQuantity"
              type="number"
              oninput="if(value<0)value=0"
              @blur="getRowData(scopeRows.row.editRow)"
            ></el-input>
          </template>
          <template
            v-slot="scopeRows"
            v-if="item.label === '在库金额'"
          >
            <el-input
              v-model="scopeRows.row.editRow.InStockAmount"
              type="number"
              @blur="getRowData(scopeRows.row.editRow)"
              oninput="if(value<0)value=0"
            ></el-input>
          </template>
          <template
            v-slot="scopeRows"
            v-if="item.label === '库位'"
          >
            <el-select
              v-model=" scopeRows.row.editRow.StoreLocationID"
              @change="getRowData(scopeRows.row.editRow)"
            >
              <el-option
                v-for="item in StorageLocation"
                :key="item.ID"
                :label="item.LocationName"
                :value="item.ID"
              >
              </el-option>
            </el-select>
          </template>
          <template
            v-slot="scopeRows"
            v-if="item.label === '风力发电有限公司1'"
          >
            <el-input
              v-model="scopeRows.row.Amount.Amount1"
              type="number"
              @blur="getRowData(scopeRows.row.Amount)"
              :disabled=" (rowID!=scopeRows.row.SubjectsID && !this.disableD) || (rowID==scopeRows.row.SubjectsID && this.disableD) "
              oninput="value=value.replace(/^0|[^0-9]/g, '')"
            ></el-input>
          </template>
          <template
            v-slot="scopeRows"
            v-if="item.label === '溪木源公司2'"
          >
            <el-input
              v-model="scopeRows.row.Amount.Amount2"
              type="number"
              @blur="getRowData(scopeRows.row.Amount)"
              :disabled="rowID!=scopeRows.row.SubjectsID  "
              oninput="value=value.replace(/^0|[^0-9]/g, '')"
            ></el-input>
          </template>
          <template
            v-slot="scopeRows"
            v-if="item.label === '大风车有限公司3'"
          >
            <el-input
              v-model="scopeRows.row.Amount.Amount3"
              type="number"
              @blur="getRowData(scopeRows.row.Amount)"
              :disabled="rowID!=scopeRows.row.SubjectsID  "
              oninput="value=value.replace(/^0|[^0-9]/g, '')"
            ></el-input>
          </template>
          <template
            v-slot="scopeRows"
            v-if="item.label === '新能源公司4'"
          >
            <el-input
              v-model="scopeRows.row.Amount.Amount4"
              type="number"
              :disabled="rowID!=scopeRows.row.SubjectsID  "
              @blur="getRowData(scopeRows.row.Amount)"
              oninput="value=value.replace(/^0|[^0-9]/g, '')"
            ></el-input>
          </template>
          <template
            v-slot="scopeRows"
            v-if="item.label === '定边风力公司5'"
          >
            <el-input
              v-model="scopeRows.row.Amount.Amount5"
              type="number"
              @blur="getRowData(scopeRows.row.Amount)"
              :disabled="rowID!=scopeRows.row.SubjectsID  "
              oninput="value=value.replace(/^0|[^0-9]/g, '')"
            ></el-input>
          </template>
          <!-- 入库登记用到的   inWarehouseRow: 在给表格赋值时定义的。  -->
          <template
            v-slot="scopeRows"
            v-if="item.label === '购买数量'"
          >
            <el-input
              v-model="scopeRows.row.inWarehouseRow.Quantity"
              type="number"
              @blur="getRowData(scopeRows.row.inWarehouseRow)"
              oninput="value=value.replace(/^0|[^0-9]/g, '')"
            ></el-input>
          </template>
          <template
            v-slot="scopeRows"
            v-if="item.label === '单价'"
          >
            <el-input
              v-model="scopeRows.row.inWarehouseRow.UnitPrice"
              type="number"
              @blur="getRowData(scopeRows.row.inWarehouseRow)"
              oninput="value=value.replace(/[^\d.]/g, '').replace(/^0+(\d)/, '$1').replace(/^\./, '0.').replace('.', '$#$').replace(/\./g, '').replace('$#$', '.').replace(/^\./g, '')"
            ></el-input>
          </template>
          <template
            v-slot="scopeRows"
            v-if="item.label === '操作'"
          >
            <el-button
              link
              type="primary"
              size="small"
              color="#b0b1b3"
              class="handleClick_Btn"
              @click="handleClick(scopeRows.row)"
            >保存</el-button>
          </template>
        </el-table-column>
        <!-- 二级表头 -->
        <el-table-column
          v-else
          :key="index + 1"
          :prop="item.prop"
          :label="item.label"
          :type="item.type"
          :align="item.align || 'center'"
        >
          <template v-for="(childItem, index) in item.Children">
            <!-- 三级表头 -->
            <el-table-column
              v-if="!childItem.Children"
              :key="index"
              :prop="childItem.prop"
              :label="childItem.label"
              header-align="center"
              :align="childItem.direction"
              :min-width="childItem.width"
            >
            </el-table-column>
            <el-table-column
              v-else
              :key="index + 1"
              :prop="childItem.prop"
              :label="childItem.label"
              :type="childItem.type"
              :align="childItem.align || 'center'"
            >
              <template v-for="(childItem, index) in item.Children">
                <!-- 这是第三层 -->
                <el-table-column
                  v-if="!childItem.Children"
                  :key="index"
                  :prop="childItem.prop"
                  :label="childItem.label"
                  header-align="center"
                  :align="childItem.direction"
                  :min-width="childItem.width"
                >
                </el-table-column>
                <el-table-column
                  v-else
                  :key="index + 1"
                  :prop="childItem.prop"
                  :label="childItem.label"
                  :type="childItem.type"
                  :align="childItem.align || 'center'"
                >
                </el-table-column>
              </template>
            </el-table-column>
          </template>
        </el-table-column>
      </template>
      <!-- 表格最后一列是否是勾选框【完成情况】 -->
      <el-table-column
        v-if="isSelect"
        align="center"
      >
        <template
          slot="header"
          slot-scope="scope"
        >
          <el-checkbox
            @change="allCheck(isAllcheck, tableData, ClickIdsList, isIndeterminate)"
            size="large"
            v-model="isAllcheck"
            :indeterminate="isIndeterminate"
          ></el-checkbox>
          完成情况
        </template>
        <template slot-scope="scope">
          <!-- <el-button @click="Ones(scope)">122333</el-button> -->
          <el-checkbox
            @change="OnesClick(scope.row)"
            v-model="scope.row.check"
            class="ml-4"
            size="large"
          ></el-checkbox>
        </template>
      </el-table-column>
    </el-table>
    <!--  分页 -->
    <div v-if="showFenYe">
      <el-pagination
        @size-change="handleSizeChange"
        @current-change="handleCurrentChange"
        :current-page="page.currentPage"
        :page-sizes="[5, 10, 15, 20]"
        :page-size="page.pagesize"
        layout="total, sizes, prev, pager, next, jumper"
        :total="page.total"
      >
      </el-pagination>
    </div>
  </div>
</template>
<script>
// import preventBack from "vue-prevent-browser-back"; //阻止返回
import { PublicFunction } from "@/utils/vuePublic";

export default {
  name: "maintenPublictable",
  components: {},
  props: {
    // 接收的是:是否有分页、是否有勾选
    columns: {
      type: Object,
      default: {},
    },
    // 接收的是:页码
    pagination: {
      type: Object,
      default: {},
    },
    // 接收的是:传递过来的库位数据
    storageLocationSelect: {
      type: Array,
      default: [],
    },
    // 接收的是:传递过来的库位数据
    GoodsID: {
      type: Array,
      default: [],
    },
    // 接收的是:传递过来的计划编制的行点击的id
    SubjectsID: {
      type: Number,
      default: "",
    },
  },
  data() {
    return {
      tableHeader: [], //表头
      tableData: [], //数据
      itemKey: "",

      types: 1, //用于合并,判断是否需要合并

      //#region 与父组件关联
      getHeight: 20, //高度
      isSelect: false, //勾选框
      showFenYe: false, //是否有分页
      isSelection: false, //是否有多选框
      isTag: false, //是否有标签
      defaultall: false, //是否默认展开所有行(用于有树状结构的表格)
      highlightCurrent: false, //高亮选中
      //#endregion

      // 页码
      page: {
        currentPage: 1, //当前页
        pagesize: 5, //当前页的条数
        total: 20, //总数
      },

      //多选框
      multipleSelection: [],

      //#region 用于右侧的完成情况
      //选择
      isAllcheck: false, //全选
      ClickIdsList: [], //已选择集合组
      isIndeterminate: false, //部分选中,默认是false
      //#endregion,
      //仓库对应的库位数据
      StorageLocation: [],
      // //选中的行
      // 行id
      rowID: null,
      disableD: true,
      //#endregion
    };
  },
  // mixins: [preventBack], //注入  阻止返回上一页

  created() {},
  watch: {
    // 监听对象的写法(监听页码的变化)
    pagination: {
      handler(newValue, oldVal) {
        // console.log("监听111", oldVal);
        // console.log("监听222", newValue);
        this.page.total = newValue.total;
      },
      deep: true, // 深度监听
      // immediate: true, //写上它,初始化时也会调用监听
    },
    //接收库位的数据
    storageLocationSelect: {
      handler(n, o) {
        this.StorageLocation = n;
      },
      deep: true, // 深度监听
      immediate: true, //写上它,初始化时也会调用监听
    },
  },
  mounted() {
    this.init();
    // console.log(this.columns, "初始化:接收父组件传过来的值", this.pagination);
  },
  methods: {
    a(val, el) {
      console.log(val, "zheshi ", el);
    },
    Test(val) {
      console.log(val);
    },
    Ones(value) {
      console.log("12121212", value);
    },
    //在父组件初始化时,需要获得页码,所以子组件初始化时把页码传过去
    init() {
      let _this = this;
      _this.getHeight = this.columns.getHeight;
      _this.defaultall = this.columns.defaultall; //是否展开所有行
      _this.isSelect = this.columns.isSelect; //右侧的完成情况
      _this.isTag = this.columns.isTag; //是否有标签
      _this.showFenYe = this.columns.showFenYe;
      _this.isSelection = this.columns.isSelection; //左侧的多选框
      _this.highlightCurrent = this.columns.highlightCurrent; //高亮选中

      _this.page.total = this.pagination.total;
      _this.$emit("getPage", {
        data: {
          pageSize: _this.page.pagesize,
          pageNum: _this.page.currentPage,
          isTypes: 1,
        },
      });
      // //每次使用就调一次
      // this.SetDataTableHeader()
      this.rowID = null;
    },
    //一页有多少条数据
    handleSizeChange(val) {
      let _this = this;
      _this.page.pagesize = val;
      // 子传父
      _this.$emit("getPage", {
        data: {
          pageSize: _this.page.pagesize,
          pageNum: _this.page.currentPage,
          isTypes: 2,
        },
      });
    },
    //第几页/切换页码
    handleCurrentChange(val) {
      let _this = this;
      _this.page.currentPage = val;
      _this.$emit("getPage", {
        data: {
          pageSize: _this.page.pagesize,
          pageNum: _this.page.currentPage,
          isTypes: 2,
        },
      });
    },
    //表头
    SetDataTableHeader(GetDataLists) {
      //重新渲染,itemKey用于处理Table不渲染的问题
      this.itemKey = Math.random();
      //重新渲染数据表
      this.tableHeader = GetDataLists;
      // console.log("表头", this.tableHeader);
      // this.$forceUpdate()
    },
    //table值
    SettableData(tabledata, flag) {
      // console.log(tabledata, "tabledata");
      let _this = this;
      _this.tableData = tabledata;
      // console.log("接收父组件传过来的表格数据", tabledata);
      this.tableData.forEach((item, index) => {
        //仓库初始化编辑
        item.editRow = {
          InStockQuantity: "", //在库数量
          InStockAmount: "", //在库金额
          StoreLocationID: "", //库位
        };
        /**1是编辑,0是新增 */
        if (flag == 1) {
          item.inWarehouseRow = {
            Quantity: item.Quantity,
            UnitPrice: item.UnitPrice,
          };
        } else if (flag == 0) {
          item.inWarehouseRow = {
            Quantity: "",
            UnitPrice: "",
          };
        }
        //如果flag为true的情况下,是编辑,进行赋值, 为false是新增
        if (flag == true) {
          //计划编制的字段
          item.Amount = {
            Amount1: item.Amount1,
            Amount2: item.Amount2,
            Amount3: item.Amount3,
            Amount4: item.Amount4,
            Amount5: item.Amount5,
          };
        } else {
          item.Amount = {
            Amount1: "",
            Amount2: "",
            Amount3: "",
            Amount4: "",
            Amount5: "",
          };
        }
      });
    },

    //左侧:多选框
    handleSelectionChange(val) {
      this.multipleSelection = val;
      // console.log("左侧:勾选数据", this.multipleSelection);
      this.$emit("handleSelectionChange", val);
    },

    //#region 下面这个是用于最右侧的完成情况
    //全选 调取公共js文件的方法
    allCheck(isAll, tableData, checkList, isCheck) {
      //接收传过来的值
      let objData = PublicFunction.allCheck(
        isAll,
        tableData,
        checkList,
        isCheck
      );
      this.isAllcheck = objData.isAll;
      this.ClickIdsList = objData.checkList;
    },

    //单行选择
    OnesClick(rows) {
      if (rows.check) {
        this.ClickIdsList.push(rows.id);
      } else {
        let index = this.ClickIdsList.indexOf(rows.id);
        this.ClickIdsList.splice(index, 1);
      }
      // console.log("勾选111", this.ClickIdsList);
      this.isIndeterminate =
        this.ClickIdsList.length > 0 &&
        this.ClickIdsList.length < this.tableData.length;
      this.isAllcheck = this.ClickIdsList.length == this.tableData.length;
    },
    //#endregion

    // 合并单元格
    objectSpanMethod({ row, column, rowIndex, columnIndex }, tableData, types) {
      if (types === 1) {
        switch (
          columnIndex // 将列索引作为判断值
        ) {
          // 通过传递不同的列索引和需要合并的属性名,可以实现不同列的合并(索引0,1 指的是页面上的0,1)
          case 2:
            return PublicFunction.MergeCol(tableData, "itemDetail", rowIndex);
          case 1:
            return PublicFunction.MergeCol(tableData, "item", rowIndex);
        }
      } else {
        //保障作业
        switch (columnIndex) {
          case 1:
            return PublicFunction.MergeCol(tableData, "item", rowIndex);
        }
      }
      //判断检查内容是否为空
      // if (
      //   tableData[columnIndex].checkContent != undefined ||
      //   tableData[columnIndex].checkContent != null
      // ) {
      // } else {
      // }
    },

    // 提交(在父组件点击提交时调用这个方法)
    childSumbit() {
      // console.log(
      //   "子组件提交",
      //   this.tableData,
      //   this.ClickIdsList,
      //   this.multipleSelection
      // );
      let param = {
        tabledata: this.tableData,
        ClickIdsList: this.ClickIdsList,
        multipleSelection: this.multipleSelection,
      };
      // 把值传给父组件
      this.$emit("sumbitData", param);
    },

    //行点击事件
    clickRow(row, column, event) {
      // let _this = this;
      // _this.$router.push({
      //   name: "equipSchedule", //路由名称
      //   params: {
      //     data: row, //参数
      //   },
      // });
      this.rowID = row.SubjectsID;
      this.$emit("rowClick", row);
    },

    // 行选中时间
    handleCurrentChangeRow(val) {
      this.$emit("handleCurrentChangeRow", val);
    },

    // 改变某一列的行的背景色
    tableCellStyle({ row, column, rowIndex, columnIndex }) {
      // console.log("背景色:");
      // console.log("row===:", row);
      // console.log("column===:", column);
      // console.log("rowIndex===:", rowIndex);
      // console.log("columnIndex===:", columnIndex);
      //如果是第一列
      if (columnIndex === 1) {
        //如果这一行的字段==未维护
        if (row.state == "未维护") {
          // 如果是未维护——背景色浅蓝色,字体色蓝色;
          return "background:#ecf5ff; color:#409eff";
        } else if (row.state == "已维护") {
          // 如果是已维护——背景色绿色,字体色白色;
          return "background:#67c23aa6;color:#fff ";
        } else if (row.state == "部分维护") {
          // 如果是已维护——背景色棕色,字体色白色;
          return "background:#e6a23cab;color:#fff ";
        } else {
        }
      } else {
      }
    },
    //获取行内编辑的数据
    getRowData(val) {
      console.log(val, "获取行内编辑的数据");
      this.$emit("getEditRow", val);
    },

    /**
     * 操作列
     */
    handleClick(val) {
      // console.log(val, "操作列");
      this.$emit("getclickRow", val);
    },
  },

  //#endregion
};
</script>

<style scoped>
.maintenPublictable ::v-deep .el-table th,
::v-deep .el-table thead.is-group th.el-table__cell {
  background: linear-gradient(147deg, #70c0ff, #2f9fff);

  color: #fff;

  padding: 0;
  margin: 0;
}

/*****滚动条影藏 */

::v-deep .el-table--scrollable-y ::-webkit-scrollbar {
  display: none !important;
}

/**lable名字 */
::v-deep .el-checkbox__label {
  color: #fff;
}

::v-deep .el-table__header {
  height: 4rem;
}
/*按钮样式 */
/* ::v-deep .el-button:hover,
::v-deep .el-button:focus {
  color: #f3f3f3 !important;
  font-weight: bold;
} */
</style>

 

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

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

相关文章

2023年度盘点:网络电视盒子哪个好?目前性能最好的电视盒子

挑选电视盒子时配置性能是最重要的&#xff0c;芯片、运存、存储全部会影响到我们的观影体验&#xff0c;想播放流畅、响应速度快&#xff0c;要在预算范围内选择配置最高的产品&#xff0c;那么哪些电视盒子称得上是目前性能最好的电视盒子呢&#xff1f;不懂网络电视盒子哪个…

自定义view - 玩转字体变色

自定义View步骤&#xff1a; 1>&#xff1a;values__attrs.xml&#xff0c;定义自定义属性&#xff1b; 2>&#xff1a;在第三个构造方法中获取自定义属性&#xff1b; 3>&#xff1a;onMeasure【不是必须的】&#xff1b; 4>&#xff1a;onDraw&#xff1a;绘制代…

【Java中的Thread线程的简单方法介绍和使用详细分析】

文章目录 前言一、run() 和 start() 方法二、sleep() 方法三、join() 方法总结 前言 提示&#xff1a;若对Thread没有基本的了解&#xff0c;可以先阅读以下文章&#xff0c;同时部分的方法已经在如下两篇文章中介绍过了&#xff0c;本文不再重复介绍&#xff01;&#xff01;…

海量遥感数据处理与云计算技术教程

详情点击链接&#xff1a;海量遥感数据处理与GEE云计算技术 一&#xff0c;GEE及开发平台 1.GEE平台及典型应用&#xff1b; 2.GEE JavaScript开发环境及常用数据资源&#xff1b; 3.JavaScript基础&#xff0c;包括变量&#xff0c;运算符&#xff0c;数组&#xff0c;判断及…

【数据结构和算法15】二叉树的实现

二叉树是这么一种树状结构&#xff1a;每个节点最多有两个孩子&#xff0c;左孩子和右孩子 重要的二叉树结构 完全二叉树&#xff08;complete binary tree&#xff09;是一种二叉树结构&#xff0c;除最后一层以外&#xff0c;每一层都必须填满&#xff0c;填充时要遵从先左后…

程序员千万别碰这3种副业!!!

最近&#xff0c;“消费降级”这个词频频被大家提及&#xff0c;某瓣上&#xff0c;“今天消费降级了吗”小组的常驻人口有36万&#xff0c;某书上&#xff0c;跟消费降级有关的笔记近7万条...... 不少网友晒出了自己消费降级后的生活&#xff1a;由从前每天一杯的星巴克变成了…

ROS noetic,ROS melodic 安装 MoveIt 并运行

ROS noetic&#xff0c;ROS melodic 安装 MoveIt 并运行 前言更新功能包版本下载依赖文件创建工作区和软件源下载源代码安装编译器缓存&#xff08;可选环节&#xff09;编译Moveit&#xff01;安装Moveit&#xff01;检测是否安装成功 前言 在安装过程中我也碰壁过很多次&…

[算法通关村] 1.3 链表的删除

上一节我们谈到了链表的头插、尾插、中间插入的方法&#xff0c;忘记的小伙伴可以复习一下&#xff1a; [算法通关村] 1.2 链表的插入 接下来&#xff0c;完成链表的删除工作&#xff0c;我们在上一节的学习中&#xff0c;分别在链表的开头、中间和结尾插入了节点&#xff0c;…

【USACO OPEN12铜组】岛屿

【USACO OPEN12铜组】岛屿 文章目录 【USACO OPEN12铜组】岛屿题目描述输入格式输出格式数据范围输入样例&#xff1a;输出样例&#xff1a; 思路code 2014. 岛 - AcWing题库 题目描述 每当下雨时&#xff0c;农夫约翰的田地总是被洪水淹没。 由于田地不是完全水平的&#xf…

Cesium态势标绘专题-扇形(标绘+编辑)

标绘专题介绍:态势标绘专题介绍_总要学点什么的博客-CSDN博客 入口文件:Cesium态势标绘专题-入口_总要学点什么的博客-CSDN博客 辅助文件:Cesium态势标绘专题-辅助文件_总要学点什么的博客-CSDN博客 本专题没有废话,只有代码,代码中涉及到的引入文件方法,从上面三个链…

(五)FLUX中的数据类型

以下内容来自 尚硅谷&#xff0c;写这一系列的文章&#xff0c;主要是为了方便后续自己的查看&#xff0c;不用带着个PDF找来找去的&#xff0c;太麻烦&#xff01; 第 5 章 FLUX中的数据类型 5.1 10 个基本数据类型 5.1.1 Boolean &#xff08;布尔型&#xff09; 5.1.1.1 …

Pytorch学习笔记 | 利用线性回归实现最简单的梯度下降 | 含代码和数据

代码 import torch import numpy as np import matplotlib.pyplot as plt import pandas as pddef make_linear_regression_data():x = np.linspace(start=10

IIC通讯故障纠错一例

1.问题描述 IIC在既有的工作中&#xff0c;用来协调两个外围芯片。一个芯片扩展IO&#xff0c;一个处理显示。仔细核对了IIC的种种配置&#xff0c;并且最终测量了输出的时钟和数据波形&#xff0c;最终的时钟线波形是这样的&#xff1a; 单片机master模式&#xff0c;输出前面…

ES6基础知识八:你是怎么理解ES6中Proxy的?使用场景?

一、介绍 定义&#xff1a; 用于定义基本操作的自定义行为 本质&#xff1a; 修改的是程序默认形为&#xff0c;就形同于在编程语言层面上做修改&#xff0c;属于元编程(meta programming) 元编程&#xff08;Metaprogramming&#xff0c;又译超编程&#xff0c;是指某类计算…

【Java练习题汇总】《第一行代码JAVA》异常处理篇,汇总Java练习题——异常的概念及处理标准格式(try、catch、finally、throws、throw)、断言机制 Assertion ~

Java练习题 异常处理篇 1️⃣ 异常处理篇 1️⃣ 异常处理篇 一、填空题 Throwable 下的两个子类是______________ 、______________ 。ArthmeticException 类表示______________ 异常&#xff0c; ArraysIndexOutOfBoundsException 表示______________ 异常。一个 try 代码后…

Linux内核提权漏洞(Dirty-pipe)复现

前言&#xff1a;CVE-2022-0847 是存在于 Linux内核 5.8 及之后版本中的本地提权漏洞。攻击者通过利用此漏洞&#xff0c;可覆盖重写任意可读文件中的数据&#xff0c;从而可将普通权限的用户提升到特权 root。 CVE-2022-0847 的漏洞原理类似于 CVE-2016-5195 脏牛漏洞&#xf…

Vue入门项目——WebApi

Vue入门——WebApi vue3项目搭建组合式API响应式APIreactive()ref() 生命周期钩子computed计算属性函数watch监听函数父子通信模板引用组合选项 vue3项目搭建 简单看下Vue3的优势吧 下载安装npm及node.js16.0以上版本&#xff08;确保安装成功可用如下代码检查版本&#xff0…

YOLOX-PAI 论文学习

1. 解决了什么问题&#xff1f; 对 YOLOX 做加速&#xff0c;在单张 Tesla V100 上取得了 42.8 42.8 42.8mAP&#xff0c;推理速度为 1 毫秒。 2. 提出了什么方法&#xff1f; 2.1 主干网络 YOLOv6 和 PP-YOLOE 都将主干网络从 CSPNet 切换到了 RepVGG。RepVGG 在推理时&a…

PHP在线相册--【强撸项目】

强撸项目系列总目录在000集 PHP要怎么学–【思维导图知识范围】 文章目录 本系列校训本项目使用技术 上效果图phpStudy 设置导数据库项目目录如图&#xff1a;代码部分&#xff1a;主页 配套资源作业&#xff1a; 本系列校训 用免费公开视频&#xff0c;卷飞培训班哈人&…

【深度学习】【Image Inpainting】Free-Form Image Inpainting with Gated Convolution

模型&#xff1a;DeepFillv2 (CVPR’2019) 论文&#xff1a;https://arxiv.org/abs/1806.03589 代码&#xff1a;https://github.com/JiahuiYu/generative_inpainting 文章目录 效果AbstractIntroductionRelated WorkAutomatic Image InpaintingGuided Image Inpainting and Sy…