<!-- * @Description: * @Autor: renchao * @LastEditTime: 2023-09-14 10:53:42 --> <template> <div> <div class="fieldcheck"> <div class="left"> <div class="header"> <div class="headerconcent"> <el-checkbox class="check" :indeterminate="isIndeterminate" v-model="checkAll" @change="handleCheckAllChange" >待选合集</el-checkbox > <div class="num"> 总数{{ cities.length }} 已选{{ datalist.length }} </div> </div> </div> <el-checkbox-group class="concent" v-model="checkedCities" @change="handleCheckedCitiesChange" > <el-checkbox v-for="city in cities" :label="city.name" :key="city.name" >{{ city.despriction }}({{ city.name }})</el-checkbox > </el-checkbox-group> </div> <div class="right"> <el-table class="tablelist" :data="datalist" border ref="listTable" :key="key" row-key="name" :pagination="false" :heightNumSetting="true" :minHeight="150" height="650" style="width: 100%" > <el-table-column label="字段" prop="name" min-width="100"> </el-table-column> <el-table-column label="字段名称" prop="desprictionor" min-width="100" > </el-table-column> <el-table-column label="字段别名" min-width="100"> <template slot-scope="scope"> <el-input v-model="scope.row.despriction" placeholder="请输入内容" @input="sumTime(scope.$index, scope.row.tdsyqx)" > ></el-input > </template> </el-table-column> </el-table> </div> </div> <div class="btn"> <el-button @click="$popupCacel">取消</el-button> <el-button type="primary" @click="submitForm" plain>确定</el-button> </div> </div> </template> <script> import Sortable from "sortablejs"; import { getFieldList, getFieldListByQlxx, save } from "@/api/SysDjbFieldDO"; export default { props: { formData: { type: Object, default: () => {}, }, }, data() { return { checkAll: false, sortable: null, checkedCities: [], cities: [], datalist: [], tablelist: [], key: 0, isIndeterminate: true, }; }, mounted() { this.generateData(); }, beforeDestroy() { if (this.sortable) { this.sortable.destroy(); } }, watch: { key: { handler(newName, oldName) { this.initSort(); }, }, }, methods: { changeIndex(array, index1, index2) { array[index1] = array.splice(index2, 1, array[index1])[0]; }, initSort() { const el = this.$refs.listTable.$el.querySelectorAll( ".el-table__body-wrapper > table > tbody" )[0]; // const sortable = new Sortable(el, options); // 根据具体需求配置options配置项 const sortable = new Sortable(el, { onEnd: (evt) => { // 监听拖动结束事件 console.log(this); // this是当前vue上下文 console.log(evt.oldIndex); // 当前行的被拖拽前的顺序 console.log(evt.newIndex); // 当前行的被拖拽后的顺序 // 这里就可以写我们需要传给后台的逻辑代码 // 我们有了 evt.oldIndex 和 evt.newIndex 这两个参数做索引,我们可以根据绑定在表格上面的 data 这个 Array 找到两个相应的记录。就可以针对数据进行操作啦。 // 下面将拖拽后的顺序进行修改 const currRow = this.datalist.splice(evt.oldIndex, 1)[0]; this.datalist.splice(evt.newIndex, 0, currRow); }, }); }, /** * @description: 初始数据集 * @author: renchao */ generateData() { let that = this; getFieldList({ qllx: this.formData.qllx }).then((res) => { if (res.code === 200) { let listss = res.result; listss.forEach((item, index) => { that.cities.push({ name: item.name, despriction: item.despriction, desprictionor: item.despriction, }); }); getFieldListByQlxx({ qllx: this.formData.qllx }).then((res) => { if (res.code === 200) { let listss = res.result; listss.forEach((item, index) => { that.tablelist.push({ name: item.name, despriction: item.despriction, desprictionor: item.despriction, }); that.$nextTick(() => { that.datalist = this.tablelist; that.checkedCities.push(item.name); }); }); that.initSort(); } }); } }); }, handleCheckAllChange(val) { let checkedlist = []; let orlist = []; checkedlist = val ? this.cities : []; this.isIndeterminate = false; console.log("this.checkedCities", this.checkedCities); let lists = []; this.cities.forEach((item, index) => { checkedlist.forEach((el) => { orlist.push(el.name); if (item.name == el.name) { lists.push(this.cities[index]); } }); }); this.checkedCities = orlist; this.datalist = lists; // 其他排序逻辑 this.initSort(); }, handleCheckedCitiesChange(value) { console.log("value", value, this.checkedCities); let checkedCount = value.length; this.checkAll = checkedCount === this.cities.length; this.isIndeterminate = checkedCount > 0 && checkedCount < this.cities.length; let lists = []; this.cities.forEach((item, index) => { this.checkedCities.forEach((el) => { if (item.name == el) { lists.push(this.cities[index]); } }); }); this.datalist = lists; // 其他排序逻辑 this.initSort(); }, submitForm() { save(this.formData.bsmMb, this.datalist).then((res) => { if (res.code == 200) { this.$popupCacel(); this.$message({ message: "保存成功", type: "success", }); } else { this.$message({ message: "保存失败", type: "error", }); } }); }, }, }; </script> <style scoped lang="scss"> @import "~@/styles/mixin.scss"; @import "~@/styles/dialogBoxheader.scss"; .fieldcheck { width: 100%; height: 650px; display: flex; justify-content: space-between; .left, .right { width: 49%; height: 650px; border: 1px solid rgb(230, 230, 230); } .left { .header { width: 100%; height: 50px; background-color: rgba(243, 242, 242, 0.897); .headerconcent { width: 90%; height: 50px; margin: auto; line-height: 50px; display: flex; justify-content: space-between; align-items: center; } } .concent { padding: 10px; width: 100%; display: inline-block; padding-left: 20px; overflow-x: hidden; height: 600px; .el-checkbox { width: 100%; padding: 10px; } .el-checkbox:hover { padding: 10px; background-color: rgba(243, 242, 242, 0.897); } } } .right { .header { width: 100%; height: 50px; line-height: 50px; background-color: rgba(243, 242, 242, 0.897); } } } .btn { margin-top: 10px; width: 100%; text-align: center; } </style>