vue3.2/Vite/Ts48: 完成分类组件业务
·
Yin灏
目录结构
└─src
├─components
│ └─Category
│ └─index.vue
├─store
│ └─modules
│ └─category.ts
└─views
└─product
└─attr
└─index.vue
三级分类组件
src/components/Category/index.vue
<template>
<el-card>
<el-form :inline="true">
<el-form-item label="一级分类">
<el-select v-model="categoryStore.c1Id" @change="handle">
<el-option
v-for="(c1, index) in categoryStore.c1Arr"
:key="c1.id"
:label="c1.name"
:value="c1.id"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="二级分类">
<!-- 收集二级分类的 id -->
<el-select v-model="categoryStore.c2Id" @change="handle1">
<el-option
v-for="(c2, index) in categoryStore.c2Arr"
:key="c2.id"
:label="c2.name"
:value="c2.id"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="三级分类">
<el-select v-model="categoryStore.c3Id">
<el-option
v-for="(c3, index) in categoryStore.c3Arr"
:key="c3.id"
:label="c3.name"
:value="c3.id"
></el-option>
</el-select>
</el-form-item>
</el-form>
</el-card>
</template>
<script setup lang="ts">
import { onMounted } from "vue";
import useCategoryStore from "@/store/modules/category";
let categoryStore = useCategoryStore();
const getC1 = () => {
categoryStore.getC1();
};
onMounted(() => {
getC1();
});
// 一级分类 select change 时候触发
const handle = () => {
categoryStore.c2Id = "";
categoryStore.c3Arr = [];
categoryStore.c3Id = "";
categoryStore.getC2();
};
// 二级分类 select change 时候触发
const handle1 = () => {
categoryStore.c3Id = "";
categoryStore.getC3();
};
</script>
添加获取二级分类的方法
src/store/modules/category.ts
import { defineStore } from "pinia";
import { reqC1, reqC2, reqC3 } from "@/api/product/attr";
import type { CategoryResponseData } from '@/api/product/attr/type';
import type { CategoryState } './types/type';
let useCategoryStore = defineStore("Category", {
state: (): CategoryState => {
return {
c1Arr: [],
c1Id: "",
c2Arr: [],
c2Id: "",
c3Arr: [],
c3Id: "",
};
},
actions: {
getC1() {
let result: CategoryResponseData = await reqC1();
if (result.code === 200) {
this.c1Arr = result.data;
}
},
async getC2() {
let result: CategoryResponseData = await reqC2(this.c1Id);
if (result.code === 200) {
this.c2Arr = result.data;
}
},
async getC3() {
let result: CategoryResponseData = await reqC3(this.c2Id);
if (result.code === 200) {
this.c3Arr = result.data;
}
}
},
getters: {
// 计算属性
},
});
export default useCategoryStore;
处理添加平台属性按钮的金庸
src/views/product/attr/index.vue
<template>
<!-- 三级分类 -->
<div>
<Category />
</div>
<el-card>
<el-button
type="primary"
size="default"
icon="Plus"
:disabled="categoryStore.c3Id"
>添加属性</el-button
>
<el-table border>
<el-table-column
label="序号"
type="index"
align="center"
width="80px"
></el-table-column>
<el-table-column label="属性名称" width="120px"></el-table-column>
<el-table-column label="属性值名称"></el-table-column>
<el-table-column label="操作" width="120px"></el-table-column>
</el-table>
</el-card>
</template>
<script setup lang="ts">
import useCategoryStore from "@/store/modules/category";
let categoryStore = useCategoryStore();
</script>