1 npm install sortablejs --save 2 xxx.vue <template> <div> <el-bgwhite> <el-row> <el-form :model="form" ref="form" label-width="130px" size="small" > <el-row id="topicMove"> <el-row class="topicSty" v-for="(item, index) in form.subject" :key="index" > <el-col :span="2" class="centerSty">{{ index + 1 }}</el-col> <el-col :span="22"> <el-row> <el-col :span="16">{{ item.name }}</el-col> <el-col :span="8" class="rightSty"> <el-button type="text">拖动</el-button> </el-col> </el-row> <el-row v-for="(it, ind) in item.option" :key="ind" v-show="item.type != 3" > <el-col :span="16" class="mRsty" ><el-radio disabled v-if="item.type == 1||item.type == 4" ></el-radio> <el-checkbox disabled v-if="item.type == 2" ></el-checkbox> {{ it.option_name }} <el-row v-for="(itChild, indChild) in it.option_list" :key="indChild" v-show="item.type == 4" class="childRowTwo" > <el-col :span='22'> <el-radio v-if="it.option_type==2" disabled ></el-radio> <span v-if="it.option_type==1" >填空:</span> {{ itChild.option_name }} </el-col> </el-row> </el-col> </el-row> <el-row v-show="item.type == 3"> <el-col :span="16"> <el-input type="textarea"></el-input></el-col> </el-row> </el-col> </el-row> </el-row> </el-form> </el-row> </el-bgwhite> </div> </template> <script> import Sortable from "sortablejs"; export default { data() { return { form: { subject: [], }, }; }, mounted() { this.rowDrop(); }, methods: { //行拖拽 rowDrop() { const tbody = document.getElementById("topicMove"); var that = this; Sortable.create(tbody, { sort: true, animation: 300, onEnd: function (evt) { that.form.subject.splice( evt.newIndex, 0, that.form.subject.splice(evt.oldIndex, 1)[0] ); var newArray = that.form.subject.slice(0); let nowId=newArray[evt.newIndex].id; newArray.forEach((item,index)=>{ if(item.relationList.length>0){ for(var i=0;i<item.relationList.length;i++){ if(item.relationList[i].relation_subject==nowId){ item.relationList.splice(i,1) i--; } } } }) that.form.subject = []; that.$nextTick(function () { that.form.subject = newArray; }); }, }); }, }, }; </script> ``