灏天阁

vue3.2/Vite/Ts56: SPU模块场景的切换

· Yin灏

目录结构

└─src
    └─views
        └─product
            └─spu
                ├─index.vue
                ├─skuform.vue
                └─spuform.vue

SPU 场景切换

src/views/product/spu/index.vue

<template>
  <div>
    <Category :scene="scene" />
    <el-card>
      <div v-show="scene === 0">
        <el-button
          type="primary"
          size="default"
          icon="Plus"
          :disabled="categoryStore.c3Id ? false : true"
          @click="addSpu"
          >添加SPU</el-button
        >
        <el-table border :data="records">
          <el-table-column
            label="序号"
            type="index"
            width="80px"
            align
          ></el-table-column>
          <el-table-column label="SPU名称" prop="spuName"></el-table-column>
          <el-table-column label="SPU描述" prop="description"></el-table-column>
          <el-table-column label="SPU操作">
            <template #="{row}">
              <el-button
                type="primary"
                size="small"
                icon="Plus"
                title="添加SKU"
              ></el-button>
              <el-button
                type="primary"
                size="small"
                icon="Edit"
                title="修改SPU"
                @click="updateSpu"
              ></el-button>
              <el-button
                type="primary"
                size="small"
                icon="View"
                title="查看SKU列表"
              ></el-button>
              <el-button
                type="primary"
                size="small"
                icon="Delete"
                title="删除SPU"
              ></el-button>
            </template>
          </el-table-column>
        </el-table>
        <!-- 分页器 -->
        <el-pagination
          v-model:current-page="pageNo"
          v-model:page-size="pageSize"
          :page-sizes="[3,5,7,9]"
          :backgound="true"
          layout="prev, pager, next, jumper, ->, sizes, total"
          :total="total"
          @current-change="getHasSpu"
          @size-change="changeSize"
        ></el-pagination>
      </div>
      <SpuForm v-show="scene === 1" @changeScene="changeScene"></SpuForm>
      <SkuForm v-show="scene === 2"></SkuForm>
    </el-card>
  </div>
</template>
<script setup lang="ts">
  import { ref, watch } from "vue";
  import { reqHasSpu } from "@/api/product/spu";

  import SpuForm from "./spuform.vue";
  import SkuForm from "./skuform.vue";

  import type { HasSpuResponseData, Records } from "@/api/product/spu/type";

  import useCategoryStore from "@/store/modules/category";
  let categoryStore = useCategoryStore();

  let scene = ref<number>(0);
  // 默认页码
  let pageNo = ref<number>(1);
  // 每页展示几条数据
  let pageSize = ref<number>(3);
  // 总条数
  let total = ref<number>(0);

  let records = ref<Records>([]);

  const getHasSpu = async (paper = 1) => {
    pageNo.value = paper;
    const result: HasSpuResponseData = await reqHasSpu(
      pageNo.value,
      pageSize.value,
      categoryStore.c3Id
    );
    if (result.code === 200) {
      records.value = result.data.records;
      total.value = result.data.total;
    }
  };
  // 点击 3,5,7,9
  const changeSize = () => {
    getHasSpu();
  };

  const addSpu = () => {
    scene.value = 1;
  };

  const updateSpu = () => {
    scene.value = 1;
  };

  const changeScene = (num: number) => {
    scene.value = num;
  };

  watch(
    () => categoryStore.c3Id,
    () => {
      if (!categoryStore.c3Id) return;
      getHasSpu();
    }
  );
</script>

src/views/product/spu/spuform.vue

<template>
  <el-form label-width="100px">
    <el-form-item label="SPU名称">
      <el-input placeholder="请输入SPU名称"></el-input>
    </el-form-item>
    <el-form-item label="SPU品牌">
      <el-select>
        <el-option label="华为"></el-option>
      </el-select>
    </el-form-item>
    <el-form-item label="SPU描述">
      <el-input type="textarea" placeholder="请输入SPU描述"></el-input>
    </el-form-item>
    <el-form-item label="SPU照片"> </el-form-item>
    <el-form-item label="SPU销售属性">
      <!-- 展示销售属性 -->
      <el-select>
        <el-option label="华为"></el-option>
      </el-select>
      <el-button type="primary" size="default" icon="Plus"
        >添加属性值</el-button
      >
      <!-- 展示销售属性与属性值 -->
      <el-table border>
        <el-table-column
          label="序号"
          type="index"
          width="80px"
          align
        ></el-table-column>
        <el-table-column label="销售属性名字" width="100px"></el-table-column>
        <el-table-column label="销售属性值"></el-table-column>
        <el-table-column label="操作" width="120px"></el-table-column>
      </el-table>
    </el-form-item>
    <el-form-item>
      <el-button type="primary" size="default">保存</el-button>
      <el-button type="primary" size="default" @click="cancel">取消</el-button>
    </el-form-item>
  </el-form>
</template>
<script setup lang="ts">
  let $emit = defineEmits(["changeScene"]);
  const cancel = () => {
    $emit("changeScene", 0);
  };
</script>

src/views/product/spu/skuform.vue

<template></template>

- Book Lists -