From ff345ebb3fcece2ebafc3333b895d9481bd9435e Mon Sep 17 00:00:00 2001
From: loulijun2021 <1694218219@qq.com>
Date: 星期三, 04 一月 2023 15:52:56 +0800
Subject: [PATCH] 1.列展示设置    功能基本实现,细节待优化

---
 src/components/DndList/index.vue |   69 ++++++++++++++++++++++++++++------
 1 files changed, 56 insertions(+), 13 deletions(-)

diff --git a/src/components/DndList/index.vue b/src/components/DndList/index.vue
index 5b95007..abb23e6 100644
--- a/src/components/DndList/index.vue
+++ b/src/components/DndList/index.vue
@@ -2,30 +2,32 @@
   <div class="dndList">
     <div :style="{width:'100%'}" class="dndList-list">
       <div style="display: flex;justify-content: space-between;">
-        <el-checkbox v-model="checkedAll" @change="checkedAllClick">鍒楀睍绀�</el-checkbox>
+        <el-checkbox v-model="checkedAll" @change="checkedAllChange">鍒楀睍绀�</el-checkbox>
         <div style="cursor: pointer" :style="{color:$store.state.settings.theme}" @click="resetColumn">閲嶇疆</div>
       </div>
-      <el-checkbox-group v-model="checkedList">
+      <el-checkbox-group v-model="checkedList" @change="checkedListChange">
         <draggable :set-data="setData" :list="list1" class="dragArea" animation="300" @end="draggableEnded">
           <div v-for="item in list1" :key="item.id" class="list-complete-item">
             <div style="display: flex">
               <div style="width: 20px;height: 20px;margin-right: 4px;cursor:move"><i class="el-icon-rank" /></div>
-              <el-checkbox :label="item.name" class="list-complete-item-handle" />
+              <el-checkbox :label="item.label" class="list-complete-item-handle" />
             </div>
             <div>
               <el-tooltip class="item" effect="dark" content="鍥哄畾鍒板乏渚�" placement="bottom">
                 <i
-                  style="transform:rotate(90deg);cursor:pointer;"
+                  style="transform:rotate(90deg);cursor:pointer;font-weight: bolder"
                   class="el-icon-download"
-                  @click="fixedToLeft(item.name)"
+                  :style="{color:item.fixed==='left'?$store.state.settings.theme:''}"
+                  @click="fixedToLeft(item.label)"
                 />
               </el-tooltip>
               <el-divider direction="vertical" />
               <el-tooltip class="item" effect="dark" content="鍥哄畾鍒板彸渚�" placement="bottom">
                 <i
-                  style="transform:rotate(-90deg);cursor:pointer"
+                  style="transform:rotate(-90deg);cursor:pointer;font-weight: bolder"
                   class="el-icon-download"
-                  @click="fixedToRight(item.name)"
+                  :style="{color:item.fixed==='right'?$store.state.settings.theme:''}"
+                  @click="fixedToRight(item.label)"
                 />
               </el-tooltip>
             </div>
@@ -51,12 +53,19 @@
         return []
       }
     }
+
   },
   data() {
     return {
-      checkedList: ['妤兼潕淇�2'],
+      checkedList: this.list1.map(i => i.show ? i.label : '').filter(i => i !== ''), // 鍒楀睍绀哄��
+      checkedListDefaultLabel: this.list1.map(i => i.show ? i.label : '').filter(i => i !== ''), // 閲嶇疆榛樿鍊糽abel
+      // checkedListDefaultFixed: this.list1.map(i => i.show ? i.label : '').filter(i => i !== ''), // 閲嶇疆榛樿鍊糵ixed
       checkedAll: true
     }
+  },
+  created() {
+  },
+  mounted() {
   },
   methods: {
     setData(dataTransfer) {
@@ -64,20 +73,54 @@
       // Detail see : https://github.com/RubaXa/Sortable/issues/1012
       dataTransfer.setData('Text', '')
     },
+    // 閲嶇疆
     resetColumn() {
-      console.log('resetColumn')
+      this.checkedList = this.checkedListDefaultLabel
+      this.list1.forEach((i, j) => {
+        i.show = !!this.checkedListDefaultLabel.includes(i.label)
+      })
+      this.$emit('tableColumnUpdate', this.checkedListDefaultLabel)
     },
-    checkedAllClick() {
-      console.log('checkedAllClick')
+    // 鍒楀睍绀�
+    checkedAllChange() {
+      this.list1.forEach(i => {
+        if (this.checkedAll) {
+          i.show = true
+          this.checkedList = this.list1.map(j => j.label)
+        } else {
+          i.show = false
+          this.checkedList = []
+        }
+      })
+      this.$emit('tableColumnUpdate', this.checkedList)
     },
+    // 鍥哄畾鍒板乏渚�
     fixedToLeft(val) {
       console.log('fixedToLeft', val)
+      this.list1.find(i => i.label === val).fixed = this.list1.find(i => i.label === val).fixed !== 'left' ? 'left' : false
+      this.$emit('tableColumnUpdate', this.checkedList)
     },
+    // 鍥哄畾鍒板彸渚�
     fixedToRight(val) {
       console.log('fixedToRight', val)
+      this.list1.find(i => i.label === val).fixed = this.list1.find(i => i.label === val).fixed !== 'right' ? 'right' : false
+      this.$emit('tableColumnUpdate', this.checkedList)
     },
+    // 鎷栧姩缁撴潫浜嬩欢
     draggableEnded({ to, from, item, clone, oldIndex, newIndex }) {
       console.log(to, from, item, clone, oldIndex, newIndex)
+
+      // console.log(this.list1, 123456789)
+      this.$emit('tableColumnUpdate', this.list1, true)// 浼犵粰鐖风埛  isCopyTrue:澶嶅�肩粰鐖风埛
+    },
+    // 澶氶�夋鍊兼敼鍙樹簨浠�
+    checkedListChange(val) {
+      console.log(val, 1)
+      this.checkedAll = val.length !== 0
+      this.list1.forEach((i, j) => {
+        i.show = !!val.includes(i.label)
+      })
+      this.$emit('tableColumnUpdate', val)
     }
   }
 }
@@ -86,7 +129,7 @@
 <style lang="scss" scoped>
 .dndList {
   background: #fff;
-  padding-bottom: 40px;
+  //padding-bottom: 40px;
 
   &:after {
     content: "";
@@ -96,7 +139,7 @@
 
   .dndList-list {
     float: left;
-    padding-bottom: 30px;
+    //padding-bottom: 30px;
 
     &:first-of-type {
       margin-right: 2%;

--
Gitblit v1.9.3