vue v-for循环拖拽排序,实现数组选中的数据拖拽后对应的子数据也进行重新排序

如下图所有,有个需求更新, 实现拖拽。
1,当新增了测点类型的时候每个对应的回路子数据都会新增对应的测点类型。
2,当拖动测点类型结束的时候对应的回路里面的内容也会跟着测点类型的排序自动排序
在这里插入图片描述

在这里插入图片描述

其实很简单,只要会了拖拽,然后再定的数据处理里面加上对应的处理逻辑就好了。
我这边直接展示代码了。

	template><div class="box"><div class="assembly-wrap"><div class="assembly-div"><div class="assemblyimg"><img v-show="Number(dataInfos.assembly.value) === 1" src="../../../assets/images/switch/onAssembly.png" alt=""><img v-show="Number(dataInfos.assembly.value) !== 1" src="../../../assets/images/switch/assembly.png" alt=""></div><div class="flexCloum"><div class="title" :class="{'title2': dataInfos.title.position === 2}">{{ dataInfos.title.value }}</div><div v-show="dataInfos.networkVoltageFlag" class="network-voltage" :class="{'title2': dataInfos.title.position === 2}">电网电压 <span>{{ dataInfos?.networkVoltageInfo?.value }} v </span></div></div><div class="switch-line"></div><div class="switch-wrap"><div v-for="(item, i) in dataInfos.loopList" :key="i" class="switch-row"><div class="loop">回路{{ i+1 }}</div><div v-show="Number(item.value) === 1" class="loopimgwrap"><img class="loopimg1" src="../../../assets/images/switch/on.png" alt=""></div><img v-show="Number(item.value) !== 1" :class="{'loopimg2': i+1 !== dataInfos.loopList.length}" src="../../../assets/images/switch/off.png" alt=""><div class="label" :class="{'label2': item.value !== 1}" :title="item.label">{{ item.label }}</div><div class="switchmine"><div v-for="(item2, i) in item.list" :key="i"><span @dblclick="triggerDblclick(item, item2)">{{ item2.value | isNull }}{{ item2.unit }}</span></div></div></div></div><div class="labellist"><div v-for="(item, i) in dataInfos.options" :key="i"><el-tooltip v-if="item.label.length > 4 " class="item" effect="dark" :content="item.label" placement="top"><span>{{ item.label }}</span></el-tooltip><span v-else>{{ item.label }}</span></div></div></div></div><zmjdialog ref="zmjdialog" top="10vh" width="1000px" @confirm="confirm" @cancel="cancel" ><el-form ref="ruleForm" :model="formData" label-width="150px"><div class="df"><!-- :rules="[{ required: true, message: '请输入测点', trigger: ['blur', 'change'] }]" --><el-form-itemlabel="组件标题"><el-input v-model="formData.title.value" placeholder="请输入组件标题"></el-input></el-form-item><el-form-itemlabel="标题位置"><el-radio v-model="formData.title.position" :label="1">左</el-radio><el-radio v-model="formData.title.position" :label="2">右</el-radio></el-form-item></div><div class="df" ><!-- :label="`${formData.title.value}测点`" --><el-form-itemlabel="测点"><el-input v-model="formData.assembly.site" placeholder="请输入标题测点"></el-input></el-form-item></div><div class="df" ><el-form-itemlabel="电网电压"><el-switch v-model="formData.networkVoltageFlag" /></el-form-item></div><div class="df" v-show="formData.networkVoltageFlag"><el-form-itemlabel="电网电压测点"><el-input v-model="formData.networkVoltageInfo.site"  placeholder="请输入电网电压测点"></el-input></el-form-item></div><div class="pump-list"><div class="title"><span>回路</span><ul><!-- <li @click="pumpcancel">取消</li> --><li @click="addpump">添加回路</li></ul></div><div class="df site-wrap" style="margin-top: 20px;"><el-form-itemlabel-width="100px"label="测点类型"><el-input v-model="sitetypes" placeholder="请输入测点类型"></el-input></el-form-item><div class="addsitetype" @click="addsitetype()">添加测点类型</div></div><div class="optionsList"><div v-for="(item, i) in formData.options":key="i"draggable="true"@dragstart="dragStart(i, item)"@dragover.prevent="dragOver(i)"@dragend="dragEnd()">{{ item.label }}<i class="el-tag__close el-icon-close" @click="optionclose(i)"></i></div></div><div class="ulmine"><el-collapse v-model="activeNames" @change="handleChange"><el-collapse-item v-for="(item, i) in formData.loopList" :key="i" :name="i"><template slot="title">回路{{ i+1 }}<div class="pumpdelete" @click.stop="pumpdelete(i)">删除</div></template><div class="ulmine-div"><!-- <div class="addpumpsite" @click="addpumpsite(i)">添加测点</div> --><div class="df"><el-form-itemlabel-width="100px"label="回路名称"><el-input v-model="item.label" placeholder="请输入名称"></el-input></el-form-item><el-form-itemlabel-width="120px"label="回路测点"><el-input v-model="item.site" placeholder="请输入测点"></el-input></el-form-item></div><div v-for="(item2, j) in item.list":key="j"draggable="true"ref="optionsRef"><div class="df"><el-form-itemlabel-width="100px"label="测点类型:"><div class="typetext">{{ item2.type }}</div></el-form-item><el-form-itemlabel-width="50px"label="测点"><el-input v-model="item2.site" :style="{width: '120px'}" placeholder="请输入测点"></el-input></el-form-item><el-form-itemlabel-width="80px"label="单位"><el-input v-model="item2.unit" :style="{width: '120px'}" placeholder="请输入单位"></el-input></el-form-item><el-form-item label-width="20px" label="" class="ponits_value"><el-radio v-model="item2.state" :label="1">初始值</el-radio><el-radio v-model="item2.state" :label="2">转换值</el-radio></el-form-item><div v-show="item2.state === 2"><div class="add_point conversion" @click="addConversion(item2)">添加转换值</div></div></div><div v-show="item2.state === 2"><div v-for="(item3,indexs) in item2.children" :key="indexs"><div class="points_items" style="margin-bottom:20px"><el-form-item label-width="100px" label="转换标识"><el-input v-model="item3.value" placeholder="转换标识"></el-input></el-form-item><el-form-item label-width="100px" label="转换值"><el-input v-model="item3.label" placeholder="转换值"></el-input></el-form-item><i class="el-icon-remove" style="margin-left:30px;font-size:25px;cursor: pointer;" @click="deleteConversion(item2,indexs)"></i></div></div></div><!-- <div class="el-icon-remove" @click="deletepumpsite(i,j)"></div> --></div></div></el-collapse-item></el-collapse></div></div></el-form></zmjdialog><zmjdialog ref="childInfoDialog" width="850px" top="30vh" :title="`${label}&${labelItem}历史数据`" @confirm="childInfoDialog"><zmj-echarts :ref="`historicalLineEcharts${chartId}`" :echarts-id="`historicalLineEcharts${chartId}`" :height="'200px'"></zmj-echarts></zmjdialog></div></template><script>import ZmjEcharts from '@/components/zmjEcharts.vue'import { shearerOptions } from '../../components/echarts/Historicalline.js'export default {components: {ZmjEcharts},props: {dataInfo:{type: Object,default (){return {}}}},data () {return {sitetypes: null,formData: {},activeNames: [0],dataInfos: {},groupName: '', // 测点大类dataName: '', // 测名称deviceIdList: 1, // 设备号label: null,labelItem: null,chartId: `Id${new Date().getTime()}`,dragStartIndex: '',dragStartData: '',copyStartData:''}},watch: {dataInfo: {immediate: true,deep: true,handler (val) {this.formData = JSON.parse(JSON.stringify(val))this.dataInfos = JSON.parse(JSON.stringify(val))// 处理后加入字段this.formData.loopList.forEach(v => {v.list&&v.list.forEach(v2 => {if(!v2.state){v2.state = 1}if(!v2.children){v2.children = []}})})console.log(this.formData, 'this.formData')}}},computed: {},created () {},filters: {isNull (val) {return val === null ? '--' : val}},mounted () {window.$eventBus.$on('wsMessage', message => {let dataType =  message.dataType// message.data.forEach(val => {})for(let i in this.dataInfos){if(i === 'loopList'){this.dataInfos[i].forEach(v => {if(this.sifn(v.site) === dataType){this.messagefn(message.data, v)}v.list && v.list.forEach(v2 => {if(this.sifn(v2.site) === dataType){this.messagefn(message.data, v2)}})})}if(i === 'assembly'){if(this.sifn(this.dataInfos[i].site) === dataType){this.messagefn(message.data, this.dataInfos[i])}}if(i === 'networkVoltageInfo'){if(this.sifn(this.dataInfos[i].site) === dataType){this.messagefn(message.data, this.dataInfos[i])}}}})},beforeDestroy () {window.$eventBus.$off('wsMessage')},methods: {//  拖拽逻辑在这里。dragStart (index, item) {console.log(index, item);this.dragStartIndex = indexthis.dragStartData = item// 拿到测点类型 的第 index 个 数据对应的listthis.formData.loopList.forEach(item => {this.copyStartData = item.list[index]})},// 只要拖拽元素进入到放置区域就触发,这里实际是鼠标指针进入放置区域才触发dragOver (index) {this.dragOverIndex = index},//  结束拖拽逻辑的时候进行对应的子向排序。dragEnd () {const copyTodolist = [...this.formData.options]// 删除老的节点copyTodolist.splice(this.dragStartIndex, 1)// 在列表中目标位置增加新的节点copyTodolist.splice(this.dragOverIndex, 0, this.dragStartData)// ... 上边是测点类型的排序,结束后对应的回路跟着类型调整位置this.formData.options = [...copyTodolist] // 获取测点类型调整后的顺序// console.log('drag end', this.formData.loopList, '所有的对应类型loopList');this.formData.loopList.map((item, v) => {const copyList = [...item.list] // 所有的对应类型loopList的对应测点list// 删除对应的老的节点copyList.splice(this.dragStartIndex, 1)// 在列表中目标位置增加新的节点copyList.splice(this.dragOverIndex, 0, this.copyStartData)return item.list = [...copyList]})this.dragOverIndex = ''},// '双击事件 展示折线图triggerDblclick (info, info2) {console.log(info, info2, '双击事件');this.$refs.childInfoDialog.open()this.label = info.labelthis.labelItem = info2.typeif(info2.site){let arr = info2?.site?.split('/') || []console.log(arr);this.groupName = `${arr[0]}` // 测点大类this.deviceIdList = `${arr[1]}`  // 设备号this.dataName = `${arr[2]}`   // 测名称}let params = {workFaceCode: window.$getStorage('workFaceInfo').workFaceCode,startTime: window.$dayjs().format('YYYY-MM-DD 00:00:00'),endTime: window.$dayjs().add(1, 'day').format('YYYY-MM-DD 00:00:00'),aggregateType : 'none', // 聚合类型 传none获取原始历史值groupName: this.groupName, // 测点大类dataName:  this.dataName, // 测名称deviceIdList: this.deviceIdList // 设备号}let thisDataList = nullwindow.$axiosGet('deviceHistory', params).then((res) => {if(!res.length){this.$refs[`historicalLineEcharts${this.chartId}`] && this.$refs[`historicalLineEcharts${this.chartId}`].upDataEcharts(shearerOptions(res || [], params, this.dataInfos))return}thisDataList = res.map(item => {return item.data})this.$nextTick(() => {this.$refs[`historicalLineEcharts${this.chartId}`] && this.$refs[`historicalLineEcharts${this.chartId}`].getEchartsLiving();this.$refs[`historicalLineEcharts${this.chartId}`] && this.$refs[`historicalLineEcharts${this.chartId}`].upDataEcharts(shearerOptions(thisDataList || [], params, this.dataInfos))})}).catch(() => {this.$refs[`historicalLineEcharts${this.chartId}`] && this.$refs[`historicalLineEcharts${this.chartId}`].upDataEcharts(shearerOptions(thisDataList || [], params, this.dataInfos))})},childInfoDialog () {this.$refs.childInfoDialog.close()},messagefn (e, v){e.forEach(val => {if(val.deviceId === this.sifn(v.site, 2)){v.value = val.valueif(v.state === 2){v.children&&v.children.forEach(v2 => {if(String(val.value) === String(v2.value)){v.value = v2.label}})}}})},sifn (v, i = 1) {if(v){let arr = v.split('/')if(arr.length === 3){if(i === 1){return `${arr[0]}_${arr[2]}`}else if(i === 2) {return Number(arr[1])}}else{return v}}else{return v}},deleteConversion (items, indexs){items.children.splice(indexs, 1)},// 添加转换值addConversion (item){item.children?.push({label:'',value:''})},handleChange (val) {console.log(val)},// 回路删除pumpdelete (i) {if(this.formData.loopList.length <= 2){this.$message.warning('回路最少有2个')return}this.formData.loopList.splice(i, 1)},// 添加回路addpump () {this.formData.loopList.push({site: null,value: null,label: null,list: this.formData.options.map(v => {return {site: null,value: null,type: v.label,unit: null,state: 1,children: []}})})},// 回路类型添加addsitetype () {if(this.sitetypes === '' || this.sitetypes === null|| this.sitetypes === undefined){return this.$message.warning('请添加测点类型')}this.formData.options.push({label: this.sitetypes})this.formData.loopList.forEach(v => {v.list.push({site: null,value: null,type: this.sitetypes,unit: null,state: 1,children: []})})this.sitetypes = ''},// 回路类型添加删除optionclose (i) {this.formData.options.splice(i, 1)this.formData.loopList.forEach(v => {v.list.splice(i, 1)})},// 乳化泵测点添加// addpumpsite (i) {//   this.formData.loopList[i].list.push({//     site: null,//     value: null,//     type: null,//     unit: null//   })// },// 乳化泵测点删除// deletepumpsite (i, j) {//   this.formData.loopList[i].list.splice(j, 1)// },edit () {// this.formData = window.$utils.cloneDeep(this.formData)this.$refs.zmjdialog.open()},confirm (){this.dragStartIndex = '';this.$refs.ruleForm.validate((valid) => {if (valid) {this.$refs.zmjdialog.close()// let arr = [ this.formData.assembly.site, this.formData.networkVoltageInfo.site]let arr = [ this.formData.assembly.site]this.formData.loopList.forEach(v => {arr.push(v.site)v.list && v.list.forEach(v2 => {arr.push(v2.site)})})let newArr = []newArr.push(this.formData.networkVoltageInfo.site, ...arr)this.$emit('update:dataTypeList', newArr)this.$emit('update:dataInfo', this.formData)this.$message.success('保存成功')} else {return false}})},cancel () {this.dragStartIndex = '';console.log('取消')}}}</script><style lang="scss" scoped>.box{padding-top: 20px;font-size: 14px;}.assembly-wrap{border: 1px solid #707070;border-radius: 2px;width: 100%;height: 100%;}.assembly-div{width: calc(100% - 80px);margin-left: 80px;position: relative;.assemblyimg{width: 95%;position: relative;>img{position: absolute;top: -20px;left: 50%;margin-left: -32px;}}.network-voltage{position: absolute;top: 60px;font-size: 12px;width: 60%;left: -20%;text-align: right;padding: 0 60px 0 0;span{margin-left: 10px;color: #31E8B4;}}.flexCloum{display: flex;flex-direction: column;}.title{position: absolute;top: 30px;font-size: 20px;color: #FFBB00;width: 60%;left: -10%;text-align: right;padding:0 60px 0 0;}.title2{text-align: left;width: 50%;padding:0 0 0 30px;left: auto;right: 0;}.switch-line{width: calc(95% - 11px);height: 2px;position: absolute;top: 102px;left: 5px;background: #31E8B4;}.switch-wrap{position: absolute;top: 104px;width: 95%;display: flex;justify-content: space-between;.switch-row{position: relative;.loopimgwrap{width: 21px;}.loopimg2{position: relative;left: -8px;}}.switch-row:last-child{.loopimg1{position: relative;left: 4px;}}.switch-row:first-child{.loopimg1{position: relative;left: -7px;}}.loop{position: absolute;width: 70px;text-align: left;top: -25px;}.label{position: absolute;width:70px;bottom: -40px;left: -31px;}.label2{left: -22px;// height: 40px;// line-height: 16px;// overflow: hidden;// text-overflow: ellipsis;// white-space: nowrap;}.switchmine{position: absolute;top: 160px;left: -25px;>div{width: 70px;line-height: 20px;height: 20px;margin-bottom: 10px;color: #31E8B4;}}}.labellist{position: absolute;left: -80px;top: 264px;line-height: 20px;>div{width: 60px;overflow: hidden;white-space:nowrap;text-overflow: ellipsis;margin-bottom: 10px;}}}.pump-list{position: relative;color: #fff;border:1px solid #999;border-radius: 5px;.title{display: flex;justify-content: space-between;align-items: center;padding: 0 16px;width: 100%;height: 36px;background: rgba(238, 238, 238, 0.08);border-bottom: 1px solid #314150;box-sizing: border-box;ul{display: flex;li{margin-left: 8px;width: 64px;line-height: 24px;font-size: 14px;text-align: center;border-radius: 3px;user-select: none;cursor: pointer;}// >li:nth-child(1){//   border: 1px solid rgba(255, 255, 255, 0.24);// }>li:nth-child(1){border: 1px solid #0088FF;}}}.ulmine{padding:0 20px 10px 20px;height: 400px;overflow: hidden;overflow-y: scroll;.ulmine-div{position: relative;padding: 15px 0;}.el-icon-remove{cursor: pointer;height: 36px;line-height: 36px;font-size: 20px;padding-left: 15px;color: #999;}.pumpdelete{width: 64px;line-height: 24px;font-size: 14px;text-align: center;border-radius: 3px;cursor: pointer;border: 1px solid #B23B3B;margin-left: 620px;}.addpumpsite{position: absolute;line-height: 24px;font-size: 14px;text-align: center;border-radius: 3px;cursor: pointer;right: 10px;top: 20px;width: 84px;right: 30px;border: 1px solid #0088FF;}::v-deep{.el-collapse{border: none;}.el-collapse-item__header{padding-left: 20px;background: transparent;color: #fff;border-bottom:none;background: rgba(238, 238, 238, 0.08);}.el-collapse-item__wrap{background: transparent;border-bottom: 1px dashed #7a7d80;}.el-collapse-item__content{color: #fff;padding-bottom: 0;}}}.ulmine::-webkit-scrollbar {display: none;}}.addsitetype{position: absolute;line-height: 24px;font-size: 14px;text-align: center;border-radius: 3px;cursor: pointer;top: 62px;width: 104px;left: 370px;border: 1px solid #0088FF;}.optionsList{display: flex;flex-wrap:wrap;padding-bottom: 5px;margin-left: 80px;>div{margin-left: 20px;background-color: #f4f4f5;border-color: #e9e9eb;color: #909399;padding:7px 12px;border-radius: 4px;position: relative;margin-bottom: 10px;.el-tag__close{color: #909399;background-color: #c0c4cc;border-radius: 50%;font-size: 15px;text-align: center;margin-left: 5px;cursor: pointer;}}}.site-wrap{::v-deep{.el-form-item{margin-bottom: 10px;}}}.typetext{width: 100px;overflow: hidden;}.add_point{display: inline-block;margin-left: 30px;width: 80px;height: 32px;border-radius: 4px;font-size: 14px;color: #fff;line-height: 30px;border: 1px solid #409EFF;cursor: pointer;text-align: center;user-select: none;}.conversion{margin-left: 20px;margin-top: 5px;font-size: 13px;height: 28px;line-height: 26px;}.points_items{display: flex;align-items: center;::v-deep{.el-form-item{margin-bottom: 0;}}}</style>

在这里插入图片描述
保存后的图例对比

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java方法的定义和使用

方法 今日目标&#xff1a; 能够知道方法的好处 能够根据两个明确分析方法的参数和返回值 能够编写方法完成授课案例&#xff0c;并在主方法中完成方法的调用 能够知道方法重载及其特点 1&#xff1a;方法的定义和使用 1.1 方法概述 方法(method)&#xff1a;就是完成特…

【Flet教程】使用Flet以Python创建TODO应用程序

Flet是基于Python实现的Flutter图形界面GUI。除了使用Python&#xff0c;具备美观、简洁、易用&#xff0c;还有Flutter本身的跨平台&#xff08;安卓、iOS、Win、Mac、Web&#xff09;、高性能、有后盾的特点。下面是0.18版官方TODO APP教程&#xff0c;为了准确&#xff0c;保…

大数据技术原理与应用 期末复习 知识点全总结(林子雨版

目录 1.第一章 大数据概述&#xff1a;&#xff08;一&#xff09;三次信息化浪潮&#xff08;二&#xff09;人类社会数据产生方式的3个阶段&#xff08;三&#xff09;大数据的3个发展阶段&#xff08;四&#xff09;大数据4V概念&#xff08;五&#xff09;数据存储单位之间…

基于Github官方教程的快速入门学习

GitHub 是一个用于版本控制和协作的代码托管平台。 它允许您和其他人随时随地协同处理项目。 创建仓库 在任何页面的右上角&#xff0c;使用 下拉菜单选择“新建存储库”。 之后会进入创建仓库的界面&#xff0c;需要我们进行如下操作&#xff1a; 写仓库的名字写对于本仓库…

BERT 模型是什么

科学突破很少发生在真空中。相反&#xff0c;它们往往是建立在积累的人类知识之上的阶梯的倒数第二步。要了解 ChatGPT 和 Google Bart 等大型语言模型 &#xff08;LLM&#xff09; 的成功&#xff0c;我们需要回到过去并谈论 BERT。 BERT 由 Google 研究人员于 2018 年开发&…

代码随想录算法训练营第27天 | 39. 组合总和 40.组合总和II 131.分割回文串

目录 39. 组合总和 &#x1f4a1;解题思路 &#x1f4bb;实现代码 40.组合总和II &#x1f4a1;解题思路 &#x1f4bb;实现代码 131.分割回文串 &#x1f4a1;解题思路 # 判断回文子串 &#x1f4bb;实现代码 39. 组合总和 题目链接&#xff1a;39. 组合总和 给定…

C++OpenCV学习笔记(0):从开始到放弃

文章目录 前言环境配置Hello worldC 和C# 语法对比模板字符串list列表 总结 前言 作为一个计算机本科学生&#xff0c;我大学的时候深深的被指针和内存管理给折磨过。我深刻的理解内存泄漏的巨大问题。但是我最近学习Python的时候发现&#xff0c;Python是真的不好进行项目管理…

回归预测 | Matlab基于SO-GRU蛇群算法优化门控循环单元的数据多输入单输出回归预测

回归预测 | Matlab基于SO-GRU蛇群算法优化门控循环单元的数据多输入单输出回归预测 目录 回归预测 | Matlab基于SO-GRU蛇群算法优化门控循环单元的数据多输入单输出回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab基于SO-GRU蛇群算法优化门控循环单元的数…

分布式I/O应用于智慧停车场的方案介绍

客户案例背景 目前车位检测技术有磁电技术、超声波技术、红外线技术、图像识别车位技术。考虑到例如电磁干扰、信号干扰等的环境因素影响&#xff0c;通常会采用组合使用的方式进行&#xff0c;如采用不同的传感器、应用不同的协议等&#xff0c;以便提高车位检测的准确性和实时…

鼠标随动指定区域高亮显示(Excel聚光灯)

实例需求&#xff1a;工作表中数据表实现跟随鼠标选中高亮效果&#xff0c;需要注意如下几个细节需求 数据表为连续区域&#xff0c;但是不一定从A1单元格开始数据表的前两行&#xff08;标题行&#xff09;不使用高亮效果数据表中已经应用了条件格式&#xff0c;高亮显示取消…

Docker 安装部署

1、Docker 安装 ① 卸载docker&#xff0c;清空之前的docker文件 yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-selinux \docker-engine-selinux \docker-engine \docker-ce…

AI Table应用程序接口表的格式说明和作用

AI Table 首先全拼不是AI人工智能表&#xff0c;而是Application Interface Table应用程序接口表。此表按照AUTOSAR的格式规范去定义&#xff0c;并且使用此Excel 表格生成相应的应用软件组件Arxml文件。下面就让我们按照AUTOSAR_EXP_AIUserGuide.pdf文档官方解释描述文件去看看…

系统存储架构升级分享 | 京东云技术团队

一、业务背景 系统业务功能&#xff1a;系统内部进行数据处理及整合, 对外部系统提供结果数据的初始化(写)及查询数据结果服务。 系统网络架构: 部署架构对切量上线的影响 - 内部管理系统上线对其他系统的读业务无影响分布式缓存可进行单独扩容, 与存储及查询功能升级无关通过…

编译ZLMediaKit(win10+msvc2019_x64)

前言 因工作需要&#xff0c;需要ZLMediaKit&#xff0c;为方便抓包分析&#xff0c;最好在windows系统上测试&#xff0c;但使用自己编译的第三方库一直出问题&#xff0c;无法编译通过。本文档记录下win10上的编译过程&#xff0c;供有需要的小伙伴使用 一、需要安装的软件…

C# 图解教程 第5版 —— 第23章 异常

文章目录 23.1 什么是异常23.2 try 语句23.3 异常类23.4 catch 子句23.5 异常过滤器23.6 catch 子句段23.7 finally 块23.8 为异常寻找处理程序23.9 进一步搜索23.9.1 一般法则23.9.2 搜索调用栈的示例&#xff08;*&#xff09; 23.10 抛出异常23.11 不带异常对象的抛出23.12 …

【AI视野·今日NLP 自然语言处理论文速览 第七十二期】Mon, 8 Jan 2024

AI视野今日CS.NLP 自然语言处理论文速览 Mon, 8 Jan 2024 Totally 17 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computation and Language Papers DeepSeek LLM: Scaling Open-Source Language Models with Longtermism Authors DeepSeek AI Xiao Bi, Deli Ch…

Spirng MVC见解1

1. SpringMVC概述 1.1 MVC介绍 MVC是一种设计模式&#xff0c;将软件按照模型、视图、控制器来划分&#xff1a; M&#xff1a;Model&#xff0c;模型层&#xff0c;指工程中的JavaBean&#xff0c;作用是处理数据 JavaBean分为两类&#xff1a; 一类称为数据承载Bean&#x…

初学unity学习七天,经验收获总结

初学unity七天&#xff0c;经验收获总结 学习就是认识新观念和新想法的过程。 假如人们始终以同一种思维方式来考虑问题的话&#xff0c;那么始终只会得到同样的结果。 因为我对你讲述的许多内容是你以前从未接触过的&#xff0c;所以我建议你&#xff0c;在你还没有做之前&…

Matlab 使用 DH table 建立的 robot 和实际不符

机器人仿真 想借助 matlab robotics toolbox 来仿真机器人&#xff0c;但是直接输入自己的 DH table 显示出来的 robot 和实际不情况不符。 DH table 建立 robot Build Manipulator Robot Using Kinematic DH Parameters 主要使用 setFixedTransform&#xff0c;DH table 中…

Centos报错failovermethod 和 appstream

Centos报错failovermethod 和 appstream 报错failovermethod 编辑/etc/yum.repos.d/CentOS-Epel.repo vim /etc/yum.repos.d/CentOS-epel.repo将failovermethod选项删除即可 报错appstream 参考这篇文章&#xff1a;https://blog.csdn.net/weixin_46533577/article/details…