vue随意置换页面元素位置

news2024/11/26 20:26:25

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

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

本文关键字:vue,dom元素、页面中的模块随意换位置、通过拖拽改变元素位置、通过拖拽交换元素位置

基本思路:

1.写成渲染函数比较麻烦,一个又一个模块比较复杂,还是用template模版语法渲染比较好

2.所以决定分成多个组件,使用动态组件进行渲染

批量引入探索

批量引入文件夹下的vue文件

 created() {
    this.requireSvgs();
   
  },
 
  methods: {
    // 将引入资源的动作定义成了函数
    requireSvgs () {
      const requireAll = requireContext => requireContext.keys().map(requireContext)
      const req = require.context('./hintSetChild', false, /\.less$/);
      console.log('req.keys() :>> ', req.keys());
      requireAll(req)
    },

报错

This relative module was not found:

* ./common.less in ./src/components/orgOffice/statisticAnalysis/hintSetChild nonrecursive \.less$

项目技术栈版本:

"vue": "^2.6.11",

"webpack": "^3.12.0",

老项目开发起来很难受很难受,web自动导入探索失败,目前认定是webpack版本太低不支持,至少到5版本比较好,

所以最后我并没有进行自动引入

定位跳转 

动态组件引入组件后,通过定位跳转到指定位置

<div
            v-for="item of modelSortList"
            :key="item.code"
            @click="gotoView(item.code)"
          >
            {{ item.shortName }}
          </div>

 <template v-for="item of modelSortList"
          ><component
            :createTime="createTime"
            :key="item.code"
            :is="'Chart' + item.code"
            :ref="'Chart' + item.code"
          ></component
        ></template>


 gotoView(code) {
      this.$nextTick(() => {
        const index = "Chart" + code;
        if (this.$refs[index][0]) {
          this.$refs[index][0].$el.scrollIntoView();
        }
      });
    },

父组件点击后所有子组件刷新

vue 点击父组件,刷新子组件_AB教程网

排序接口返回内容:

[
  {
    "id": "1",
    "code": 1,
    "name": "单位统计分析",
    "shortName": "单位",
    "sortNum": 7,
    "delFlag": 0
  },
  {
    "id": "7",
    "code": 1,
    "name": "舆情处置情况统计报表",
    "shortName": "处置",
    "sortNum": 6,
    "delFlag": 0
  },
  {
    "id": "2",
    "code": 1,
    "name": "舆情事件",
    "shortName": "舆情",
    "sortNum": 5,
    "delFlag": 0
  },
  {
    "id": "3",
    "code": 1,
    "name": "媒体来源top20",
    "shortName": "媒体",
    "sortNum": 4,
    "delFlag": 0
  },
  {
    "id": "4",
    "code": 1,
    "name": "舆情所属条线分析",
    "shortName": "条线",
    "sortNum": 3,
    "delFlag": 0
  },
  {
    "id": "5",
    "code": 1,
    "name": "负面类别",
    "shortName": "类别",
    "sortNum": 2,
    "delFlag": 0
  },
  {
    "id": "6",
    "code": 1,
    "name": "长期悬而未决事件",
    "shortName": "长期",
    "sortNum": 1,
    "delFlag": 0
  }
]

全部代码

<template>
  <div
    class="extractCommont extractSearch userControl extractDataMaintenanceSearch specialH"
    id="container"
  >
    <div class="with90" style="width:98%">
      <div>
        <div class="commentInformationSearchBox">
         
          <div class="titleLabel set-style-1">
            <div class="titleLabel col-3">
            
              <label class="font-weight">时间范围</label>&nbsp;&nbsp;

              <el-cascader
                placeholder="请选择"
                :options="timeOption"
                filterable
                clearable
                change-on-select
                v-model="timeRange"
                :props="{
                  emitPath: true
                }"
                @change="(timeRangeStart = ''), (timeRangeEnd = '')"
              ></el-cascader>
              <el-radio-group
                style="width: 120px;"
                v-model="rangeSet"
                size="mini"
              >
                <el-radio-button label="自定义"></el-radio-button>
              </el-radio-group>
              <el-date-picker
                :picker-options="pickerOptionsEnd"
                v-if="rangeSet == '自定义'"
                value-format="yyyy-MM-dd HH:mm:ss"
                v-model="timeRangeStart"
                type="datetime"
                placeholder="开始日期"
                @change="timeRange = ''"
              >
              </el-date-picker>
              &nbsp;
              <el-date-picker
                :picker-options="pickerOptionsEnd"
                v-if="rangeSet == '自定义'"
                value-format="yyyy-MM-dd HH:mm:ss"
                v-model="timeRangeEnd"
                type="datetime"
                placeholder="结束日期"
                @change="timeRange = ''"
              >
              </el-date-picker>
              <label>事发单位</label>
              <el-cascader
                :options="organization"
                filterable
                clearable
                change-on-select
                v-model="sendOrgId"
                :props="{
                  label: 'name',
                  value: 'id',
                  children: 'childrenList',
                  emitPath: false,
                  expandTrigger: 'hover'
                }"
                :show-all-levels="false"
              ></el-cascader>
              &nbsp;
              <button class="blue" style="height:30px" @click="search()">
                <img src="@images/search.png" />查询
              </button>
            </div>
          </div>
        </div>
        <div class="fixedTab noUnfold" v-if="!isUnfold">
          <div
            v-for="item of modelSortList"
            :key="item.name"
            @click="gotoView(item.id)"
          >
            {{ item.shortName }}
          </div>

          <div style="font-size:25px" @click="isUnfold = !isUnfold">
            <i class="el-icon-arrow-right"></i>
          </div>
        </div>
        <div class="fixedTab unfold" v-else>
          <div v-for="(item, index) of modelSortList" :key="item.shortName">
            <span @click="gotoView(item.id)">{{ item.name }}</span>
            <template v-if="setSortNow"
              >&nbsp;
              <i
                v-if="index != modelSortList.length - 1"
                @click="setIt('下移', index)"
                class="el-icon-bottom"
              ></i
              ><i
                v-if="index != 0"
                @click="setIt('上移', index)"
                class="el-icon-top"
              ></i
              >&emsp;</template
            >
          </div>

          <div style="font-size:25px">
            <i @click="isUnfold = !isUnfold" class="el-icon-arrow-left"></i>

            <button
              v-if="!setSortNow"
              class="blue"
              style="height:30px"
              @click="setSortNow = true"
            >
              排序设置
            </button>
            <button
              v-else
              class="blue"
              style="height:30px"
              @click="setSortNow = false,setSortList()"
            >
              保存
            </button>
          </div>
        </div>

        <!-- <div class="tab">
          <div>
            <span
              :class="type == 'Table' ? 'checked' : ''"
              @click="type = 'Table'"
              >统计报表</span
            >|&emsp;<span
              :class="type == 'Chart' ? 'checked' : ''"
              @click="type = 'Chart'"
              >图表分析</span
            >
          </div>
        </div> -->
        <template v-for="item of modelSortList"
          ><component
            :createTime="createTime"
            :key="item.id + timer"
            :is="'Chart' + item.id"
            :ref="'Chart' + item.id"
          ></component
        ></template>
        <!--
        <div v-show="type == 'Chart'">
          <hint-set-chart :createTime="createTime" />
        </div> -->
      </div>
    </div>
  </div>
</template>

<script>
// import checkMixin from "@/js/checkMisIn.js";
// import hintSetChart from "./hintSetChart.vue";
import { removeEmptyChildren, treeToList } from "@/js/common.js";
import Component from "../../common/cwDialog/src/component.vue";
import Chart1 from "./hintSetChild/chart1.vue";
import Chart2 from "./hintSetChild/chart2.vue";
import Chart3 from "./hintSetChild/chart3.vue";
import Chart4 from "./hintSetChild/chart4.vue";
import Chart5 from "./hintSetChild/chart5.vue";
import Chart6 from "./hintSetChild/chart6.vue";
import Chart7 from "./hintSetChild/chart7.vue";
const month = new Date().getMonth() + 1;
export default {
  components: {
    // hintSetChart,
    Component,
    Chart1,
    Chart2,
    Chart3,
    Chart4,
    Chart5,
    Chart6,
    Chart7
  },
  // mixins: [checkMixin],
  data() {
    return {
      setSortNow:false,
      timer: "",
      limitObj: {},
      limitTimeStr: "",
      modelSortList: [],
      isUnfold: false,
      sendOrgId: "",
      organization: [], //组织机构树
      organizationList: [], //组织机构列表
      pickerOptionsEnd: {
        disabledDate: time => {
          // if (this.timeRangeStart) {
          //   return (
          //     time.getTime() > Date.now() - 8.64e6 ||
          //     //结束日期要在选择的开始日期之后,小于开始时间的日期不能选
          //     time.getTime() < new Date(this.timeRangeStart).getTime()

          //   );
          // }
          return (
            time.getTime() > Date.now() - 8.64e6 ||
            time.getTime() < new Date(this.limitTimeStr).getTime()
          ); //今天及之前
        }
      },

      timeRangeStart: "",
      timeRangeEnd: "",
      rangeSet: "",
      timeRange: "", //默认当年当季当月
      defaultObj: {
        value: "",
        label: "",
        children: [
          {
            value: "1",
            label: "第一季度",
            children: [
              {
                value: "1",
                label: "1月"
              },
              {
                value: "2",
                label: "2月"
              },
              {
                value: "3",
                label: "3月"
              }
            ]
          },
          {
            value: "2",
            label: "第二季度",
            children: [
              {
                value: "4",
                label: "4月"
              },
              {
                value: "5",
                label: "5月"
              },
              {
                value: "6",
                label: "6月"
              }
            ]
          },
          {
            value: "3",
            label: "第三季度",
            children: [
              {
                value: "7",
                label: "7月"
              },
              {
                value: "8",
                label: "8月"
              },
              {
                value: "9",
                label: "9月"
              }
            ]
          },
          {
            value: "4",
            label: "第四季度",
            children: [
              {
                value: "10",
                label: "10月"
              },
              {
                value: "11",
                label: "11月"
              },
              {
                value: "12",
                label: "12月"
              }
            ]
          }
        ]
      },
      timeOption: [],
      type: "Table",
      sortObj: {},
      createTime:
        new Date().getFullYear() + (month < 10 ? "-0" + month : "-" + month),
      expireTimeOption: {
        disabledDate(time) {
          return time.getTime() > Date.now() - 8.64e6; //如果没有后面的-8.64e6就是不可以选择今天的
        }
      },
      //旧
      importlogShow: false,
      header: {
        Authorization: localStorage.getItem("header")
      },
      editBtnFlag: false,
      loginRole: JSON.parse(localStorage.getItem("loginUl")),
      isRole: false, //打开岗位组
      loading: true,
      missionList: [],
      cur: 1, //分页
      all: 0,
      rows: 15, //条数
      totalCount: 0, //总条数
      list: {},
      //
      searchVal: "", //搜索
      gridData: [],
      options: "", //地域
      value: "",
      optionsUnit: "", //单位名称
      valueStation: "",
      optionsStation: [],
      valueUnit: "",
      optionsSubordinate: "", //下级单位
      valueSubordinate: "",
      checked: false, //全选框状态
      checkeds: false,
      isHint: false, //删除
      deleteId: "",
      item: {
        name: "确定删除选中的数据吗?"
      },
      saveLoading: false,
      tradeSetting: {},
      editSHow: false,
      addressId: "",
      orgId: "",
      deleteIds: "",
      editList: {},
      addListsj: "",
      uploadLoading: false,
      addxz: "",
      orderBy: "create_time",
      depList: [],
      orgNewName: "",
      depNewId: "",
      createdDep: false,
      createdDepNameText: "",
      newUnit: "",
      departmentList: [],
      unitXID: "",
      radio: "",
      isHidden: false
    };
  },

  watch: {},
  created() {
    this.getNowTimeRange();
    this.getDateDic();
    this.getModelSortList();
  },
  async mounted() {
    this.setBgStyleNow();
    this.getLimitTimeInfo();
  },
  methods: {
    setIt(type, index) {
      switch (type) {
        case "上移":
          [this.modelSortList[index], this.modelSortList[index - 1]] = [
            this.modelSortList[index - 1],
            this.modelSortList[index]
          ];
          // this.modelSortList[index - 1].isVisible = false;
          this.$forceUpdate();
          break;
        case "下移":
          [this.modelSortList[index], this.modelSortList[index + 1]] = [
            this.modelSortList[index + 1],
            this.modelSortList[index]
          ];
          // this.modelSortList[index + 1].isVisible = false;
          this.$forceUpdate();
          break;
      }
    },
    gotoView(id) {
      this.$nextTick(() => {
        const index = "Chart" + id;
        if (this.$refs[index][0]) {
          this.$refs[index][0].$el.scrollIntoView();
        }
      });
    },
    getLimitTimeInfo() {
      this.timeOption = [];
      const year = new Date().getFullYear() + "";
      this.$http({
        method: "GET",
        url: "/cbrc/work/statistics/module/startDate"
      }).then(res => {
        this.limitObj = res.data.data;
        this.limitTimeStr = this.limitObj["时间"];
        for (var i = this.limitObj["年"] * 1; i <= year * 1; i++) {
          let obj = this.defaultObj;
          obj.value = i + "";
          obj.label = i + "年";
          obj.children.forEach((a, index) => {
            if (a.value == this.limitObj["季度"]) {
              obj.children = obj.children.slice(index, obj.children.length);
            }
            a.children.forEach((b, index2) => {
              if (b.value == this.limitObj["月"]) {
                a.children = a.children.slice(index2, a.children.length);
              }
            });
          });

          this.timeOption.push(obj);
        }

        console.log("this.timeOption :>> ", this.timeOption);
      });
      this.$forceUpdate();
    },
    getModelSortList() {
      this.$http({
        method: "GET",
        url: "/cbrc/work/statistics/moduleSort/query?code=" + 1
      }).then(res => {
        this.modelSortList = res.data.data;
      });
    },
   async setSortList(){
    this.modelSortList.forEach((i,index)=>{
      i.sortNum=this.modelSortList.length-index;
    })
    console.log('this.modelSortList :>> ', this.modelSortList);
       await this.$http({
        method: "POST",
        url: "/cbrc/work/statistics/moduleSort/save",
        data: this.modelSortList
      }).then(res => {
        if (res && res.data) {
          if(res.data.code==200){
        this.$message.success('保存成功');

          }else{
        this.$message.warning('保存失败');

          }
        }})
    },
    getDateDic() {
      this.$http({
        method: "GET",
        url: "/cbrc/user_center/organization/query/children?levelNum=" + 4
      }).then(res => {
        this.organization = res.data.data;
        if (this.organization) {
          this.organizationList = treeToList(this.organization);
          removeEmptyChildren(this.organization);
          this.$forceUpdate();
        }
      });
    },
    getNowTimeRange() {
      //获取当前年
      const year = new Date().getFullYear() + "";
      // 获取当前季度:
      var currMonth = new Date().getMonth() + 1;
      var currQuarter =
        Math.floor(currMonth % 3 == 0 ? currMonth / 3 : currMonth / 3 + 1) + "";
      // const info = {
      //   1: "第一季度",
      //   2: "第二季度",
      //   3: "第三季度",
      //   4: "第四季度"
      // };
      // const quarter = info[currQuarter];

      //获取当前月
      const monthNum = new Date().getMonth() + 1;
      const nowMonth = monthNum + "";
      this.timeRange = [year, currQuarter, nowMonth];
    },
    setBgStyleNow() {
      const that = this;
      if (this.missionList && this.missionList.length > 0) {
        this.$nextTick(() => {
          that.missionList.forEach((item, index) => {
            if (index % 2 !== 0) {
              that.$refs["setBgStyle" + index][0].style.backgroundColor =
                "#f8f8f8";
            }
          });
        });
      }
    },

    //搜索
    search() {
      if (this.timeRange && this.timeRange.length) {
        // if (this.timeRange.length < 2) {
        //   return this.$message.warning("请选择季度");
        // }
        this.timeRangeStart = "";
        this.timeRangeEnd = "";
      } else {
        if (!this.timeRangeStart != !this.timeRangeEnd) {
          if (!this.timeRangeStart) {
            return this.$message.warning("请选择开始日期");
          } else {
            return this.$message.warning("请选择结束日期");
          }
        }
      }
      this.timer = new Date().getTime();
    }
  }
};
</script>
<style lang="less" scoped>
.commonStyle() {
  cursor: pointer;
  min-width: 80px;
  color: #fff;
  font-size: 14px;
  border-radius: 6px !important;
}
.col {
  display: inline !important;
}
.blue {
  .commonStyle;
}
.blues {
  height: 38px;
  .commonStyle();
}

.green {
  float: right !important;
}
.fl {
  width: 100% !important;
  margin: 10px 0 !important;
}
.popRed {
  color: red;
}
.el-cascader {
  width: 100%;
}
.extractDataMaintenanceSearch .odd .fl button {
  margin-bottom: 0px;
}
.lead {
  position: relative;
  img {
    position: absolute;
    width: 25px;
    bottom: 25px;
    cursor: pointer;
  }
}
.styleSet {
  .item {
    height: 40px;
    line-height: 40px;
    display: flex;
    justify-content: space-between;
    .el-input,
    .el-select,
    .el-cascader,
    .col-1-1 {
      width: 80%;
    }
  }
}
.buttonStyle {
  cursor: pointer;
  display: inline-block;
  width: 20px;
  height: 20px;
  margin: 0px 5px;
  margin-top: 10px;
  vertical-align: middle;
  cursor: pointer;
  background-size: contain;
}
.item {
  margin-top: 4px;
  padding-top: 4px;
}
.order {
  vertical-align: middle;
  cursor: pointer;
  width: 18px;
}
.tab {
  margin-top: 20px;
  margin-bottom: 20px;
  padding-left: 20px;
  font-size: 16px;
  display: flex;
  align-items: center;
  justify-content: flex-end;
  span {
    margin-right: 20px;
    cursor: pointer;
  }
  .checked {
    font-weight: bold;
    color: var(--mainColor);
  }
}
.fixedTab {
  z-index: 1000;
  position: fixed;
  top: 350px;
  background: #fff;
  left: 40px;
  border-radius: 10px;
  font-size: 16px;
  line-height: 30px;
  border: 1px solid var(--mainColor);
  text-align: center;
  div {
    padding: 5px;
    cursor: pointer;
    text-overflow: ellipsis;
    white-space: nowrap;
    overflow: hidden;
  }
}
.noUnfold {
  width: 50px;
  div {
    &:hover {
      color: var(--mainColor);
    }
  }
}
.unfold {
  width: 250px;
  i,span {
    &:hover {
      color: var(--mainColor);
    }
  }
}
</style>
<style>
@import "common.css";
</style>

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

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

相关文章

特殊作业安全管理系统——实现特殊作业全过程有效监控管理

特殊作业安全管理系统是一套专门针对特殊作业环节进行全面管理的系统。它旨在确保在特殊作业过程中&#xff0c;从计划、审批到执行、监控等各个环节都能得到有效的管理和控制。 一、系统概述 特殊作业管理系统基于互联网技术构建&#xff0c;实现作业票电子化&#xff0c;它集…

part_three:多媒体信息管理技术和软通信与网络技术

文章目录 一、超媒体与web系统背景&#xff08;为什么引入超媒体&#xff09;概念与传统文本的不同分布式超媒体系统WWW&#xff08;world wide web&#xff09;SGML (Standard General Markup Language)HTML (HyperText Markup Language)XML (eXtensible Markup Language)HTTP…

设计并实现一个小型银行系统,使用Java面向对象编程技术

在某个社交平台上刷到了&#xff0c;大学生的一个小练习&#xff0c;关于编写一个小的银行案例&#xff0c;下面具体分享一下代码&#xff0c;希望大佬多来指正&#xff0c;我们互相学习。 基本要求:类设计:Account类: 包含账户ID、余额、账户类型等属性&#xff0c;以及存款、…

【开源】基于JAVA的天然气工程业务管理系统

项目编号&#xff1a; S 021 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S021&#xff0c;文末获取源码。} 项目编号&#xff1a;S021&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、使用角色3.1 施工人员3.2 管理员 四…

超声波清洗机可以干嘛、比较推荐的超声波清洗机

超声波清洗机是一种神奇的家用电器&#xff0c;它可以通过高频振动将物体表面的污渍和细菌清洗干净。可以把眼镜放在超声波清洗机里&#xff0c;只需几分钟&#xff0c;就可以将眼镜上的污渍和细菌清洗得干干净净&#xff0c;不单可以清洗眼镜&#xff0c;像生活中的一些小物件…

安全风险综合监测预警平台建设指南(2023 版)》正式发布,汉威科技方案领跑行业

11月24日&#xff0c;国务院安委会办公室印发《城市安全风险综合监测预警平台建设指南&#xff08;2023版&#xff09;》&#xff08;以下简称“指南”&#xff09;&#xff0c;引发行业密切关注。 据悉&#xff0c;“指南”在总结前期18 个试点城市&#xff08;区&#xff09;…

idea 快速选择类文件内的方法名或全局变量

IDEA快速生成lambda表达式的方法-CSDN博客 上面这个链接的标题可能不对

Spring框架体系及Spring IOC思想

目录 Spring简介Spring体系结构SpringIOC控制反转思想自定义对象容器Spring实现IOCSpring容器类型容器接口容器实现类对象的创建方式使用构造方法使用工厂类的方法使用工厂类的静态方法对象的创建策略对象的销毁时机生命周期方法获取Bean对象的方式通过id/name获取通过类型获取…

activiti工作流 定义 TaskListener 无效

使用activiti 5.22 想全局定义任务监听器&#xff0c;结果试了多次发现没有效果。 最后看了看activiti的相关源码发现&#xff0c;流程定义里边没有处理 TaskListener 相关的操作&#xff0c;发现TaskListener 处理是在Task里边处理的&#xff0c;所以把TaskListener 定义在Ta…

vue.js如何根据后台返回来的图片url进行图片下载

原创/朱季谦 最近在做一个前端vue.js对接的功能模块时&#xff0c;需要实现一个下载图片的功能&#xff0c;后台返回来的是一串图片url&#xff0c;试了很多种方法&#xff0c;发现点击下载时出来的效果&#xff0c;都是跳到一个新的图片网页&#xff0c;后来经过一番琢磨&…

在vue页面中添加组件到底有多方便

修改vue写的前端页面到底有多方便&#xff1f;如果熟练的话&#xff0c;出乎你想象的快。 原来的页面&#xff1a;/admin/stock 原来的文件地址&#xff1a;src\views\admin\stock\Stock.vue 另一个页面有个入库功能&#xff0c;需要转移到上面的页面中&#xff1a; 路径&…

01-AI大模型智能客服 V0.1「上」

你好&#xff0c;我是悦创。 首发&#xff1a;https://mp.weixin.qq.com/s/6MTkpWZCEbFWOcUn0Vexvw V0.1 版本我将分为上中下三篇进行书写和发布&#xff0c;欢迎分享和我微信进讨论群&#xff1a;Jiabcdefh。 计划&#xff1a; 会迭代好几个版本&#xff0c;看阅读量和点赞…

A100 A800 H100 H800 模块

老美对A100、A800、H100和H800在内的多款AI芯片实施了出口限制&#xff0c; 目前&#xff0c;具体限制的时长并没有明确的公开信息。 科研人员在面对此类限制 &#xff0c;可能需要寻找替代的供应渠道&#xff0c;加强国内外合作&#xff0c; 或者加大在本土技术研发的投入&a…

数据结构 | 堆排序

数据结构 | 堆排序 文章目录 数据结构 | 堆排序建立大堆排序结果以及全部代码 如果没有看过堆的实现的话可以先看前面的一章堆的实现&#xff0c;然后再来看这个堆排序&#xff0c;都是比较简单的~~ 这里堆排序首先建堆&#xff0c;建堆是要建小堆还是大堆呢&#xff1f; 在堆排…

cpp中虚实继承问题

1.一个基类base&#xff0c;被类a虚继承&#xff0c;类a被其他的类继续继承&#xff0c;那么base中的初始化必须由派生类的最后一个完成&#xff0c;其中任意一个都不能代替完成基类&#xff0c;如果在最后一个派生类里不进行这个base的初始化&#xff0c;那么就会调用相应的无…

Vatee万腾的数字探险之旅:vatee科技创新的新纪元

在数字时代的潮流中&#xff0c;Vatee万腾以其独特的数字探险之旅引领着科技创新的新纪元。这不仅是一次技术的进步&#xff0c;更是一场数字领域的探险&#xff0c;让我们一同探索Vatee在科技创新中的前沿地带。 Vatee万腾的数字探险起源于对未知的渴望和对创新的不懈追求。在…

新购服务器项目部署指南—— Express + Vue + Nginx+ pm2 Nodejs项目部署全流程

目录 一、部署Express项目1.1、安装Node1.2、安装pm2进程管理器1.3、部署Express后端项目 二、部署Vue前端项目2.1、Nginx的下载安装与SLL配置2.2、打包Vue项目2.3、上传项目到Nginx目录2.4、配置Nginx 附录pm2命令速览Nginx命令速览 最后 书接上回&#xff1a;新购服务器开荒记…

不幸被封号!后续来了...

之前发文说过&#xff0c;视频号“技术领导力”被封号3天&#xff0c;无法直播了&#xff1b;购物车被禁用7天。经过多渠道申诉、跟官方沟通均无效。 对事件不了解的可以看这里《被封号了~》&#xff0c;简单来说就是转播了某位大V的直播&#xff0c;因为某些说不清道不明的原因…

快速了解软件工程学概述(5种软件过程模型)

目录 1 、什么是软件&#xff1f;特点有哪些 &#xff1f; 2 、 软件危机 定义&#xff1a; 软件危机产生的原因 消除软件危机的方法 3 、软件工程 1.软件工程的介绍 &#xff08;1&#xff09;概念 &#xff08;2&#xff09;本质特征 (3)软件工程方法学&#xff08;方…