elementui el-table 封装表格

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>

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

iOS 应用上架的步骤和工具简介

编辑 APP开发助手是一款能够辅助iOS APP上架到App Store的工具&#xff0c;它解决了iOS APP上架流程繁琐且耗时的问题&#xff0c;帮助跨平台APP开发者顺利将应用上架到苹果应用商店。最重要的是&#xff0c;即使没有配置Mac苹果机&#xff0c;也可以使用该工具完成一系列操作&…

Merge the squares! 2023牛客暑期多校训练营4-H

登录—专业IT笔试面试备考平台_牛客网 题目大意&#xff1a;有n*n个边长为1的小正方形摆放在边长为n的大正方形中&#xff0c;每次可以选择不超过50个正方形&#xff0c;将其合并为一个更大的正方形&#xff0c;求一种可行的操作使所有小正方形都被合并成一个n*n的大正方形 1…

找不到mfc140u.dll怎么解决

第一&#xff1a;mfc140u.dll有什么用途&#xff1f; mfc140u.dll是Windows操作系统中的一个动态链接库文件&#xff0c;它是Microsoft Foundation Class (MFC)库的一部分。MFC是 C中的一个框架&#xff0c;用于构建Windows应用程序的用户界面和功能。mfc140u.dll包含了MFC库中…

“RWEQ+”集成技术在土壤风蚀模拟与风蚀模数估算、变化归因分析中的实践

土壤风蚀是一个全球性的环境问题。中国是世界上受土壤风蚀危害最严重的国家之一&#xff0c;土壤风蚀是中国干旱、半干旱及部分湿润地区土地荒漠化的首要过程。中国风蚀荒漠化面积达160.74104km2&#xff0c;占国土总面积的16.7%&#xff0c;严重影响这些地区的资源开发和社会经…

GitLab开启双端认证并登录GitLab

GitLab开启双端认证并登录GitLab 1.介绍双端认证 单重认证——密码验证&#xff0c;这极其容易出现密码被盗&#xff0c;密码泄露等危险事件。 于是为了提高安全性&#xff0c;就出现了双因素认证&#xff0c;多因素认证。登录的时候不仅要输入账号和密码还需要输入一个验证码…

Web3 叙述交易所授权置换概念 编写transferFrom与approve函数

前文 Web3带着大家根据ERC-20文档编写自己的第一个代币solidity智能合约 中 我们通过ERC-20一种开发者设计的不成文规定 也将我们的代币开发的很像个样子了 我们打开 ERC-20文档 我们transfer后面的函数就是transferFrom 这个也是 一个账号 from 发送给另一个账号 to 数量 val…

如何搭建并部署抖音SEO源代码?

搭建并部署抖音SEO源代码&#xff0c;需要以下步骤&#xff1a; 购买服务器&#xff1a;在云服务商或者VPS提供商购买一台服务器&#xff0c;选择Linux系统。 安装LAMP/LEMP环境&#xff1a;LAMP是指Linux Apache MySQL PHP&#xff0c;LEMP是指Linux Nginx MySQL PHP。…

Spring学习笔记,包含Spring IOC、AOP基本原理、Bean管理、Spring 事务等等

&#x1f600;&#x1f600;&#x1f600;创作不易&#xff0c;各位看官点赞收藏. 文章目录 Spring 基础笔记1、控制反转 (IOC)1.1、IOC 底层原理1.2、IOC 之Bean管理 ( XML )1.3、IOC 之Bean管理 (FactoryBean)1.4、Bean的作用域1.5、Bean的生命周期1.6、Bean的自动装配1.7、I…

Docker 镜像操作

Docker镜像操作 我们已经介绍了容器操作,今天来了解下 Docker镜像 以及 镜像操作 。让我们一起开启镜像之旅吧。 Docker镜像 镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库…

RWEQ模型教程

详情点击链接&#xff1a;基于“RWEQ”集成技术在土壤风蚀模拟与风蚀模数估算、变化归因分析中的实践应用及SCI论文撰写 前沿 土壤风蚀是一个全球性的环境问题。中国是世界上受土壤风蚀危害最严重的国家之一&#xff0c;土壤风蚀是中国干旱、半干旱及部分湿润地区土地荒漠化的…

linux 动态库so相关操作

1. 查看库版本号 一般在文件名上有版本号&#xff0c;若文件名上没有版本号&#xff0c;使用如下命令查看&#xff1a; readelf -d libstdc.so 2. 查看库内函数 a) nm -d libstdc.so | grep 内容 b) objdump -tT libstdc.so | grep 内容 c) readelf -s libstdc.so | grep…

Rust vs Go:常用语法对比(六)

题图来自[1] 101. Load from HTTP GET request into a string Make an HTTP request with method GET to URL u, then store the body of the response in string s. 发起http请求 package mainimport ( "fmt" "io/ioutil" "net" "net/http…

【监控系统】可视化工具Grafana简介及容器化部署实战

1.什么是Grafana 官网地址&#xff1a;https://grafana.com/ Grafana用Go语言开发的开源数据可视化工具&#xff0c;可以做数据监控和数据统计&#xff0c;带有告警功能。支持快速灵活的客户端图表&#xff0c;面板插件有许多不同方式的可视化指标和日志&#xff0c;官方库中…

vue-echarts配置项详解

起因 最近接手了一个vue3项目&#xff0c;echarts用的是"vue-echarts": “^6.0.0”&#xff0c;每次查看文档的时候痛苦不已&#xff0c;找一个配置要花费大量时间&#xff0c;所以这篇文章&#xff0c;主要就是为了记录比较常见的一些配置。 主要会写三种图的配置…

QT多线程的示例

想象现在有一个场景&#xff0c;一共有三个线程线程A需要产生1000以内的随机数&#xff0c;线程B需要对这些随机数进行冒泡排序&#xff0c;线程C需要对这些随机数进行快速排序&#xff0c;主线程用来显示线程A的随机数&#xff0c;并且显示线程A和线程B的处理结果&#xff0c;…

联想拯救者笔记本切换独显直连游戏体验翻倍、火力全开“嗨”起来

最早的游戏本是由独显负责图形运算&#xff0c;然后直接向屏幕输出所有画面的。但独显负责所有工作&#xff0c;无时无刻都在耗电&#xff1b;撇开游戏模式下高负载的功耗不谈&#xff0c;即便在省电模式下功耗也比核显高得多。 英伟达发布的Optimus混合输出技术&#xff0c;在…

Python入门【变量的作用域(全局变量和局部变量)、参数的传递、浅拷贝和深拷贝、参数的几种类型 】(十一)

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱敲代码的小王&#xff0c;CSDN博客博主,Python小白 &#x1f4d5;系列专栏&#xff1a;python入门到实战、Python爬虫开发、Python办公自动化、Python数据分析、Python前后端开发 &#x1f4e7;如果文章知识点有错误…

【深度学习】【三维重建】windows10环境配置PyTorch3d详细教程

【深度学习】【三维重建】windows10环境配置PyTorch3d详细教程 文章目录 【深度学习】【三维重建】windows10环境配置PyTorch3d详细教程前言确定版本对应关系源码编译安装Pytorch3d总结 前言 本人windows10下使用【Code for Neural Reflectance Surfaces (NeRS)】算法时需要搭…

python 网络编程

TCP编程 客户端 创建TCP连接时&#xff0c;主动发起连接的叫做客户端&#xff0c;被动响应的叫做服务端。当定义一个Socket表示打开一个网络连接&#xff0c;创建一个Socket需要知道目标计算机的IP地址和端口号和对应的协议类型。 # 导入socket库: import socket# 创建一个s…

深度剖析C++ 异常机制

传统排错 我们早在 C 程序里面传统的错误处理手段有&#xff1a; 终止程序&#xff0c;如 assert&#xff1b;缺陷是用户难以接受&#xff0c;说白了就是一种及其粗暴的手法&#xff0c;比如发生内存错误&#xff0c;除0错误时就会终止程序。 返回错误码。缺陷是需要我们自己…