Files
vue3-element-admin/src/views/pms/goods/components/GoodsCategory.vue
郝先瑞 dd93144788 refactor: eslint代码检查优化
Former-commit-id: 4c11b5d0cdd10f28148cf3d9b593f85e082cdc51
2022-04-15 00:45:06 +08:00

99 lines
2.5 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<template>
<div class="component-container">
<div class="component-container__main">
<el-cascader-panel ref="categoryRef" :options="categoryOptions" v-model="goodsInfo.categoryId"
:props="{ emitPath: false }" @change="handleCategoryChange" />
<div style="margin-top: 20px">
<el-link type="info" :underline="false" v-show="pathLabels.length > 0">您选择的商品分类:</el-link>
<el-link type="danger" :underline="false" v-for="(item, index) in pathLabels" :key="index"
style="margin-left: 5px">
{{ item }}
<CaretRight v-show="index < pathLabels.length - 1" style="width: 1em; height:1em;margin-left: 5px" />
</el-link>
</div>
</div>
<div class="component-container__footer">
<el-button type="primary" @click="handleNext">下一步填写商品信息</el-button>
</div>
</div>
</template>
<script setup lang="ts">
import { onMounted, nextTick, reactive, ref, toRefs } from "vue";
import { ElCascaderPanel, ElMessage } from "element-plus";
import { CaretRight } from '@element-plus/icons-vue';
// API 引用
import { listCascadeCategories } from "@/api/pms/category";
import { computed } from "@vue/reactivity";
import { GoodsDetail } from "@/types";
const emit = defineEmits(['next', "update:modelValue"])
const props = defineProps({
modelValue: {
type: Object,
default: () => { }
}
})
const goodsInfo: any = computed({
get: () => props.modelValue,
set: (value) => {
emit('update:modelValue', value)
}
})
const state = reactive({
categoryOptions: [],
pathLabels: []
})
const { categoryOptions, pathLabels } = toRefs(state)
function loadData() {
listCascadeCategories().then(response => {
state.categoryOptions = response.data
if (goodsInfo.value.id) {
nextTick(() => {
handleCategoryChange()
})
}
})
}
const categoryRef = ref(ElCascaderPanel)
function handleCategoryChange() {
const checkNode = categoryRef.value.getCheckedNodes()[0]
state.pathLabels = checkNode.pathLabels // 商品分类选择层级提示
goodsInfo.value.categoryId = checkNode.value
}
function handleNext() {
if (!goodsInfo.value.categoryId) {
ElMessage.warning('请选择商品分类')
return false
}
emit('next')
}
onMounted(() => {
loadData()
})
</script>
<style lang="scss" scoped>
.component-container {
&__main {
margin: 20px auto
}
&__footer {
position: fixed;
bottom: 20px;
right: 20px;
}
}
</style>