当前位置: 首页 > news >正文

element vue2 动态添加 select+tree

难点在 1 添加一组一组的渲染 是往数组里push对象 循环的;但是要注意对象的结构! 因为这涉及到编辑完成后,表单提交时候的 校验! 是校验每一个select tree里边 是否勾选

2 是在后期做编辑回显的时候 保证后端返回的值 是渲染到 select中的tree当中! 并且是勾选着的
3 任意在一个select当中 移除的时候。
4 任意一个select当中 取消勾选后 显示是否正确

只在提交的时候校验!
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

父组件
<template><el-dialogclass="mpks-common-dialog mpks-search-strategy-resultintervene-dialog"width="810px":title="innerTitle":visible.sync="innerDialogVisible":close-on-click-modal="false":close-on-press-escape="false"@opened="open('form')"@close="close"><el-formref="form":model="currentItem"label-width="104px":rules="formRule"><el-form-item label="知识库名称:" prop="name" class="cd"><el-col :span="20"><el-inputv-model="currentItem.name"placeholder="请输入知识库名称"maxlength="20"show-word-limitclearable></el-input></el-col></el-form-item><el-form-itemlabel=""v-for="(item, index) in currentItem.selects":key="index"class="mpks-common-dialog-form-item-qa create-css"><div class="flex mtop margin-bottom"><el-col ><el-form-item:prop="'selects.' + index + '.NodeVal'":rules="formRule.NodeVal"><el-selectv-model="item.NodeVal"placeholder="请选择知识树节点"multiplecollapse-tags@change="nodeValChange(item, index)"@remove-tag="removeTag(item)"><el-option:value="seletedNodeIdsOptions"style="height: auto;"><channel-tree:idx="index"ref="nodeTree"class="mpks-add-task-tree":checkable="true":check-strictly="false":default-checked-keys="item.innerselectTreeIds":get-permission-node="true"@node-check="selectNodeId"/></el-option></el-select></el-form-item></el-col><el-col><el-form-item:prop="'selects.' + index + '.picVal'":rules="formRule.picVal"><el-selectv-model="item.picVal"placeholder="请选择图谱类目"multiplecollapse-tags@change="picValChange(item, index)"@remove-tag="removeTagPic(item)"><el-option:value="seletedPicIdsOptions"style="height: auto;"><channel-tree-pic:idx="index"ref="nodeTreePic"class="mpks-add-task-tree":checkable="true":check-strictly="false":default-checked-keys="item.innerselectTreePicIds":get-permission-node="true"@node-check="selectPicId"/></el-option></el-select></el-form-item></el-col><el-col><el-form-item:prop="'selects.' + index + '.categoryVal'":rules="formRule.categoryVal"><el-selectv-model="item.categoryVal"placeholder="请选择全文索引类目"multiplecollapse-tags@change="classChange(item, index)"@remove-tag="removeTagCategoryVal(item)"><el-optionstyle="height: auto;":value="seletedIdxIdsOptions"><channel-tree-idx:idx="index"ref="nodeTreeIdx"class="mpks-add-task-tree":checkable="true":check-strictly="false":default-checked-keys="item.innerselectTreeIdxIds":get-permission-node="true"@node-check="selectIdxId"/></el-option></el-select></el-form-item></el-col><spanv-if="currentItem.selects.length === 1"class="between-delete">删除</span><spanv-elseclass="between-delete-true"@click="deleteSelects(item, index)">删除</span></div></el-form-item><divv-if="currentItem.selects.length < maxAdd"class="mpks-visual-query-filter-add-attribute"@click="addCategory"><svg-icon name="add"></svg-icon><span class="add-txt">新增一组</span><span  class="add-plus">(最多支持5)</span></div><div v-else class="disabled margin-top">+   <span class="add-txt-to">新增一组</span><span  class="add-plus-to">(最多支持5)</span></div></el-form><div slot="footer"><el-button type="primary" @click="OK('form')">确认</el-button><el-button type="default" @click="Cancel">取消</el-button></div></el-dialog>
</template><script>
import cloneDeep from "lodash/cloneDeep";
import { validate } from "@/common/util.js";
import SvgIcon from "@/components/SvgIcon.vue";
import ChannelTree from "@/components/channelTree.vue";
import ChannelTreePic from "@/components/channelTreepic.vue";
import ChannelTreeIdx from "@/components/ChannelTreeIdx.vue";
// 判断一下, 编辑的时候,不push这个那个对象
export default {name: "SearchStrategyResultInterveneDialog",components: {SvgIcon,ChannelTree,ChannelTreePic,ChannelTreeIdx},props: {title: {type: String,default: "新建知识库"},dialogVisible: {type: Boolean,default: false},sendData: {type: Array,required: true},data: {type: Object,required: true},dataEdit: {type: Object}},beforeMount() {},created() {},mounted() {},data() {var NodeValPass = (rule, value, callback) => {if(this.currentItem.selects[rule.field.substring(8,9)].NodeVal.length===0){callback(new Error('知识树节点不能为空'));}else{callback();}};var picValPass = (rule, value, callback) => {if(this.currentItem.selects[rule.field.substring(8,9)].picVal.length===0){callback(new Error('图谱类目不能为空'));}else{callback();}};var categoryValPass = (rule, value, callback) => {if(this.currentItem.selects[rule.field.substring(8,9)].categoryVal.length===0){callback(new Error('全文索引类目不能为空'));}else{callback();}};return {editFirstNodeIds: [],seletedNodeIdsOptions: [],seletedPicIdsOptions: [],seletedIdxIdsOptions: [],innerselectTreeIds: [],innerselectTreePicIds: [],innerselectTreeIdxIds: [],maxAdd: 1, //允许添加的最大数量NodesOptionsIds: [], //知识树节点idlistClassOptionsIn: [], //initgetClassFilterOptionsIn: [], //initgetNodesOptionsIn: [], //initlistClassOptions: [], //响应 //全文索引类目getClassFilterOptions: [], //响应 图谱类目getNodesOptions: [], //响应 知识树节点editInfo: {edit: 0,id: ""}, //编辑的时候的数据innerTitle: this.title,innerDialogVisible: this.dialogVisible,currentItem: {name: "",selects: []},formRule: {NodeVal: [{validator: NodeValPass,trigger: "change"}],picVal: [{validator: picValPass,trigger: "change"}],categoryVal: [{validator: categoryValPass,trigger: "change"}],name: [{required: true,validator: validate.whitespace,message: "知识库名称不能为空",trigger: "blur"},{validator: validate.length,max: 20,message: "最多20个字符",trigger: "change"}]}};},watch: {dataEdit(newVal) {this.editInfo.edit = 1;this.editInfo.id = newVal.id;this.currentItem.name = newVal.name;this.currentItem.selects = [];newVal.options.forEach((item, index) => {let arr = item.nodeIds.map(i => i).map(itemId => {return this.sendData[2].filter(item => item.id === itemId);});let echoArr = [];arr.forEach(item => {echoArr.push(item[0].name);});this.currentItem.selects.push({NodeVal:  [],picVal:  [],categoryVal: [],innerselectTreeIds: [],innerselectTreePicIds: [],innerselectTreeIdxIds: []});this.currentItem.selects[index] = {innerselectTreeIds: item.nodeIds.map(i => i),innerselectTreePicIds: item.spoIds.map(i => i),innerselectTreeIdxIds: item.presetIds.map(i => i),NodeVal: echoArr,picVal: item.spoIds.map(i => i),categoryVal: item.presetIds.map(i => i)?item.presetIds.map(i => i):[]};});},dialogVisible: "sync",sendData: {handler(newVal) {this.listClassOptions = newVal[0];this.getClassFilterOptions = newVal[1];this.getNodesOptions = newVal[2];this.maxAdd = this.findMinArr(this.listClassOptions,this.getClassFilterOptions,this.getNodesOptions);},deep: true},title(newVal) {this.innerTitle = newVal;if (newVal === "新建知识库") {this.currentItem.name = "";this.editInfo.edit = 0;}}},methods: {removeTag(currentItem) {//转成id 后 与v-modle中的 :default-checked-keys="item.innerselectTreeIds"匹配 回显tree勾选let arr = currentItem.NodeVal.map(itemZhcn => {return this.sendData[2].filter(item => item.name === itemZhcn);});let toIds = [];arr.forEach(item => {toIds.push(item[0].id);});currentItem.innerselectTreeIds = toIds;},removeTagPic(currentItem) {currentItem.innerselectTreePicIds = currentItem.picVal;},removeTagCategoryVal(currentItem) {currentItem.innerselectTreeIdxIds = currentItem.categoryVal;},selectNodeId(params, index) {console.log(params);let selectList = [];let selectLable = [];params.data.forEach(item => {if (+item.id !== 1) {selectList.push(item.id);selectLable.push(item.name);}});this.seletedNodeIdsOptions = selectList;this.currentItem.selects[params.idx].NodeVal = selectLable;this.currentItem.selects[params.idx].NodeValSend = selectList;},selectPicId(params, index) {let selectList = [];let selectLable = [];params.data.forEach(item => {if (+item.id !== 1) {selectList.push(item.id);selectLable.push(item.name);}});this.seletedPicIdsOptions = selectList;this.currentItem.selects[params.idx].picVal = selectLable;this.currentItem.selects[params.idx].picValSend = selectList;},selectIdxId(params, index) {let selectList = [];let selectLable = [];params.data.forEach(item => {if (+item.id !== 1) {selectList.push(item.id);selectLable.push(item.name);}});this.seletedIdxIdsOptions = selectList;this.currentItem.selects[params.idx].categoryVal = selectLable;this.currentItem.selects[params.idx].categoryValSend = selectList;},Cancel() {this.innerDialogVisible = false;},nodeValChange(item, index) {this.currentItem.selects[index].NodeVal = item.NodeVal;this.$forceUpdate();},picValChange(item, index) {// 图谱类目option改变this.currentItem.selects[index].picVal = item.picVal;this.$forceUpdate();},classChange(item, index) {// 全文索引类目option改变this.currentItem.selects[index].categoryVal = item.categoryVal;this.$forceUpdate();},findMinArr(arr1, arr2, arr3) {const shortestLength = Math.min(arr1.length,arr2.length,arr3.length);return shortestLength;},verifyInput() {this.currentItem.selects.forEach(item => {for (const i of Object.keys(item)) {if (item[i].length === 0) {break;}}});},OK(formName) {// TODO:提交this.$refs[formName].validate(valid => {if (valid) {let param = {name: this.currentItem.name,options: []};if (this.editInfo.edit === 1) {//修改 添加参数param.id = this.editInfo.id;param.enabled = 1;}this.currentItem.selects.forEach((currentItem, index) => {let arr = currentItem.NodeVal.map(itemZhcn => {return this.sendData[2].filter(item => item.name === itemZhcn);});let toIds = [];arr.forEach(item => {toIds.push(item[0].id);});let obj = {};obj.nodeIds = toIds; //nodeIds 传id 其他2个传中文过去!obj.presetIds = currentItem.categoryVal;obj.spoIds = currentItem.picVal;param.options.push(obj);});this.$store.dispatch("channel/channelAddOrUpdate", param).then(res => {if (+res.errno === 0) {if (this.editInfo.edit === 1) {//修改this.$message.success("修改成功");this.$parent.channelList();this.currentItem.name = "";this.innerDialogVisible = false;this.editInfo.edit = 0;return;}// 新增this.$message.success("添加成功");this.$parent.channelList();this.currentItem.name = "";this.innerDialogVisible = false;} else {this.$message.error(res.msg || "出错啦,请稍候再试。");}});} else {console.log("error submit!!");return false;}});},addCategory(formName) {this.currentItem.selects.push({NodeVal:  [],picVal:  [],categoryVal: [],innerselectTreeIds: [],innerselectTreePicIds: [],innerselectTreeIdxIds: []});setTimeout(() => {this.clearValidate("form");}, 10);},deleteSelects(item, index) {this.currentItem.selects.splice(index, 1);},modifyItem() {},open(formName) {this.$refs[formName].clearValidate()if (this.editInfo.edit !== 1) {//新增this.currentItem.selects.push({NodeVal:  [],picVal:  [],categoryVal: [],innerselectTreeIds: [],innerselectTreePicIds: [],innerselectTreeIdxIds: []});}},close() {this.clearValidate("form");this.$emit("close");this.currentItem.selects = [];this.currentItem.name = "";},clearValidate(formName) {this.$refs[formName] && this.$refs[formName].clearValidate();},sync(newVal) {this.innerDialogVisible = newVal;}}
};
</script><style lang="less" scoped>
.mpks-search-strategy-resultintervene-dialog {/deep/.el-dialog__footer {padding-top: 0;
margin-top: 28px;.el-button {width: 72px;margin-left: 12px;}}.mpks-search-strategy-resultintervene-search-button {margin: 0 0 0 16px;height: 32px;color: #fff;border-color: #2468f2;line-height: 10px;border: 1px solid #2468f2;border-radius: 4px;font-size: 14px;color: #2468f2;&:hover {border-color: #528eff;color: #528eff;}&:focus {border-color: #2468f2;color: #2468f2;}}.mpks-search-strategy-resultintervene-query-item-wrapper {border: 1px solid #f1f1f1;padding: 10px 0;margin-bottom: 20px;max-width: 880px;}.mpks-search-strategy-resultintervene-block {background: #fafafa;padding: 10px 15px;.mpks-search-strategy-resultintervene-block-title {font-size: 14px;font-weight: 600;}.mpks-search-strategy-resultintervene-block-item {margin: 10px 0;&:first-child {margin-top: 0;}&:last-child {margin-bottom: 0;}.el-button {padding: 0;}}}
}/deep/.mpks-common-dialog-form-item-qa {.el-input-group__append {padding: 0;height: 32px;background-color: #fff;line-height: 32px;border: none;}.el-input__inner {padding-right: 0px !important;}
}/deep/.el-form-item.is-error .el-input__inner,
.el-form-item.is-error .el-textarea__inner {border-color: #f56c6c !important;
}.flex {display: flex;justify-content: space-between;// width: 620px;
}.mtop {margin-top: 10px;
}.mtop:first-of-type {margin-top: 0;
}.margin-bottom{// margin-bottom: 20px!important;
}.between-delete {color: #b7babf;cursor: pointer;
}.between-delete-true {color: #2468F2;cursor: pointer;
}/deep/.el-form-item__error {// padding-top: 8px;
}
.margin-top {margin-top: 10px;
}.el-col-24 {width: auto;
}.mpks-visual-query-filter-add-attribute {width: 170px;margin-top: -16px;margin-left: 102px;
}
.disabled {margin-top: -14px;margin-left: 102px;font-family: PingFangSC-Regular;font-size: 14px;color: #b8babf;line-height: 20px;display: -webkit-box;display: -ms-flexbox;display: flex;-webkit-box-align: center;-ms-flex-align: center;align-items: center;cursor: pointer;
}/deep/.el-dialog__body {padding: 24px 34px 0!important;
}
/deep/.el-select-dropdown__item {height: 100% !important;
}/deep/.cd {margin-bottom: 40px !important;
}.create-css{margin-bottom: 8px!important;
}/deep/.create-css::before{color: #5C5F66;position: absolute;left: 36px;top: 152px;content: "知识库配置:";width: 120px;height: 26px;display: inline-block;
}/deep/.create-css::after{color: #F56C6C;position: absolute;left: 26px;top:152px;content: "*";width: 120px;height: 26px;display: inline-block;
}/deep/.el-select .el-tag{
// width: 20px;
// display: -webkit-box;
//     -webkit-box-orient: vertical;
//     -webkit-line-clamp: 1;//第几行末尾出现省略号
//     overflow: hidden; 
}.add-txt{display: inline-block;}.add-plus{display: inline-block;color:  #CCCCCC;margin-left: 8px;}.add-txt-to{display: inline-block;color:  #CCCCCC;}.add-plus-to{display: inline-block;color:  #CCCCCC;margin-left: 8px;}
</style>
一组 共3个select tree 组件;这是其中一个select tree组件。 其他2个 结构一样的!
channelTree.Vue
<template><div class="mpks-common-tree"><el-treeref="tree"class="mpks-common-tree-container"v-loading="loading"node-key="id":indent="8":data="tree":auto-expand-parent="true":highlight-current="true":check-strictly="checkStrictly":expand-on-click-node="expandOnClickNode":default-expanded-keys="defaultExpandedKeys":default-checked-keys="innerDefaultCheckedKeys":default-expand-all="defaultExpandAllNodes":show-checkbox="checkable":filter-node-method="filterNode"@node-click="nodeClick"@node-expand="nodeExpand"@node-collapse="nodeCollapse"@check="nodeCheck"@check-change="checkChange"><span class="mpks-common-tree-node" slot-scope="{ node, data }"><span class="mpks-common-tree-node-title" :title="data.name">{{data.name}}</span><div class="mpks-common-tree-node-control-wrapper"><el-popoverv-if="data.isEncryption && from !== 'role'"placement="top"trigger="hover"content="此节点为非公开"><islot="reference"class="el-icon-view mpks-common-tree-node-permission"></i></el-popover></div></span></el-tree></div>
</template><script>
export default {name: "Tree",props: {idx: {type: Number,default: undefined},// 当前选中节点的id, 只读属性currentId: {type: Number,default: undefined},// 点击目录回调函数expandOnClickNode: {type: Boolean,default: true},// 是否自动选中根节点, 会触发nodeClickautoSelectRoot: {type: Boolean,default: true},checkable: {type: Boolean,default: false},checkStrictly: {type: Boolean,default: true},defaultExpandAll: {type: Boolean,default: false},defaultCheckedKeys: {type: Array,default() {return [];}},disabledList: {type: Array,default() {return [];}},checkableItemList: {type: Array,default() {return [];}},displayList: {type: Array,default() {return [];}},from: {type: String,default: ""},roleId: {type: Number,default: 0},onlyEnabledEncryption: {type: Boolean,default: false},readonly: {type: Boolean,default: false},theOnly: {// 知识树权限复选框只能选择一个type: Boolean,default: false},getPermissionNode: {type: Boolean,default: false},},data() {return {list: [],tree: [],currentItem: {name: ""},defaultExpandedKeys: [],loading: false,innerDefaultCheckedKeys: this.defaultCheckedKeys,selectNodes: []};},watch: {defaultCheckedKeys: {handler(val) {this.innerDefaultCheckedKeys= []this.innerDefaultCheckedKeys = val;this.load(val);},deep: true,immediate: true}},computed: {defaultExpandAllNodes() {return !!this.defaultExpandAll;}},methods: {load(val) {this.loading = true;let param = {permissioncode: "knowledge_catelog_view"};this.$store.dispatch("channel/getNodes", param).then(res => {this.loading = false;if (+res.errno === 0) {this.list = this.setDisabledStatus(res.data.list);// this.list = this.filterDisplayNode(this.list);this.tree = this.convertListToTree(this.list);if (this.tree.length === 0) {return false;}// 默认选中是知识树第一个节点let defaultNodeKey = +this.tree[0].id;// this.defaultExpandedKeys = valthis.defaultExpandedKeys.push(defaultNodeKey);} else {this.$message.error(res.msg || "出错啦,请稍候再试。");}},() => {this.loading = false;});},clearTree() {this.$refs.tree.setCheckedKeys([]);},setDisabledStatus(list) {return list.map(item => {let newItem = item;if (this.readonly) {newItem = {...item,disabled: true};} else if (this.onlyEnabledEncryption || this.roleId) {if (!item.isEncryption) {newItem = {...item,disabled: true};}}if (this.disabledList.length) {if (this.disabledList.indexOf(item.id) >= 0) {newItem = {...item,disabled: true};} else {newItem = {...item,disabled: false};}}if (this.checkableItemList.length) {if (this.checkableItemList.indexOf(item.id.toString()) < 0) {newItem = {...item,disabled: true};}}return newItem;});},filterDisplayNode(list) {if (this.displayList.length === 0) {return list;}return list.filter(item => {return this.displayList.indexOf(item.id.toString()) >= 0;});},nodeClick(data) {this.$emit("node-click", {data: data});},nodeExpand(data) {this.$emit("node-expand", {data: data});this.defaultExpandedKeys.push(data.id);},nodeCollapse(data) {this.$emit("node-collapse", {data: data});let collapseIndex = this.defaultExpandedKeys.findIndex(item => {return item === data.id;});this.defaultExpandedKeys.splice(collapseIndex, 1);},nodeCheck(data) {if (this.theOnly) {this.$refs.tree.setCheckedKeys([data.id]);}this.selectNodes = this.$refs.tree.getCheckedKeys(true);this.$emit("node-check", {data: this.$refs.tree.getCheckedNodes(),dataInfo: data,idx: this.idx});},checkChange(...args) {this.$emit("check-change", ...args);},convertListToTree(list) {let root = []; // 根节点列表if (!list || list.length <= 0) {return root;}let indexes = {};// 重置数据状态list.forEach(v => {indexes[v.id] = v;if (+v.parentId === 0) {root.push(v);}v.children = []; // 带有可编辑的节点列表v.parent = null;v.list = []; // 节点所在列表});// 更新childrenlist.forEach(node => {if (+node.parentId !== 0 && indexes[node.parentId]) {let parent = indexes[node.parentId];node.parent = parent;node.list = parent.children;parent.children.push(node);}});return root;},filterNode(value, data) {if (!value) {return true;}return data.name.indexOf(value) !== -1;},selectFilter(val) {this.$refs.tree.filter(val);},setCheckedKey(ids) {this.$refs.tree.setCheckedKeys(ids);}}
};
</script><style lang="less">
@import (reference) "~@/common/util.less";.mpks-common-tree {height: 100%;border: 1px solid #eee;.mpks-common-tree-header {padding: 0 0 0 24px;height: 40px;background: #f9f9f9;line-height: 40px;color: #666;}.mpks-common-tree-header-button {padding: 13px 10px 13px 0;}.mpks-common-tree-node-title {.line-clamp(1);// margin-top: 4px;margin-right: 40px;color: #151b26;}.mpks-common-tree-node-permission {position: relative;width: 30px;text-align: center;color: #999;&:after {position: absolute;top: 6px;left: 6px;width: 17px;height: 0;border-top: 1px solid #999;transform: rotate(45deg);content: " ";}}.mpks-common-tree-node-control-wrapper {position: absolute;top: 0;right: 0;}.mpks-common-tree-node-control {width: 30px;text-align: center;background: #fff;visibility: hidden;}.el-tree-node:focus > .el-tree-node__content .mpks-common-tree-node-control,.el-tree-node__content:hover .mpks-common-tree-node-control,.mpks-common-tree-node-control:hover {background: #f5f7fa;}.el-tree--highlight-current.el-tree-node.is-current> .el-tree-node__content.mpks-common-tree-node-control,.el-tree--highlight-current.el-tree-node.is-current> .el-tree-node__content.mpks-common-tree-node-control:hover {background-color: #ebf4fd;}.mpks-common-tree-node-control:hover {color: #0073eb;}.el-tree-node {position: relative;}.el-tree-node__content {font-size: 14px;height: 24px;line-height: 24px;overflow-x: scroll;margin-top: 4px;&:hover {.mpks-common-tree-node-control {visibility: visible;}}}// .el-tree .el-icon-caret-right:before {//     background: url('~@/assets/icon/arrowDown.svg') no-repeat 0 3px;//     content: '\9B';//     display: block;//     height: 16px;//     font-size: 16px;//     background-size: 16px;// }.mpks-common-tree-dialog-tips {color: #666;}.mpks-common-tree-dialog-select {width: 100%;}.mpks-common-tree-filter {// background: #f9f9f9;padding: 0 4px 4px;.el-input__inner {// border: none;font-size: 12px;border-radius: 6px;height: 30px;}.el-input__suffix {display: flex;align-items: center;height: 30px;cursor: pointer;}}
}.mpks-common-tree-node-control-disabled {visibility: hidden;
}
</style>

相关文章:

element vue2 动态添加 select+tree

难点在 1 添加一组一组的渲染 是往数组里push对象 循环的&#xff1b;但是要注意对象的结构! 因为这涉及到编辑完成后&#xff0c;表单提交时候的 校验&#xff01; 是校验每一个select tree里边 是否勾选 2 是在后期做编辑回显的时候 保证后端返回的值 是渲染到 select中的tr…...

MySQL Linux自建环境备份至远端服务器自定义保留天数

环境准备 linux下安装mysql请看 Linux环境安装单节点mysql8.0.16 系统版本: CentOS 7 软件版本: mysql8.0.16 备份策略与实现方法 此次备份依赖mysql自带命令mysqldump与linux下crontab命令(定时任务) mysqldump mysqldump客户实用程序执行 逻辑备份,产生一组能够被执行…...

2023下半年软考改成机考,对考生有哪些影响?

软考改革成无纸化考试已经实锤。根据陕西软考办官网的消息&#xff0c;从2023年11月起&#xff0c;软考的所有科目都将改为机器考试形式。详情请参阅&#xff1a; 那么软考考试改为机考后&#xff0c;对我们会有哪些影响呢&#xff1f;我来简单概括一下。 1、复习的方法可以根…...

MySQL存储结构及索引

文章目录 MySQL结构1.2存储引擎介绍1.3存储引擎特点InnoDB逻辑存储结构 MyISAMMemory区别及特点存储引擎选择 索引索引概述索引结构BTreeHash索引分类聚集索引&二级索引索引语法SQL性能分析索引优化最左前缀法则范围查询字符串不加引号模糊查询or连接条件数据分布影响覆盖索…...

2023 RISC-V中国峰会 安全相关议题汇总

目录 1、The practical use cases of the RISC-V IOPMP 2、构建安全可信、稳定可靠的RISC-V安全体系 3、Enhancing RISC-V Debug Security with hardware-based isolation 4、Closing a side door: Designing high-performance RISC-V core resilient to branch prediction…...

要过软考,务必先搞清楚这3点

前段时间软考成绩出来了&#xff0c;大家都过了没&#xff1f; 我看好多人都说早上的题目稳过&#xff0c;下午的好多都挂了。 软考每年这个通过率&#xff0c;确实是一言难尽。 到底怎么样才能过&#xff0c;自学、培训&#xff0c;各种诀窍&#xff0c;五花八门。 但考不过…...

windows常用shell命令大全

简介 基于鼠标操作的后果就是OS界面外观发生改变&#xff0c; 就得多花学习成本。更主要的是基于界面引导Path与命令行直达速度是难以比拟的。另外Geek很大一部分是键盘控&#xff0c;而非鼠标流的。 整理Windows的常用Shell命令&#xff0c;一方面帮助深入学习Mysql&#xf…...

skywalking忽略调用链路中的指定异常

文章目录 一、介绍二、演示项目介绍1. 支付服务2. 订单服务 三、项目演示1. 未忽略异常2. 忽略异常修改配置使用注解 四、结论 往期内容 一、skywalking安装教程 二、skywalking全链路追踪 三、skywalking日志收集 一、介绍 在前面介绍在微服务项目中使用skywalking进行全链…...

学习笔记|printf函数的实现|不同操作系统中的换行|数的进制:2进制、10进制、16进制转换|STC32G单片机视频开发教程(冲哥)|第五集:C语言基础

文章目录 1.C语言 printf函数的实现Tips&#xff1a;ASCII码表Tips&#xff1a;找不到头文件怎么办&#xff1f;主函数添加程序:常规用法:Tips&#xff1a;不同操作系统中的换行 ⒉数的进制:2进制、10进制、16进制.常见的对应&#xff1a;应用&#xff1a;整体端口的操作 3.C语…...

线性代数复习公式整理(自用/持续更新)

第一章 行列式 设A、B为n阶矩阵 ∣ A T ∣ ∣ A ∣ \left | A^T \right | \left | A \right | ​AT ​∣A∣ ∣ A m ∣ ∣ A ∣ m \left | A^m \right | \left | A \right | ^m ∣Am∣∣A∣m ∣ k A ∣ k n ∣ A ∣ \left | kA \right | k^n\left | A \right | ∣kA∣kn∣A…...

QEMU源码全解析34 —— Machine(4)

接前一篇文章&#xff1a;QEMU源码全解析33 —— Machine&#xff08;3&#xff09; 本文内容参考&#xff1a; 《趣谈Linux操作系统》 —— 刘超&#xff0c;极客时间 《QEMU/KVM》源码解析与应用 —— 李强&#xff0c;机械工业出版社 特此致谢&#xff01; 上一回围绕DEF…...

引用Boost库 CMakeList的写法

引用Boost库 CMakeList的写法 flyfish 环境arm cmake_minimum_required(VERSION 3.5)project(example LANGUAGES CXX)set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED ON)set(BOOST_PREFIX /media/Boost/build/out/arm64-v8a/) set(BOOST_INCLUDE_DIR "${…...

Kibana 可视化数据分析以及es常用的数据分析函数

一、Kibana 可视化数据分析 1、Discover 的使用及生成报表&#xff1a;https://elasticstack.blog.csdn.net/article/details/131119502 2、Dashboard的使用&#xff1a;https://elasticstack.blog.csdn.net/article/details/131121890 该文档主要介绍Dashboard中的Lens使用…...

golang云原生怎么学?

学习golang云原生有哪些好处&#xff0c;他们的优缺点又有哪些&#xff1f; 一.好处有哪些&#xff1f; 1.高效性能&#xff1a;Golang是一门编译型语言&#xff0c;具有卓越的执行效率和并发处理能力。在云原生环境中&#xff0c;高效的性能对于应对大规模和高负载的分布式系…...

Jenkins+Nginx+vue

安装nodejs 在这里插入图片描述 echo off xcopy C:\ProgramData\Jenkins\.jenkins\workspace\super_manage_vue\dist F:\java\www\super_manage_vue\ /s /e /y echo 复制文件完成 exit安装niginx 配置文件如下 #user nobody; worker_processes 1;#error_log logs/error.lo…...

【vue 监听页面滑动到底部】

监听页面滑动到底部 IntersectionObserverscroll 事件监听器 IntersectionObserver 在 Vue 中监听触底可以通过使用IntersectionObserver实现。IntersectionObserver是一个可以异步观察目标元素与其祖先或视窗交叉状态的API。当目标元素进入或退出视口时&#xff0c;会触发Int…...

(一)创建型设计模式:2、单例模式(C++实现实例 线程安全)

目录 1、单例模式&#xff08;Singleton Pattern&#xff09;的含义 2、单例模式的优缺点 &#xff08;1&#xff09;优点&#xff1a; &#xff08;2&#xff09;缺点&#xff1a; 3、C实现单例模式的示例&#xff08;简单&#xff09; 4、C实现单例模式的示例&#xff…...

《练习100》86~90

题目86 # 生成一个包含20个随机整数&#xff08;100以内&#xff09;的列表&#xff0c;对其中偶数索引&#xff08;下标&#xff09;的数据进行降序排列&#xff0c;奇数索引的元素不变 import random list1 [random.randint(0,100) for _ in range(20)] list2 list1[::2] …...

C++——命名空间、输入、输出

在我们接触C之前&#xff0c;C语言中有时候会有使用全局变量&#xff0c;全局变量在使用过程中可能会发生冲突&#xff0c;这个冲突有时会是我们与库之间的冲突&#xff0c;有时又会是我们自己定义的之间的冲突&#xff0c;那么这时候命名空间的出现将很好的解决这个问题&#…...

解锁滴滴ES的性能潜力:JDK 17和ZGC的升级之路

前文介绍了滴滴自研的ES强一致性多活是如何实现的&#xff0c;其中也提到为了提升查询性能和解决查询毛刺问题&#xff0c;滴滴ES原地升级JDK17和ZGC&#xff0c;在这个过程中我们遇到了哪些问题&#xff0c;怎样解决的&#xff0c;以及最终上线效果如何&#xff0c;这篇文章就…...

[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?

&#x1f9e0; 智能合约中的数据是如何在区块链中保持一致的&#xff1f; 为什么所有区块链节点都能得出相同结果&#xff1f;合约调用这么复杂&#xff0c;状态真能保持一致吗&#xff1f;本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里&#xf…...

【WiFi帧结构】

文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成&#xff1a;MAC头部frame bodyFCS&#xff0c;其中MAC是固定格式的&#xff0c;frame body是可变长度。 MAC头部有frame control&#xff0c;duration&#xff0c;address1&#xff0c;address2&#xff0c;addre…...

DockerHub与私有镜像仓库在容器化中的应用与管理

哈喽&#xff0c;大家好&#xff0c;我是左手python&#xff01; Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库&#xff0c;用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:

一、属性动画概述NETX 作用&#xff1a;实现组件通用属性的渐变过渡效果&#xff0c;提升用户体验。支持属性&#xff1a;width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项&#xff1a; 布局类属性&#xff08;如宽高&#xff09;变化时&#…...

《Playwright:微软的自动化测试工具详解》

Playwright 简介:声明内容来自网络&#xff0c;将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具&#xff0c;支持 Chrome、Firefox、Safari 等主流浏览器&#xff0c;提供多语言 API&#xff08;Python、JavaScript、Java、.NET&#xff09;。它的特点包括&a…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享

文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的&#xff0c;根据Excel列的需求预估的工时直接打骨折&#xff0c;不要问我为什么&#xff0c;主要…...

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…...

【2025年】解决Burpsuite抓不到https包的问题

环境&#xff1a;windows11 burpsuite:2025.5 在抓取https网站时&#xff0c;burpsuite抓取不到https数据包&#xff0c;只显示&#xff1a; 解决该问题只需如下三个步骤&#xff1a; 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇&#xff0c;相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程&#xff0c;其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线&#xff0c; n r n_r nr​ 根接收天线的 MIMO 系…...

JVM虚拟机:内存结构、垃圾回收、性能优化

1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...