0e87777f by renchao@pashanhoo.com

style:拖动

1 parent cf9a1215
1 <!-- 1 <!--
2 * @Description: 2 * @Description:
3 * @Autor: renchao 3 * @Autor: renchao
4 * @LastEditTime: 2023-09-13 10:18:32 4 * @LastEditTime: 2023-09-13 10:33:50
5 --> 5 -->
6 <template> 6 <template>
7 <div class="clmlmx-box"> 7 <div class="clmlmx-box">
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
9 <el-button type="primary" icon="el-icon-top">上移</el-button> 9 <el-button type="primary" icon="el-icon-top">上移</el-button>
10 <el-button type="primary" icon="el-icon-bottom">下移</el-button> 10 <el-button type="primary" icon="el-icon-bottom">下移</el-button>
11 </div> 11 </div>
12 <lb-table :column="column" :key="key" :heightNumSetting="true" :calcHeight="600" 12 <lb-table :column="column" :key="key" row-key="bsmSj" ref="listTable" :heightNumSetting="true" :calcHeight="600"
13 :pagination="false" :data="tableData"> 13 :pagination="false" :data="tableData">
14 </lb-table> 14 </lb-table>
15 <div class="text-center"> 15 <div class="text-center">
...@@ -35,6 +35,7 @@ ...@@ -35,6 +35,7 @@
35 data () { 35 data () {
36 return { 36 return {
37 loading: false, 37 loading: false,
38 sortable: null,
38 column: [ 39 column: [
39 { 40 {
40 label: "选择", 41 label: "选择",
...@@ -168,6 +169,11 @@ ...@@ -168,6 +169,11 @@
168 mounted () { 169 mounted () {
169 this.initSort() 170 this.initSort()
170 }, 171 },
172 beforeDestroy () {
173 if (this.sortable) {
174 this.sortable.destroy();
175 }
176 },
171 methods: { 177 methods: {
172 handleSubmit () { 178 handleSubmit () {
173 this.loading = true 179 this.loading = true
...@@ -219,7 +225,6 @@ ...@@ -219,7 +225,6 @@
219 * @description: 材料目录删除 225 * @description: 材料目录删除
220 * @param {*} index 226 * @param {*} index
221 * @param {*} row 227 * @param {*} row
222 * @author: renchao
223 */ 228 */
224 handleDelete (index, row) { 229 handleDelete (index, row) {
225 if (row.children.length > 0) { 230 if (row.children.length > 0) {
...@@ -240,47 +245,15 @@ ...@@ -240,47 +245,15 @@
240 }) 245 })
241 }, 246 },
242 initSort () { 247 initSort () {
243 const el = document.querySelectorAll('.el-table__body-wrapper > table > tbody')[0] 248 const el = this.$refs.listTable.$el.querySelectorAll('.el-table__body-wrapper > table > tbody')[0]
244 // const sortable = new Sortable(el, options); 249 this.sortable = Sortable.create(el, {
245 // 根据具体需求配置options配置项 250 ghostClass: 'sortable-ghost',
246 const sortable = new Sortable(el, { 251 setData: function (dataTransfer) {
247 onEnd: (evt) => { // 监听拖动结束事件 252 dataTransfer.setData('Text', '')
248 console.log(this) // this是当前vue上下文 253 },
249 console.log(evt.oldIndex) // 当前行的被拖拽前的顺序 254 onEnd: evt => {
250 console.log(evt.newIndex) // 当前行的被拖拽后的顺序 255 const targetRow = this.tableData.splice(evt.oldIndex, 1)[0];
251 // 这里就可以写我们需要传给后台的逻辑代码 256 this.tableData.splice(evt.newIndex, 0, targetRow);
252 // 我们有了 evt.oldIndex 和 evt.newIndex 这两个参数做索引,我们可以根据绑定在表格上面的 data 这个 Array 找到两个相应的记录。就可以针对数据进行操作啦。
253 // 下面将拖拽后的顺序进行修改
254 const currRow = this.tableData.splice(evt.oldIndex, 1)[0]
255 this.tableData.splice(evt.newIndex, 0, currRow)
256 const newData = []
257 this.tableData.forEach((item, index) => {
258 newData[index] = {
259 id: item.id,
260 rank: index + 1
261 }
262 })
263 // 下面是将排序结果更新到数据库中,根据自己项目的逻辑进行实现即可。
264 const data = {
265 id: this.$route.params.id,
266 datas: {
267 streams: newData
268 }
269 }
270 this.$store
271 .dispatch('user/setMultiSort', data)
272 .then((res) => {
273 if (res.code === 200) {
274 this.$message.success('排序修改成功')
275 // 修改成功后重新获取列表数据更新
276 this.getMultiLiveList()
277 } else {
278 this.$message.error('排序修改失败')
279 }
280 })
281 .catch((e) => {
282 console.log(e)
283 })
284 } 257 }
285 }) 258 })
286 } 259 }
......