star7th 6 years ago
parent
commit
cbe9bd339a
4 changed files with 60 additions and 44 deletions
  1. 15 7
      web_src/package-lock.json
  2. 1 1
      web_src/package.json
  3. 44 34
      web_src/src/components/item/Index.vue
  4. 0 2
      web_src/src/main.js

+ 15 - 7
web_src/package-lock.json

@@ -404,11 +404,6 @@
         "postcss-value-parser": "^3.2.3"
       }
     },
-    "awe-dnd": {
-      "version": "0.3.4",
-      "resolved": "https://registry.npmjs.org/awe-dnd/-/awe-dnd-0.3.4.tgz",
-      "integrity": "sha512-ZvwlnaUn1RFwYXQUxLZKtyKH2R+z+8an1B0cTVfDA6UP7i2JxDnxXNwecR56qhwQha39XDQDpgmqz9kQghhksQ=="
-    },
     "aws-sign2": {
       "version": "0.7.0",
       "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
@@ -3222,7 +3217,7 @@
     },
     "de-indent": {
       "version": "1.0.2",
-      "resolved": "https://registry.npm.taobao.org/de-indent/download/de-indent-1.0.2.tgz",
+      "resolved": "http://registry.npm.taobao.org/de-indent/download/de-indent-1.0.2.tgz",
       "integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=",
       "dev": true
     },
@@ -3269,7 +3264,7 @@
     },
     "deepmerge": {
       "version": "1.5.2",
-      "resolved": "https://registry.npm.taobao.org/deepmerge/download/deepmerge-1.5.2.tgz",
+      "resolved": "https://registry.npm.taobao.org/deepmerge/download/deepmerge-1.5.2.tgz?cache=0&sync_timestamp=1572279720382&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdeepmerge%2Fdownload%2Fdeepmerge-1.5.2.tgz",
       "integrity": "sha1-EEmdhohEza1P7ghC34x/bwyVp1M="
     },
     "default-require-extensions": {
@@ -12452,6 +12447,11 @@
         "is-plain-obj": "^1.0.0"
       }
     },
+    "sortablejs": {
+      "version": "1.10.2",
+      "resolved": "https://registry.npm.taobao.org/sortablejs/download/sortablejs-1.10.2.tgz",
+      "integrity": "sha1-bkA2TZE/mLhaFPZnj5K1wSIfUpA="
+    },
     "source-list-map": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.0.tgz",
@@ -13573,6 +13573,14 @@
       "integrity": "sha512-x3LV3wdmmERhVCYy3quqA57NJW7F3i6faas++pJQWtknWT+n7k30F4TVdHvCLn48peTJFRvCpxs3UuFPqgeELg==",
       "dev": true
     },
+    "vuedraggable": {
+      "version": "2.23.2",
+      "resolved": "https://registry.npm.taobao.org/vuedraggable/download/vuedraggable-2.23.2.tgz",
+      "integrity": "sha1-DZXX/fTwL1Z1Wiazydylx8qc+nI=",
+      "requires": {
+        "sortablejs": "^1.10.1"
+      }
+    },
     "walker": {
       "version": "1.0.7",
       "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz",

+ 1 - 1
web_src/package.json

@@ -14,7 +14,6 @@
     "build": "node build/build.js"
   },
   "dependencies": {
-    "awe-dnd": "^0.3.4",
     "axios": "^0.17.1",
     "babel-polyfill": "^6.26.0",
     "babel-preset-es2015": "^6.24.1",
@@ -26,6 +25,7 @@
     "vue-clipboard2": "^0.2.1",
     "vue-i18n": "5.0.3",
     "vue-router": "^3.0.1",
+    "vuedraggable": "^2.23.2",
     "whatwg-fetch": "^2.0.3"
   },
   "devDependencies": {

+ 44 - 34
web_src/src/components/item/Index.vue

@@ -47,26 +47,26 @@
           </div>
 
           <ul class="thumbnails" id="item-list" v-if="itemListByKeyword">
-
-              <li class=" text-center"  v-for="item in itemListByKeyword"
-                 v-dragging="{ item: item, list: itemListByKeyword, group: 'item' }"
-              >
-                <router-link class="thumbnail item-thumbnail"  :to="'/' +  (item.item_domain ? item.item_domain:item.item_id )" title="">
-                  <span class="item-setting " @click.prevent="click_item_setting(item.item_id)" :title="$t('item_setting')" v-if="item.creator" >
-                    <i class="el-icon-setting"></i>
-                  </span>
-                  <span class="item-exit" @click.prevent="click_item_exit(item.item_id)" :title="$t('item_exit')" v-if="! item.creator">
-                    <i class="el-icon-close"></i>
-                  </span>
-                  <p class="my-item">{{item.item_name}}</p>
-                </router-link>
-              </li>
-
-              <li class=" text-center"  >
-                <router-link class="thumbnail item-thumbnail"  to="/item/add" title="">
-                  <p class="my-item">{{$t('new_item')}}<i class="el-icon-plus"></i></p>
-                </router-link>
-              </li>
+                <draggable v-model="itemListByKeyword" tag="span" group="item"  @end="endMove">
+                  <li class=" text-center"  v-for="item in itemListByKeyword"
+                     v-dragging="{ item: item, list: itemListByKeyword, group: 'item' }"
+                  >
+                    <router-link class="thumbnail item-thumbnail"  :to="'/' +  (item.item_domain ? item.item_domain:item.item_id )" title="">
+                      <span class="item-setting " @click.prevent="click_item_setting(item.item_id)" :title="$t('item_setting')" v-if="item.creator" >
+                        <i class="el-icon-setting"></i>
+                      </span>
+                      <span class="item-exit" @click.prevent="click_item_exit(item.item_id)" :title="$t('item_exit')" v-if="! item.creator">
+                        <i class="el-icon-close"></i>
+                      </span>
+                      <p class="my-item">{{item.item_name}}</p>
+                    </router-link>
+                  </li>
+                </draggable>
+                <li class=" text-center"  >
+                  <router-link class="thumbnail item-thumbnail"  to="/item/add" title="">
+                    <p class="my-item">{{$t('new_item')}}<i class="el-icon-plus"></i></p>
+                  </router-link>
+                </li>
 
           </ul>
         </div>
@@ -108,7 +108,7 @@
     margin: 40px 5px;
   }
 
-  .thumbnails>li {
+  .thumbnails li {
       float: left;
       margin-bottom: 20px;
       margin-left: 20px;
@@ -183,10 +183,14 @@
 </style>
 
 <script>
+import draggable from 'vuedraggable'
 if (typeof window !== 'undefined') {
   var $s = require('scriptjs');
 }
 export default {
+  components: {
+      draggable,
+  },
   data() {
     return {
       currentDate: new Date(),
@@ -341,7 +345,7 @@ export default {
       that.axios.post(url, params)
         .then(function (response) {
           if (response.data.error_code === 0 ) {
-            //that.get_item_list();
+            that.get_item_list();
             //window.location.reload();
 
           }else{
@@ -355,17 +359,24 @@ export default {
           
         });
     },
-    dragging(){
-      this.$dragging.$off('dragged',true);
-      this.$dragging.$on('dragged', ({ value }) => {
-        //console.log(value);
-        let data = {};
-        for (var i = 0; i < value['list'].length; i++) {
-          let key = value['list'][i]['item_id'] ;
-          data[key] = i + 1  ;
-        };
-        this.sort_item(data);
-      })
+    exchangeArray( data ,  i , j ){
+      let tmp = data[i];
+      data[i] = data[j];
+      data[j] = tmp ;
+      return data;
+    },
+    endMove(evt){
+      let data = {} ;
+      let list = this.exchangeArray( this.itemList , evt['oldIndex'] , evt['newIndex']  ) ;
+      this.itemList = [] ;
+      this.$nextTick(()=>{
+        this.itemList = list ;
+      });
+      for (var i = 0; i < list.length; i++) {
+        let key = list[i]['item_id'] ;
+        data[key] = i + 1  ;
+      };
+      this.sort_item(data);
     },
     script_cron(){
       var url = DocConfig.server+'/api/ScriptCron/run';
@@ -376,7 +387,6 @@ export default {
   mounted () {
     this.get_item_list();
     this.user_info();
-    this.dragging();
     this.lang = DocConfig.lang ;
     this.script_cron();
   },

+ 0 - 2
web_src/src/main.js

@@ -17,7 +17,6 @@ import myEnLocale from '../static/lang/en'
 import 'url-search-params-polyfill'
 import "babel-polyfill";
 import VueClipboard from 'vue-clipboard2';
-import VueDND from 'awe-dnd'
 
 
 Vue.use(util);
@@ -27,7 +26,6 @@ Vue.component('Footer', Footer);
 Vue.use(ElementUI)
 Vue.use(VueI18n)
 Vue.use(VueClipboard)
-Vue.use(VueDND)
 
 
 //多语言相关