element-ui後臺管理系統學習(13)-商品規格排序

第1步:新建common/util.js文件,用於排序的工具函數。

export default {
	// sku排列算法
	cartesianProductOf() {
		return Array.prototype.reduce.call(arguments,function(a, b) {
			var ret = [];
			a.forEach(function(a) {
				b.forEach(function(b) {
					ret.push(a.concat([b]));
				});
			});
			return ret;
		}, [[]]);
	},
	swapArray(arr, index1, index2) {
      arr[index1] = arr.splice(index2, 1, arr[index1])[0];
      return arr;
    },
    // 上移 將當前數組index索引與後面一個元素互換位置,向數組後面移動一位
    moveUp(arr, index) {
      this.swapArray(arr, index, index - 1);
    },
    // 下移 將當前數組index索引與前面一個元素互換位置,向數組前面移動一位
    moveDown(arr, index) {
      this.swapArray(arr, index, index + 1);
    },
}

第2步:在goods_create.js文件中引入util.js文件。

第3步:封裝排序函數sortSkuCard。

import $util from '@/common/util'
export default {
	state: {
		skus_type: 0,
		title: "",// 商品名稱
		category: [],
		desc: "",
		unit: "",
		stock: 0,
		min_stock: 0,
		display_stock: 0,
		status: 0,
		express: "",

		oprice: 0, // 市場價格
		pprice: 0, // 銷售價格
		cprice: 0, // 成本價格
		weight: 0, // 重量
		volume: 0, // 體積
		// 規格卡片
		sku_card: [{
			name: '顏色',
			type: 0,
			list: []

		}]
	},
	getters: {

	},
	mutations: {
		// 修改state
		vModelState(state, { key, value }) {
			state[key] = value
		},
		addSkuCard(state) {
			state.sku_card.push({
				name: '規格名稱',
				type: 0,
				list: []
			})
		},
		// 刪除規格卡片
		delSkuCard(state, index) {
			state.sku_card.splice(index, 1)
		},
		// 修改規格屬性
		vModelSkuCard(state, {key, index, value }) {
			state.sku_card[index][key] = value;
		},

		// 卡片排序
		sortSkuCard(state, {action, index}){
			$util[action](state.sku_card, index);
		}
	},
	actions: {

	}
}

備註:函數傳遞的參數是對象形式,其中action表示用戶行爲,此處是moveUp、moveDown表示上移與下移,index表示索引。

第4步:在sku-card.vue組件中導入mutations,並封裝上移函數sortCard。

methods: {
    ...mapMutations([
      "addSkuCard",
      "delSkuCard",
      "vModelSkuCard",
      "sortSkuCard"
    ]),
    vModel(key, index, value) {
      this.vModelSkuCard({ key, index, value });
    },
    // 排序函數(上移與下移)
    sortCard(action, index) {
      this.sortSkuCard({action,index});
    }
  }

第5步:函數綁定。

 <el-button size="mini" class="ml-auto" icon="el-icon-top" @click="sortCard('moveUp',index)"></el-button>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章