|  | @@ -0,0 +1,239 @@
 | 
	
		
			
				|  |  | +<template> 
 | 
	
		
			
				|  |  | +  <div class="app-container">
 | 
	
		
			
				|  |  | +    <div class="operate-container container-frame">
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      <i class="el-icon-tickets" style="margin-top: 5px"></i>
 | 
	
		
			
				|  |  | +      <span style="margin-top: 5px">数据列表</span>
 | 
	
		
			
				|  |  | +      <el-button
 | 
	
		
			
				|  |  | +        @click="addProductAttr()"
 | 
	
		
			
				|  |  | +        size="mini">
 | 
	
		
			
				|  |  | +        添加
 | 
	
		
			
				|  |  | +      </el-button>
 | 
	
		
			
				|  |  | +    </div>
 | 
	
		
			
				|  |  | +    <div class="table-container">
 | 
	
		
			
				|  |  | +      <el-table ref="productAttrTable"
 | 
	
		
			
				|  |  | +                :data="list"
 | 
	
		
			
				|  |  | +                style="width: 100%"
 | 
	
		
			
				|  |  | +                @selection-change="handleSelectionChange"
 | 
	
		
			
				|  |  | +                v-loading="listLoading"
 | 
	
		
			
				|  |  | +                border>
 | 
	
		
			
				|  |  | +        <el-table-column type="selection" width="60" align="center"></el-table-column>
 | 
	
		
			
				|  |  | +        <el-table-column label="编号" width="80" align="center">
 | 
	
		
			
				|  |  | +          <template slot-scope="scope">{{scope.row.id}}</template>
 | 
	
		
			
				|  |  | +        </el-table-column>
 | 
	
		
			
				|  |  | +        <el-table-column label="属性名称" width="140" align="center">
 | 
	
		
			
				|  |  | +          <template slot-scope="scope">{{scope.row.name}}</template>
 | 
	
		
			
				|  |  | +        </el-table-column>
 | 
	
		
			
				|  |  | +        <el-table-column label="商品类型" width="140" align="center">
 | 
	
		
			
				|  |  | +          <template slot-scope="scope">{{$route.query.cname}}</template>
 | 
	
		
			
				|  |  | +        </el-table-column>
 | 
	
		
			
				|  |  | +        <el-table-column label="属性是否可选" width="120" align="center">
 | 
	
		
			
				|  |  | +          <template slot-scope="scope">{{scope.row.selectType|selectTypeFilter}}</template>
 | 
	
		
			
				|  |  | +        </el-table-column>
 | 
	
		
			
				|  |  | +        <el-table-column label="属性值的录入方式" width="150" align="center">
 | 
	
		
			
				|  |  | +          <template slot-scope="scope">{{scope.row.inputType|inputTypeFilter}}</template>
 | 
	
		
			
				|  |  | +        </el-table-column>
 | 
	
		
			
				|  |  | +        <el-table-column label="可选值列表" align="center">
 | 
	
		
			
				|  |  | +          <template slot-scope="scope">{{scope.row.inputList}}</template>
 | 
	
		
			
				|  |  | +        </el-table-column>
 | 
	
		
			
				|  |  | +        <el-table-column label="排序" width="120" align="center">
 | 
	
		
			
				|  |  | +          <template slot-scope="scope">{{scope.row.sort}}</template>
 | 
	
		
			
				|  |  | +        </el-table-column>
 | 
	
		
			
				|  |  | +        <el-table-column label="操作" width="200" align="center">
 | 
	
		
			
				|  |  | +          <template slot-scope="scope">
 | 
	
		
			
				|  |  | +            <el-button
 | 
	
		
			
				|  |  | +              size="mini"
 | 
	
		
			
				|  |  | +              @click="handleUpdate(scope.$index, scope.row)">编辑
 | 
	
		
			
				|  |  | +            </el-button>
 | 
	
		
			
				|  |  | +            <el-button
 | 
	
		
			
				|  |  | +              size="mini"
 | 
	
		
			
				|  |  | +              type="danger"
 | 
	
		
			
				|  |  | +              @click="handleDelete(scope.$index, scope.row)">删除
 | 
	
		
			
				|  |  | +            </el-button>
 | 
	
		
			
				|  |  | +          </template>
 | 
	
		
			
				|  |  | +        </el-table-column>
 | 
	
		
			
				|  |  | +      </el-table>
 | 
	
		
			
				|  |  | +    </div>
 | 
	
		
			
				|  |  | +    <div class="batch-operate-container">
 | 
	
		
			
				|  |  | +      <el-select
 | 
	
		
			
				|  |  | +        size="small"
 | 
	
		
			
				|  |  | +        v-model="operateType" placeholder="批量操作">
 | 
	
		
			
				|  |  | +        <el-option
 | 
	
		
			
				|  |  | +          v-for="item in operates"
 | 
	
		
			
				|  |  | +          :key="item.value"
 | 
	
		
			
				|  |  | +          :label="item.label"
 | 
	
		
			
				|  |  | +          :value="item.value">
 | 
	
		
			
				|  |  | +        </el-option>
 | 
	
		
			
				|  |  | +      </el-select>
 | 
	
		
			
				|  |  | +      <el-button
 | 
	
		
			
				|  |  | +        style="margin-left: 20px"
 | 
	
		
			
				|  |  | +        class="search-button"
 | 
	
		
			
				|  |  | +        @click="handleBatchOperate()"
 | 
	
		
			
				|  |  | +        type="primary"
 | 
	
		
			
				|  |  | +        size="small">
 | 
	
		
			
				|  |  | +        确定
 | 
	
		
			
				|  |  | +      </el-button>
 | 
	
		
			
				|  |  | +    </div>
 | 
	
		
			
				|  |  | +    <div class="pagination-container">
 | 
	
		
			
				|  |  | +      <el-pagination
 | 
	
		
			
				|  |  | +        background
 | 
	
		
			
				|  |  | +        @size-change="handleSizeChange"
 | 
	
		
			
				|  |  | +        @current-change="handleCurrentChange"
 | 
	
		
			
				|  |  | +        layout="total, sizes,prev, pager, next,jumper"
 | 
	
		
			
				|  |  | +        :page-size="listQuery.pageSize"
 | 
	
		
			
				|  |  | +        :page-sizes="[5,10,15]"
 | 
	
		
			
				|  |  | +        :current-page.sync="listQuery.pageNum"
 | 
	
		
			
				|  |  | +        :total="total">
 | 
	
		
			
				|  |  | +      </el-pagination>
 | 
	
		
			
				|  |  | +    </div>
 | 
	
		
			
				|  |  | +  </div>
 | 
	
		
			
				|  |  | +</template>
 | 
	
		
			
				|  |  | +<script>
 | 
	
		
			
				|  |  | +  import {fetchList, deleteProductAttr} from '@/api/productAttr'
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  export default {
 | 
	
		
			
				|  |  | +    name: 'productAttrList',
 | 
	
		
			
				|  |  | +    data() {
 | 
	
		
			
				|  |  | +      return {
 | 
	
		
			
				|  |  | +        list: null,
 | 
	
		
			
				|  |  | +        total: null,
 | 
	
		
			
				|  |  | +        listLoading: true,
 | 
	
		
			
				|  |  | +        listQuery: {
 | 
	
		
			
				|  |  | +          pageNum: 1,
 | 
	
		
			
				|  |  | +          pageSize: 5,
 | 
	
		
			
				|  |  | +          type: this.$route.query.type
 | 
	
		
			
				|  |  | +        },
 | 
	
		
			
				|  |  | +        operateType: null,
 | 
	
		
			
				|  |  | +        multipleSelection: [],
 | 
	
		
			
				|  |  | +        operates: [
 | 
	
		
			
				|  |  | +          {
 | 
	
		
			
				|  |  | +            label: "删除",
 | 
	
		
			
				|  |  | +            value: "deleteProductAttr"
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +        ]
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    created() {
 | 
	
		
			
				|  |  | +      this.getList();
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    methods: {
 | 
	
		
			
				|  |  | +      getList() {
 | 
	
		
			
				|  |  | +        this.listLoading = true;
 | 
	
		
			
				|  |  | +        fetchList(this.$route.query.cid, this.listQuery).then(response => {
 | 
	
		
			
				|  |  | +          this.listLoading = false;
 | 
	
		
			
				|  |  | +          this.list = response.data.list;
 | 
	
		
			
				|  |  | +          this.total = response.data.total;
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  | +      },
 | 
	
		
			
				|  |  | +      addProductAttr() {
 | 
	
		
			
				|  |  | +        console.log("addProductAttr");
 | 
	
		
			
				|  |  | +      },
 | 
	
		
			
				|  |  | +      handleSelectionChange(val) {
 | 
	
		
			
				|  |  | +        this.multipleSelection = val;
 | 
	
		
			
				|  |  | +      },
 | 
	
		
			
				|  |  | +      handleBatchOperate() {
 | 
	
		
			
				|  |  | +        if (this.multipleSelection < 1) {
 | 
	
		
			
				|  |  | +          this.$message({
 | 
	
		
			
				|  |  | +            message: '请选择一条记录',
 | 
	
		
			
				|  |  | +            type: 'warning',
 | 
	
		
			
				|  |  | +            duration: 1000
 | 
	
		
			
				|  |  | +          });
 | 
	
		
			
				|  |  | +          return;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if (this.operateType !== 'deleteProductAttr') {
 | 
	
		
			
				|  |  | +          this.$message({
 | 
	
		
			
				|  |  | +            message: '请选择批量操作类型',
 | 
	
		
			
				|  |  | +            type: 'warning',
 | 
	
		
			
				|  |  | +            duration: 1000
 | 
	
		
			
				|  |  | +          });
 | 
	
		
			
				|  |  | +          return;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        let ids = [];
 | 
	
		
			
				|  |  | +        for (let i = 0; i < this.multipleSelection.length; i++) {
 | 
	
		
			
				|  |  | +          ids.push(this.multipleSelection[i].id);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        this.handleDeleteProductAttr(ids);
 | 
	
		
			
				|  |  | +      },
 | 
	
		
			
				|  |  | +      handleSizeChange(val) {
 | 
	
		
			
				|  |  | +        this.listQuery.pageNum = 1;
 | 
	
		
			
				|  |  | +        this.listQuery.pageSize = val;
 | 
	
		
			
				|  |  | +        this.getList();
 | 
	
		
			
				|  |  | +      },
 | 
	
		
			
				|  |  | +      handleCurrentChange(val) {
 | 
	
		
			
				|  |  | +        this.listQuery.pageNum = val;
 | 
	
		
			
				|  |  | +        this.getList();
 | 
	
		
			
				|  |  | +      },
 | 
	
		
			
				|  |  | +      handleUpdate(index, row) {
 | 
	
		
			
				|  |  | +        console.log("handleUpdate");
 | 
	
		
			
				|  |  | +      },
 | 
	
		
			
				|  |  | +      handleDeleteProductAttr(ids) {
 | 
	
		
			
				|  |  | +        this.$confirm('是否要删除该属性', '提示', {
 | 
	
		
			
				|  |  | +          confirmButtonText: '确定',
 | 
	
		
			
				|  |  | +          cancelButtonText: '取消',
 | 
	
		
			
				|  |  | +          type: 'warning'
 | 
	
		
			
				|  |  | +        }).then(() => {
 | 
	
		
			
				|  |  | +          let data = new URLSearchParams();
 | 
	
		
			
				|  |  | +          data.append("ids", ids);
 | 
	
		
			
				|  |  | +          deleteProductAttr(data).then(response => {
 | 
	
		
			
				|  |  | +            this.$message({
 | 
	
		
			
				|  |  | +              message: '删除成功',
 | 
	
		
			
				|  |  | +              type: 'success',
 | 
	
		
			
				|  |  | +              duration: 1000
 | 
	
		
			
				|  |  | +            });
 | 
	
		
			
				|  |  | +            this.getList();
 | 
	
		
			
				|  |  | +          });
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  | +      },
 | 
	
		
			
				|  |  | +      handleDelete(index, row) {
 | 
	
		
			
				|  |  | +        let ids = [];
 | 
	
		
			
				|  |  | +        ids.push(row.id);
 | 
	
		
			
				|  |  | +        this.handleDeleteProductAttr(ids);
 | 
	
		
			
				|  |  | +      },
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    filters: {
 | 
	
		
			
				|  |  | +      inputTypeFilter(value) {
 | 
	
		
			
				|  |  | +        if (value === 1) {
 | 
	
		
			
				|  |  | +          return '手工录入';
 | 
	
		
			
				|  |  | +        } else {
 | 
	
		
			
				|  |  | +          return '手工录入'
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      },
 | 
	
		
			
				|  |  | +      selectTypeFilter(value) {
 | 
	
		
			
				|  |  | +        if (value === 1) {
 | 
	
		
			
				|  |  | +          return '单选';
 | 
	
		
			
				|  |  | +        } else if (value === 2) {
 | 
	
		
			
				|  |  | +          return '多选';
 | 
	
		
			
				|  |  | +        } else {
 | 
	
		
			
				|  |  | +          return '唯一'
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      },
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +</script>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +<style rel="stylesheet/scss" lang="scss" scoped>
 | 
	
		
			
				|  |  | +  .operate-container {
 | 
	
		
			
				|  |  | +    margin-top: 20px;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  .operate-container .el-button {
 | 
	
		
			
				|  |  | +    float: right;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  .table-container {
 | 
	
		
			
				|  |  | +    margin-top: 20px;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  .batch-operate-container {
 | 
	
		
			
				|  |  | +    display: inline-block;
 | 
	
		
			
				|  |  | +    margin-top: 20px;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  .pagination-container {
 | 
	
		
			
				|  |  | +    display: inline-block;
 | 
	
		
			
				|  |  | +    float: right;
 | 
	
		
			
				|  |  | +    margin-top: 20px;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +</style>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 |