Files
nexusphp/admin/src/components/DialogAddCategory.vue
2021-04-12 20:31:02 +08:00

135 lines
3.6 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>
<el-dialog
:title="type == 'add' ? '添加分类' : '修改分类'"
v-model="visible"
width="400px"
>
<el-form :model="ruleForm" :rules="rules" ref="formRef" label-width="100px" class="good-form">
<el-form-item label="商品名称" prop="name">
<el-input type="text" v-model="ruleForm.name"></el-input>
</el-form-item>
<el-form-item label="排序值" prop="rank">
<el-input type="number" v-model="ruleForm.rank"></el-input>
</el-form-item>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="visible = false"> </el-button>
<el-button type="primary" @click="submitForm"> </el-button>
</span>
</template>
</el-dialog>
</template>
<script>
import { reactive, ref, toRefs } from 'vue'
import { useRoute } from 'vue-router'
import axios from '@/utils/axios'
import { hasEmoji } from '@/utils/index'
import { ElMessage } from 'element-plus'
export default {
name: 'DialogAddCategory',
props: {
type: String,
reload: Function
},
setup(props) {
const formRef = ref(null)
const route = useRoute()
const state = reactive({
visible: false,
categoryLevel: 1,
parentId: 0,
ruleForm: {
name: '',
rank: ''
},
rules: {
name: [
{ required: 'true', message: '名称不能为空', trigger: ['change'] }
],
rank: [
{ required: 'true', message: '编号不能为空', trigger: ['change'] }
]
},
id: ''
})
// 获取详情
const getDetail = (id) => {
axios.get(`/categories/${id}`).then(res => {
state.ruleForm = {
name: res.categoryName,
rank: res.categoryRank
}
state.parentId = res.parentId
state.categoryLevel = res.categoryLevel
})
}
// 开启弹窗
const open = (id) => {
state.visible = true
if (id) {
state.id = id
getDetail(id)
} else {
// 新增类目从路由获取父分类id 和 分类级别
const { level, parent_id } = route.query
state.ruleForm = {
name: '',
rank: ''
}
state.parentId = parent_id
state.categoryLevel = level
}
}
// 关闭弹窗
const close = () => {
state.visible = false
}
const submitForm = () => {
formRef.value.validate((valid) => {
if (valid) {
if (hasEmoji(state.ruleForm.name)) {
ElMessage.error('不要输入表情包,再输入就打死你个龟孙儿~')
return
}
if (props.type == 'add') {
axios.post('/categories', {
categoryLevel: state.categoryLevel,
parentId: state.parentId,
categoryName: state.ruleForm.name,
categoryRank: state.ruleForm.rank
}).then(() => {
ElMessage.success('添加成功')
state.visible = false
if (props.reload) props.reload()
})
} else {
axios.put('/categories', {
categoryId: state.id,
categoryLevel: state.categoryLevel,
parentId: state.categoryLevel,
categoryName: state.ruleForm.name,
categoryRank: state.ruleForm.rank
}).then(() => {
ElMessage.success('修改成功')
state.visible = false
if (props.reload) props.reload()
})
}
}
})
}
return {
...toRefs(state),
open,
close,
formRef,
submitForm
}
}
}
</script>
<style scoped>
</style>