拖拽实现快捷方式排序

48 阅读1分钟

代码如下,需要自取


  <div>

    <transition-group class="container" name="sort">

       

      <div

        class="app-item"

        v-for="(app, index) in customApps"

        :key="app.name"

        :draggable="true"

        @dragstart="dragstart(app)"

        @dragenter="dragenter(app, $event)"

        @dragend="getDragend(customApps, 'customer', $event)"

      >

        <div>

          <img class="icon_a" v-if="app.img" :src="app.img" />

          <div class="ellipsis">{{ app.name }}</div>

        </div>

      </div>

    </transition-group>

  </div>

</template>

  


<!-- import { APi } from '@/api/enterpriseAPi' -->

<script>

export default {

  data() {

    return {

      oldData: [],

      newData: [],

      customApps: [

        {

          name: "站网",

          img: require("@/assets/fastImages/1zwC/13.png"),

          address: "/baseinfo/Informationsecurity/stationmanage",

        },

        {

          name: "文件管理 ",

          img: require("@/assets/fastImages/1wjgl/41.png"),

          address: "/baseinfo/Informationsecurity/fileManagement",

        },

        {

          name: "设备",

          img: require("@/assets/fastImages/1sbC/6.png"),

          address: "/baseinfo/Informationsecurity/equipinfo/equipindex",

        },

        {

          name: "水位",

          img: require("@/assets/fastImages/1swC/15.png"),

          address: "/exam/data-manage/realtime-water-level",

        },

        {

          name: "测流",

          img: require("@/assets/fastImages/1cl/43.png"),

          address: "/exam/flow/flow-test-onLine",

        },

        {

          name: "测沙",

          img: require("@/assets/fastImages/1csC/16.png"),

          address: "/exam/flow/flow-sand-onLine",

        },

        {

          name: "雨量",

          img: require("@/assets/fastImages/1ylC/18.png"),

          address: "/exam/water/precipitation-automatic",

        },

        {

          name: "摘录",

          img: require("@/assets/fastImages/1zlC/19.png"),

          address: "/exam/data-manage/extract/extractManage",

        },

        {

          name: "校审",

          img: require("@/assets/fastImages/1jsC/2.png"),

          address: "/exam/mine/mine-examine",

        },

        {

          name: "蒸发",

          img: require("@/assets/fastImages/1zfC/4.png"),

          address: "/exam/evaporation/evaporation-automatic",

        },

        {

          name: "水温",

          img: require("@/assets/fastImages/1sw2C/5.png"),

          address: "/exam/data-manage/water-temperature",

        },

        {

          name: "整编",

          img: require("@/assets/fastImages/1zbC/9.png"),

          address: "/manageAll/homePage",

        },

        {

          name: "潮位",

          img: require("@/assets/fastImages/1cwC/3.png"),

          address: "/exam/sea-manage/realtime-sea-level",

        },

        {

          name: "测验信息",

          img: require("@/assets/fastImages/1cyC/12.png"),

          address: "/exam/testBaseInfo/examBaseSet",

        },

      ],

      dragStartId: "",

      dragEndId: "",

    };

  },

  methods: {

    dragstart(value) {

      this.oldData = value;

      this.dragStartId = value.id;

    },

    dragenter(value) {

      this.newData = value;

      this.dragEndId = value.id;

    },

    getDragend(listData, type) {

      if (this.oldData !== this.newData) {

        let oldIndex = listData.indexOf(this.oldData);

        let newIndex = listData.indexOf(this.newData);

        let newItems = [...listData];

        // 删除之前DOM节点

        newItems.splice(oldIndex, 1);

        // 在拖拽结束目标位置增加新的DOM节点

        newItems.splice(newIndex, 0, this.oldData);

        // 每次拖拽结束后,将拖拽处理完成的数据,赋值原数组,使DOM视图更新,页面显示拖拽动画

        this.customApps = newItems;

        console.log("this.customApps", this.customApps);

        // 每次拖拽结束后调用接口时时保存数据

        // Api(this.dragStartId, this.dragEndId).then((res) => {});

      }

    },

  },

};

</script>

  


<style scoped lang="scss">

.app-item {

  border-radius: 10px;

  background: #e0e0e0;

  box-shadow: 14px 14px 24px #b5b5b5, -14px -14px 24px #ffffff;

  float: left;

  width: 96px;

  height: 96px;

  background-color: #f5f6fa;

  margin: 10px;

  display: flex;

  justify-content: center;

  flex-direction: column;

  align-items: center;

  


  transition-duration: 300ms;

  .ellipsis {

    text-align: center;

  }

}

.app-item :hover {

  /* margin-top: -20px; */

  cursor: pointer;

}

</style>```