|
|
|
@ -6,6 +6,7 @@
|
|
|
|
|
v-model="categoryIdString"
|
|
|
|
|
placeholder="请选择上级目录,默认为顶级目录"
|
|
|
|
|
treeDefaultExpandAll
|
|
|
|
|
@change="handleChange"
|
|
|
|
|
>
|
|
|
|
|
</a-tree-select>
|
|
|
|
|
</template>
|
|
|
|
@ -23,26 +24,23 @@ export default {
|
|
|
|
|
type: Array,
|
|
|
|
|
required: false,
|
|
|
|
|
default: () => []
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
computed: {
|
|
|
|
|
categoryTreeData() {
|
|
|
|
|
return [
|
|
|
|
|
{
|
|
|
|
|
root: {
|
|
|
|
|
type: Object,
|
|
|
|
|
required: false,
|
|
|
|
|
default: () => {
|
|
|
|
|
return {
|
|
|
|
|
id: 0,
|
|
|
|
|
title: '根目录',
|
|
|
|
|
value: '0',
|
|
|
|
|
pId: -1
|
|
|
|
|
},
|
|
|
|
|
...this.categories.map(category => {
|
|
|
|
|
return {
|
|
|
|
|
id: category.id,
|
|
|
|
|
title: category.name,
|
|
|
|
|
value: category.id.toString(),
|
|
|
|
|
pId: category.parentId
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
]
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
computed: {
|
|
|
|
|
categoryTreeData() {
|
|
|
|
|
return [this.root, ...this.convertDataToTree(this.categories)]
|
|
|
|
|
},
|
|
|
|
|
categoryIdString: {
|
|
|
|
|
get() {
|
|
|
|
@ -52,6 +50,52 @@ export default {
|
|
|
|
|
this.$emit('update:categoryId', value ? parseInt(value) : 0)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
methods: {
|
|
|
|
|
handleChange() {
|
|
|
|
|
this.$emit('change')
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
convertDataToTree(categories) {
|
|
|
|
|
const hashMap = {}
|
|
|
|
|
const treeData = []
|
|
|
|
|
categories.forEach(
|
|
|
|
|
category =>
|
|
|
|
|
(hashMap[category.id] = {
|
|
|
|
|
...category,
|
|
|
|
|
title: category.name,
|
|
|
|
|
value: category.id.toString(),
|
|
|
|
|
pId: category.parentId,
|
|
|
|
|
children: []
|
|
|
|
|
})
|
|
|
|
|
)
|
|
|
|
|
categories.forEach(category => {
|
|
|
|
|
const current = hashMap[category.id]
|
|
|
|
|
if (category.parentId) {
|
|
|
|
|
hashMap[category.parentId].children.push(current)
|
|
|
|
|
} else {
|
|
|
|
|
treeData.push(current)
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
// set hasPassword field for tree node
|
|
|
|
|
const setHasPasswordField = (categories, hasPassword = false) => {
|
|
|
|
|
categories.forEach(category => {
|
|
|
|
|
category.hasPassword = !!category.password || hasPassword
|
|
|
|
|
if (category.hasPassword) {
|
|
|
|
|
category.title = `${category.title}(加密)`
|
|
|
|
|
}
|
|
|
|
|
if (Object.hasOwn(category, 'postCount')) {
|
|
|
|
|
category.title = `${category.title} - ${category.postCount} 篇`
|
|
|
|
|
}
|
|
|
|
|
if (category.children && category.children.length) {
|
|
|
|
|
setHasPasswordField(category.children, category.hasPassword)
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
setHasPasswordField(treeData)
|
|
|
|
|
return treeData
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
</script>
|
|
|
|
|