zoukankan      html  css  js  c++  java
  • 前后端分离开发vue+Elementyui+abpcorewebapi商城管理系统(十)分类参数管理页面

    功能分析

    效果图

     接口定义

     

     

     

     

     

     

     

    代码Params.vue

    <template>
      <div>
        <el-breadcrumb separator-class="el-icon-arrow-right">
          <el-breadcrumb-item :to="{ path: '/home' }">首页</el-breadcrumb-item>
          <el-breadcrumb-item>商品管理</el-breadcrumb-item>
          <el-breadcrumb-item>商品分类</el-breadcrumb-item>
        </el-breadcrumb>
    
        <el-card>
          <el-row>
            <el-col>
              <el-button type="primary" @click="showAddCateDialog"
                >添加分类</el-button
              >
            </el-col>
          </el-row>
    
          <tree-table
            :data="catelist"
            show-index
            index-text="#"
            class="TreeTable"
            border
            :columns="columns"
            :selection-type="false"
            :expand-type="false"
          >
            <!-- 是否有效插槽 -->
            <template v-slot:isok="scope">
              <i
                class="el-icon-success"
                v-if="!scope.row.cat_deleted"
                style="color:lightgreen"
              ></i>
              <i class="el-icon-error" v-else style="color:red"></i>
            </template>
            <!-- 排序插槽 -->
            <template v-slot:order="scope">
              <el-tag size="mini" v-if="scope.row.cat_level === 0">一级</el-tag>
              <el-tag size="mini" v-if="scope.row.cat_level === 1" type="success"
                >二级</el-tag
              >
              <el-tag size="mini" v-if="scope.row.cat_level === 2" type="warning"
                >三级</el-tag
              >
            </template>
            <!-- 操作插槽 -->
            <template slot="opt">
              <el-button size="mini" type="primary" icon="el-icon-edit"
                >编辑</el-button
              >
              <el-button size="mini" type="warning" icon="el-icon-delete"
                >删除</el-button
              >
            </template>
          </tree-table>
          <!-- 分页 -->
          <el-pagination
            @size-change="handleSizeChange"
            @current-change="handleCurrentChange"
            :current-page="queryInfo.pagenum"
            :page-sizes="[3, 5, 10]"
            :page-size="queryInfo.pagesize"
            layout="total, sizes, prev, pager, next, jumper"
            :total="total"
          >
          </el-pagination>
        </el-card>
    
        <!-- 添加分类对话框 -->
        <el-dialog
          title="添加分类"
          :visible.sync="addCateDialogVisible"
          @close="addCateDialogClosed"
          width="50%"
        >
          <el-form
            ref="addCateFormRef"
            :model="addCateForm"
            :rules="addCateFormRules"
            label-width="100px"
          >
            <el-form-item label="分类名称:" prop="cat_name">
              <el-input v-model="addCateForm.cat_name"></el-input>
            </el-form-item>
            <el-form-item label="父级分类:">
              <el-cascader
                :options="parentCateList"
                :props="cascadarProps"
                clearable
                v-model="selectKeys"
                @change="parentCateChanged"
              >
              </el-cascader>
            </el-form-item>
          </el-form>
          <div slot="footer">
            <el-button @click="addCateDialogVisible = false">取 消</el-button>
            <el-button type="primary" @click="addCate">确 定</el-button>
          </div>
        </el-dialog>
      </div>
    </template>
    
    <script>
    export default {
      data() {
        return {
          catelist: [],
          queryInfo: {
            type: 3,
            pagenum: 1,
            pagesize: 5
          },
          total: 0,
          columns: [
            {
              label: "分类名称",
              prop: "cat_name"
            },
            {
              label: "是否有效",
              type: "template",
              template: "isok"
            },
            {
              label: "排序",
              type: "template",
              template: "order"
            },
            {
              label: "操作",
              type: "template",
              template: "opt"
            }
          ],
          addCateDialogVisible: false,
          addCateForm: {
            cat_name: "",
            cat_pid: 0,
            cat_level: 0
          },
          addCateFormRules: {
            cat_name: [
              { required: true, message: "请输入分类名称", trigger: "blur" }
            ]
          },
          parentCateList: [],
          cascadarProps: {
            expandTrigger: "hover",
            value: "cat_id",
            label: "cat_name",
            children: "children",
            checkStrictly: true
          },
          selectKeys: []
        };
      },
      methods: {
        async getCateList() {
          const { data } = await this.$http.get("categories", {
            params: this.queryInfo
          });
          if (data.meta.status !== 200) {
            return this.$message.error(data.meta.msg);
          }
          this.catelist = data.data.result;
          this.total = data.data.total;
        },
        handleSizeChange(newSize) {
          this.queryInfo.pagesize = newSize;
          this.getCateList();
        },
        handleCurrentChange(newPage) {
          this.queryInfo.pagenum = newPage;
          this.getCateList();
        },
        showAddCateDialog() {
          this.getParentCateList();
          this.addCateDialogVisible = true;
        },
        async getParentCateList() {
          const { data } = await this.$http.get("categories", {
            params: { type: 2 }
          });
          if (data.meta.status !== 200) {
            return this.$message.error(data.meta.msg);
          }
          this.parentCateList = data.data;
        },
        parentCateChanged() {
          if (this.selectKeys.length > 0) {
            this.addCateForm.cat_pid = this.selectKeys[this.selectKeys.length - 1];
            this.addCateForm.cat_level = this.selectKeys.length;
            return;
          } else {
            this.addCateForm.cat_pid = 0;
            this.addCateForm.cat_level = 0;
          }
        },
        addCateDialogClosed() {
          this.$refs.addCateFormRef.resetFields();
          this.selectKeys = [];
          this.addCateForm.cat_pid = 0;
          this.addCateForm.cat_level = 0;
        },
        addCate() {
          this.$refs.addCateFormRef.validate(async valid => {
            if (!valid) return;
            const { data } = await this.$http.post("categories", this.addCateForm);
            if (data.meta.status !== 201) {
              return this.$message.error(data.meta.msg);
            }
            this.$message.success('添加分类成功!')
            this.getCateList()
            this.addCateDialogVisible = false
          });
        }
      },
      created() {
        this.getCateList();
      }
    };
    </script>
    
    <style lang="less" scoped>
    .TreeTable {
      margin-top: 15px;
    }
    
    .el-cascader {
       100%;
    }
    </style>
  • 相关阅读:
    AT4144[ARC098D]Donation【Kruskal重构树,dp】
    YbtOJ#643机器决斗【贪心,李超树】
    P3273[SCOI2011]棘手的操作【线段树,并查集】
    AT3950[AGC022E]Median Replace【贪心,dp】
    P3760[TJOI2017]异或和【树状数组】
    AT4505[AGC029F]Construction of a tree【构造题,hall定理,网络流】
    Ybt#452序列合并【期望dp】
    AT3949[AGC022D]Shopping【贪心】
    AT4995[AGC034E] Complete Compress【树形dp】
    P4338[ZJOI2018]历史【LCT】
  • 原文地址:https://www.cnblogs.com/xiewenyu/p/13100948.html
Copyright © 2011-2022 走看看